Support creation of vendor-specific versions of the fabric pipeconf
We provide a new service to facilitate registration of vendor-specific
versions of the Fabric pipeconf (e.g., for Tofino) from third-party
apps. This service is designed such that third-party apps do not need to
depend on internal classes at compile time, such as the behaviour
implementations.
To make this possible, the package structure has been refactored to
separate APIs from implementation.
Change-Id: I487cb806541eb9e6877ebf398a94f057613df8cc
diff --git a/pipelines/fabric/impl/BUILD b/pipelines/fabric/impl/BUILD
new file mode 100644
index 0000000..e4b427e
--- /dev/null
+++ b/pipelines/fabric/impl/BUILD
@@ -0,0 +1,14 @@
+COMPILE_DEPS = CORE_DEPS + KRYO + [
+ "//pipelines/fabric/api:onos-pipelines-fabric-api",
+ "//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",
+]
+
+osgi_jar_with_tests(
+ test_deps = TEST_ADAPTERS,
+ deps = COMPILE_DEPS,
+)
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/FabricPipeconfLoader.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/FabricPipeconfLoader.java
new file mode 100644
index 0000000..1b6c2ce
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/FabricPipeconfLoader.java
@@ -0,0 +1,211 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.pipelines.fabric.impl;
+
+import org.onosproject.core.CoreService;
+import org.onosproject.net.device.PortStatisticsDiscovery;
+import org.onosproject.net.pi.model.DefaultPiPipeconf;
+import org.onosproject.net.pi.model.PiPipeconf;
+import org.onosproject.net.pi.model.PiPipeconfId;
+import org.onosproject.net.pi.service.PiPipeconfService;
+import org.onosproject.pipelines.fabric.impl.behaviour.FabricPortStatisticsDiscovery;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.wiring.BundleWiring;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.slf4j.Logger;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.net.URL;
+import java.util.Collection;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import static java.lang.String.format;
+import static org.onosproject.pipelines.fabric.impl.FabricPipeconfManager.build;
+import static org.osgi.framework.wiring.BundleWiring.LISTRESOURCES_RECURSE;
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Component responsible of building and registering fabric pipeconfs at app
+ * activation.
+ * <p>
+ * This implementation looks at the content of the resource path for p4c output,
+ * automatically building different pipeconfs for different profiles, target and
+ * platforms.
+ */
+@Component(immediate = true)
+public final class FabricPipeconfLoader {
+
+ public static final String PIPELINE_APP_NAME = "org.onosproject.pipelines.fabric";
+
+ private static Logger log = getLogger(FabricPipeconfLoader.class);
+
+ private static final String SEP = File.separator;
+ private static final String SPECTRUM = "spectrum";
+ private static final String BMV2 = "bmv2";
+ 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 SPECTRUM_BIN = "spectrum.bin";
+
+ private static final String BASE_PIPECONF_ID = "org.onosproject.pipelines";
+ private static final String P4C_OUT_PATH = "/p4c-out";
+ // p4c-out/<profile>/<target>/<platform>
+ private static final String P4C_RES_BASE_PATH = P4C_OUT_PATH + "/%s/%s/%s/";
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY)
+ private PiPipeconfService piPipeconfService;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY)
+ private CoreService coreService;
+
+ private Collection<PiPipeconf> pipeconfs;
+
+
+ @Activate
+ public void activate() {
+ coreService.registerApplication(PIPELINE_APP_NAME);
+ // Registers all pipeconf at component activation.
+ pipeconfs = buildAllPipeconfs();
+ pipeconfs.forEach(piPipeconfService::register);
+ log.info("Started");
+ }
+
+ @Deactivate
+ public void deactivate() {
+ pipeconfs.stream()
+ .map(PiPipeconf::id)
+ .forEach(piPipeconfService::unregister);
+ pipeconfs = null;
+ log.info("Stopped");
+ }
+
+ private Collection<PiPipeconf> buildAllPipeconfs() {
+ return FrameworkUtil
+ .getBundle(this.getClass())
+ .adapt(BundleWiring.class)
+ // List all resource files in /p4c-out
+ .listResources(P4C_OUT_PATH, "*", LISTRESOURCES_RECURSE)
+ .stream()
+ // Filter only directories
+ .filter(name -> name.endsWith(SEP))
+ // Derive profile, target, and platform and build pipeconf.
+ .map(this::buildPipeconfFromPath)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
+ }
+
+ private PiPipeconf buildPipeconfFromPath(String path) {
+ String[] pieces = path.split(SEP);
+ // We expect a path of 4 elements, e.g.
+ // p4c-out/<profile>/<target>/<platform>
+ if (pieces.length != 4) {
+ return null;
+ }
+ String profile = pieces[1];
+ String target = pieces[2];
+ String platform = pieces[3];
+ final PiPipeconf pipeconf;
+ try {
+ switch (target) {
+ case BMV2:
+ pipeconf = bmv2Pipeconf(profile, platform);
+ break;
+ case SPECTRUM:
+ pipeconf = spectrumPipeconf(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 file is missing: {}",
+ path, e.getMessage());
+ return null;
+ }
+
+ return pipeconf;
+ }
+
+ private PiPipeconf bmv2Pipeconf(String profile, String platform)
+ throws FileNotFoundException {
+ final URL bmv2JsonUrl = this.getClass().getResource(format(
+ P4C_RES_BASE_PATH + BMV2_JSON, profile, BMV2, platform));
+ final URL p4InfoUrl = this.getClass().getResource(format(
+ P4C_RES_BASE_PATH + P4INFO_TXT, profile, BMV2, platform));
+ final URL cpuPortUrl = this.getClass().getResource(format(
+ P4C_RES_BASE_PATH + CPU_PORT_TXT, profile, BMV2, platform));
+
+ checkFileExists(bmv2JsonUrl, BMV2_JSON);
+ checkFileExists(p4InfoUrl, P4INFO_TXT);
+ checkFileExists(cpuPortUrl, CPU_PORT_TXT);
+
+ final DefaultPiPipeconf.Builder builder = DefaultPiPipeconf.builder()
+ .withId(makePipeconfId(platform, profile))
+ .addBehaviour(PortStatisticsDiscovery.class,
+ FabricPortStatisticsDiscovery.class)
+ .addExtension(PiPipeconf.ExtensionType.BMV2_JSON, bmv2JsonUrl);
+
+ return build(builder, profile, p4InfoUrl, cpuPortUrl);
+ }
+
+ // FIXME: this method should be removed. Instead, there should be a
+ // third-party app using the FabricPipeconfService to register a
+ // Mellanox-specific version of the fabric pipeconfs.
+ private PiPipeconf spectrumPipeconf(String profile, String platform)
+ throws FileNotFoundException {
+
+ final URL spectrumBinUrl = this.getClass().getResource(format(
+ P4C_RES_BASE_PATH + SPECTRUM_BIN, profile, SPECTRUM, platform));
+ final URL p4InfoUrl = this.getClass().getResource(format(
+ P4C_RES_BASE_PATH + P4INFO_TXT, profile, SPECTRUM, platform));
+ final URL cpuPortUrl = this.getClass().getResource(format(
+ P4C_RES_BASE_PATH + CPU_PORT_TXT, profile, SPECTRUM, platform));
+
+ checkFileExists(spectrumBinUrl, SPECTRUM_BIN);
+ checkFileExists(p4InfoUrl, P4INFO_TXT);
+ checkFileExists(cpuPortUrl, CPU_PORT_TXT);
+
+ final DefaultPiPipeconf.Builder builder = DefaultPiPipeconf.builder()
+ .withId(makePipeconfId(platform, profile))
+ .addExtension(PiPipeconf.ExtensionType.SPECTRUM_BIN, spectrumBinUrl);
+
+ return build(builder, profile, p4InfoUrl, cpuPortUrl);
+ }
+
+ private void checkFileExists(URL url, String name)
+ throws FileNotFoundException {
+ if (url == null) {
+ throw new FileNotFoundException(name);
+ }
+ }
+
+ private PiPipeconfId makePipeconfId(String platform, String profile) {
+ final String id = platform.equals(DEFAULT_PLATFORM)
+ // Omit platform if default, e.g. with BMv2 pipeconf
+ ? format("%s.%s", BASE_PIPECONF_ID, profile)
+ : format("%s.%s.%s", BASE_PIPECONF_ID, profile, platform);
+ return new PiPipeconfId(id);
+ }
+}
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/FabricPipeconfManager.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/FabricPipeconfManager.java
new file mode 100644
index 0000000..76122d9
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/FabricPipeconfManager.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.pipelines.fabric.impl;
+
+import org.onosproject.inbandtelemetry.api.IntProgrammable;
+import org.onosproject.net.behaviour.Pipeliner;
+import org.onosproject.net.pi.model.DefaultPiPipeconf;
+import org.onosproject.net.pi.model.PiPipeconf;
+import org.onosproject.net.pi.model.PiPipelineInterpreter;
+import org.onosproject.net.pi.model.PiPipelineModel;
+import org.onosproject.p4runtime.model.P4InfoParser;
+import org.onosproject.p4runtime.model.P4InfoParserException;
+import org.onosproject.pipelines.fabric.FabricPipeconfService;
+import org.onosproject.pipelines.fabric.impl.behaviour.FabricIntProgrammable;
+import org.onosproject.pipelines.fabric.impl.behaviour.FabricInterpreter;
+import org.onosproject.pipelines.fabric.impl.behaviour.pipeliner.FabricPipeliner;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.slf4j.Logger;
+
+import java.net.URL;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Implementation of the FabricPipeconfService.
+ */
+@Component(immediate = true, service = FabricPipeconfService.class)
+public final class FabricPipeconfManager implements FabricPipeconfService {
+
+ private static final String INT_PROFILE_SUFFIX = "-int";
+ private static final String FULL_PROFILE_SUFFIX = "-full";
+
+ private static Logger log = getLogger(FabricPipeconfLoader.class);
+
+ @Activate
+ public void activate() {
+ log.info("Started");
+ }
+
+ @Deactivate
+ public void deactivate() {
+ log.info("Stopped");
+ }
+
+ @Override
+ public PiPipeconf buildFabricPipeconf(
+ DefaultPiPipeconf.Builder builder, String profile, URL p4InfoUrl, URL cpuPortUrl) {
+ return build(builder, profile, p4InfoUrl, cpuPortUrl);
+ }
+
+ static PiPipeconf build(
+ DefaultPiPipeconf.Builder pipeconfBuilder,
+ String profileName, URL p4InfoUrl, URL cpuPortUrl) {
+ checkNotNull(pipeconfBuilder,
+ "pipeconfBuilder cannot be null");
+ checkArgument(profileName != null && !profileName.isEmpty(),
+ "profileName cannot be null or empty");
+ checkNotNull(p4InfoUrl,
+ "p4InfoUrl cannot be null (check if file exists)");
+ checkNotNull(cpuPortUrl,
+ "cpuPortUrl cannot be null (check if file exists)");
+
+ pipeconfBuilder
+ .withPipelineModel(parseP4Info(p4InfoUrl))
+ .addBehaviour(PiPipelineInterpreter.class, FabricInterpreter.class)
+ .addBehaviour(Pipeliner.class, FabricPipeliner.class)
+ .addExtension(PiPipeconf.ExtensionType.P4_INFO_TEXT, p4InfoUrl)
+ .addExtension(PiPipeconf.ExtensionType.CPU_PORT_TXT, cpuPortUrl);
+
+ // Add IntProgrammable behaviour for INT-enabled profiles.
+ if (profileName.endsWith(INT_PROFILE_SUFFIX) ||
+ profileName.endsWith(FULL_PROFILE_SUFFIX)) {
+ pipeconfBuilder.addBehaviour(IntProgrammable.class, FabricIntProgrammable.class);
+ }
+
+ return pipeconfBuilder.build();
+ }
+
+ private static PiPipelineModel parseP4Info(URL p4InfoUrl) {
+ try {
+ return P4InfoParser.parse(p4InfoUrl);
+ } catch (P4InfoParserException e) {
+ // FIXME: propagate exception that can be handled by whoever is
+ // trying to build pipeconfs.
+ throw new IllegalStateException(e);
+ }
+ }
+}
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/AbstractFabricHandlerBehavior.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/AbstractFabricHandlerBehavior.java
new file mode 100644
index 0000000..fe07576
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/AbstractFabricHandlerBehavior.java
@@ -0,0 +1,91 @@
+/*
+ * 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.pipelines.fabric.impl.behaviour;
+
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.driver.AbstractHandlerBehaviour;
+import org.onosproject.net.driver.DriverHandler;
+import org.onosproject.net.pi.model.PiPipeconfId;
+import org.onosproject.net.pi.service.PiPipeconfService;
+import org.slf4j.Logger;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static java.lang.String.format;
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Abstract implementation of HandlerBehaviour for the fabric pipeconf
+ * behaviors.
+ * <p>
+ * All sub-classes must implement a default constructor, used by the abstract
+ * projectable model (i.e., {@link org.onosproject.net.Device#as(Class)}.
+ */
+public abstract class AbstractFabricHandlerBehavior extends AbstractHandlerBehaviour {
+
+ protected final Logger log = getLogger(getClass());
+
+ protected FabricCapabilities capabilities;
+
+ /**
+ * Creates a new instance of this behavior with the given capabilities.
+ * Note: this constructor should be invoked only by other classes of this
+ * package that can retrieve capabilities on their own.
+ * <p>
+ * When using the abstract projectable model (i.e., {@link
+ * org.onosproject.net.Device#as(Class)}, capabilities will be set by the
+ * driver manager when calling {@link #setHandler(DriverHandler)})
+ *
+ * @param capabilities capabilities
+ */
+ protected AbstractFabricHandlerBehavior(FabricCapabilities capabilities) {
+ this.capabilities = capabilities;
+ }
+
+ /**
+ * Create a new instance of this behaviour. Used by the abstract projectable
+ * model (i.e., {@link org.onosproject.net.Device#as(Class)}.
+ */
+ public AbstractFabricHandlerBehavior() {
+ // Do nothing
+ }
+
+ @Override
+ public void setHandler(DriverHandler handler) {
+ super.setHandler(handler);
+ final PiPipeconfService pipeconfService = handler().get(PiPipeconfService.class);
+ setCapabilitiesFromHandler(handler().data().deviceId(), pipeconfService);
+ }
+
+ private void setCapabilitiesFromHandler(
+ DeviceId deviceId, PiPipeconfService pipeconfService) {
+ checkNotNull(deviceId);
+ checkNotNull(pipeconfService);
+ // Get pipeconf capabilities.
+ final PiPipeconfId pipeconfId = pipeconfService.ofDevice(deviceId)
+ .orElse(null);
+ if (pipeconfId == null) {
+ throw new IllegalStateException(format(
+ "Unable to get pipeconf ID of device %s", deviceId.toString()));
+ }
+ if (!pipeconfService.getPipeconf(pipeconfId).isPresent()) {
+ throw new IllegalStateException(format(
+ "Pipeconf '%s' is not registered ", pipeconfId));
+ }
+ this.capabilities = new FabricCapabilities(
+ pipeconfService.getPipeconf(pipeconfId).get());
+ }
+}
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricCapabilities.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricCapabilities.java
new file mode 100644
index 0000000..6def74f
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricCapabilities.java
@@ -0,0 +1,89 @@
+/*
+ * 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.pipelines.fabric.impl.behaviour;
+
+import org.onosproject.net.pi.model.PiPipeconf;
+import org.slf4j.Logger;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Optional;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.onosproject.net.pi.model.PiPipeconf.ExtensionType.CPU_PORT_TXT;
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Representation of the capabilities of a given fabric pipeconf.
+ */
+public class FabricCapabilities {
+
+ private final Logger log = getLogger(getClass());
+
+ private final PiPipeconf pipeconf;
+
+ public FabricCapabilities(PiPipeconf pipeconf) {
+ this.pipeconf = checkNotNull(pipeconf);
+ }
+
+ public boolean hasHashedTable() {
+ return pipeconf.pipelineModel()
+ .table(FabricConstants.FABRIC_INGRESS_NEXT_HASHED).isPresent();
+ }
+
+ public Optional<Integer> cpuPort() {
+ // This is probably brittle, but needed to dynamically get the CPU port
+ // for different platforms.
+ if (!pipeconf.extension(CPU_PORT_TXT).isPresent()) {
+ log.warn("Missing {} extension in pipeconf {}", CPU_PORT_TXT, pipeconf.id());
+ return Optional.empty();
+ }
+ try {
+ final InputStream stream = pipeconf.extension(CPU_PORT_TXT).get();
+ 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 {}", pipeconf.id());
+ return Optional.empty();
+ }
+ try {
+ return Optional.of(Integer.parseInt(str));
+ } catch (NumberFormatException e) {
+ log.error("Invalid CPU port for {}: {}", pipeconf.id(), str);
+ return Optional.empty();
+ }
+ } catch (IOException e) {
+ log.error("Unable to read CPU port file of {}: {}",
+ pipeconf.id(), e.getMessage());
+ return Optional.empty();
+ }
+ }
+
+ public boolean supportDoubleVlanTerm() {
+ if (pipeconf.pipelineModel()
+ .table(FabricConstants.FABRIC_INGRESS_NEXT_NEXT_VLAN).isPresent()) {
+ return pipeconf.pipelineModel().table(FabricConstants.FABRIC_INGRESS_NEXT_NEXT_VLAN)
+ .get().action(FabricConstants.FABRIC_INGRESS_NEXT_SET_DOUBLE_VLAN)
+ .isPresent();
+ }
+ return false;
+ }
+}
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricConstants.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricConstants.java
new file mode 100644
index 0000000..c10f3f5
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricConstants.java
@@ -0,0 +1,352 @@
+/*
+ * 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.pipelines.fabric.impl.behaviour;
+
+import org.onosproject.net.pi.model.PiActionId;
+import org.onosproject.net.pi.model.PiActionParamId;
+import org.onosproject.net.pi.model.PiActionProfileId;
+import org.onosproject.net.pi.model.PiCounterId;
+import org.onosproject.net.pi.model.PiMatchFieldId;
+import org.onosproject.net.pi.model.PiMeterId;
+import org.onosproject.net.pi.model.PiPacketMetadataId;
+import org.onosproject.net.pi.model.PiTableId;
+/**
+ * Constants for fabric pipeline.
+ */
+public final class FabricConstants {
+
+ // hide default constructor
+ private FabricConstants() {
+ }
+
+ // Header field IDs
+ public static final PiMatchFieldId HDR_IG_PORT =
+ PiMatchFieldId.of("ig_port");
+ public static final PiMatchFieldId HDR_VLAN_IS_VALID =
+ PiMatchFieldId.of("vlan_is_valid");
+ public static final PiMatchFieldId HDR_EG_PORT =
+ PiMatchFieldId.of("eg_port");
+ public static final PiMatchFieldId HDR_IPV6_SRC_NET_ID =
+ PiMatchFieldId.of("ipv6_src_net_id");
+ public static final PiMatchFieldId HDR_C_TAG = PiMatchFieldId.of("c_tag");
+ public static final PiMatchFieldId HDR_IPV4_SRC =
+ PiMatchFieldId.of("ipv4_src");
+ public static final PiMatchFieldId HDR_IPV6_DST =
+ PiMatchFieldId.of("ipv6_dst");
+ public static final PiMatchFieldId HDR_IS_MPLS =
+ PiMatchFieldId.of("is_mpls");
+ public static final PiMatchFieldId HDR_L4_DPORT =
+ PiMatchFieldId.of("l4_dport");
+ public static final PiMatchFieldId HDR_PPPOE_CODE =
+ PiMatchFieldId.of("pppoe_code");
+ public static final PiMatchFieldId HDR_IPV6_SRC =
+ PiMatchFieldId.of("ipv6_src");
+ public static final PiMatchFieldId HDR_ETH_SRC =
+ PiMatchFieldId.of("eth_src");
+ public static final PiMatchFieldId HDR_S_TAG = PiMatchFieldId.of("s_tag");
+ public static final PiMatchFieldId HDR_VLAN_ID =
+ PiMatchFieldId.of("vlan_id");
+ public static final PiMatchFieldId HDR_ETH_DST =
+ PiMatchFieldId.of("eth_dst");
+ public static final PiMatchFieldId HDR_ICMP_TYPE =
+ PiMatchFieldId.of("icmp_type");
+ public static final PiMatchFieldId HDR_IPV4_DST =
+ PiMatchFieldId.of("ipv4_dst");
+ public static final PiMatchFieldId HDR_IPV6_TRAFFIC_CLASS =
+ PiMatchFieldId.of("ipv6_traffic_class");
+ public static final PiMatchFieldId HDR_ETH_TYPE =
+ PiMatchFieldId.of("eth_type");
+ public static final PiMatchFieldId HDR_NEXT_ID =
+ PiMatchFieldId.of("next_id");
+ public static final PiMatchFieldId HDR_L4_SPORT =
+ PiMatchFieldId.of("l4_sport");
+ public static final PiMatchFieldId HDR_ICMP_CODE =
+ PiMatchFieldId.of("icmp_code");
+ public static final PiMatchFieldId HDR_INNER_VLAN_ID =
+ PiMatchFieldId.of("inner_vlan_id");
+ public static final PiMatchFieldId HDR_IPV4_ECN =
+ PiMatchFieldId.of("ipv4_ecn");
+ public static final PiMatchFieldId HDR_PPPOE_SESSION_ID =
+ PiMatchFieldId.of("pppoe_session_id");
+ public static final PiMatchFieldId HDR_EG_SPEC =
+ PiMatchFieldId.of("eg_spec");
+ public static final PiMatchFieldId HDR_LINE_ID =
+ PiMatchFieldId.of("line_id");
+ public static final PiMatchFieldId HDR_IPV4_DSCP =
+ PiMatchFieldId.of("ipv4_dscp");
+ public static final PiMatchFieldId HDR_IS_IPV4 =
+ PiMatchFieldId.of("is_ipv4");
+ public static final PiMatchFieldId HDR_IS_IPV6 =
+ PiMatchFieldId.of("is_ipv6");
+ public static final PiMatchFieldId HDR_GTP_IPV4_DST =
+ PiMatchFieldId.of("gtp_ipv4_dst");
+ public static final PiMatchFieldId HDR_INT_IS_VALID =
+ PiMatchFieldId.of("int_is_valid");
+ public static final PiMatchFieldId HDR_MPLS_LABEL =
+ PiMatchFieldId.of("mpls_label");
+ public static final PiMatchFieldId HDR_IP_PROTO =
+ PiMatchFieldId.of("ip_proto");
+ public static final PiMatchFieldId HDR_PPPOE_PROTOCOL =
+ PiMatchFieldId.of("pppoe_protocol");
+ // Table IDs
+ public static final PiTableId FABRIC_INGRESS_NEXT_HASHED =
+ PiTableId.of("FabricIngress.next.hashed");
+ public static final PiTableId FABRIC_INGRESS_BNG_INGRESS_T_LINE_MAP =
+ PiTableId.of("FabricIngress.bng_ingress.t_line_map");
+ public static final PiTableId FABRIC_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_FILTERING_FWD_CLASSIFIER =
+ PiTableId.of("FabricIngress.filtering.fwd_classifier");
+ public static final PiTableId FABRIC_INGRESS_NEXT_XCONNECT =
+ PiTableId.of("FabricIngress.next.xconnect");
+ public static final PiTableId FABRIC_INGRESS_NEXT_NEXT_VLAN =
+ PiTableId.of("FabricIngress.next.next_vlan");
+ public static final PiTableId FABRIC_INGRESS_NEXT_SIMPLE =
+ PiTableId.of("FabricIngress.next.simple");
+ public static final PiTableId FABRIC_INGRESS_NEXT_MULTICAST =
+ PiTableId.of("FabricIngress.next.multicast");
+ public static final PiTableId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_SOURCE_TB_INT_SOURCE =
+ PiTableId.of("FabricEgress.process_int_main.process_int_source.tb_int_source");
+ public static final PiTableId FABRIC_INGRESS_FORWARDING_ROUTING_V6 =
+ PiTableId.of("FabricIngress.forwarding.routing_v6");
+ public static final PiTableId FABRIC_INGRESS_FORWARDING_MPLS =
+ PiTableId.of("FabricIngress.forwarding.mpls");
+ public static final PiTableId FABRIC_INGRESS_FORWARDING_ROUTING_V4 =
+ PiTableId.of("FabricIngress.forwarding.routing_v4");
+ public static final PiTableId FABRIC_INGRESS_ACL_ACL =
+ PiTableId.of("FabricIngress.acl.acl");
+ public static final PiTableId FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN =
+ PiTableId.of("FabricIngress.filtering.ingress_port_vlan");
+ public static final PiTableId FABRIC_INGRESS_BNG_INGRESS_UPSTREAM_T_PPPOE_CP =
+ PiTableId.of("FabricIngress.bng_ingress.upstream.t_pppoe_cp");
+ public static final PiTableId FABRIC_INGRESS_BNG_INGRESS_UPSTREAM_T_PPPOE_TERM_V4 =
+ PiTableId.of("FabricIngress.bng_ingress.upstream.t_pppoe_term_v4");
+ public static final PiTableId FABRIC_INGRESS_SPGW_INGRESS_S1U_FILTER_TABLE =
+ PiTableId.of("FabricIngress.spgw_ingress.s1u_filter_table");
+ public static final PiTableId FABRIC_INGRESS_FORWARDING_BRIDGING =
+ PiTableId.of("FabricIngress.forwarding.bridging");
+ public static final PiTableId FABRIC_INGRESS_SPGW_INGRESS_DL_SESS_LOOKUP =
+ PiTableId.of("FabricIngress.spgw_ingress.dl_sess_lookup");
+ public static final PiTableId FABRIC_INGRESS_BNG_INGRESS_DOWNSTREAM_T_LINE_SESSION_MAP =
+ PiTableId.of("FabricIngress.bng_ingress.downstream.t_line_session_map");
+ public static final PiTableId FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN =
+ PiTableId.of("FabricEgress.egress_next.egress_vlan");
+ public static final PiTableId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SINK =
+ PiTableId.of("FabricIngress.process_set_source_sink.tb_set_sink");
+ 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_PROCESS_SET_SOURCE_SINK_TB_SET_SOURCE =
+ PiTableId.of("FabricIngress.process_set_source_sink.tb_set_source");
+ public static final PiTableId FABRIC_INGRESS_BNG_INGRESS_DOWNSTREAM_T_QOS_V6 =
+ PiTableId.of("FabricIngress.bng_ingress.downstream.t_qos_v6");
+ public static final PiTableId FABRIC_INGRESS_BNG_INGRESS_DOWNSTREAM_T_QOS_V4 =
+ PiTableId.of("FabricIngress.bng_ingress.downstream.t_qos_v4");
+ public static final PiTableId FABRIC_INGRESS_BNG_INGRESS_UPSTREAM_T_PPPOE_TERM_V6 =
+ PiTableId.of("FabricIngress.bng_ingress.upstream.t_pppoe_term_v6");
+ // Indirect Counter IDs
+ public static final PiCounterId FABRIC_EGRESS_BNG_EGRESS_DOWNSTREAM_C_LINE_TX =
+ PiCounterId.of("FabricEgress.bng_egress.downstream.c_line_tx");
+ public static final PiCounterId FABRIC_INGRESS_PORT_COUNTERS_CONTROL_EGRESS_PORT_COUNTER =
+ PiCounterId.of("FabricIngress.port_counters_control.egress_port_counter");
+ public static final PiCounterId FABRIC_INGRESS_BNG_INGRESS_UPSTREAM_C_DROPPED =
+ PiCounterId.of("FabricIngress.bng_ingress.upstream.c_dropped");
+ public static final PiCounterId FABRIC_INGRESS_BNG_INGRESS_UPSTREAM_C_CONTROL =
+ PiCounterId.of("FabricIngress.bng_ingress.upstream.c_control");
+ public static final PiCounterId FABRIC_INGRESS_BNG_INGRESS_UPSTREAM_C_TERMINATED =
+ PiCounterId.of("FabricIngress.bng_ingress.upstream.c_terminated");
+ public static final PiCounterId FABRIC_INGRESS_BNG_INGRESS_DOWNSTREAM_C_LINE_RX =
+ PiCounterId.of("FabricIngress.bng_ingress.downstream.c_line_rx");
+ public static final PiCounterId FABRIC_INGRESS_PORT_COUNTERS_CONTROL_INGRESS_PORT_COUNTER =
+ PiCounterId.of("FabricIngress.port_counters_control.ingress_port_counter");
+ // Direct Counter IDs
+ public static final PiCounterId FABRIC_INGRESS_NEXT_MULTICAST_COUNTER =
+ PiCounterId.of("FabricIngress.next.multicast_counter");
+ public static final PiCounterId FABRIC_INGRESS_NEXT_SIMPLE_COUNTER =
+ PiCounterId.of("FabricIngress.next.simple_counter");
+ public static final PiCounterId FABRIC_INGRESS_FILTERING_FWD_CLASSIFIER_COUNTER =
+ PiCounterId.of("FabricIngress.filtering.fwd_classifier_counter");
+ public static final PiCounterId FABRIC_INGRESS_FORWARDING_BRIDGING_COUNTER =
+ PiCounterId.of("FabricIngress.forwarding.bridging_counter");
+ public static final PiCounterId FABRIC_INGRESS_FORWARDING_ROUTING_V4_COUNTER =
+ 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_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_INGRESS_PROCESS_SET_SOURCE_SINK_COUNTER_SET_SINK =
+ PiCounterId.of("FabricIngress.process_set_source_sink.counter_set_sink");
+ public static final PiCounterId FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN_COUNTER =
+ PiCounterId.of("FabricEgress.egress_next.egress_vlan_counter");
+ public static final PiCounterId FABRIC_INGRESS_ACL_ACL_COUNTER =
+ PiCounterId.of("FabricIngress.acl.acl_counter");
+ public static final PiCounterId FABRIC_INGRESS_NEXT_XCONNECT_COUNTER =
+ PiCounterId.of("FabricIngress.next.xconnect_counter");
+ public static final PiCounterId FABRIC_INGRESS_NEXT_NEXT_VLAN_COUNTER =
+ PiCounterId.of("FabricIngress.next.next_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 =
+ PiCounterId.of("FabricIngress.filtering.ingress_port_vlan_counter");
+ public static final PiCounterId FABRIC_INGRESS_FORWARDING_MPLS_COUNTER =
+ PiCounterId.of("FabricIngress.forwarding.mpls_counter");
+ public static final PiCounterId FABRIC_INGRESS_NEXT_HASHED_COUNTER =
+ PiCounterId.of("FabricIngress.next.hashed_counter");
+ // Action IDs
+ public static final PiActionId FABRIC_INGRESS_NEXT_SET_NEXT_ID_XCONNECT =
+ PiActionId.of("FabricIngress.next.set_next_id_xconnect");
+ public static final PiActionId FABRIC_INGRESS_FORWARDING_NOP_ROUTING_V4 =
+ PiActionId.of("FabricIngress.forwarding.nop_routing_v4");
+ public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_DOWNSTREAM_QOS_BESTEFF =
+ PiActionId.of("FabricIngress.bng_ingress.downstream.qos_besteff");
+ public static final PiActionId FABRIC_INGRESS_FILTERING_PERMIT_WITH_INTERNAL_VLAN =
+ PiActionId.of("FabricIngress.filtering.permit_with_internal_vlan");
+ public static final PiActionId FABRIC_INGRESS_NEXT_ROUTING_HASHED =
+ PiActionId.of("FabricIngress.next.routing_hashed");
+ 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_MAIN_PROCESS_INT_SOURCE_INT_SOURCE_DSCP =
+ PiActionId.of("FabricEgress.process_int_main.process_int_source.int_source_dscp");
+ public static final PiActionId FABRIC_INGRESS_NEXT_SET_DOUBLE_VLAN =
+ PiActionId.of("FabricIngress.next.set_double_vlan");
+ public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INIT_METADATA =
+ PiActionId.of("FabricEgress.process_int_main.process_int_transit.init_metadata");
+ public static final PiActionId FABRIC_INGRESS_ACL_DROP =
+ PiActionId.of("FabricIngress.acl.drop");
+ public static final PiActionId FABRIC_INGRESS_ACL_SET_CLONE_SESSION_ID =
+ PiActionId.of("FabricIngress.acl.set_clone_session_id");
+ public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_UPSTREAM_PUNT_TO_CPU =
+ PiActionId.of("FabricIngress.bng_ingress.upstream.punt_to_cpu");
+ public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_DOWNSTREAM_DROP =
+ PiActionId.of("FabricIngress.bng_ingress.downstream.drop");
+ public static final PiActionId FABRIC_INGRESS_NEXT_SET_VLAN =
+ PiActionId.of("FabricIngress.next.set_vlan");
+ public static final PiActionId FABRIC_INGRESS_ACL_NOP_ACL =
+ PiActionId.of("FabricIngress.acl.nop_acl");
+ public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_SET_LINE =
+ PiActionId.of("FabricIngress.bng_ingress.set_line");
+ public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_UPSTREAM_TERM_DISABLED =
+ PiActionId.of("FabricIngress.bng_ingress.upstream.term_disabled");
+ public static final PiActionId FABRIC_INGRESS_ACL_SET_NEXT_ID_ACL =
+ PiActionId.of("FabricIngress.acl.set_next_id_acl");
+ public static final PiActionId FABRIC_INGRESS_FILTERING_PERMIT =
+ PiActionId.of("FabricIngress.filtering.permit");
+ public static final PiActionId FABRIC_INGRESS_FORWARDING_SET_NEXT_ID_ROUTING_V4 =
+ PiActionId.of("FabricIngress.forwarding.set_next_id_routing_v4");
+ public static final PiActionId FABRIC_INGRESS_FORWARDING_SET_NEXT_ID_ROUTING_V6 =
+ PiActionId.of("FabricIngress.forwarding.set_next_id_routing_v6");
+ public static final PiActionId FABRIC_INGRESS_NEXT_ROUTING_SIMPLE =
+ PiActionId.of("FabricIngress.next.routing_simple");
+ public static final PiActionId FABRIC_INGRESS_SPGW_INGRESS_SET_DL_SESS_INFO =
+ PiActionId.of("FabricIngress.spgw_ingress.set_dl_sess_info");
+ public static final PiActionId FABRIC_EGRESS_BNG_EGRESS_DOWNSTREAM_ENCAP_V4 =
+ PiActionId.of("FabricEgress.bng_egress.downstream.encap_v4");
+ public static final PiActionId FABRIC_INGRESS_NEXT_OUTPUT_HASHED =
+ PiActionId.of("FabricIngress.next.output_hashed");
+ public static final PiActionId FABRIC_INGRESS_FORWARDING_POP_MPLS_AND_NEXT =
+ PiActionId.of("FabricIngress.forwarding.pop_mpls_and_next");
+ public static final PiActionId FABRIC_EGRESS_BNG_EGRESS_DOWNSTREAM_ENCAP_V6 =
+ PiActionId.of("FabricEgress.bng_egress.downstream.encap_v6");
+ public static final PiActionId FABRIC_INGRESS_NEXT_MPLS_ROUTING_SIMPLE =
+ PiActionId.of("FabricIngress.next.mpls_routing_simple");
+ public static final PiActionId FABRIC_INGRESS_ACL_PUNT_TO_CPU =
+ PiActionId.of("FabricIngress.acl.punt_to_cpu");
+ public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_DOWNSTREAM_QOS_PRIO =
+ PiActionId.of("FabricIngress.bng_ingress.downstream.qos_prio");
+ public static final PiActionId FABRIC_EGRESS_EGRESS_NEXT_POP_VLAN =
+ PiActionId.of("FabricEgress.egress_next.pop_vlan");
+ 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_INGRESS_NEXT_MPLS_ROUTING_HASHED =
+ PiActionId.of("FabricIngress.next.mpls_routing_hashed");
+ public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_UPSTREAM_TERM_ENABLED_V6 =
+ PiActionId.of("FabricIngress.bng_ingress.upstream.term_enabled_v6");
+ public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_UPSTREAM_TERM_ENABLED_V4 =
+ PiActionId.of("FabricIngress.bng_ingress.upstream.term_enabled_v4");
+ public static final PiActionId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_INT_SET_SOURCE =
+ PiActionId.of("FabricIngress.process_set_source_sink.int_set_source");
+ public static final PiActionId NOP = PiActionId.of("nop");
+ public static final PiActionId FABRIC_INGRESS_NEXT_OUTPUT_SIMPLE =
+ PiActionId.of("FabricIngress.next.output_simple");
+ public static final PiActionId FABRIC_INGRESS_FILTERING_DENY =
+ PiActionId.of("FabricIngress.filtering.deny");
+ public static final PiActionId FABRIC_INGRESS_BNG_INGRESS_DOWNSTREAM_SET_SESSION =
+ PiActionId.of("FabricIngress.bng_ingress.downstream.set_session");
+ public static final PiActionId FABRIC_INGRESS_NEXT_SET_MCAST_GROUP_ID =
+ PiActionId.of("FabricIngress.next.set_mcast_group_id");
+ public static final PiActionId FABRIC_INGRESS_FILTERING_SET_FORWARDING_TYPE =
+ PiActionId.of("FabricIngress.filtering.set_forwarding_type");
+ public static final PiActionId FABRIC_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_INGRESS_NEXT_OUTPUT_XCONNECT =
+ PiActionId.of("FabricIngress.next.output_xconnect");
+ // Action Param IDs
+ public static final PiActionParamId DMAC = PiActionParamId.of("dmac");
+ public static final PiActionParamId MON_PORT =
+ PiActionParamId.of("mon_port");
+ public static final PiActionParamId S1U_SGW_ADDR =
+ PiActionParamId.of("s1u_sgw_addr");
+ public static final PiActionParamId SMAC = PiActionParamId.of("smac");
+ public static final PiActionParamId CLONE_ID =
+ PiActionParamId.of("clone_id");
+ public static final PiActionParamId VLAN_ID = PiActionParamId.of("vlan_id");
+ public static final PiActionParamId LABEL = PiActionParamId.of("label");
+ public static final PiActionParamId SRC_IP = PiActionParamId.of("src_ip");
+ public static final PiActionParamId NEXT_ID = PiActionParamId.of("next_id");
+ public static final PiActionParamId INS_CNT = PiActionParamId.of("ins_cnt");
+ public static final PiActionParamId SRC_MAC = PiActionParamId.of("src_mac");
+ public static final PiActionParamId INNER_VLAN_ID =
+ PiActionParamId.of("inner_vlan_id");
+ public static final PiActionParamId PPPOE_SESSION_ID =
+ PiActionParamId.of("pppoe_session_id");
+ public static final PiActionParamId MON_MAC = PiActionParamId.of("mon_mac");
+ public static final PiActionParamId MON_IP = PiActionParamId.of("mon_ip");
+ public static final PiActionParamId SWITCH_ID =
+ PiActionParamId.of("switch_id");
+ public static final PiActionParamId INS_MASK0003 =
+ PiActionParamId.of("ins_mask0003");
+ public static final PiActionParamId LINE_ID = PiActionParamId.of("line_id");
+ public static final PiActionParamId FWD_TYPE =
+ PiActionParamId.of("fwd_type");
+ public static final PiActionParamId OUTER_VLAN_ID =
+ PiActionParamId.of("outer_vlan_id");
+ public static final PiActionParamId INS_MASK0407 =
+ PiActionParamId.of("ins_mask0407");
+ public static final PiActionParamId TEID = PiActionParamId.of("teid");
+ public static final PiActionParamId S1U_ENB_ADDR =
+ PiActionParamId.of("s1u_enb_addr");
+ public static final PiActionParamId PORT_NUM =
+ PiActionParamId.of("port_num");
+ public static final PiActionParamId GROUP_ID =
+ PiActionParamId.of("group_id");
+ public static final PiActionParamId MAX_HOP = PiActionParamId.of("max_hop");
+ // Action Profile IDs
+ public static final PiActionProfileId FABRIC_INGRESS_NEXT_HASHED_SELECTOR =
+ PiActionProfileId.of("FabricIngress.next.hashed_selector");
+ // Packet Metadata IDs
+ public static final PiPacketMetadataId INGRESS_PORT =
+ PiPacketMetadataId.of("ingress_port");
+ public static final PiPacketMetadataId EGRESS_PORT =
+ PiPacketMetadataId.of("egress_port");
+ // Meter IDs
+ public static final PiMeterId FABRIC_INGRESS_BNG_INGRESS_DOWNSTREAM_M_BESTEFF =
+ PiMeterId.of("FabricIngress.bng_ingress.downstream.m_besteff");
+ public static final PiMeterId FABRIC_INGRESS_BNG_INGRESS_DOWNSTREAM_M_PRIO =
+ PiMeterId.of("FabricIngress.bng_ingress.downstream.m_prio");
+}
\ No newline at end of file
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricIntProgrammable.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricIntProgrammable.java
new file mode 100644
index 0000000..4fc8286
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricIntProgrammable.java
@@ -0,0 +1,501 @@
+/*
+ * 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.pipelines.fabric.impl.behaviour;
+
+import com.google.common.collect.Sets;
+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.DeviceId;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.config.NetworkConfigService;
+import org.onosproject.net.device.DeviceService;
+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;
+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.pi.model.PiTableId;
+import org.onosproject.net.pi.runtime.PiAction;
+import org.onosproject.net.pi.runtime.PiActionParam;
+import org.onosproject.pipelines.fabric.impl.FabricPipeconfLoader;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.StreamSupport;
+
+import static org.onlab.util.ImmutableByteSequence.copyFrom;
+
+/**
+ * Implementation of INT programmable behavior for fabric.p4. Currently supports
+ * only SOURCE and TRANSIT functionalities.
+ */
+public class FabricIntProgrammable extends AbstractFabricHandlerBehavior
+ implements IntProgrammable {
+
+ // 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 PKT_INSTANCE_TYPE_INGRESS_CLONE = 1;
+
+ private static final Set<Criterion.Type> SUPPORTED_CRITERION = Sets.newHashSet(
+ Criterion.Type.IPV4_DST, Criterion.Type.IPV4_SRC,
+ Criterion.Type.UDP_SRC, Criterion.Type.UDP_DST,
+ Criterion.Type.TCP_SRC, Criterion.Type.TCP_DST,
+ Criterion.Type.IP_PROTO);
+
+ private static final Set<PiTableId> 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
+ );
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY)
+ private FlowRuleService flowRuleService;
+
+ private CoreService coreService;
+ private NetworkConfigService cfgService;
+ private DeviceId deviceId;
+ private ApplicationId appId;
+
+ /**
+ * Creates a new instance of this behavior with the given capabilities.
+ *
+ * @param capabilities capabilities
+ */
+ protected FabricIntProgrammable(FabricCapabilities capabilities) {
+ super(capabilities);
+ }
+
+ /**
+ * Create a new instance of this behaviour. Used by the abstract projectable
+ * model (i.e., {@link org.onosproject.net.Device#as(Class)}.
+ */
+ public FabricIntProgrammable() {
+ super();
+ }
+
+ private boolean setupBehaviour() {
+ deviceId = this.data().deviceId();
+ flowRuleService = handler().get(FlowRuleService.class);
+ coreService = handler().get(CoreService.class);
+ cfgService = handler().get(NetworkConfigService.class);
+ appId = coreService.getAppId(FabricPipeconfLoader.PIPELINE_APP_NAME);
+ if (appId == null) {
+ log.warn("Application ID is null. Cannot initialize behaviour.");
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public boolean init() {
+
+ if (!setupBehaviour()) {
+ return false;
+ }
+
+ // FIXME: create config class for INT to allow specifying arbitrary
+ // switch IDs. The one for the GeneralDeviceProvider was temporary and
+ // now has been removed. For now we use the chassis ID.
+ // 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 = new PiActionParam(
+ FabricConstants.SWITCH_ID,
+ copyFrom(handler().get(DeviceService.class)
+ .getDevice(deviceId).chassisId().id()));
+
+ PiAction transitAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INIT_METADATA)
+ .withParameter(transitIdParam)
+ .build();
+ TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .piTableAction(transitAction)
+ .build();
+ TrafficSelector selector = DefaultTrafficSelector.builder()
+ .matchPi(PiCriterion.builder().matchExact(
+ FabricConstants.HDR_INT_IS_VALID, (byte) 0x01)
+ .build())
+ .build();
+
+ FlowRule transitFlowRule = DefaultFlowRule.builder()
+ .withSelector(selector)
+ .withTreatment(treatment)
+ .fromApp(appId)
+ .withPriority(DEFAULT_PRIORITY)
+ .makePermanent()
+ .forDevice(deviceId)
+ .forTable(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_TB_INT_INSERT)
+ .build();
+
+ flowRuleService.applyFlowRules(transitFlowRule);
+ return true;
+ }
+
+ @Override
+ public boolean setSourcePort(PortNumber port) {
+
+ if (!setupBehaviour()) {
+ return false;
+ }
+
+ PiCriterion ingressCriterion = PiCriterion.builder()
+ .matchExact(FabricConstants.HDR_IG_PORT, port.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();
+ flowRuleService.applyFlowRules(srcFlowRule);
+ return true;
+ }
+
+ @Override
+ public boolean setSinkPort(PortNumber port) {
+
+ if (!setupBehaviour()) {
+ return false;
+ }
+
+ PiCriterion egressCriterion = PiCriterion.builder()
+ .matchExact(FabricConstants.HDR_EG_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) {
+ int instructionBitmap = buildInstructionBitmap(obj.metadataTypes());
+ PiActionParam maxHopParam = new PiActionParam(
+ FabricConstants.MAX_HOP,
+ copyFrom(MAXHOP));
+ PiActionParam instCntParam = new PiActionParam(
+ FabricConstants.INS_CNT,
+ copyFrom(Integer.bitCount(instructionBitmap)));
+ PiActionParam inst0003Param = new PiActionParam(
+ FabricConstants.INS_MASK0003,
+ copyFrom((instructionBitmap >> 12) & 0xF));
+ PiActionParam inst0407Param = new PiActionParam(
+ FabricConstants.INS_MASK0407,
+ copyFrom((instructionBitmap >> 8) & 0xF));
+
+ PiAction intSourceAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_SOURCE_INT_SOURCE_DSCP)
+ .withParameter(maxHopParam)
+ .withParameter(instCntParam)
+ .withParameter(inst0003Param)
+ .withParameter(inst0407Param)
+ .build();
+
+ TrafficTreatment instTreatment = DefaultTrafficTreatment.builder()
+ .piTableAction(intSourceAction)
+ .build();
+
+ TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder();
+ for (Criterion criterion : obj.selector().criteria()) {
+ switch (criterion.type()) {
+ case IPV4_SRC:
+ sBuilder.matchIPSrc(((IPCriterion) criterion).ip());
+ break;
+ case IPV4_DST:
+ sBuilder.matchIPDst(((IPCriterion) criterion).ip());
+ break;
+ case TCP_SRC:
+ sBuilder.matchPi(
+ PiCriterion.builder().matchTernary(
+ FabricConstants.HDR_L4_SPORT,
+ ((TcpPortCriterion) criterion).tcpPort().toInt(), PORTMASK)
+ .build());
+ break;
+ case UDP_SRC:
+ sBuilder.matchPi(
+ PiCriterion.builder().matchTernary(
+ FabricConstants.HDR_L4_SPORT,
+ ((UdpPortCriterion) criterion).udpPort().toInt(), PORTMASK)
+ .build());
+ break;
+ case TCP_DST:
+ sBuilder.matchPi(
+ PiCriterion.builder().matchTernary(
+ FabricConstants.HDR_L4_DPORT,
+ ((TcpPortCriterion) criterion).tcpPort().toInt(), PORTMASK)
+ .build());
+ break;
+ case UDP_DST:
+ sBuilder.matchPi(
+ PiCriterion.builder().matchTernary(
+ FabricConstants.HDR_L4_DPORT,
+ ((UdpPortCriterion) criterion).udpPort().toInt(), PORTMASK)
+ .build());
+ break;
+ default:
+ log.warn("Unsupported criterion type: {}", criterion.type());
+ }
+ }
+
+ return DefaultFlowRule.builder()
+ .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)
+ .makePermanent()
+ .build();
+ }
+
+ private int buildInstructionBitmap(Set<IntIntent.IntMetadataType> metadataTypes) {
+ int instBitmap = 0;
+ for (IntIntent.IntMetadataType metadataType : metadataTypes) {
+ switch (metadataType) {
+ case SWITCH_ID:
+ instBitmap |= (1 << 15);
+ break;
+ case L1_PORT_ID:
+ instBitmap |= (1 << 14);
+ break;
+ case HOP_LATENCY:
+ instBitmap |= (1 << 13);
+ break;
+ case QUEUE_OCCUPANCY:
+ instBitmap |= (1 << 12);
+ break;
+ case INGRESS_TIMESTAMP:
+ instBitmap |= (1 << 11);
+ break;
+ case EGRESS_TIMESTAMP:
+ instBitmap |= (1 << 10);
+ break;
+ case L2_PORT_ID:
+ instBitmap |= (1 << 9);
+ break;
+ case EGRESS_TX_UTIL:
+ instBitmap |= (1 << 8);
+ break;
+ default:
+ log.info("Unsupported metadata type {}. Ignoring...", metadataType);
+ break;
+ }
+ }
+ return instBitmap;
+ }
+
+ /**
+ * 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.
+ */
+ private Set<Criterion> unsupportedSelectors(TrafficSelector selector) {
+ return selector.criteria().stream()
+ .filter(criterion -> !SUPPORTED_CRITERION.contains(criterion.type()))
+ .collect(Collectors.toSet());
+ }
+
+ private boolean processIntObjective(IntObjective obj, boolean install) {
+ if (install && !unsupportedSelectors(obj.selector()).isEmpty()) {
+ log.warn("Criteria {} not supported by {} for INT watchlist",
+ unsupportedSelectors(obj.selector()), deviceId);
+ return false;
+ }
+
+ FlowRule flowRule = buildWatchlistEntry(obj);
+ if (flowRule != null) {
+ if (install) {
+ flowRuleService.applyFlowRules(flowRule);
+ } else {
+ flowRuleService.removeFlowRules(flowRule);
+ }
+ log.debug("IntObjective {} has been {} {}",
+ obj, install ? "installed to" : "removed from", deviceId);
+ return true;
+ } else {
+ log.warn("Failed to {} IntObjective {} on {}",
+ install ? "install" : "remove", obj, deviceId);
+ return false;
+ }
+ }
+
+ private boolean setupIntReportInternal(IntConfig cfg) {
+ // 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) {
+
+ if (!setupBehaviour()) {
+ return null;
+ }
+
+ PiActionParam srcMacParam = new PiActionParam(
+ FabricConstants.SRC_MAC,
+ copyFrom(cfg.sinkMac().toBytes()));
+ PiActionParam nextHopMacParam = new PiActionParam(
+ FabricConstants.MON_MAC,
+ copyFrom(cfg.collectorNextHopMac().toBytes()));
+ PiActionParam srcIpParam = new PiActionParam(
+ FabricConstants.SRC_IP,
+ copyFrom(cfg.sinkIp().toOctets()));
+ PiActionParam monIpParam = new PiActionParam(
+ FabricConstants.MON_IP,
+ copyFrom(cfg.collectorIp().toOctets()));
+ PiActionParam monPortParam = new PiActionParam(
+ FabricConstants.MON_PORT,
+ copyFrom(cfg.collectorPort().toInt()));
+ PiAction reportAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_REPORT_DO_REPORT_ENCAPSULATION)
+ .withParameter(srcMacParam)
+ .withParameter(nextHopMacParam)
+ .withParameter(srcIpParam)
+ .withParameter(monIpParam)
+ .withParameter(monPortParam)
+ .build();
+ TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .piTableAction(reportAction)
+ .build();
+
+ return DefaultFlowRule.builder()
+ .withTreatment(treatment)
+ .fromApp(appId)
+ .withPriority(DEFAULT_PRIORITY)
+ .makePermanent()
+ .forDevice(this.data().deviceId())
+ .forTable(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_REPORT_TB_GENERATE_REPORT)
+ .build();
+ }
+
+}
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreter.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreter.java
new file mode 100644
index 0000000..816c0dd
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreter.java
@@ -0,0 +1,285 @@
+/*
+ * 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.pipelines.fabric.impl.behaviour;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import org.onlab.packet.DeserializationException;
+import org.onlab.packet.Ethernet;
+import org.onlab.util.ImmutableByteSequence;
+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.DriverHandler;
+import org.onosproject.net.flow.TrafficTreatment;
+import org.onosproject.net.flow.criteria.Criterion;
+import org.onosproject.net.flow.instructions.Instructions;
+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.PiPipelineInterpreter;
+import org.onosproject.net.pi.model.PiTableId;
+import org.onosproject.net.pi.runtime.PiAction;
+import org.onosproject.net.pi.runtime.PiPacketMetadata;
+import org.onosproject.net.pi.runtime.PiPacketOperation;
+
+import java.nio.ByteBuffer;
+import java.util.Collection;
+import java.util.List;
+import java.util.Optional;
+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;
+
+/**
+ * Interpreter for fabric pipeline.
+ */
+public class FabricInterpreter extends AbstractFabricHandlerBehavior
+ implements PiPipelineInterpreter {
+
+ private static final int PORT_BITWIDTH = 9;
+
+ // Group tables by control block.
+ private static final Set<PiTableId> FILTERING_CTRL_TBLS = ImmutableSet.of(
+ FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN,
+ FabricConstants.FABRIC_INGRESS_FILTERING_FWD_CLASSIFIER);
+ private static final Set<PiTableId> FORWARDING_CTRL_TBLS = ImmutableSet.of(
+ FabricConstants.FABRIC_INGRESS_FORWARDING_MPLS,
+ FabricConstants.FABRIC_INGRESS_FORWARDING_ROUTING_V4,
+ FabricConstants.FABRIC_INGRESS_FORWARDING_ROUTING_V6,
+ FabricConstants.FABRIC_INGRESS_FORWARDING_BRIDGING);
+ private static final Set<PiTableId> ACL_CTRL_TBLS = ImmutableSet.of(
+ FabricConstants.FABRIC_INGRESS_ACL_ACL);
+ private static final Set<PiTableId> NEXT_CTRL_TBLS = ImmutableSet.of(
+ FabricConstants.FABRIC_INGRESS_NEXT_NEXT_VLAN,
+ FabricConstants.FABRIC_INGRESS_NEXT_SIMPLE,
+ FabricConstants.FABRIC_INGRESS_NEXT_HASHED,
+ FabricConstants.FABRIC_INGRESS_NEXT_XCONNECT);
+ private static final Set<PiTableId> E_NEXT_CTRL_TBLS = ImmutableSet.of(
+ FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN);
+
+ private static final ImmutableMap<Criterion.Type, PiMatchFieldId> CRITERION_MAP =
+ ImmutableMap.<Criterion.Type, PiMatchFieldId>builder()
+ .put(Criterion.Type.IN_PORT, FabricConstants.HDR_IG_PORT)
+ .put(Criterion.Type.ETH_DST, FabricConstants.HDR_ETH_DST)
+ .put(Criterion.Type.ETH_SRC, FabricConstants.HDR_ETH_SRC)
+ .put(Criterion.Type.ETH_DST_MASKED, FabricConstants.HDR_ETH_DST)
+ .put(Criterion.Type.ETH_SRC_MASKED, FabricConstants.HDR_ETH_SRC)
+ .put(Criterion.Type.ETH_TYPE, FabricConstants.HDR_ETH_TYPE)
+ .put(Criterion.Type.MPLS_LABEL, FabricConstants.HDR_MPLS_LABEL)
+ .put(Criterion.Type.VLAN_VID, FabricConstants.HDR_VLAN_ID)
+ .put(Criterion.Type.INNER_VLAN_VID, FabricConstants.HDR_INNER_VLAN_ID)
+ .put(Criterion.Type.IPV4_DST, FabricConstants.HDR_IPV4_DST)
+ .put(Criterion.Type.IPV4_SRC, FabricConstants.HDR_IPV4_SRC)
+ .put(Criterion.Type.IPV6_DST, FabricConstants.HDR_IPV6_DST)
+ .put(Criterion.Type.IP_PROTO, FabricConstants.HDR_IP_PROTO)
+ .put(Criterion.Type.ICMPV6_TYPE, FabricConstants.HDR_ICMP_TYPE)
+ .put(Criterion.Type.ICMPV6_CODE, FabricConstants.HDR_ICMP_CODE)
+ .put(Criterion.Type.UDP_DST, FabricConstants.HDR_L4_DPORT)
+ .put(Criterion.Type.UDP_SRC, FabricConstants.HDR_L4_SPORT)
+ .put(Criterion.Type.UDP_DST_MASKED, FabricConstants.HDR_L4_DPORT)
+ .put(Criterion.Type.UDP_SRC_MASKED, FabricConstants.HDR_L4_SPORT)
+ .put(Criterion.Type.TCP_DST, FabricConstants.HDR_L4_DPORT)
+ .put(Criterion.Type.TCP_SRC, FabricConstants.HDR_L4_SPORT)
+ .put(Criterion.Type.TCP_DST_MASKED, FabricConstants.HDR_L4_DPORT)
+ .put(Criterion.Type.TCP_SRC_MASKED, FabricConstants.HDR_L4_SPORT)
+ .build();
+
+ private static final PiAction NOP = PiAction.builder()
+ .withId(FabricConstants.NOP).build();
+
+ private static final ImmutableMap<PiTableId, PiAction> DEFAULT_ACTIONS =
+ ImmutableMap.<PiTableId, PiAction>builder()
+ .put(FabricConstants.FABRIC_INGRESS_FORWARDING_ROUTING_V4, NOP)
+ .build();
+
+ private FabricTreatmentInterpreter treatmentInterpreter;
+
+ /**
+ * Creates a new instance of this behavior with the given capabilities.
+ *
+ * @param capabilities capabilities
+ */
+ public FabricInterpreter(FabricCapabilities capabilities) {
+ super(capabilities);
+ instantiateTreatmentInterpreter();
+ }
+
+ /**
+ * Create a new instance of this behaviour. Used by the abstract projectable
+ * model (i.e., {@link org.onosproject.net.Device#as(Class)}.
+ */
+ public FabricInterpreter() {
+ super();
+ }
+
+ private void instantiateTreatmentInterpreter() {
+ this.treatmentInterpreter = new FabricTreatmentInterpreter(this.capabilities);
+ }
+
+ @Override
+ public void setHandler(DriverHandler handler) {
+ super.setHandler(handler);
+ instantiateTreatmentInterpreter();
+ }
+
+ @Override
+ public Optional<PiMatchFieldId> mapCriterionType(Criterion.Type type) {
+ return Optional.ofNullable(CRITERION_MAP.get(type));
+ }
+
+ @Override
+ public Optional<PiTableId> mapFlowRuleTableId(int flowRuleTableId) {
+ // The only use case for Index ID->PiTableId is when using the single
+ // table pipeliner. fabric.p4 is never used with such pipeliner.
+ return Optional.empty();
+ }
+
+ @Override
+ public PiAction mapTreatment(TrafficTreatment treatment, PiTableId piTableId)
+ throws PiInterpreterException {
+ if (FILTERING_CTRL_TBLS.contains(piTableId)) {
+ return treatmentInterpreter.mapFilteringTreatment(treatment, piTableId);
+ } else if (FORWARDING_CTRL_TBLS.contains(piTableId)) {
+ return treatmentInterpreter.mapForwardingTreatment(treatment, piTableId);
+ } else if (ACL_CTRL_TBLS.contains(piTableId)) {
+ return treatmentInterpreter.mapAclTreatment(treatment, piTableId);
+ } else if (NEXT_CTRL_TBLS.contains(piTableId)) {
+ return treatmentInterpreter.mapNextTreatment(treatment, piTableId);
+ } else if (E_NEXT_CTRL_TBLS.contains(piTableId)) {
+ return treatmentInterpreter.mapEgressNextTreatment(treatment, piTableId);
+ } else {
+ throw new PiInterpreterException(format(
+ "Treatment mapping not supported for table '%s'", piTableId));
+ }
+ }
+
+ private PiPacketOperation createPiPacketOperation(
+ DeviceId deviceId, ByteBuffer data, long portNumber)
+ throws PiInterpreterException {
+ PiPacketMetadata metadata = createPacketMetadata(portNumber);
+ return PiPacketOperation.builder()
+ .withType(PACKET_OUT)
+ .withData(copyFrom(data))
+ .withMetadatas(ImmutableList.of(metadata))
+ .build();
+ }
+
+ private PiPacketMetadata createPacketMetadata(long portNumber)
+ throws PiInterpreterException {
+ try {
+ return PiPacketMetadata.builder()
+ .withId(FabricConstants.EGRESS_PORT)
+ .withValue(copyFrom(portNumber).fit(PORT_BITWIDTH))
+ .build();
+ } catch (ImmutableByteSequence.ByteSequenceTrimException e) {
+ throw new PiInterpreterException(format(
+ "Port number '%d' too big, %s", portNumber, e.getMessage()));
+ }
+ }
+
+ @Override
+ public Collection<PiPacketOperation> mapOutboundPacket(OutboundPacket packet)
+ throws PiInterpreterException {
+ DeviceId deviceId = packet.sendThrough();
+ TrafficTreatment treatment = packet.treatment();
+
+ // fabric.p4 supports only OUTPUT instructions.
+ List<Instructions.OutputInstruction> outInstructions = treatment
+ .allInstructions()
+ .stream()
+ .filter(i -> i.type().equals(OUTPUT))
+ .map(i -> (Instructions.OutputInstruction) i)
+ .collect(toList());
+
+ if (treatment.allInstructions().size() != outInstructions.size()) {
+ // There are other instructions that are not of type OUTPUT.
+ throw new PiInterpreterException("Treatment not supported: " + treatment);
+ }
+
+ ImmutableList.Builder<PiPacketOperation> builder = ImmutableList.builder();
+ for (Instructions.OutputInstruction outInst : outInstructions) {
+ if (outInst.port().isLogical() && !outInst.port().equals(FLOOD)) {
+ throw new PiInterpreterException(format(
+ "Output on logical port '%s' not supported", outInst.port()));
+ } else if (outInst.port().equals(FLOOD)) {
+ // Since fabric.p4 does not support flooding, we create a packet
+ // operation for each switch port.
+ final DeviceService deviceService = handler().get(DeviceService.class);
+ for (Port port : deviceService.getPorts(packet.sendThrough())) {
+ builder.add(createPiPacketOperation(deviceId, packet.data(), port.number().toLong()));
+ }
+ } else {
+ builder.add(createPiPacketOperation(deviceId, packet.data(), outInst.port().toLong()));
+ }
+ }
+ return builder.build();
+ }
+
+ @Override
+ public InboundPacket mapInboundPacket(PiPacketOperation packetIn, DeviceId deviceId) throws PiInterpreterException {
+ // Assuming that the packet is ethernet, which is fine since fabric.p4
+ // can deparse only ethernet packets.
+ Ethernet ethPkt;
+ try {
+ ethPkt = Ethernet.deserializer().deserialize(packetIn.data().asArray(), 0,
+ packetIn.data().size());
+ } catch (DeserializationException dex) {
+ throw new PiInterpreterException(dex.getMessage());
+ }
+
+ // Returns the ingress port packet metadata.
+ Optional<PiPacketMetadata> packetMetadata = packetIn.metadatas()
+ .stream().filter(m -> m.id().equals(FabricConstants.INGRESS_PORT))
+ .findFirst();
+
+ if (packetMetadata.isPresent()) {
+ ImmutableByteSequence portByteSequence = packetMetadata.get().value();
+ short s = portByteSequence.asReadOnlyBuffer().getShort();
+ ConnectPoint receivedFrom = new ConnectPoint(deviceId, PortNumber.portNumber(s));
+ ByteBuffer rawData = ByteBuffer.wrap(packetIn.data().asArray());
+ return new DefaultInboundPacket(receivedFrom, ethPkt, rawData);
+ } else {
+ throw new PiInterpreterException(format(
+ "Missing metadata '%s' in packet-in received from '%s': %s",
+ FabricConstants.INGRESS_PORT, deviceId, packetIn));
+ }
+ }
+
+ @Override
+ public Optional<PiAction> getOriginalDefaultAction(PiTableId tableId) {
+ return Optional.ofNullable(DEFAULT_ACTIONS.get(tableId));
+ }
+
+ @Override
+ public Optional<Integer> mapLogicalPortNumber(PortNumber port) {
+ if (!port.equals(CONTROLLER)) {
+ return Optional.empty();
+ }
+ return capabilities.cpuPort();
+ }
+}
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricPortStatisticsDiscovery.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricPortStatisticsDiscovery.java
new file mode 100644
index 0000000..b461ad3
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricPortStatisticsDiscovery.java
@@ -0,0 +1,47 @@
+/*
+ * 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.pipelines.fabric.impl.behaviour;
+
+
+import org.onosproject.net.pi.model.PiCounterId;
+import org.onosproject.pipelines.basic.PortStatisticsDiscoveryImpl;
+
+/**
+ * Implementation of the PortStatisticsBehaviour for fabric.p4.
+ */
+public class FabricPortStatisticsDiscovery extends PortStatisticsDiscoveryImpl {
+
+ /**
+ * Returns the ID of the ingress port counter.
+ *
+ * @return counter ID
+ */
+ @Override
+ public PiCounterId ingressCounterId() {
+ return FabricConstants.FABRIC_INGRESS_PORT_COUNTERS_CONTROL_INGRESS_PORT_COUNTER;
+ }
+
+ /**
+ * Returns the ID of the egress port counter.
+ *
+ * @return counter ID
+ */
+ @Override
+ public PiCounterId egressCounterId() {
+ return FabricConstants.FABRIC_INGRESS_PORT_COUNTERS_CONTROL_EGRESS_PORT_COUNTER;
+ }
+}
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricTreatmentInterpreter.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricTreatmentInterpreter.java
new file mode 100644
index 0000000..78ef9a7
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricTreatmentInterpreter.java
@@ -0,0 +1,293 @@
+/*
+ * 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.pipelines.fabric.impl.behaviour;
+
+import com.google.common.collect.ImmutableMap;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.flow.DefaultTrafficTreatment;
+import org.onosproject.net.flow.TrafficTreatment;
+import org.onosproject.net.flow.instructions.Instruction;
+import org.onosproject.net.flow.instructions.Instructions.OutputInstruction;
+import org.onosproject.net.flow.instructions.L2ModificationInstruction;
+import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModEtherInstruction;
+import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModMplsLabelInstruction;
+import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModVlanIdInstruction;
+import org.onosproject.net.pi.model.PiActionId;
+import org.onosproject.net.pi.model.PiPipelineInterpreter.PiInterpreterException;
+import org.onosproject.net.pi.model.PiTableId;
+import org.onosproject.net.pi.runtime.PiAction;
+import org.onosproject.net.pi.runtime.PiActionParam;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static java.lang.String.format;
+import static org.onosproject.net.flow.instructions.Instruction.Type.OUTPUT;
+import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.ETH_DST;
+import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.ETH_SRC;
+import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.MPLS_LABEL;
+import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.MPLS_PUSH;
+import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.VLAN_ID;
+import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.VLAN_POP;
+import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.instruction;
+import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.l2Instruction;
+import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.l2Instructions;
+
+/**
+ * Treatment translation logic.
+ */
+final class FabricTreatmentInterpreter {
+
+ private final FabricCapabilities capabilities;
+ private static final ImmutableMap<PiTableId, PiActionId> NOP_ACTIONS =
+ ImmutableMap.<PiTableId, PiActionId>builder()
+ .put(FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN,
+ FabricConstants.FABRIC_INGRESS_FILTERING_PERMIT)
+ .put(FabricConstants.FABRIC_INGRESS_FORWARDING_ROUTING_V4,
+ FabricConstants.FABRIC_INGRESS_FORWARDING_NOP_ROUTING_V4)
+ .put(FabricConstants.FABRIC_INGRESS_ACL_ACL,
+ FabricConstants.FABRIC_INGRESS_ACL_NOP_ACL)
+ .put(FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN,
+ FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_POP_VLAN)
+ .build();
+
+
+ FabricTreatmentInterpreter(FabricCapabilities capabilities) {
+ this.capabilities = capabilities;
+ }
+
+ static PiAction mapFilteringTreatment(TrafficTreatment treatment, PiTableId tableId)
+ throws PiInterpreterException {
+
+ if (!tableId.equals(FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN)) {
+ // Mapping for other tables of the filtering block must be handled
+ // in the pipeliner.
+ tableException(tableId);
+ }
+
+ // VLAN_POP action is equivalent to the permit action (VLANs pop is done anyway)
+ if (isNoAction(treatment) || isFilteringPopAction(treatment)) {
+ // Permit action if table is ingress_port_vlan;
+ return nop(tableId);
+ }
+
+ final ModVlanIdInstruction setVlanInst = (ModVlanIdInstruction) l2InstructionOrFail(
+ treatment, VLAN_ID, tableId);
+ return PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_FILTERING_PERMIT_WITH_INTERNAL_VLAN)
+ .withParameter(new PiActionParam(
+ FabricConstants.VLAN_ID, setVlanInst.vlanId().toShort()))
+ .build();
+ }
+
+
+ static PiAction mapForwardingTreatment(TrafficTreatment treatment, PiTableId tableId)
+ throws PiInterpreterException {
+ if (isNoAction(treatment)) {
+ return nop(tableId);
+ }
+ treatmentException(
+ tableId, treatment,
+ "supports mapping only for empty/no-action treatments");
+ return null;
+ }
+
+ PiAction mapNextTreatment(TrafficTreatment treatment, PiTableId tableId)
+ throws PiInterpreterException {
+ if (tableId == FabricConstants.FABRIC_INGRESS_NEXT_NEXT_VLAN) {
+ return mapNextVlanTreatment(treatment, tableId);
+ } else if (tableId == FabricConstants.FABRIC_INGRESS_NEXT_HASHED) {
+ return mapNextHashedOrSimpleTreatment(treatment, tableId, false);
+ } else if (tableId == FabricConstants.FABRIC_INGRESS_NEXT_SIMPLE) {
+ return mapNextHashedOrSimpleTreatment(treatment, tableId, true);
+ } else if (tableId == FabricConstants.FABRIC_INGRESS_NEXT_XCONNECT) {
+ return mapNextXconnect(treatment, tableId);
+ }
+ throw new PiInterpreterException(format(
+ "Treatment mapping not supported for table '%s'", tableId));
+ }
+
+ private PiAction mapNextVlanTreatment(TrafficTreatment treatment, PiTableId tableId)
+ throws PiInterpreterException {
+ final List<ModVlanIdInstruction> modVlanIdInst = l2InstructionsOrFail(treatment, VLAN_ID, tableId)
+ .stream().map(i -> (ModVlanIdInstruction) i).collect(Collectors.toList());
+ if (modVlanIdInst.size() == 1) {
+ return PiAction.builder().withId(FabricConstants.FABRIC_INGRESS_NEXT_SET_VLAN)
+ .withParameter(new PiActionParam(
+ FabricConstants.VLAN_ID,
+ modVlanIdInst.get(0).vlanId().toShort()))
+ .build();
+ }
+ if (modVlanIdInst.size() == 2 && capabilities.supportDoubleVlanTerm()) {
+ return PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_NEXT_SET_DOUBLE_VLAN)
+ .withParameter(new PiActionParam(
+ FabricConstants.INNER_VLAN_ID,
+ modVlanIdInst.get(0).vlanId().toShort()))
+ .withParameter(new PiActionParam(
+ FabricConstants.OUTER_VLAN_ID,
+ modVlanIdInst.get(1).vlanId().toShort()))
+ .build();
+ }
+ throw new PiInterpreterException("Too many VLAN instructions");
+ }
+
+ private static PiAction mapNextHashedOrSimpleTreatment(
+ TrafficTreatment treatment, PiTableId tableId, boolean simple)
+ throws PiInterpreterException {
+ // Provide mapping for output_hashed, routing_hashed, and
+ // mpls_routing_hashed. multicast_hashed can only be invoked with
+ // PiAction, hence no mapping. outPort required for all actions. Presence
+ // of other instructions will determine which action to map to.
+ final PortNumber outPort = ((OutputInstruction) instructionOrFail(
+ treatment, OUTPUT, tableId)).port();
+ final ModEtherInstruction ethDst = (ModEtherInstruction) l2Instruction(
+ treatment, ETH_DST);
+ final ModEtherInstruction ethSrc = (ModEtherInstruction) l2Instruction(
+ treatment, ETH_SRC);
+ final Instruction mplsPush = l2Instruction(
+ treatment, MPLS_PUSH);
+ final ModMplsLabelInstruction mplsLabel = (ModMplsLabelInstruction) l2Instruction(
+ treatment, MPLS_LABEL);
+
+ final PiAction.Builder actionBuilder = PiAction.builder()
+ .withParameter(new PiActionParam(FabricConstants.PORT_NUM, outPort.toLong()));
+
+ if (ethDst != null && ethSrc != null) {
+ actionBuilder.withParameter(new PiActionParam(
+ FabricConstants.SMAC, ethSrc.mac().toBytes()));
+ actionBuilder.withParameter(new PiActionParam(
+ FabricConstants.DMAC, ethDst.mac().toBytes()));
+ if (mplsLabel != null) {
+ // mpls_routing_hashed
+ return actionBuilder
+ .withParameter(new PiActionParam(FabricConstants.LABEL, mplsLabel.label().toInt()))
+ .withId(simple ? FabricConstants.FABRIC_INGRESS_NEXT_MPLS_ROUTING_SIMPLE
+ : FabricConstants.FABRIC_INGRESS_NEXT_MPLS_ROUTING_HASHED)
+ .build();
+ } else {
+ // routing_hashed
+ return actionBuilder
+ .withId(simple ? FabricConstants.FABRIC_INGRESS_NEXT_ROUTING_SIMPLE
+ : FabricConstants.FABRIC_INGRESS_NEXT_ROUTING_HASHED)
+ .build();
+ }
+ } else {
+ // output_hashed
+ return actionBuilder
+ .withId(simple ? FabricConstants.FABRIC_INGRESS_NEXT_OUTPUT_SIMPLE
+ : FabricConstants.FABRIC_INGRESS_NEXT_OUTPUT_HASHED)
+ .build();
+ }
+ }
+
+ private static PiAction mapNextXconnect(
+ TrafficTreatment treatment, PiTableId tableId)
+ throws PiInterpreterException {
+ final PortNumber outPort = ((OutputInstruction) instructionOrFail(
+ treatment, OUTPUT, tableId)).port();
+ return PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_NEXT_OUTPUT_XCONNECT)
+ .withParameter(new PiActionParam(
+ FabricConstants.PORT_NUM, outPort.toLong()))
+ .build();
+ }
+
+ static PiAction mapAclTreatment(TrafficTreatment treatment, PiTableId tableId)
+ throws PiInterpreterException {
+ if (isNoAction(treatment)) {
+ return nop(tableId);
+ }
+ treatmentException(
+ tableId, treatment,
+ "unsupported treatment");
+
+ // This function will never return null
+ return null;
+ }
+
+
+ static PiAction mapEgressNextTreatment(
+ TrafficTreatment treatment, PiTableId tableId)
+ throws PiInterpreterException {
+ l2InstructionOrFail(treatment, VLAN_POP, tableId);
+ return PiAction.builder()
+ .withId(FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_POP_VLAN)
+ .build();
+
+ }
+
+ private static PiAction nop(PiTableId tableId) throws PiInterpreterException {
+ if (!NOP_ACTIONS.containsKey(tableId)) {
+ throw new PiInterpreterException(format("table '%s' doe not specify a nop action", tableId));
+ }
+ return PiAction.builder().withId(NOP_ACTIONS.get(tableId)).build();
+ }
+
+ private static boolean isNoAction(TrafficTreatment treatment) {
+ return treatment.equals(DefaultTrafficTreatment.emptyTreatment()) ||
+ treatment.allInstructions().isEmpty();
+ }
+
+ private static boolean isFilteringPopAction(TrafficTreatment treatment) {
+ return l2Instruction(treatment, VLAN_POP) != null;
+ }
+
+ private static Instruction l2InstructionOrFail(
+ TrafficTreatment treatment,
+ L2ModificationInstruction.L2SubType subType, PiTableId tableId)
+ throws PiInterpreterException {
+ final Instruction inst = l2Instruction(treatment, subType);
+ if (inst == null) {
+ treatmentException(tableId, treatment, format("missing %s instruction", subType));
+ }
+ return inst;
+ }
+
+ private static List<L2ModificationInstruction> l2InstructionsOrFail(
+ TrafficTreatment treatment,
+ L2ModificationInstruction.L2SubType subType, PiTableId tableId)
+ throws PiInterpreterException {
+ final List<L2ModificationInstruction> inst = l2Instructions(treatment, subType);
+ if (inst == null || inst.isEmpty()) {
+ treatmentException(tableId, treatment, format("missing %s instruction", subType));
+ }
+ return inst;
+ }
+
+ private static Instruction instructionOrFail(
+ TrafficTreatment treatment, Instruction.Type type, PiTableId tableId)
+ throws PiInterpreterException {
+ final Instruction inst = instruction(treatment, type);
+ if (inst == null) {
+ treatmentException(tableId, treatment, format("missing %s instruction", type));
+ }
+ return inst;
+ }
+
+ private static void tableException(PiTableId tableId)
+ throws PiInterpreterException {
+ throw new PiInterpreterException(format("Table '%s' not supported", tableId));
+ }
+
+ private static void treatmentException(
+ PiTableId tableId, TrafficTreatment treatment, String explanation)
+ throws PiInterpreterException {
+ throw new PiInterpreterException(format(
+ "Invalid treatment for table '%s', %s: %s", tableId, explanation, treatment));
+ }
+}
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricUtils.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricUtils.java
new file mode 100644
index 0000000..655f88d
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricUtils.java
@@ -0,0 +1,107 @@
+/*
+ * 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.pipelines.fabric.impl.behaviour;
+
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.flow.TrafficSelector;
+import org.onosproject.net.flow.TrafficTreatment;
+import org.onosproject.net.flow.criteria.Criterion;
+import org.onosproject.net.flow.instructions.Instruction;
+import org.onosproject.net.flow.instructions.Instructions;
+import org.onosproject.net.flow.instructions.L2ModificationInstruction;
+import org.onosproject.net.flowobjective.DefaultNextTreatment;
+import org.onosproject.net.flowobjective.NextTreatment;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static java.lang.String.format;
+
+/**
+ * Utility class with methods common to fabric pipeconf operations.
+ */
+public final class FabricUtils {
+
+ private FabricUtils() {
+ // Hides constructor.
+ }
+
+ public static Criterion criterion(Collection<Criterion> criteria, Criterion.Type type) {
+ return criteria.stream()
+ .filter(c -> c.type().equals(type))
+ .findFirst().orElse(null);
+ }
+
+ public static Criterion criterion(TrafficSelector selector, Criterion.Type type) {
+ return selector.getCriterion(type);
+ }
+
+ public static Criterion criterionNotNull(TrafficSelector selector, Criterion.Type type) {
+ return checkNotNull(criterion(selector, type),
+ format("%s criterion cannot be null", type));
+ }
+
+ public static Criterion criterionNotNull(Collection<Criterion> criteria, Criterion.Type type) {
+ return checkNotNull(criterion(criteria, type),
+ format("%s criterion cannot be null", type));
+ }
+
+ public static Instructions.OutputInstruction instruction(TrafficTreatment treatment, Instruction.Type type) {
+ return treatment.allInstructions()
+ .stream()
+ .filter(inst -> inst.type() == type)
+ .map(inst -> (Instructions.OutputInstruction) inst)
+ .findFirst().orElse(null);
+ }
+
+ public static L2ModificationInstruction l2Instruction(
+ TrafficTreatment treatment, L2ModificationInstruction.L2SubType subType) {
+ return treatment.allInstructions().stream()
+ .filter(i -> i.type().equals(Instruction.Type.L2MODIFICATION))
+ .map(i -> (L2ModificationInstruction) i)
+ .filter(i -> i.subtype().equals(subType))
+ .findFirst().orElse(null);
+ }
+
+ public static List<L2ModificationInstruction> l2Instructions(
+ TrafficTreatment treatment, L2ModificationInstruction.L2SubType subType) {
+ return treatment.allInstructions().stream()
+ .filter(i -> i.type().equals(Instruction.Type.L2MODIFICATION))
+ .map(i -> (L2ModificationInstruction) i)
+ .filter(i -> i.subtype().equals(subType))
+ .collect(Collectors.toList());
+ }
+
+ public static Instructions.OutputInstruction outputInstruction(TrafficTreatment treatment) {
+ return instruction(treatment, Instruction.Type.OUTPUT);
+ }
+
+ public static PortNumber outputPort(TrafficTreatment treatment) {
+ final Instructions.OutputInstruction inst = outputInstruction(treatment);
+ return inst == null ? null : inst.port();
+ }
+
+ public static PortNumber outputPort(NextTreatment treatment) {
+ if (treatment.type() == NextTreatment.Type.TREATMENT) {
+ final DefaultNextTreatment t = (DefaultNextTreatment) treatment;
+ return outputPort(t.treatment());
+ }
+ return null;
+ }
+}
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/package-info.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/package-info.java
new file mode 100644
index 0000000..75586a1
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+
+/**
+ * Fabric pipeconf behaviour implementations.
+ */
+package org.onosproject.pipelines.fabric.impl.behaviour;
\ No newline at end of file
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/AbstractObjectiveTranslator.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/AbstractObjectiveTranslator.java
new file mode 100644
index 0000000..5b9671f
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/AbstractObjectiveTranslator.java
@@ -0,0 +1,107 @@
+/*
+ * 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.pipelines.fabric.impl.behaviour.pipeliner;
+
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.flow.DefaultFlowRule;
+import org.onosproject.net.flow.DefaultTrafficTreatment;
+import org.onosproject.net.flow.FlowRule;
+import org.onosproject.net.flow.TrafficSelector;
+import org.onosproject.net.flow.TrafficTreatment;
+import org.onosproject.net.flow.instructions.Instruction;
+import org.onosproject.net.flowobjective.Objective;
+import org.onosproject.net.flowobjective.ObjectiveError;
+import org.onosproject.net.pi.model.PiPipelineInterpreter;
+import org.onosproject.net.pi.model.PiTableId;
+import org.onosproject.net.pi.runtime.PiAction;
+import org.onosproject.pipelines.fabric.impl.behaviour.FabricCapabilities;
+import org.onosproject.pipelines.fabric.impl.behaviour.FabricInterpreter;
+import org.slf4j.Logger;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static java.lang.String.format;
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Abstract implementation of a pipeliner logic for the fabric pipeconf.
+ */
+abstract class AbstractObjectiveTranslator<T extends Objective> {
+
+ protected final Logger log = getLogger(this.getClass());
+
+ protected final FabricCapabilities capabilities;
+ protected final DeviceId deviceId;
+
+ private final PiPipelineInterpreter interpreter;
+
+ AbstractObjectiveTranslator(DeviceId deviceId, FabricCapabilities capabilities) {
+ this.deviceId = checkNotNull(deviceId);
+ this.capabilities = checkNotNull(capabilities);
+ this.interpreter = new FabricInterpreter(capabilities);
+ }
+
+ public ObjectiveTranslation translate(T obj) {
+ try {
+ return doTranslate(obj);
+ } catch (FabricPipelinerException e) {
+ log.warn("Cannot translate {}: {} [{}]",
+ obj.getClass().getSimpleName(), e.getMessage(), obj);
+ return ObjectiveTranslation.ofError(e.objectiveError());
+ }
+ }
+
+ public abstract ObjectiveTranslation doTranslate(T obj)
+ throws FabricPipelinerException;
+
+ public FlowRule flowRule(T obj, PiTableId tableId, TrafficSelector selector,
+ TrafficTreatment treatment)
+ throws FabricPipelinerException {
+ return DefaultFlowRule.builder()
+ .withSelector(selector)
+ .withTreatment(mapTreatmentToPiIfNeeded(treatment, tableId))
+ .forTable(tableId)
+ .makePermanent()
+ .withPriority(obj.priority())
+ .forDevice(deviceId)
+ .fromApp(obj.appId())
+ .build();
+ }
+
+ TrafficTreatment mapTreatmentToPiIfNeeded(TrafficTreatment treatment, PiTableId tableId)
+ throws FabricPipelinerException {
+ if (isTreatmentPi(treatment)) {
+ return treatment;
+ }
+ final PiAction piAction;
+ try {
+ piAction = interpreter.mapTreatment(treatment, tableId);
+ } catch (PiPipelineInterpreter.PiInterpreterException ex) {
+ throw new FabricPipelinerException(
+ format("Unable to map treatment for table '%s': %s",
+ tableId, ex.getMessage()),
+ ObjectiveError.UNSUPPORTED);
+ }
+ return DefaultTrafficTreatment.builder()
+ .piTableAction(piAction)
+ .build();
+ }
+
+ private boolean isTreatmentPi(TrafficTreatment treatment) {
+ return treatment.allInstructions().size() == 1
+ && treatment.allInstructions().get(0).type() == Instruction.Type.PROTOCOL_INDEPENDENT;
+ }
+}
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/Commons.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/Commons.java
new file mode 100644
index 0000000..b288eb4
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/Commons.java
@@ -0,0 +1,43 @@
+/*
+ * 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.pipelines.fabric.impl.behaviour.pipeliner;
+
+import org.onlab.packet.EthType;
+import org.onlab.packet.MacAddress;
+import org.onosproject.net.flow.criteria.Criteria;
+import org.onosproject.net.flow.criteria.Criterion;
+
+/**
+ * Constants common to ForwardingFunctionType operations.
+ */
+final class Commons {
+
+ static final Criterion MATCH_ETH_TYPE_IPV4 = Criteria.matchEthType(
+ EthType.EtherType.IPV4.ethType());
+ static final Criterion MATCH_ETH_TYPE_IPV6 = Criteria.matchEthType(
+ EthType.EtherType.IPV6.ethType());
+ static final Criterion MATCH_ETH_DST_NONE = Criteria.matchEthDst(
+ MacAddress.NONE);
+ static final Criterion MATCH_ETH_TYPE_MPLS = Criteria.matchEthType(
+ EthType.EtherType.MPLS_UNICAST.ethType());
+ static final Criterion MATCH_MPLS_BOS_TRUE = Criteria.matchMplsBos(true);
+ static final Criterion MATCH_MPLS_BOS_FALSE = Criteria.matchMplsBos(false);
+
+ private Commons() {
+ // hides constructor.
+ }
+}
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipeliner.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipeliner.java
new file mode 100644
index 0000000..eac2116
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipeliner.java
@@ -0,0 +1,302 @@
+/*
+ * 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.pipelines.fabric.impl.behaviour.pipeliner;
+
+import com.google.common.collect.ImmutableList;
+import org.onlab.util.KryoNamespace;
+import org.onlab.util.SharedExecutors;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.behaviour.NextGroup;
+import org.onosproject.net.behaviour.Pipeliner;
+import org.onosproject.net.behaviour.PipelinerContext;
+import org.onosproject.net.flow.FlowRule;
+import org.onosproject.net.flow.FlowRuleOperations;
+import org.onosproject.net.flow.FlowRuleService;
+import org.onosproject.net.flowobjective.FilteringObjective;
+import org.onosproject.net.flowobjective.FlowObjectiveStore;
+import org.onosproject.net.flowobjective.ForwardingObjective;
+import org.onosproject.net.flowobjective.IdNextTreatment;
+import org.onosproject.net.flowobjective.NextObjective;
+import org.onosproject.net.flowobjective.NextTreatment;
+import org.onosproject.net.flowobjective.Objective;
+import org.onosproject.net.flowobjective.ObjectiveError;
+import org.onosproject.net.group.GroupDescription;
+import org.onosproject.net.group.GroupService;
+import org.onosproject.pipelines.fabric.impl.behaviour.AbstractFabricHandlerBehavior;
+import org.onosproject.pipelines.fabric.impl.behaviour.FabricCapabilities;
+import org.onosproject.store.serializers.KryoNamespaces;
+import org.slf4j.Logger;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Objects;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutorService;
+import java.util.stream.Collectors;
+
+import static java.lang.String.format;
+import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.outputPort;
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Pipeliner implementation for fabric pipeline which uses ObjectiveTranslator
+ * implementations to translate flow objectives for the different blocks,
+ * filtering, forwarding and next.
+ */
+public class FabricPipeliner extends AbstractFabricHandlerBehavior
+ implements Pipeliner {
+
+ private static final Logger log = getLogger(FabricPipeliner.class);
+
+ protected static final KryoNamespace KRYO = new KryoNamespace.Builder()
+ .register(KryoNamespaces.API)
+ .register(FabricNextGroup.class)
+ .build("FabricPipeliner");
+
+ protected DeviceId deviceId;
+ protected FlowRuleService flowRuleService;
+ protected GroupService groupService;
+ protected FlowObjectiveStore flowObjectiveStore;
+
+ private FilteringObjectiveTranslator filteringTranslator;
+ private ForwardingObjectiveTranslator forwardingTranslator;
+ private NextObjectiveTranslator nextTranslator;
+
+ private final ExecutorService callbackExecutor = SharedExecutors.getPoolThreadExecutor();
+
+ /**
+ * Creates a new instance of this behavior with the given capabilities.
+ *
+ * @param capabilities capabilities
+ */
+ public FabricPipeliner(FabricCapabilities capabilities) {
+ super(capabilities);
+ }
+
+ /**
+ * Create a new instance of this behaviour. Used by the abstract projectable
+ * model (i.e., {@link org.onosproject.net.Device#as(Class)}.
+ */
+ public FabricPipeliner() {
+ super();
+ }
+
+ @Override
+ public void init(DeviceId deviceId, PipelinerContext context) {
+ this.deviceId = deviceId;
+ this.flowRuleService = context.directory().get(FlowRuleService.class);
+ this.groupService = context.directory().get(GroupService.class);
+ this.flowObjectiveStore = context.directory().get(FlowObjectiveStore.class);
+ this.filteringTranslator = new FilteringObjectiveTranslator(deviceId, capabilities);
+ this.forwardingTranslator = new ForwardingObjectiveTranslator(deviceId, capabilities);
+ this.nextTranslator = new NextObjectiveTranslator(deviceId, capabilities);
+ }
+
+ @Override
+ public void filter(FilteringObjective obj) {
+ final ObjectiveTranslation result = filteringTranslator.translate(obj);
+ handleResult(obj, result);
+ }
+
+ @Override
+ public void forward(ForwardingObjective obj) {
+ final ObjectiveTranslation result = forwardingTranslator.translate(obj);
+ handleResult(obj, result);
+ }
+
+ @Override
+ public void next(NextObjective obj) {
+ if (obj.op() == Objective.Operation.VERIFY) {
+ // TODO: support VERIFY operation
+ log.debug("VERIFY operation not yet supported for NextObjective, will return success");
+ success(obj);
+ return;
+ }
+
+ if (obj.op() == Objective.Operation.MODIFY) {
+ // TODO: support MODIFY operation
+ log.warn("MODIFY operation not yet supported for NextObjective, will return failure :(");
+ fail(obj, ObjectiveError.UNSUPPORTED);
+ return;
+ }
+
+ final ObjectiveTranslation result = nextTranslator.translate(obj);
+ handleResult(obj, result);
+ }
+
+ @Override
+ public List<String> getNextMappings(NextGroup nextGroup) {
+ final FabricNextGroup fabricNextGroup = KRYO.deserialize(nextGroup.data());
+ return fabricNextGroup.nextMappings().stream()
+ .map(m -> format("%s -> %s", fabricNextGroup.type(), m))
+ .collect(Collectors.toList());
+ }
+
+ private void handleResult(Objective obj, ObjectiveTranslation result) {
+ if (result.error().isPresent()) {
+ fail(obj, result.error().get());
+ return;
+ }
+ processGroups(obj, result.groups());
+ processFlows(obj, result.flowRules());
+ if (obj instanceof NextObjective) {
+ handleNextGroup((NextObjective) obj);
+ }
+ success(obj);
+ }
+
+ private void handleNextGroup(NextObjective obj) {
+ switch (obj.op()) {
+ case REMOVE:
+ removeNextGroup(obj);
+ break;
+ case ADD:
+ case ADD_TO_EXISTING:
+ case REMOVE_FROM_EXISTING:
+ case MODIFY:
+ putNextGroup(obj);
+ break;
+ case VERIFY:
+ break;
+ default:
+ log.error("Unknown NextObjective operation '{}'", obj.op());
+ }
+ }
+
+ private void processFlows(Objective objective, Collection<FlowRule> flowRules) {
+ if (flowRules.isEmpty()) {
+ return;
+ }
+ final FlowRuleOperations.Builder ops = FlowRuleOperations.builder();
+ switch (objective.op()) {
+ case ADD:
+ case ADD_TO_EXISTING:
+ flowRules.forEach(ops::add);
+ break;
+ case REMOVE:
+ case REMOVE_FROM_EXISTING:
+ flowRules.forEach(ops::remove);
+ break;
+ default:
+ log.warn("Unsupported Objective operation '{}'", objective.op());
+ return;
+ }
+ flowRuleService.apply(ops.build());
+ }
+
+ private void processGroups(Objective objective, Collection<GroupDescription> groups) {
+ if (groups.isEmpty()) {
+ return;
+ }
+ switch (objective.op()) {
+ case ADD:
+ groups.forEach(groupService::addGroup);
+ break;
+ case REMOVE:
+ groups.forEach(group -> groupService.removeGroup(
+ deviceId, group.appCookie(), objective.appId()));
+ break;
+ case ADD_TO_EXISTING:
+ groups.forEach(group -> groupService.addBucketsToGroup(
+ deviceId, group.appCookie(), group.buckets(),
+ group.appCookie(), group.appId())
+ );
+ break;
+ case REMOVE_FROM_EXISTING:
+ groups.forEach(group -> groupService.removeBucketsFromGroup(
+ deviceId, group.appCookie(), group.buckets(),
+ group.appCookie(), group.appId())
+ );
+ break;
+ default:
+ log.warn("Unsupported Objective operation {}", objective.op());
+ }
+ }
+
+ private void fail(Objective objective, ObjectiveError error) {
+ CompletableFuture.runAsync(
+ () -> objective.context().ifPresent(
+ ctx -> ctx.onError(objective, error)), callbackExecutor);
+
+ }
+
+
+ private void success(Objective objective) {
+ CompletableFuture.runAsync(
+ () -> objective.context().ifPresent(
+ ctx -> ctx.onSuccess(objective)), callbackExecutor);
+ }
+
+ private void removeNextGroup(NextObjective obj) {
+ final NextGroup removed = flowObjectiveStore.removeNextGroup(obj.id());
+ if (removed == null) {
+ log.debug("NextGroup {} was not found in FlowObjectiveStore");
+ }
+ }
+
+ private void putNextGroup(NextObjective obj) {
+ final List<String> nextMappings = obj.nextTreatments().stream()
+ .map(this::nextTreatmentToMappingString)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
+ final FabricNextGroup nextGroup = new FabricNextGroup(obj.type(), nextMappings);
+ flowObjectiveStore.putNextGroup(obj.id(), nextGroup);
+ }
+
+ private String nextTreatmentToMappingString(NextTreatment n) {
+ switch (n.type()) {
+ case TREATMENT:
+ final PortNumber p = outputPort(n);
+ return p == null ? "UNKNOWN"
+ : format("OUTPUT:%s", p.toString());
+ case ID:
+ final IdNextTreatment id = (IdNextTreatment) n;
+ return format("NEXT_ID:%d", id.nextId());
+ default:
+ log.warn("Unknown NextTreatment type '{}'", n.type());
+ return "???";
+ }
+ }
+
+ /**
+ * NextGroup implementation.
+ */
+ private static class FabricNextGroup implements NextGroup {
+
+ private final NextObjective.Type type;
+ private final List<String> nextMappings;
+
+ FabricNextGroup(NextObjective.Type type, List<String> nextMappings) {
+ this.type = type;
+ this.nextMappings = ImmutableList.copyOf(nextMappings);
+ }
+
+ NextObjective.Type type() {
+ return type;
+ }
+
+ Collection<String> nextMappings() {
+ return nextMappings;
+ }
+
+ @Override
+ public byte[] data() {
+ return KRYO.serialize(this);
+ }
+ }
+}
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipelinerException.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipelinerException.java
new file mode 100644
index 0000000..6755e75
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipelinerException.java
@@ -0,0 +1,58 @@
+/*
+ * 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.pipelines.fabric.impl.behaviour.pipeliner;
+
+import org.onosproject.net.flowobjective.ObjectiveError;
+
+/**
+ * Signals an exception when translating a flow objective.
+ */
+class FabricPipelinerException extends Exception {
+
+ private final ObjectiveError error;
+
+ /**
+ * Creates a new exception for the given message. Sets ObjectiveError to
+ * UNSUPPORTED.
+ *
+ * @param message message
+ */
+ FabricPipelinerException(String message) {
+ super(message);
+ this.error = ObjectiveError.UNSUPPORTED;
+ }
+
+ /**
+ * Creates a new exception for the given message and ObjectiveError.
+ *
+ * @param message message
+ * @param error objective error
+ */
+ FabricPipelinerException(String message, ObjectiveError error) {
+ super(message);
+ this.error = error;
+ }
+
+ /**
+ * Returns the ObjectiveError of this exception.
+ *
+ * @return objective error
+ */
+ ObjectiveError objectiveError() {
+ return error;
+ }
+}
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslator.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslator.java
new file mode 100644
index 0000000..d682d8c
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FilteringObjectiveTranslator.java
@@ -0,0 +1,278 @@
+/*
+ * 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.pipelines.fabric.impl.behaviour.pipeliner;
+
+import com.google.common.collect.Lists;
+import org.onlab.packet.EthType;
+import org.onlab.packet.Ethernet;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.flow.DefaultTrafficSelector;
+import org.onosproject.net.flow.DefaultTrafficTreatment;
+import org.onosproject.net.flow.FlowRule;
+import org.onosproject.net.flow.TrafficSelector;
+import org.onosproject.net.flow.TrafficTreatment;
+import org.onosproject.net.flow.criteria.Criterion;
+import org.onosproject.net.flow.criteria.EthCriterion;
+import org.onosproject.net.flow.criteria.PiCriterion;
+import org.onosproject.net.flow.criteria.PortCriterion;
+import org.onosproject.net.flow.criteria.VlanIdCriterion;
+import org.onosproject.net.flowobjective.FilteringObjective;
+import org.onosproject.net.flowobjective.ObjectiveError;
+import org.onosproject.net.pi.runtime.PiAction;
+import org.onosproject.net.pi.runtime.PiActionParam;
+import org.onosproject.pipelines.fabric.impl.behaviour.FabricCapabilities;
+import org.onosproject.pipelines.fabric.impl.behaviour.FabricConstants;
+
+import java.util.Collection;
+import java.util.List;
+
+import static java.lang.String.format;
+import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.criterion;
+
+/**
+ * ObjectiveTranslator implementation for FilteringObjective.
+ */
+class FilteringObjectiveTranslator
+ extends AbstractObjectiveTranslator<FilteringObjective> {
+
+ // Forwarding types from fabric.p4.
+ static final byte FWD_MPLS = 1;
+ static final byte FWD_IPV4_ROUTING = 2;
+ static final byte FWD_IPV6_ROUTING = 3;
+
+ private static final byte[] ONE = new byte[]{1};
+ private static final byte[] ZERO = new byte[]{0};
+
+ private static final PiAction DENY = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_FILTERING_DENY)
+ .build();
+
+
+ FilteringObjectiveTranslator(DeviceId deviceId, FabricCapabilities capabilities) {
+ super(deviceId, capabilities);
+ }
+
+ @Override
+ public ObjectiveTranslation doTranslate(FilteringObjective obj)
+ throws FabricPipelinerException {
+
+ final ObjectiveTranslation.Builder resultBuilder =
+ ObjectiveTranslation.builder();
+
+ if (obj.key() == null || obj.key().type() != Criterion.Type.IN_PORT) {
+ throw new FabricPipelinerException(
+ format("Unsupported or missing filtering key: key=%s", obj.key()),
+ ObjectiveError.BADPARAMS);
+ }
+
+ final PortCriterion inPort = (PortCriterion) obj.key();
+
+ final VlanIdCriterion outerVlan = (VlanIdCriterion) criterion(
+ obj.conditions(), Criterion.Type.VLAN_VID);
+ final VlanIdCriterion innerVlan = (VlanIdCriterion) criterion(
+ obj.conditions(), Criterion.Type.INNER_VLAN_VID);
+ final EthCriterion ethDst = (EthCriterion) criterion(
+ obj.conditions(), Criterion.Type.ETH_DST);
+ final EthCriterion ethDstMasked = (EthCriterion) criterion(
+ obj.conditions(), Criterion.Type.ETH_DST_MASKED);
+
+ ingressPortVlanRule(obj, inPort, outerVlan, innerVlan, resultBuilder);
+ fwdClassifierRules(obj, inPort, ethDst, ethDstMasked, resultBuilder);
+
+ return resultBuilder.build();
+ }
+
+ private void ingressPortVlanRule(
+ FilteringObjective obj,
+ Criterion inPortCriterion,
+ VlanIdCriterion outerVlanCriterion,
+ VlanIdCriterion innerVlanCriterion,
+ ObjectiveTranslation.Builder resultBuilder)
+ throws FabricPipelinerException {
+
+ final boolean outerVlanValid = outerVlanCriterion != null
+ && !outerVlanCriterion.vlanId().equals(VlanId.NONE);
+ final boolean innerVlanValid = innerVlanCriterion != null
+ && !innerVlanCriterion.vlanId().equals(VlanId.NONE);
+
+ final PiCriterion piCriterion = PiCriterion.builder()
+ .matchExact(FabricConstants.HDR_VLAN_IS_VALID, outerVlanValid ? ONE : ZERO)
+ .build();
+
+ final TrafficSelector.Builder selector = DefaultTrafficSelector.builder()
+ .add(inPortCriterion)
+ .add(piCriterion);
+ if (outerVlanValid) {
+ selector.add(outerVlanCriterion);
+ }
+ if (innerVlanValid) {
+ selector.add(innerVlanCriterion);
+ }
+
+ final TrafficTreatment treatment;
+ if (obj.type().equals(FilteringObjective.Type.DENY)) {
+ treatment = DefaultTrafficTreatment.builder()
+ .piTableAction(DENY)
+ .build();
+ } else {
+ treatment = obj.meta() == null
+ ? DefaultTrafficTreatment.emptyTreatment() : obj.meta();
+ }
+ resultBuilder.addFlowRule(flowRule(
+ obj, FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN,
+ selector.build(), treatment));
+ }
+
+ private void fwdClassifierRules(
+ FilteringObjective obj,
+ PortCriterion inPortCriterion,
+ EthCriterion ethDstCriterion,
+ EthCriterion ethDstMaskedCriterion,
+ ObjectiveTranslation.Builder resultBuilder)
+ throws FabricPipelinerException {
+
+ final List<FlowRule> flowRules = Lists.newArrayList();
+
+ final PortNumber inPort = inPortCriterion.port();
+ if (ethDstCriterion == null) {
+ if (ethDstMaskedCriterion == null) {
+ // No match. Do bridging (default action).
+ return;
+ }
+ // Masked fwd classifier rule
+ final MacAddress dstMac = ethDstMaskedCriterion.mac();
+ final MacAddress dstMacMask = ethDstMaskedCriterion.mask();
+ flowRules.add(maskedFwdClassifierRule(inPort, dstMac, dstMacMask, obj));
+ } else {
+ final MacAddress dstMac = ethDstCriterion.mac();
+ flowRules.addAll(ipFwdClassifierRules(inPort, dstMac, obj));
+ flowRules.add(mplsFwdClassifierRule(inPort, dstMac, obj));
+ }
+
+ for (FlowRule f : flowRules) {
+ resultBuilder.addFlowRule(f);
+ }
+ }
+
+ private FlowRule maskedFwdClassifierRule(
+ PortNumber inPort, MacAddress dstMac, MacAddress dstMacMask,
+ FilteringObjective obj)
+ throws FabricPipelinerException {
+ final TrafficTreatment treatment;
+ final short ethType;
+ if (dstMac.equals(MacAddress.IPV4_MULTICAST)
+ && dstMacMask.equals(MacAddress.IPV4_MULTICAST_MASK)) {
+ treatment = fwdClassifierTreatment(FWD_IPV4_ROUTING);
+ ethType = Ethernet.TYPE_IPV4;
+ } else if (dstMac.equals(MacAddress.IPV6_MULTICAST)
+ && dstMacMask.equals(MacAddress.IPV6_MULTICAST_MASK)) {
+ treatment = fwdClassifierTreatment(FWD_IPV6_ROUTING);
+ ethType = Ethernet.TYPE_IPV6;
+ } else {
+ throw new FabricPipelinerException(format(
+ "Unsupported masked Ethernet address for fwd " +
+ "classifier rule (mac=%s, mask=%s)",
+ dstMac, dstMacMask));
+ }
+ return fwdClassifierRule(inPort, ethType, dstMac, dstMacMask, treatment, obj);
+ }
+
+ private Collection<FlowRule> ipFwdClassifierRules(
+ PortNumber inPort, MacAddress dstMac, FilteringObjective obj)
+ throws FabricPipelinerException {
+ final Collection<FlowRule> flowRules = Lists.newArrayList();
+ flowRules.add(fwdClassifierRule(
+ inPort, Ethernet.TYPE_IPV4, dstMac, null,
+ fwdClassifierTreatment(FWD_IPV4_ROUTING), obj));
+ flowRules.add(fwdClassifierRule(
+ inPort, Ethernet.TYPE_IPV6, dstMac, null,
+ fwdClassifierTreatment(FWD_IPV6_ROUTING), obj));
+ return flowRules;
+ }
+
+ private FlowRule mplsFwdClassifierRule(
+ PortNumber inPort, MacAddress dstMac, FilteringObjective obj)
+ throws FabricPipelinerException {
+ return fwdClassifierRule(
+ inPort, Ethernet.MPLS_UNICAST, dstMac, null,
+ fwdClassifierTreatment(FWD_MPLS), obj);
+ }
+
+ private FlowRule fwdClassifierRule(
+ PortNumber inPort, short ethType, MacAddress dstMac, MacAddress dstMacMask,
+ TrafficTreatment treatment, FilteringObjective obj)
+ throws FabricPipelinerException {
+ final TrafficSelector selector = DefaultTrafficSelector.builder()
+ .matchInPort(inPort)
+ .matchPi(mapEthTypeFwdClassifier(ethType))
+ .matchEthDstMasked(dstMac, dstMacMask == null
+ ? MacAddress.EXACT_MASK : dstMacMask)
+ .build();
+ return flowRule(
+ obj, FabricConstants.FABRIC_INGRESS_FILTERING_FWD_CLASSIFIER,
+ selector, treatment);
+ }
+
+ private TrafficTreatment fwdClassifierTreatment(byte fwdType) {
+ final PiActionParam param = new PiActionParam(FabricConstants.FWD_TYPE, fwdType);
+ final PiAction action = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_FILTERING_SET_FORWARDING_TYPE)
+ .withParameter(param)
+ .build();
+ return DefaultTrafficTreatment.builder()
+ .piTableAction(action)
+ .build();
+
+ }
+
+ static PiCriterion mapEthTypeFwdClassifier(short ethType) {
+ // Map the Ethernet type to the validity bits of the fabric pipeline
+ switch (EthType.EtherType.lookup(ethType)) {
+ case IPV4: {
+ return PiCriterion.builder()
+ .matchExact(FabricConstants.HDR_IS_IPV4, ONE)
+ .matchExact(FabricConstants.HDR_IS_IPV6, ZERO)
+ .matchExact(FabricConstants.HDR_IS_MPLS, ZERO)
+ .build();
+ }
+ case IPV6: {
+ return PiCriterion.builder()
+ .matchExact(FabricConstants.HDR_IS_IPV4, ZERO)
+ .matchExact(FabricConstants.HDR_IS_IPV6, ONE)
+ .matchExact(FabricConstants.HDR_IS_MPLS, ZERO)
+ .build();
+ }
+ case MPLS_UNICAST: {
+ return PiCriterion.builder()
+ .matchExact(FabricConstants.HDR_IS_IPV4, ZERO)
+ .matchExact(FabricConstants.HDR_IS_IPV6, ZERO)
+ .matchExact(FabricConstants.HDR_IS_MPLS, ONE)
+ .build();
+ }
+ default: {
+ return PiCriterion.builder()
+ .matchExact(FabricConstants.HDR_IS_IPV4, ZERO)
+ .matchExact(FabricConstants.HDR_IS_IPV6, ZERO)
+ .matchExact(FabricConstants.HDR_IS_MPLS, ZERO)
+ .build();
+ }
+ }
+ }
+}
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingFunctionType.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingFunctionType.java
new file mode 100644
index 0000000..1e33fa5
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingFunctionType.java
@@ -0,0 +1,252 @@
+/*
+ * 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.pipelines.fabric.impl.behaviour.pipeliner;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import org.onosproject.net.flow.criteria.Criterion;
+import org.onosproject.net.flowobjective.ForwardingObjective;
+import org.slf4j.Logger;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import static org.onosproject.net.flow.criteria.Criterion.Type.ETH_DST;
+import static org.onosproject.net.flow.criteria.Criterion.Type.ETH_TYPE;
+import static org.onosproject.net.flow.criteria.Criterion.Type.IPV4_DST;
+import static org.onosproject.net.flow.criteria.Criterion.Type.IPV6_DST;
+import static org.onosproject.net.flow.criteria.Criterion.Type.MPLS_BOS;
+import static org.onosproject.net.flow.criteria.Criterion.Type.MPLS_LABEL;
+import static org.onosproject.net.flow.criteria.Criterion.Type.VLAN_VID;
+import static org.onosproject.pipelines.fabric.impl.behaviour.pipeliner.Commons.MATCH_ETH_DST_NONE;
+import static org.onosproject.pipelines.fabric.impl.behaviour.pipeliner.Commons.MATCH_ETH_TYPE_IPV4;
+import static org.onosproject.pipelines.fabric.impl.behaviour.pipeliner.Commons.MATCH_ETH_TYPE_IPV6;
+import static org.onosproject.pipelines.fabric.impl.behaviour.pipeliner.Commons.MATCH_ETH_TYPE_MPLS;
+import static org.onosproject.pipelines.fabric.impl.behaviour.pipeliner.Commons.MATCH_MPLS_BOS_FALSE;
+import static org.onosproject.pipelines.fabric.impl.behaviour.pipeliner.Commons.MATCH_MPLS_BOS_TRUE;
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Forwarding function types (FFTs) that can represent a given forwarding
+ * objective. Each FFT is defined by a subset of criterion types expected to be
+ * found in the selector of the given objective, and, optionally, by their
+ * respective values (criterion instances) to match or to mismatch.
+ */
+enum ForwardingFunctionType {
+ /**
+ * L2 unicast.
+ */
+ L2_UNICAST(
+ Sets.newHashSet(VLAN_VID, ETH_DST), // Expected criterion types.
+ Collections.emptyList(), // Criteria to match.
+ Lists.newArrayList(MATCH_ETH_DST_NONE)), // Criteria NOT to match.
+
+ /**
+ * L2 broadcast.
+ */
+ L2_BROADCAST(
+ Sets.newHashSet(VLAN_VID, ETH_DST),
+ Lists.newArrayList(MATCH_ETH_DST_NONE),
+ Collections.emptyList()),
+ L2_BROADCAST_ALIAS(
+ Sets.newHashSet(VLAN_VID),
+ Collections.emptyList(),
+ Collections.emptyList(),
+ L2_BROADCAST), // (Optional) FFT to return if selected.
+
+ /**
+ * IPv4 unicast.
+ */
+ IPV4_ROUTING(
+ Sets.newHashSet(ETH_TYPE, IPV4_DST),
+ Lists.newArrayList(MATCH_ETH_TYPE_IPV4),
+ Collections.emptyList()),
+
+ /**
+ * IPv4 multicast.
+ */
+ IPV4_ROUTING_MULTICAST(
+ Sets.newHashSet(ETH_TYPE, VLAN_VID, IPV4_DST),
+ Lists.newArrayList(MATCH_ETH_TYPE_IPV4),
+ Collections.emptyList()),
+
+ /**
+ * IPv6 unicast.
+ */
+ IPV6_ROUTING(
+ Sets.newHashSet(ETH_TYPE, IPV6_DST),
+ Lists.newArrayList(MATCH_ETH_TYPE_IPV6),
+ Collections.emptyList()),
+
+ /**
+ * IPv6 multicast.
+ */
+ IPV6_ROUTING_MULTICAST(
+ Sets.newHashSet(ETH_TYPE, VLAN_VID, IPV6_DST),
+ Lists.newArrayList(MATCH_ETH_TYPE_IPV6),
+ Collections.emptyList()),
+
+ /**
+ * MPLS segment routing.
+ */
+ MPLS_SEGMENT_ROUTING(
+ Sets.newHashSet(ETH_TYPE, MPLS_LABEL, MPLS_BOS),
+ Lists.newArrayList(MATCH_ETH_TYPE_MPLS, MATCH_MPLS_BOS_TRUE),
+ Collections.emptyList()),
+
+ /**
+ * Pseudo-wire.
+ */
+ PSEUDO_WIRE(
+ Sets.newHashSet(ETH_TYPE, MPLS_LABEL, MPLS_BOS),
+ Lists.newArrayList(MATCH_ETH_TYPE_MPLS, MATCH_MPLS_BOS_FALSE),
+ Collections.emptyList()),
+
+ /**
+ * Unsupported type.
+ */
+ UNKNOWN(
+ Collections.emptySet(),
+ Collections.emptyList(),
+ Collections.emptyList());
+
+ private static final Logger log = getLogger(ForwardingFunctionType.class);
+
+ private final Set<Criterion.Type> expectedCriterionTypes;
+ private final Map<Criterion.Type, List<Criterion>> matchCriteria;
+ private final Map<Criterion.Type, List<Criterion>> mismatchCriteria;
+ private final ForwardingFunctionType originalType;
+
+ /**
+ * Creates a new FFT.
+ *
+ * @param expectedCriterionTypes expected criterion types
+ * @param matchCriteria criterion instances to match
+ * @param mismatchCriteria criterion instance not to be matched
+ */
+ ForwardingFunctionType(Set<Criterion.Type> expectedCriterionTypes,
+ Collection<Criterion> matchCriteria,
+ Collection<Criterion> mismatchCriteria) {
+ this(expectedCriterionTypes, matchCriteria, mismatchCriteria, null);
+ }
+
+ /**
+ * Creates a new alias FFT that if matched, should return the given original
+ * FFT.
+ *
+ * @param expectedCriterionTypes expected criterion types
+ * @param matchCriteria criterion instances to match
+ * @param mismatchCriteria criterion instance not to be matched
+ * @param original original FFT to return
+ */
+ ForwardingFunctionType(Set<Criterion.Type> expectedCriterionTypes,
+ Collection<Criterion> matchCriteria,
+ Collection<Criterion> mismatchCriteria,
+ ForwardingFunctionType original) {
+ this.expectedCriterionTypes = ImmutableSet.copyOf(expectedCriterionTypes);
+ this.matchCriteria = typeToCriteriaMap(matchCriteria);
+ this.mismatchCriteria = typeToCriteriaMap(mismatchCriteria);
+ this.originalType = original == null ? this : original;
+ }
+
+ /**
+ * Attempts to guess the forwarding function type of the given forwarding
+ * objective.
+ *
+ * @param fwd the forwarding objective
+ * @return forwarding function type. {@link #UNKNOWN} if the FFT cannot be
+ * determined.
+ */
+ public static ForwardingFunctionType getForwardingFunctionType(ForwardingObjective fwd) {
+ final Set<Criterion> criteria = criteriaIncludingMeta(fwd);
+ final Set<Criterion.Type> criterionTypes = criteria.stream()
+ .map(Criterion::type).collect(Collectors.toSet());
+
+ final List<ForwardingFunctionType> candidates = Arrays.stream(ForwardingFunctionType.values())
+ // Keep FFTs which expected criterion types are the same found
+ // in the fwd objective.
+ .filter(fft -> fft.expectedCriterionTypes.equals(criterionTypes))
+ // Keep FFTs which match criteria are found in the fwd objective.
+ .filter(fft -> matchFft(criteria, fft))
+ // Keep FFTs which mismatch criteria are NOT found in the objective.
+ .filter(fft -> mismatchFft(criteria, fft))
+ .collect(Collectors.toList());
+
+ switch (candidates.size()) {
+ case 1:
+ return candidates.get(0).originalType;
+ case 0:
+ return UNKNOWN;
+ default:
+ log.warn("Multiple FFT candidates found: {} [{}]", candidates, fwd);
+ return UNKNOWN;
+ }
+ }
+
+ private static boolean matchFft(Collection<Criterion> criteria, ForwardingFunctionType fft) {
+ return matchOrMismatchFft(criteria, fft.matchCriteria, false);
+ }
+
+ private static boolean mismatchFft(Collection<Criterion> criteria, ForwardingFunctionType fft) {
+ return matchOrMismatchFft(criteria, fft.mismatchCriteria, true);
+ }
+
+ private static boolean matchOrMismatchFft(
+ Collection<Criterion> criteria,
+ Map<Criterion.Type, List<Criterion>> criteriaToMatch,
+ boolean mismatch) {
+ final Map<Criterion.Type, Criterion> givenCriteria = typeToCriterionMap(criteria);
+ for (Criterion.Type typeToMatch : criteriaToMatch.keySet()) {
+ if (!givenCriteria.containsKey(typeToMatch)) {
+ return false;
+ }
+ final boolean matchFound = criteriaToMatch.get(typeToMatch).stream()
+ .anyMatch(c -> mismatch != givenCriteria.get(c.type()).equals(c));
+ if (!matchFound) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private static Set<Criterion> criteriaIncludingMeta(ForwardingObjective fwd) {
+ final Set<Criterion> criteria = Sets.newHashSet();
+ criteria.addAll(fwd.selector().criteria());
+ // FIXME: Is this really needed? Meta is such an ambiguous field...
+ if (fwd.meta() != null) {
+ criteria.addAll(fwd.meta().criteria());
+ }
+ return criteria;
+ }
+
+ private static Map<Criterion.Type, List<Criterion>> typeToCriteriaMap(Collection<Criterion> criteria) {
+ return criteria.stream().collect(Collectors.groupingBy(Criterion::type));
+ }
+
+ private static Map<Criterion.Type, Criterion> typeToCriterionMap(Collection<Criterion> criteria) {
+ final ImmutableMap.Builder<Criterion.Type, Criterion> mapBuilder = ImmutableMap.builder();
+ criteria.forEach(c -> mapBuilder.put(c.type(), c));
+ return mapBuilder.build();
+ }
+}
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingObjectiveTranslator.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingObjectiveTranslator.java
new file mode 100644
index 0000000..1d7d5c0
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingObjectiveTranslator.java
@@ -0,0 +1,352 @@
+/*
+ * 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.pipelines.fabric.impl.behaviour.pipeliner;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import org.onlab.packet.IpPrefix;
+import org.onlab.packet.MacAddress;
+import org.onosproject.core.ApplicationId;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.flow.DefaultTrafficSelector;
+import org.onosproject.net.flow.DefaultTrafficTreatment;
+import org.onosproject.net.flow.FlowRule;
+import org.onosproject.net.flow.TrafficSelector;
+import org.onosproject.net.flow.TrafficTreatment;
+import org.onosproject.net.flow.criteria.Criterion;
+import org.onosproject.net.flow.criteria.EthCriterion;
+import org.onosproject.net.flow.criteria.IPCriterion;
+import org.onosproject.net.flow.criteria.MplsCriterion;
+import org.onosproject.net.flow.criteria.VlanIdCriterion;
+import org.onosproject.net.flowobjective.ForwardingObjective;
+import org.onosproject.net.flowobjective.Objective;
+import org.onosproject.net.flowobjective.ObjectiveError;
+import org.onosproject.net.group.DefaultGroupDescription;
+import org.onosproject.net.group.DefaultGroupKey;
+import org.onosproject.net.group.GroupBucket;
+import org.onosproject.net.group.GroupBuckets;
+import org.onosproject.net.group.GroupDescription;
+import org.onosproject.net.group.GroupKey;
+import org.onosproject.net.pi.model.PiActionId;
+import org.onosproject.net.pi.model.PiTableId;
+import org.onosproject.net.pi.runtime.PiAction;
+import org.onosproject.net.pi.runtime.PiActionParam;
+import org.onosproject.pipelines.fabric.impl.behaviour.FabricCapabilities;
+import org.onosproject.pipelines.fabric.impl.behaviour.FabricConstants;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import static java.lang.String.format;
+import static org.onosproject.net.group.DefaultGroupBucket.createCloneGroupBucket;
+import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.criterionNotNull;
+import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.outputPort;
+
+
+/**
+ * ObjectiveTranslator implementation ForwardingObjective.
+ */
+class ForwardingObjectiveTranslator
+ extends AbstractObjectiveTranslator<ForwardingObjective> {
+
+ //FIXME: Max number supported by PI
+ static final int CLONE_TO_CPU_ID = 511;
+ private static final List<String> DEFAULT_ROUTE_PREFIXES = Lists.newArrayList(
+ "0.0.0.0/1", "128.0.0.0/1");
+
+ private static final Set<Criterion.Type> ACL_CRITERIA = ImmutableSet.of(
+ Criterion.Type.IN_PORT,
+ Criterion.Type.IN_PHY_PORT,
+ Criterion.Type.ETH_DST,
+ Criterion.Type.ETH_DST_MASKED,
+ Criterion.Type.ETH_SRC,
+ Criterion.Type.ETH_SRC_MASKED,
+ Criterion.Type.ETH_TYPE,
+ Criterion.Type.VLAN_VID,
+ Criterion.Type.IP_PROTO,
+ Criterion.Type.IPV4_SRC,
+ Criterion.Type.IPV4_DST,
+ Criterion.Type.TCP_SRC,
+ Criterion.Type.TCP_SRC_MASKED,
+ Criterion.Type.TCP_DST,
+ Criterion.Type.TCP_DST_MASKED,
+ Criterion.Type.UDP_SRC,
+ Criterion.Type.UDP_SRC_MASKED,
+ Criterion.Type.UDP_DST,
+ Criterion.Type.UDP_DST_MASKED,
+ Criterion.Type.ICMPV4_TYPE,
+ Criterion.Type.ICMPV4_CODE,
+ Criterion.Type.PROTOCOL_INDEPENDENT);
+
+ private static final Map<PiTableId, PiActionId> NEXT_ID_ACTIONS = ImmutableMap.<PiTableId, PiActionId>builder()
+ .put(FabricConstants.FABRIC_INGRESS_FORWARDING_BRIDGING,
+ FabricConstants.FABRIC_INGRESS_FORWARDING_SET_NEXT_ID_BRIDGING)
+ .put(FabricConstants.FABRIC_INGRESS_FORWARDING_ROUTING_V4,
+ FabricConstants.FABRIC_INGRESS_FORWARDING_SET_NEXT_ID_ROUTING_V4)
+ .put(FabricConstants.FABRIC_INGRESS_FORWARDING_ROUTING_V6,
+ FabricConstants.FABRIC_INGRESS_FORWARDING_SET_NEXT_ID_ROUTING_V6)
+ .put(FabricConstants.FABRIC_INGRESS_FORWARDING_MPLS,
+ FabricConstants.FABRIC_INGRESS_FORWARDING_POP_MPLS_AND_NEXT)
+ .build();
+
+ ForwardingObjectiveTranslator(DeviceId deviceId, FabricCapabilities capabilities) {
+ super(deviceId, capabilities);
+ }
+
+ @Override
+ public ObjectiveTranslation doTranslate(ForwardingObjective obj)
+ throws FabricPipelinerException {
+ final ObjectiveTranslation.Builder resultBuilder =
+ ObjectiveTranslation.builder();
+ switch (obj.flag()) {
+ case SPECIFIC:
+ processSpecificFwd(obj, resultBuilder);
+ break;
+ case VERSATILE:
+ processVersatileFwd(obj, resultBuilder);
+ break;
+ case EGRESS:
+ default:
+ log.warn("Unsupported ForwardingObjective type '{}'", obj.flag());
+ return ObjectiveTranslation.ofError(ObjectiveError.UNSUPPORTED);
+ }
+ return resultBuilder.build();
+ }
+
+ private void processVersatileFwd(ForwardingObjective obj,
+ ObjectiveTranslation.Builder resultBuilder)
+ throws FabricPipelinerException {
+
+ final Set<Criterion.Type> unsupportedCriteria = obj.selector().criteria()
+ .stream()
+ .map(Criterion::type)
+ .filter(t -> !ACL_CRITERIA.contains(t))
+ .collect(Collectors.toSet());
+
+ if (!unsupportedCriteria.isEmpty()) {
+ throw new FabricPipelinerException(format(
+ "unsupported ACL criteria %s", unsupportedCriteria.toString()));
+ }
+
+ aclRule(obj, resultBuilder);
+ }
+
+ private void processSpecificFwd(ForwardingObjective obj,
+ ObjectiveTranslation.Builder resultBuilder)
+ throws FabricPipelinerException {
+
+ final Set<Criterion> criteriaWithMeta = Sets.newHashSet(obj.selector().criteria());
+
+ // FIXME: Is this really needed? Meta is such an ambiguous field...
+ // Why would we match on a META field?
+ if (obj.meta() != null) {
+ criteriaWithMeta.addAll(obj.meta().criteria());
+ }
+
+ final ForwardingFunctionType fft = ForwardingFunctionType.getForwardingFunctionType(obj);
+
+ switch (fft) {
+ case UNKNOWN:
+ throw new FabricPipelinerException(
+ "unable to detect forwarding function type");
+ case L2_UNICAST:
+ bridgingRule(obj, criteriaWithMeta, resultBuilder, false);
+ break;
+ case L2_BROADCAST:
+ bridgingRule(obj, criteriaWithMeta, resultBuilder, true);
+ break;
+ case IPV4_ROUTING:
+ case IPV4_ROUTING_MULTICAST:
+ ipv4RoutingRule(obj, criteriaWithMeta, resultBuilder);
+ break;
+ case MPLS_SEGMENT_ROUTING:
+ mplsRule(obj, criteriaWithMeta, resultBuilder);
+ break;
+ case IPV6_ROUTING:
+ case IPV6_ROUTING_MULTICAST:
+ default:
+ throw new FabricPipelinerException(format(
+ "unsupported forwarding function type '%s'",
+ fft));
+ }
+ }
+
+ private void bridgingRule(ForwardingObjective obj, Set<Criterion> criteriaWithMeta,
+ ObjectiveTranslation.Builder resultBuilder,
+ boolean broadcast)
+ throws FabricPipelinerException {
+
+ final VlanIdCriterion vlanIdCriterion = (VlanIdCriterion) criterionNotNull(
+ criteriaWithMeta, Criterion.Type.VLAN_VID);
+ final TrafficSelector.Builder selector = DefaultTrafficSelector.builder()
+ .add(vlanIdCriterion);
+
+ if (!broadcast) {
+ final EthCriterion ethDstCriterion = (EthCriterion) criterionNotNull(
+ obj.selector(), Criterion.Type.ETH_DST);
+ selector.matchEthDstMasked(ethDstCriterion.mac(), MacAddress.EXACT_MASK);
+ }
+
+ resultBuilder.addFlowRule(flowRule(
+ obj, FabricConstants.FABRIC_INGRESS_FORWARDING_BRIDGING, selector.build()));
+ }
+
+ private void ipv4RoutingRule(ForwardingObjective obj, Set<Criterion> criteriaWithMeta,
+ ObjectiveTranslation.Builder resultBuilder)
+ throws FabricPipelinerException {
+ final IPCriterion ipDstCriterion = (IPCriterion) criterionNotNull(
+ criteriaWithMeta, Criterion.Type.IPV4_DST);
+
+ if (ipDstCriterion.ip().prefixLength() == 0) {
+ defaultIpv4Route(obj, resultBuilder);
+ return;
+ }
+
+ final TrafficSelector selector = DefaultTrafficSelector.builder()
+ .add(ipDstCriterion)
+ .build();
+
+ resultBuilder.addFlowRule(flowRule(
+ obj, FabricConstants.FABRIC_INGRESS_FORWARDING_ROUTING_V4, selector));
+ }
+
+ private void defaultIpv4Route(ForwardingObjective obj,
+ ObjectiveTranslation.Builder resultBuilder)
+ throws FabricPipelinerException {
+
+ // Hack to work around the inability to program default rules.
+ for (String prefix : DEFAULT_ROUTE_PREFIXES) {
+ final TrafficSelector selector = DefaultTrafficSelector.builder()
+ .matchIPDst(IpPrefix.valueOf(prefix)).build();
+ resultBuilder.addFlowRule(flowRule(
+ obj, FabricConstants.FABRIC_INGRESS_FORWARDING_ROUTING_V4, selector));
+ }
+ }
+
+ private void mplsRule(ForwardingObjective obj, Set<Criterion> criteriaWithMeta,
+ ObjectiveTranslation.Builder resultBuilder)
+ throws FabricPipelinerException {
+
+ final MplsCriterion mplsCriterion = (MplsCriterion) criterionNotNull(
+ criteriaWithMeta, Criterion.Type.MPLS_LABEL);
+ final TrafficSelector selector = DefaultTrafficSelector.builder()
+ .add(mplsCriterion)
+ .build();
+
+ resultBuilder.addFlowRule(flowRule(
+ obj, FabricConstants.FABRIC_INGRESS_FORWARDING_MPLS, selector));
+ }
+
+ private void aclRule(ForwardingObjective obj,
+ ObjectiveTranslation.Builder resultBuilder)
+ throws FabricPipelinerException {
+ if (obj.nextId() == null && obj.treatment() != null) {
+ final TrafficTreatment treatment = obj.treatment();
+ final PortNumber outPort = outputPort(treatment);
+ if (outPort != null
+ && outPort.equals(PortNumber.CONTROLLER)
+ && treatment.allInstructions().size() == 1) {
+
+ final PiAction aclAction;
+ if (treatment.clearedDeferred()) {
+ aclAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_ACL_PUNT_TO_CPU)
+ .build();
+ } else {
+ // Action is SET_CLONE_SESSION_ID
+ if (obj.op() == Objective.Operation.ADD) {
+ // Action is ADD, create clone group
+ final DefaultGroupDescription cloneGroup =
+ createCloneGroup(obj.appId(),
+ CLONE_TO_CPU_ID,
+ outPort);
+ resultBuilder.addGroup(cloneGroup);
+ }
+ aclAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_ACL_SET_CLONE_SESSION_ID)
+ .withParameter(new PiActionParam(
+ FabricConstants.CLONE_ID, CLONE_TO_CPU_ID))
+ .build();
+ }
+ final TrafficTreatment piTreatment = DefaultTrafficTreatment.builder()
+ .piTableAction(aclAction)
+ .build();
+ resultBuilder.addFlowRule(flowRule(
+ obj, FabricConstants.FABRIC_INGRESS_ACL_ACL, obj.selector(), piTreatment));
+ return;
+ }
+ }
+ resultBuilder.addFlowRule(flowRule(
+ obj, FabricConstants.FABRIC_INGRESS_ACL_ACL, obj.selector()));
+ }
+
+ private DefaultGroupDescription createCloneGroup(
+ ApplicationId appId,
+ int cloneSessionId,
+ PortNumber outPort) {
+ final GroupKey groupKey = new DefaultGroupKey(
+ FabricPipeliner.KRYO.serialize(cloneSessionId));
+
+ final List<GroupBucket> bucketList = ImmutableList.of(
+ createCloneGroupBucket(DefaultTrafficTreatment.builder()
+ .setOutput(outPort)
+ .build()));
+ final DefaultGroupDescription cloneGroup = new DefaultGroupDescription(
+ deviceId, GroupDescription.Type.CLONE,
+ new GroupBuckets(bucketList),
+ groupKey, cloneSessionId, appId);
+ return cloneGroup;
+ }
+
+ private FlowRule flowRule(
+ ForwardingObjective obj, PiTableId tableId, TrafficSelector selector)
+ throws FabricPipelinerException {
+ return flowRule(obj, tableId, selector, nextIdOrTreatment(obj, tableId));
+ }
+
+ private static TrafficTreatment nextIdOrTreatment(
+ ForwardingObjective obj, PiTableId tableId)
+ throws FabricPipelinerException {
+ if (obj.nextId() == null) {
+ return obj.treatment();
+ } else {
+ if (!NEXT_ID_ACTIONS.containsKey(tableId)) {
+ throw new FabricPipelinerException(format(
+ "BUG? no next_id action set for table %s", tableId));
+ }
+ return DefaultTrafficTreatment.builder()
+ .piTableAction(
+ setNextIdAction(obj.nextId(),
+ NEXT_ID_ACTIONS.get(tableId)))
+ .build();
+ }
+ }
+
+ private static PiAction setNextIdAction(Integer nextId, PiActionId actionId) {
+ final PiActionParam nextIdParam = new PiActionParam(FabricConstants.NEXT_ID, nextId);
+ return PiAction.builder()
+ .withId(actionId)
+ .withParameter(nextIdParam)
+ .build();
+ }
+}
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/NextObjectiveTranslator.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/NextObjectiveTranslator.java
new file mode 100644
index 0000000..4e3304d
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/NextObjectiveTranslator.java
@@ -0,0 +1,506 @@
+/*
+ * 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.pipelines.fabric.impl.behaviour.pipeliner;
+
+import com.google.common.collect.Lists;
+import org.onlab.packet.VlanId;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.flow.DefaultTrafficSelector;
+import org.onosproject.net.flow.DefaultTrafficTreatment;
+import org.onosproject.net.flow.TrafficSelector;
+import org.onosproject.net.flow.TrafficTreatment;
+import org.onosproject.net.flow.criteria.Criterion;
+import org.onosproject.net.flow.criteria.PiCriterion;
+import org.onosproject.net.flow.criteria.VlanIdCriterion;
+import org.onosproject.net.flow.instructions.Instruction;
+import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModVlanIdInstruction;
+import org.onosproject.net.flowobjective.DefaultNextTreatment;
+import org.onosproject.net.flowobjective.NextObjective;
+import org.onosproject.net.flowobjective.NextTreatment;
+import org.onosproject.net.flowobjective.Objective;
+import org.onosproject.net.flowobjective.ObjectiveError;
+import org.onosproject.net.group.DefaultGroupBucket;
+import org.onosproject.net.group.DefaultGroupDescription;
+import org.onosproject.net.group.DefaultGroupKey;
+import org.onosproject.net.group.GroupBucket;
+import org.onosproject.net.group.GroupBuckets;
+import org.onosproject.net.group.GroupDescription;
+import org.onosproject.net.group.GroupKey;
+import org.onosproject.net.pi.model.PiTableId;
+import org.onosproject.net.pi.runtime.PiAction;
+import org.onosproject.net.pi.runtime.PiActionParam;
+import org.onosproject.net.pi.runtime.PiActionProfileGroupId;
+import org.onosproject.net.pi.runtime.PiGroupKey;
+import org.onosproject.pipelines.fabric.impl.behaviour.FabricCapabilities;
+import org.onosproject.pipelines.fabric.impl.behaviour.FabricConstants;
+import org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import static java.lang.String.format;
+import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.VLAN_ID;
+import static org.onosproject.net.flow.instructions.L2ModificationInstruction.L2SubType.VLAN_POP;
+import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.criterion;
+import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.l2Instruction;
+import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.l2Instructions;
+import static org.onosproject.pipelines.fabric.impl.behaviour.FabricUtils.outputPort;
+
+/**
+ * ObjectiveTranslator implementation for NextObjective.
+ */
+class NextObjectiveTranslator
+ extends AbstractObjectiveTranslator<NextObjective> {
+
+ private static final String XCONNECT = "xconnect";
+
+ NextObjectiveTranslator(DeviceId deviceId, FabricCapabilities capabilities) {
+ super(deviceId, capabilities);
+ }
+
+ @Override
+ public ObjectiveTranslation doTranslate(NextObjective obj)
+ throws FabricPipelinerException {
+
+ final ObjectiveTranslation.Builder resultBuilder =
+ ObjectiveTranslation.builder();
+
+ switch (obj.type()) {
+ case SIMPLE:
+ simpleNext(obj, resultBuilder, false);
+ break;
+ case HASHED:
+ hashedNext(obj, resultBuilder);
+ break;
+ case BROADCAST:
+ if (isXconnect(obj)) {
+ xconnectNext(obj, resultBuilder);
+ } else {
+ multicastNext(obj, resultBuilder);
+ }
+ break;
+ default:
+ log.warn("Unsupported NextObjective type '{}'", obj);
+ return ObjectiveTranslation.ofError(ObjectiveError.UNSUPPORTED);
+ }
+
+ if (!isGroupModifyOp(obj)) {
+ // Generate next VLAN rules.
+ nextVlan(obj, resultBuilder);
+ }
+
+ return resultBuilder.build();
+ }
+
+ private void nextVlan(NextObjective obj,
+ ObjectiveTranslation.Builder resultBuilder)
+ throws FabricPipelinerException {
+ // We expect NextObjective treatments to contain one or two VLAN instructions.
+ // If two, this treatment should be mapped to an action for double-vlan push.
+ // In fabric.p4, mapping next IDs to VLAN IDs is done by a direct table (next_vlan),
+ // for this reason, we also make sure that all treatments in the NextObjective
+ // have exactly the same VLAN instructions, as they will be mapped to a single action
+
+ // Try to extract VLAN instructions in the treatment,
+ // later we check if we support multiple VLAN termination.
+ final List<List<ModVlanIdInstruction>> vlanInstructions = defaultNextTreatments(
+ obj.nextTreatments(), false).stream()
+ .map(defaultNextTreatment ->
+ l2Instructions(defaultNextTreatment.treatment(), VLAN_ID)
+ .stream().map(v -> (ModVlanIdInstruction) v)
+ .collect(Collectors.toList()))
+ .filter(l -> !l.isEmpty())
+ .collect(Collectors.toList());
+
+ final VlanIdCriterion vlanIdCriterion = obj.meta() == null ? null
+ : (VlanIdCriterion) criterion(obj.meta().criteria(), Criterion.Type.VLAN_VID);
+
+ final List<VlanId> vlanIdList;
+ if (vlanInstructions.isEmpty() && vlanIdCriterion == null) {
+ // No VLAN_ID to apply.
+ return;
+ }
+ if (!vlanInstructions.isEmpty()) {
+ // Give priority to what found in the instructions.
+ // Expect the same VLAN ID (or two VLAN IDs in the same order) for all instructions.
+ final Set<List<VlanId>> vlanIds = vlanInstructions.stream()
+ .map(l -> l.stream().map(ModVlanIdInstruction::vlanId).collect(Collectors.toList()))
+ .collect(Collectors.toSet());
+ if (obj.nextTreatments().size() != vlanInstructions.size() ||
+ vlanIds.size() != 1) {
+ throw new FabricPipelinerException(
+ "Inconsistent VLAN_ID instructions, cannot process " +
+ "next_vlan rule. It is required that all " +
+ "treatments have the same VLAN_ID instructions.");
+ }
+ vlanIdList = vlanIds.iterator().next();
+ } else {
+ // Use the value in meta.
+ // FIXME: there should be no need to generate a next_vlan rule for
+ // the value found in meta. Meta describes the fields that were
+ // expected to be matched in previous pipeline stages, i.e.
+ // existing packet fields. But, for some reason, if we remove this
+ // rule, traffic is not forwarded at spines. We might need to look
+ // at the way default VLANs are handled in fabric.p4.
+ vlanIdList = List.of(vlanIdCriterion.vlanId());
+ }
+
+ final TrafficSelector selector = nextIdSelector(obj.id());
+ final TrafficTreatment.Builder treatmentBuilder = DefaultTrafficTreatment.builder();
+ vlanIdList.stream().forEach(vlanId -> treatmentBuilder.setVlanId(vlanId));
+ final TrafficTreatment treatment = treatmentBuilder.build();
+
+ resultBuilder.addFlowRule(flowRule(
+ obj, FabricConstants.FABRIC_INGRESS_NEXT_NEXT_VLAN,
+ selector, treatment));
+ }
+
+ private void simpleNext(NextObjective obj,
+ ObjectiveTranslation.Builder resultBuilder,
+ boolean forceSimple)
+ throws FabricPipelinerException {
+
+ if (capabilities.hasHashedTable()) {
+ // Use hashed table when possible.
+ hashedNext(obj, resultBuilder);
+ return;
+ }
+
+ if (obj.nextTreatments().isEmpty()) {
+ // Do nothing.
+ return;
+ } else if (!forceSimple && obj.nextTreatments().size() != 1) {
+ throw new FabricPipelinerException(format(
+ "SIMPLE NextObjective should contain only 1 treatment, found %d",
+ obj.nextTreatments().size()), ObjectiveError.BADPARAMS);
+ }
+
+ final TrafficSelector selector = nextIdSelector(obj.id());
+
+ final List<DefaultNextTreatment> treatments = defaultNextTreatments(
+ obj.nextTreatments(), true);
+
+ if (forceSimple && treatments.size() > 1) {
+ log.warn("Forcing SIMPLE behavior for NextObjective with {} treatments []",
+ treatments.size(), obj);
+ }
+
+ // If not forcing, we are essentially extracting the only available treatment.
+ final TrafficTreatment treatment = defaultNextTreatments(
+ obj.nextTreatments(), true).get(0).treatment();
+
+ resultBuilder.addFlowRule(flowRule(
+ obj, FabricConstants.FABRIC_INGRESS_NEXT_SIMPLE,
+ selector, treatment));
+
+ handleEgress(obj, treatment, resultBuilder, false);
+ }
+
+ private void hashedNext(NextObjective obj,
+ ObjectiveTranslation.Builder resultBuilder)
+ throws FabricPipelinerException {
+
+ if (!capabilities.hasHashedTable()) {
+ simpleNext(obj, resultBuilder, true);
+ return;
+ }
+
+ // Updated result builder with hashed group.
+ final int groupId = selectGroup(obj, resultBuilder);
+
+ if (isGroupModifyOp(obj)) {
+ // No changes to flow rules.
+ return;
+ }
+
+ final TrafficSelector selector = nextIdSelector(obj.id());
+ final TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .piTableAction(PiActionProfileGroupId.of(groupId))
+ .build();
+
+ resultBuilder.addFlowRule(flowRule(
+ obj, FabricConstants.FABRIC_INGRESS_NEXT_HASHED,
+ selector, treatment));
+ }
+
+ private void handleEgress(NextObjective obj, TrafficTreatment treatment,
+ ObjectiveTranslation.Builder resultBuilder,
+ boolean strict)
+ throws FabricPipelinerException {
+ final PortNumber outPort = outputPort(treatment);
+ final Instruction popVlanInst = l2Instruction(treatment, VLAN_POP);
+ if (popVlanInst != null && outPort != null) {
+ if (strict && treatment.allInstructions().size() > 2) {
+ throw new FabricPipelinerException(
+ "Treatment contains instructions other " +
+ "than OUTPUT and VLAN_POP, cannot generate " +
+ "egress rules");
+ }
+ egressVlanPop(outPort, obj, resultBuilder);
+ }
+ }
+
+ private void egressVlanPop(PortNumber outPort, NextObjective obj,
+ ObjectiveTranslation.Builder resultBuilder)
+ throws FabricPipelinerException {
+
+ if (obj.meta() == null) {
+ throw new FabricPipelinerException(
+ "Cannot process egress pop VLAN rule, NextObjective has null meta",
+ ObjectiveError.BADPARAMS);
+ }
+
+ final VlanIdCriterion vlanIdCriterion = (VlanIdCriterion) criterion(
+ obj.meta(), Criterion.Type.VLAN_VID);
+ if (vlanIdCriterion == null) {
+ throw new FabricPipelinerException(
+ "Cannot process egress pop VLAN rule, missing VLAN_VID criterion " +
+ "in NextObjective meta",
+ ObjectiveError.BADPARAMS);
+ }
+
+ final PiCriterion egressVlanTableMatch = PiCriterion.builder()
+ .matchExact(FabricConstants.HDR_EG_PORT, outPort.toLong())
+ .build();
+ final TrafficSelector selector = DefaultTrafficSelector.builder()
+ .matchPi(egressVlanTableMatch)
+ .matchVlanId(vlanIdCriterion.vlanId())
+ .build();
+ final TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .popVlan()
+ .build();
+
+ resultBuilder.addFlowRule(flowRule(
+ obj, FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN,
+ selector, treatment));
+ }
+
+ private TrafficSelector nextIdSelector(int nextId) {
+ return nextIdSelectorBuilder(nextId).build();
+ }
+
+ private TrafficSelector.Builder nextIdSelectorBuilder(int nextId) {
+ final PiCriterion nextIdCriterion = PiCriterion.builder()
+ .matchExact(FabricConstants.HDR_NEXT_ID, nextId)
+ .build();
+ return DefaultTrafficSelector.builder()
+ .matchPi(nextIdCriterion);
+ }
+
+ private void xconnectNext(NextObjective obj, ObjectiveTranslation.Builder resultBuilder)
+ throws FabricPipelinerException {
+
+ final Collection<DefaultNextTreatment> defaultNextTreatments =
+ defaultNextTreatments(obj.nextTreatments(), true);
+
+ final List<PortNumber> outPorts = defaultNextTreatments.stream()
+ .map(DefaultNextTreatment::treatment)
+ .map(FabricUtils::outputPort)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
+
+ if (outPorts.size() != 2) {
+ throw new FabricPipelinerException(format(
+ "Handling XCONNECT with %d treatments (ports), but expected is 2",
+ defaultNextTreatments.size()), ObjectiveError.UNSUPPORTED);
+ }
+
+ final PortNumber port1 = outPorts.get(0);
+ final PortNumber port2 = outPorts.get(1);
+ final TrafficSelector selector1 = nextIdSelectorBuilder(obj.id())
+ .matchInPort(port1)
+ .build();
+ final TrafficTreatment treatment1 = DefaultTrafficTreatment.builder()
+ .setOutput(port2)
+ .build();
+ final TrafficSelector selector2 = nextIdSelectorBuilder(obj.id())
+ .matchInPort(port2)
+ .build();
+ final TrafficTreatment treatment2 = DefaultTrafficTreatment.builder()
+ .setOutput(port1)
+ .build();
+
+ resultBuilder.addFlowRule(flowRule(
+ obj, FabricConstants.FABRIC_INGRESS_NEXT_XCONNECT,
+ selector1, treatment1));
+ resultBuilder.addFlowRule(flowRule(
+ obj, FabricConstants.FABRIC_INGRESS_NEXT_XCONNECT,
+ selector2, treatment2));
+
+ }
+
+ private void multicastNext(NextObjective obj,
+ ObjectiveTranslation.Builder resultBuilder)
+ throws FabricPipelinerException {
+
+ // Create ALL group that will be translated to a PRE multicast entry.
+ final int groupId = allGroup(obj, resultBuilder);
+
+ if (isGroupModifyOp(obj)) {
+ // No changes to flow rules.
+ return;
+ }
+
+ final TrafficSelector selector = nextIdSelector(obj.id());
+ final PiActionParam groupIdParam = new PiActionParam(
+ FabricConstants.GROUP_ID, groupId);
+ final PiAction setMcGroupAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_NEXT_SET_MCAST_GROUP_ID)
+ .withParameter(groupIdParam)
+ .build();
+ final TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .piTableAction(setMcGroupAction)
+ .build();
+
+ resultBuilder.addFlowRule(flowRule(
+ obj, FabricConstants.FABRIC_INGRESS_NEXT_MULTICAST,
+ selector, treatment));
+ }
+
+ private int selectGroup(NextObjective obj,
+ ObjectiveTranslation.Builder resultBuilder)
+ throws FabricPipelinerException {
+
+ final PiTableId hashedTableId = FabricConstants.FABRIC_INGRESS_NEXT_HASHED;
+ final List<DefaultNextTreatment> defaultNextTreatments =
+ defaultNextTreatments(obj.nextTreatments(), true);
+ final List<TrafficTreatment> piTreatments = Lists.newArrayList();
+
+ for (DefaultNextTreatment t : defaultNextTreatments) {
+ // Map treatment to PI...
+ piTreatments.add(mapTreatmentToPiIfNeeded(t.treatment(), hashedTableId));
+ // ...and handle egress if necessary.
+ handleEgress(obj, t.treatment(), resultBuilder, false);
+ }
+
+ final List<GroupBucket> bucketList = piTreatments.stream()
+ .map(DefaultGroupBucket::createSelectGroupBucket)
+ .collect(Collectors.toList());
+
+ final int groupId = obj.id();
+ final PiGroupKey groupKey = new PiGroupKey(
+ hashedTableId,
+ FabricConstants.FABRIC_INGRESS_NEXT_HASHED_SELECTOR,
+ groupId);
+
+ resultBuilder.addGroup(new DefaultGroupDescription(
+ deviceId,
+ GroupDescription.Type.SELECT,
+ new GroupBuckets(bucketList),
+ groupKey,
+ groupId,
+ obj.appId()));
+
+ return groupId;
+ }
+
+ private int allGroup(NextObjective obj,
+ ObjectiveTranslation.Builder resultBuilder)
+ throws FabricPipelinerException {
+
+ final Collection<DefaultNextTreatment> defaultNextTreatments =
+ defaultNextTreatments(obj.nextTreatments(), true);
+ // No need to map treatments to PI as translation of ALL groups to PRE
+ // multicast entries is based solely on the output port.
+ for (DefaultNextTreatment t : defaultNextTreatments) {
+ handleEgress(obj, t.treatment(), resultBuilder, true);
+ }
+
+ // FIXME: this implementation supports only the case in which each
+ // switch interface is associated with only one VLAN, otherwise we would
+ // need to support replicating multiple times the same packet for the
+ // same port while setting different VLAN IDs. Hence, collect in a set.
+ final Set<PortNumber> outPorts = defaultNextTreatments.stream()
+ .map(DefaultNextTreatment::treatment)
+ .map(FabricUtils::outputPort)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toSet());
+
+ if (outPorts.size() != defaultNextTreatments.size()) {
+ throw new FabricPipelinerException(format(
+ "Found BROADCAST NextObjective with %d treatments but " +
+ "found only %d distinct OUTPUT port numbers, cannot " +
+ "translate to ALL groups",
+ defaultNextTreatments.size(), outPorts.size()),
+ ObjectiveError.UNSUPPORTED);
+ }
+
+ final List<GroupBucket> bucketList = outPorts.stream()
+ .map(p -> DefaultTrafficTreatment.builder().setOutput(p).build())
+ .map(DefaultGroupBucket::createAllGroupBucket)
+ .collect(Collectors.toList());
+
+ final int groupId = obj.id();
+ // Use DefaultGroupKey instead of PiGroupKey as we don't have any
+ // action profile to apply to the groups of ALL type.
+ final GroupKey groupKey = new DefaultGroupKey(
+ FabricPipeliner.KRYO.serialize(groupId));
+
+ resultBuilder.addGroup(
+ new DefaultGroupDescription(
+ deviceId,
+ GroupDescription.Type.ALL,
+ new GroupBuckets(bucketList),
+ groupKey,
+ groupId,
+ obj.appId()));
+
+ return groupId;
+ }
+
+ private List<DefaultNextTreatment> defaultNextTreatments(
+ Collection<NextTreatment> nextTreatments, boolean strict)
+ throws FabricPipelinerException {
+ final List<DefaultNextTreatment> defaultNextTreatments = Lists.newArrayList();
+ final List<NextTreatment> unsupportedNextTreatments = Lists.newArrayList();
+ for (NextTreatment n : nextTreatments) {
+ if (n.type() == NextTreatment.Type.TREATMENT) {
+ defaultNextTreatments.add((DefaultNextTreatment) n);
+ } else {
+ unsupportedNextTreatments.add(n);
+ }
+ }
+ if (strict && !unsupportedNextTreatments.isEmpty()) {
+ throw new FabricPipelinerException(format(
+ "Unsupported NextTreatments: %s",
+ unsupportedNextTreatments));
+ }
+ return defaultNextTreatments;
+ }
+
+ private TrafficTreatment getFirstDefaultNextTreatmentIfAny(
+ Collection<NextTreatment> nextTreatments)
+ throws FabricPipelinerException {
+ final Collection<DefaultNextTreatment> nexts = defaultNextTreatments(nextTreatments, false);
+ return nexts.isEmpty() ? null : nexts.iterator().next().treatment();
+ }
+
+ private boolean isGroupModifyOp(NextObjective obj) {
+ // If operation is ADD_TO_EXIST or REMOVE_FROM_EXIST, it means we modify
+ // group buckets only, no changes for flow rules.
+ return obj.op() == Objective.Operation.ADD_TO_EXISTING ||
+ obj.op() == Objective.Operation.REMOVE_FROM_EXISTING;
+ }
+
+ private boolean isXconnect(NextObjective obj) {
+ return obj.appId().name().contains(XCONNECT);
+ }
+}
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ObjectiveTranslation.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ObjectiveTranslation.java
new file mode 100644
index 0000000..31ff617
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ObjectiveTranslation.java
@@ -0,0 +1,209 @@
+/*
+ * 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.pipelines.fabric.impl.behaviour.pipeliner;
+
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
+import org.onosproject.net.flow.FlowId;
+import org.onosproject.net.flow.FlowRule;
+import org.onosproject.net.flowobjective.ObjectiveError;
+import org.onosproject.net.group.GroupDescription;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static java.lang.String.format;
+
+/**
+ * Result of a pipeliner translation from an objective to flows and groups.
+ */
+final class ObjectiveTranslation {
+
+ private final ImmutableMap<FlowId, FlowRule> flowRules;
+ private final ImmutableMap<Integer, GroupDescription> groups;
+ private final ObjectiveError error;
+
+ private ObjectiveTranslation(Map<FlowId, FlowRule> flowRules,
+ Map<Integer, GroupDescription> groups,
+ ObjectiveError error) {
+ this.flowRules = ImmutableMap.copyOf(flowRules);
+ this.groups = ImmutableMap.copyOf(groups);
+ this.error = error;
+ }
+
+ /**
+ * Returns flow rules of this translation.
+ *
+ * @return flow rules
+ */
+ Collection<FlowRule> flowRules() {
+ return flowRules.values();
+ }
+
+ /**
+ * Returns groups of this translation.
+ *
+ * @return groups
+ */
+ Collection<GroupDescription> groups() {
+ return groups.values();
+ }
+
+ /**
+ * Returns the error of this translation, is any.
+ *
+ * @return optional error
+ */
+ Optional<ObjectiveError> error() {
+ return Optional.ofNullable(error);
+ }
+
+ /**
+ * Creates a new builder.
+ *
+ * @return the builder
+ */
+ static Builder builder() {
+ return new Builder();
+ }
+
+ /**
+ * Creates a new translation that signals the given error.
+ *
+ * @param error objective error
+ * @return new objective translation
+ */
+ static ObjectiveTranslation ofError(ObjectiveError error) {
+ checkNotNull(error);
+ return new ObjectiveTranslation(
+ Collections.emptyMap(), Collections.emptyMap(), error);
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("flowRules", flowRules)
+ .add("groups", groups)
+ .add("error", error)
+ .toString();
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(flowRules, groups, error);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null || getClass() != obj.getClass()) {
+ return false;
+ }
+ final ObjectiveTranslation other = (ObjectiveTranslation) obj;
+ return flowRulesExactMatch(other.flowRules)
+ && Objects.equals(this.groups, other.groups)
+ && Objects.equals(this.error, other.error);
+ }
+
+ private boolean flowRulesExactMatch(Map<FlowId, FlowRule> otherFlowRules) {
+ if (otherFlowRules == null || otherFlowRules.size() != this.flowRules.size()) {
+ return false;
+ }
+ return this.flowRules.values().stream()
+ .allMatch(f -> otherFlowRules.containsKey(f.id())
+ && otherFlowRules.get(f.id()).exactMatch(f));
+ }
+
+ /**
+ * Builder for ObjectiveTranslation. This implementation checks that flow
+ * and groups are not added when an existing one with same ID (FlowId or
+ * GroupId) has already been added.
+ */
+ static final class Builder {
+
+ private final Map<FlowId, FlowRule> flowRules = Maps.newHashMap();
+ private final Map<Integer, GroupDescription> groups = Maps.newHashMap();
+
+ // Hide default constructor
+ private Builder() {
+ }
+
+ /**
+ * Adds a flow rule to this translation.
+ *
+ * @param flowRule flow rule
+ * @return this
+ * @throws FabricPipelinerException if a FlowRule with same FlowId
+ * already exists in this translation
+ */
+ Builder addFlowRule(FlowRule flowRule)
+ throws FabricPipelinerException {
+ checkNotNull(flowRule);
+ if (flowRules.containsKey(flowRule.id())) {
+ final FlowRule existingFlowRule = flowRules.get(flowRule.id());
+ if (!existingFlowRule.exactMatch(flowRule)) {
+ throw new FabricPipelinerException(format(
+ "Another FlowRule with same ID has already been " +
+ "added to this translation: existing=%s, new=%s",
+ existingFlowRule, flowRule));
+ }
+ }
+ flowRules.put(flowRule.id(), flowRule);
+ return this;
+ }
+
+ /**
+ * Adds group to this translation.
+ *
+ * @param group group
+ * @return this
+ * @throws FabricPipelinerException if a FlowRule with same GroupId
+ * already exists in this translation
+ */
+ Builder addGroup(GroupDescription group)
+ throws FabricPipelinerException {
+ checkNotNull(group);
+ if (groups.containsKey(group.givenGroupId())) {
+ final GroupDescription existingGroup = groups.get(group.givenGroupId());
+ if (!existingGroup.equals(group)) {
+ throw new FabricPipelinerException(format(
+ "Another Group with same ID has already been " +
+ "added to this translation: existing=%s, new=%s",
+ existingGroup, group));
+ }
+ }
+ groups.put(group.givenGroupId(), group);
+ return this;
+ }
+
+ /**
+ * Creates ane translation.
+ *
+ * @return translation instance
+ */
+ ObjectiveTranslation build() {
+ return new ObjectiveTranslation(flowRules, groups, null);
+ }
+ }
+}
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/package-info.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/package-info.java
new file mode 100644
index 0000000..905c942
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+
+/**
+ * Pipeliner implementation classes for fabric.p4.
+ */
+package org.onosproject.pipelines.fabric.impl.behaviour.pipeliner;
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/package-info.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/package-info.java
new file mode 100644
index 0000000..257d1a3
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+
+/**
+ * Implementation classes for the fabric pipeconf.
+ */
+package org.onosproject.pipelines.fabric.impl;
\ No newline at end of file
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/service/package-info.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/service/package-info.java
new file mode 100644
index 0000000..c57b047
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/service/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+
+/**
+ * Fabric pipeconf service implementations.
+ */
+package org.onosproject.pipelines.fabric.impl.service;
diff --git a/pipelines/fabric/impl/src/main/resources/.gitignore b/pipelines/fabric/impl/src/main/resources/.gitignore
new file mode 100644
index 0000000..fcd51a7
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/.gitignore
@@ -0,0 +1,3 @@
+p4c-out/*/tofino
+p4c-out/**/graphs
+p4c-out/**/_pp.p4
diff --git a/pipelines/fabric/impl/src/main/resources/Makefile b/pipelines/fabric/impl/src/main/resources/Makefile
new file mode 100644
index 0000000..784cc6d
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/Makefile
@@ -0,0 +1,30 @@
+all: fabric fabric-spgw fabric-bng fabric-int fabric-spgw-int fabric-full constants
+
+fabric:
+ @./bmv2-compile.sh "fabric" ""
+
+fabric-spgw:
+ @./bmv2-compile.sh "fabric-spgw" "-DWITH_SPGW"
+
+fabric-bng:
+ @./bmv2-compile.sh "fabric-bng" "-DWITH_BNG -DWITH_DOUBLE_VLAN_TERMINATION -DWITHOUT_XCONNECT"
+
+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_SIMPLE_NEXT -DWITH_HASHED_NEXT -DWITH_BNG -DWITH_SPGW \
+ -DWITH_INT_SOURCE -DWITH_INT_TRANSIT -DWITH_INT_SINK -DWITH_DOUBLE_VLAN_TERMINATION"
+
+constants:
+ docker run -v $(ONOS_ROOT):/onos -w /onos/tools/dev/bin \
+ --entrypoint ./onos-gen-p4-constants opennetworking/p4mn:stable \
+ -o /onos/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricConstants.java \
+ fabric /onos/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt
+
+clean:
+ rm -rf p4c-out/*/bmv2
diff --git a/pipelines/fabric/impl/src/main/resources/bmv2-compile.sh b/pipelines/fabric/impl/src/main/resources/bmv2-compile.sh
new file mode 100755
index 0000000..9f2c558
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/bmv2-compile.sh
@@ -0,0 +1,44 @@
+#!/usr/bin/env bash
+
+set -e
+
+BMV2_CPU_PORT="255"
+BMV2_PP_FLAGS="-DTARGET_BMV2 -DCPU_PORT=${BMV2_CPU_PORT} -DWITH_PORT_COUNTER"
+
+PROFILE=$1
+OTHER_PP_FLAGS=$2
+
+SRC_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+OUT_DIR=${SRC_DIR}/p4c-out/${PROFILE}/bmv2/default
+
+mkdir -p ${OUT_DIR}
+mkdir -p ${OUT_DIR}/graphs
+
+echo
+echo "## Compiling profile ${PROFILE} in ${OUT_DIR}..."
+
+dockerImage=opennetworking/p4c:stable
+dockerRun="docker run --rm -w ${SRC_DIR} -v ${SRC_DIR}:${SRC_DIR} -v ${OUT_DIR}:${OUT_DIR} ${dockerImage}"
+
+# Generate preprocessed P4 source (for debugging).
+(set -x; ${dockerRun} p4c-bm2-ss --arch v1model \
+ ${BMV2_PP_FLAGS} ${OTHER_PP_FLAGS} \
+ --pp ${OUT_DIR}/_pp.p4 fabric.p4)
+
+# Generate BMv2 JSON and P4Info.
+(set -x; ${dockerRun} p4c-bm2-ss --arch v1model -o ${OUT_DIR}/bmv2.json \
+ ${BMV2_PP_FLAGS} ${OTHER_PP_FLAGS} \
+ --p4runtime-files ${OUT_DIR}/p4info.txt fabric.p4)
+
+# Graphs.
+(set -x; ${dockerRun} p4c-graphs ${BMV2_PP_FLAGS} ${OTHER_PP_FLAGS} \
+ --graphs-dir ${OUT_DIR}/graphs fabric.p4)
+
+# Convert .dot graphs to PDFs.
+for f in ${OUT_DIR}/graphs/*.dot; do
+ (set -x; ${dockerRun} dot -Tpdf ${f} > ${f}.pdf)
+ rm -f ${f}
+done
+
+# CPU port.
+(set -x; echo ${BMV2_CPU_PORT} > ${OUT_DIR}/cpu_port.txt)
diff --git a/pipelines/fabric/impl/src/main/resources/fabric.p4 b/pipelines/fabric/impl/src/main/resources/fabric.p4
new file mode 100644
index 0000000..86bd764
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/fabric.p4
@@ -0,0 +1,124 @@
+/*
+ * 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.
+ */
+
+#include <core.p4>
+#include <v1model.p4>
+
+#include "include/size.p4"
+#include "include/control/filtering.p4"
+#include "include/control/forwarding.p4"
+#include "include/control/acl.p4"
+#include "include/control/next.p4"
+#include "include/control/packetio.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
+
+#ifdef WITH_BNG
+#include "include/bng.p4"
+#endif // WITH_BNG
+
+#ifdef WITH_INT
+#include "include/int/int_main.p4"
+#endif // WITH_INT
+
+control FabricIngress (inout parsed_headers_t hdr,
+ inout fabric_metadata_t fabric_metadata,
+ inout standard_metadata_t standard_metadata) {
+
+ PacketIoIngress() pkt_io_ingress;
+ Filtering() filtering;
+ Forwarding() forwarding;
+ Acl() acl;
+ Next() next;
+#ifdef WITH_PORT_COUNTER
+ PortCountersControl() port_counters_control;
+#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);
+#endif // WITH_SPGW
+ pkt_io_ingress.apply(hdr, fabric_metadata, standard_metadata);
+ filtering.apply(hdr, fabric_metadata, standard_metadata);
+#ifdef WITH_SPGW
+ spgw_ingress.apply(hdr.gtpu_ipv4, hdr.gtpu_udp, hdr.gtpu,
+ hdr.ipv4, hdr.udp, fabric_metadata, standard_metadata);
+#endif // WITH_SPGW
+ if (fabric_metadata.skip_forwarding == _FALSE) {
+ forwarding.apply(hdr, fabric_metadata, standard_metadata);
+ }
+ acl.apply(hdr, fabric_metadata, standard_metadata);
+ if (fabric_metadata.skip_next == _FALSE) {
+ 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. Remove when gNMI support will be there.
+ port_counters_control.apply(hdr, fabric_metadata, standard_metadata);
+#endif // WITH_PORT_COUNTER
+#if defined(WITH_INT_SOURCE) || defined(WITH_INT_SINK)
+ process_set_source_sink.apply(hdr, fabric_metadata, standard_metadata);
+#endif
+ }
+#ifdef WITH_BNG
+ bng_ingress.apply(hdr, fabric_metadata, standard_metadata);
+#endif // WITH_BNG
+
+ }
+}
+
+control FabricEgress (inout parsed_headers_t hdr,
+ inout fabric_metadata_t fabric_metadata,
+ inout standard_metadata_t standard_metadata) {
+
+ PacketIoEgress() pkt_io_egress;
+ 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
+ spgw_egress.apply(hdr.ipv4, hdr.gtpu_ipv4, hdr.gtpu_udp, hdr.gtpu,
+ fabric_metadata, standard_metadata);
+#endif // WITH_SPGW
+#ifdef WITH_BNG
+ bng_egress.apply(hdr, fabric_metadata, standard_metadata);
+#endif // WITH_BNG
+#ifdef WITH_INT
+ process_int_main.apply(hdr, fabric_metadata, standard_metadata);
+#endif
+ }
+}
+
+V1Switch(
+ FabricParser(),
+ FabricVerifyChecksum(),
+ FabricIngress(),
+ FabricEgress(),
+ FabricComputeChecksum(),
+ FabricDeparser()
+) main;
diff --git a/pipelines/fabric/impl/src/main/resources/include/bng.p4 b/pipelines/fabric/impl/src/main/resources/include/bng.p4
new file mode 100644
index 0000000..ede0001
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/include/bng.p4
@@ -0,0 +1,375 @@
+/*
+ * Copyright 2019-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.
+ */
+
+ /*
+ * BNG processor implementation. Provides upstream and downstream termination
+ * based on double VLAN tags (s_tag, c_tag) and PPPoE.
+ *
+ * This implementation is based on the P4 Service Edge (p4se) contribution from
+ * Deutsche Telekom:
+ * https://github.com/opencord/p4se
+ */
+
+#ifndef __BNG__
+#define __BNG__
+
+#define BNG_SUBSC_IPV6_NET_PREFIX_LEN 64
+
+control bng_ingress_upstream(
+ inout parsed_headers_t hdr,
+ inout fabric_metadata_t fmeta,
+ inout standard_metadata_t smeta) {
+
+ counter(BNG_MAX_SUBSC, CounterType.packets) c_terminated;
+ counter(BNG_MAX_SUBSC, CounterType.packets) c_dropped;
+ counter(BNG_MAX_SUBSC, CounterType.packets) c_control;
+
+ // TABLE: t_pppoe_cp
+ // Punt to CPU for PPPeE control packets.
+
+ action punt_to_cpu() {
+ smeta.egress_spec = CPU_PORT;
+ c_control.count(fmeta.bng.line_id);
+ }
+
+ table t_pppoe_cp {
+ key = {
+ hdr.pppoe.code : exact @name("pppoe_code");
+ hdr.pppoe.protocol : ternary @name("pppoe_protocol");
+ }
+ actions = {
+ punt_to_cpu;
+ @defaultonly nop;
+ }
+ size = 16;
+ const default_action = nop;
+ }
+
+ // TABLE: PPPoE termination for IPv4
+ // Check subscriber IPv4 source address, line_id, and pppoe_session_id
+ // (antispoofing), if line is enabled, pop PPPoE and double VLANs.
+
+ @hidden
+ action term_enabled(bit<16> eth_type) {
+ hdr.inner_vlan_tag.eth_type = eth_type;
+ fmeta.last_eth_type = eth_type;
+ hdr.pppoe.setInvalid();
+ c_terminated.count(fmeta.bng.line_id);
+ }
+
+ action term_disabled() {
+ fmeta.bng.type = BNG_TYPE_INVALID;
+ mark_to_drop(smeta);
+ }
+
+ action term_enabled_v4() {
+ term_enabled(ETHERTYPE_IPV4);
+ }
+
+ // TODO: add match on hdr.ethernet.src_addr for antispoofing
+ // Take into account that MAC src address is modified by the Next control block
+ // when doing routing functionality.
+ table t_pppoe_term_v4 {
+ key = {
+ fmeta.bng.line_id : exact @name("line_id");
+ hdr.ipv4.src_addr : exact @name("ipv4_src");
+ hdr.pppoe.session_id : exact @name("pppoe_session_id");
+ }
+ actions = {
+ term_enabled_v4;
+ @defaultonly term_disabled;
+ }
+ size = BNG_MAX_SUBSC_NET;
+ const default_action = term_disabled;
+ }
+
+#ifdef WITH_IPV6
+ action term_enabled_v6() {
+ term_enabled(ETHERTYPE_IPV6);
+ }
+
+ // TODO: add match on hdr.ethernet.src_addr for antispoofing
+ // Match on unmodified metadata field, taking into account that MAC src address
+ // is modified by the Next control block when doing routing functionality.
+ table t_pppoe_term_v6 {
+ key = {
+ fmeta.bng.line_id : exact @name("line_id");
+ hdr.ipv6.src_addr[127:64] : exact @name("ipv6_src_net_id");
+ hdr.pppoe.session_id : exact @name("pppoe_session_id");
+ }
+ actions = {
+ term_enabled_v6;
+ @defaultonly term_disabled;
+ }
+ size = BNG_MAX_SUBSC_NET;
+ const default_action = term_disabled;
+ }
+#endif // WITH_IPV6
+
+ apply {
+ if(t_pppoe_cp.apply().hit) {
+ return;
+ }
+ if (hdr.ipv4.isValid()) {
+ switch(t_pppoe_term_v4.apply().action_run) {
+ term_disabled: {
+ c_dropped.count(fmeta.bng.line_id);
+ }
+ }
+ }
+#ifdef WITH_IPV6
+ else if (hdr.ipv6.isValid()) {
+ switch(t_pppoe_term_v6.apply().action_run) {
+ term_disabled: {
+ c_dropped.count(fmeta.bng.line_id);
+ }
+ }
+ }
+#endif // WITH_IPV6
+ }
+}
+
+control bng_ingress_downstream(
+ inout parsed_headers_t hdr,
+ inout fabric_metadata_t fmeta,
+ inout standard_metadata_t smeta) {
+
+ counter(BNG_MAX_SUBSC, CounterType.packets_and_bytes) c_line_rx;
+
+ meter(BNG_MAX_SUBSC, MeterType.bytes) m_besteff;
+ meter(BNG_MAX_SUBSC, MeterType.bytes) m_prio;
+
+ action set_session(bit<16> pppoe_session_id) {
+ fmeta.bng.type = BNG_TYPE_DOWNSTREAM;
+ fmeta.bng.pppoe_session_id = pppoe_session_id;
+ c_line_rx.count(fmeta.bng.line_id);
+ }
+
+ action drop() {
+ fmeta.bng.type = BNG_TYPE_DOWNSTREAM;
+ c_line_rx.count(fmeta.bng.line_id);
+ mark_to_drop(smeta);
+ }
+
+ table t_line_session_map {
+ key = {
+ fmeta.bng.line_id : exact @name("line_id");
+ }
+ actions = {
+ @defaultonly nop;
+ set_session;
+ drop;
+ }
+ size = BNG_MAX_SUBSC;
+ const default_action = nop;
+ }
+
+ // Downstream QoS tables.
+ // Provide coarse metering before prioritazion in the OLT. By default
+ // everything is tagged and metered as best-effort traffic.
+
+ action qos_prio() {
+ // no-op
+ }
+
+ action qos_besteff() {
+ // no-op
+ }
+
+ table t_qos_v4 {
+ key = {
+ fmeta.bng.line_id : ternary @name("line_id");
+ hdr.ipv4.src_addr : lpm @name("ipv4_src");
+ hdr.ipv4.dscp : ternary @name("ipv4_dscp");
+ hdr.ipv4.ecn : ternary @name("ipv4_ecn");
+ }
+ actions = {
+ qos_prio;
+ qos_besteff;
+ }
+ size = 256;
+ const default_action = qos_besteff;
+ }
+
+#ifdef WITH_IPV6
+ table t_qos_v6 {
+ key = {
+ fmeta.bng.line_id : ternary @name("line_id");
+ hdr.ipv6.src_addr : lpm @name("ipv6_src");
+ hdr.ipv6.traffic_class : ternary @name("ipv6_traffic_class");
+ }
+ actions = {
+ qos_prio;
+ qos_besteff;
+ }
+ size = 256;
+ const default_action = qos_besteff;
+ }
+#endif // WITH_IPV6
+
+ apply {
+ // We are not sure the pkt is a BNG downstream one, first we need to
+ // verify the line_id matches the one of a subscriber...
+
+ // IPv4
+ if (t_line_session_map.apply().hit) {
+ // Apply QoS only to subscriber traffic. This makes sense only
+ // if the downstream ports are used to receive IP traffic NOT
+ // destined to subscribers, e.g. to services in the compute
+ // nodes.
+ if (hdr.ipv4.isValid()) {
+ switch (t_qos_v4.apply().action_run) {
+ qos_prio: {
+ m_prio.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result);
+ }
+ qos_besteff: {
+ m_besteff.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result);
+ }
+ }
+ }
+#ifdef WITH_IPV6
+ // IPv6
+ else if (hdr.ipv6.isValid()) {
+ switch (t_qos_v6.apply().action_run) {
+ qos_prio: {
+ m_prio.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result);
+ }
+ qos_besteff: {
+ m_besteff.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result);
+ }
+ }
+ }
+#endif // WITH_IPV6
+ }
+ }
+}
+
+control bng_egress_downstream(
+ inout parsed_headers_t hdr,
+ inout fabric_metadata_t fmeta,
+ inout standard_metadata_t smeta) {
+
+ counter(BNG_MAX_SUBSC, CounterType.packets_and_bytes) c_line_tx;
+
+ @hidden
+ action encap() {
+ // Here we add PPPoE and modify the inner_vlan_tag Ethernet Type.
+ hdr.inner_vlan_tag.eth_type = ETHERTYPE_PPPOES;
+ hdr.pppoe.setValid();
+ hdr.pppoe.version = 4w1;
+ hdr.pppoe.type_id = 4w1;
+ hdr.pppoe.code = 8w0; // 0 means session stage.
+ hdr.pppoe.session_id = fmeta.bng.pppoe_session_id;
+ c_line_tx.count(fmeta.bng.line_id);
+ }
+
+ action encap_v4() {
+ encap();
+ hdr.pppoe.length = hdr.ipv4.total_len + 16w2;
+ hdr.pppoe.protocol = PPPOE_PROTOCOL_IP4;
+ }
+
+#ifdef WITH_IPV6
+ action encap_v6() {
+ encap();
+ hdr.pppoe.length = hdr.ipv6.payload_len + 16w42;
+ hdr.pppoe.protocol = PPPOE_PROTOCOL_IP6;
+ }
+#endif // WITH_IPV6
+
+ apply {
+ if (hdr.ipv4.isValid()) {
+ encap_v4();
+ }
+#ifdef WITH_IPV6
+ // IPv6
+ else if (hdr.ipv6.isValid()) {
+ encap_v6();
+ }
+#endif // WITH_IPV6
+ }
+}
+
+control bng_ingress(
+ inout parsed_headers_t hdr,
+ inout fabric_metadata_t fmeta,
+ inout standard_metadata_t smeta) {
+
+ bng_ingress_upstream() upstream;
+ bng_ingress_downstream() downstream;
+
+ vlan_id_t s_tag = 0;
+ vlan_id_t c_tag = 0;
+
+ // TABLE: t_line_map
+ // Map s_tag and c_tag to a line ID to uniquely identify a subscriber
+
+ action set_line(bit<32> line_id) {
+ fmeta.bng.line_id = line_id;
+ }
+
+ table t_line_map {
+ key = {
+ s_tag : exact @name("s_tag");
+ c_tag : exact @name("c_tag");
+ }
+ actions = {
+ @defaultonly nop;
+ set_line;
+ }
+ size = BNG_MAX_SUBSC;
+ const default_action = nop;
+ }
+
+ apply {
+ if(hdr.pppoe.isValid()) {
+ s_tag = hdr.vlan_tag.vlan_id;
+ c_tag = hdr.inner_vlan_tag.vlan_id;
+ } else {
+ // We expect the packet to be downstream,
+ // the tags are set by the next stage in the metadata.
+ s_tag = fmeta.vlan_id;
+ c_tag = fmeta.inner_vlan_id;
+ }
+
+ // First map the double VLAN tags to a line ID
+ // If table miss line ID will be 0.
+ t_line_map.apply();
+
+ if (hdr.pppoe.isValid()) {
+ fmeta.bng.type = BNG_TYPE_UPSTREAM;
+ upstream.apply(hdr, fmeta, smeta);
+ } else {
+ downstream.apply(hdr, fmeta, smeta);
+ }
+ }
+}
+
+control bng_egress(
+ inout parsed_headers_t hdr,
+ inout fabric_metadata_t fmeta,
+ inout standard_metadata_t smeta) {
+
+ bng_egress_downstream() downstream;
+
+ apply {
+ if (fmeta.bng.type == BNG_TYPE_DOWNSTREAM) {
+ downstream.apply(hdr, fmeta, smeta);
+ }
+ }
+}
+
+#endif
diff --git a/pipelines/fabric/impl/src/main/resources/include/checksum.p4 b/pipelines/fabric/impl/src/main/resources/include/checksum.p4
new file mode 100644
index 0000000..a10a393
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/include/checksum.p4
@@ -0,0 +1,78 @@
+/*
+ * 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 __CHECKSUM__
+#define __CHECKSUM__
+
+#ifdef WITH_SPGW
+#include "spgw.p4"
+#endif // WITH_SPGW
+
+control FabricComputeChecksum(inout parsed_headers_t hdr,
+ inout fabric_metadata_t meta)
+{
+ apply {
+ update_checksum(hdr.ipv4.isValid(),
+ {
+ hdr.ipv4.version,
+ hdr.ipv4.ihl,
+ hdr.ipv4.dscp,
+ hdr.ipv4.ecn,
+ hdr.ipv4.total_len,
+ hdr.ipv4.identification,
+ hdr.ipv4.flags,
+ hdr.ipv4.frag_offset,
+ hdr.ipv4.ttl,
+ hdr.ipv4.protocol,
+ hdr.ipv4.src_addr,
+ hdr.ipv4.dst_addr
+ },
+ hdr.ipv4.hdr_checksum,
+ HashAlgorithm.csum16
+ );
+#ifdef WITH_SPGW
+ update_gtpu_checksum.apply(hdr.gtpu_ipv4, hdr.gtpu_udp, hdr.gtpu,
+ hdr.ipv4, hdr.udp);
+#endif // WITH_SPGW
+ }
+}
+
+control FabricVerifyChecksum(inout parsed_headers_t hdr,
+ inout fabric_metadata_t meta)
+{
+ apply {
+ verify_checksum(hdr.ipv4.isValid(),
+ {
+ hdr.ipv4.version,
+ hdr.ipv4.ihl,
+ hdr.ipv4.dscp,
+ hdr.ipv4.ecn,
+ hdr.ipv4.total_len,
+ hdr.ipv4.identification,
+ hdr.ipv4.flags,
+ hdr.ipv4.frag_offset,
+ hdr.ipv4.ttl,
+ hdr.ipv4.protocol,
+ hdr.ipv4.src_addr,
+ hdr.ipv4.dst_addr
+ },
+ hdr.ipv4.hdr_checksum,
+ HashAlgorithm.csum16
+ );
+ }
+}
+
+#endif
diff --git a/pipelines/fabric/impl/src/main/resources/include/control/acl.p4 b/pipelines/fabric/impl/src/main/resources/include/control/acl.p4
new file mode 100644
index 0000000..4c2df67
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/include/control/acl.p4
@@ -0,0 +1,92 @@
+/*
+ * 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.
+ */
+
+#include <core.p4>
+#include <v1model.p4>
+
+#include "../define.p4"
+#include "../header.p4"
+
+control Acl (inout parsed_headers_t hdr,
+ inout fabric_metadata_t fabric_metadata,
+ inout standard_metadata_t standard_metadata) {
+
+ /*
+ * ACL Table.
+ */
+ direct_counter(CounterType.packets_and_bytes) acl_counter;
+
+ action set_next_id_acl(next_id_t next_id) {
+ fabric_metadata.next_id = next_id;
+ acl_counter.count();
+ }
+
+ // Send immendiatelly to CPU - skip the rest of ingress.
+ action punt_to_cpu() {
+ standard_metadata.egress_spec = CPU_PORT;
+ fabric_metadata.skip_next = _TRUE;
+ acl_counter.count();
+ }
+
+ // Set clone session id for a I2E clone session
+ action set_clone_session_id(bit<32> clone_id) {
+ clone3(CloneType.I2E, clone_id, {standard_metadata.ingress_port});
+ acl_counter.count();
+ }
+
+ action drop() {
+ mark_to_drop(standard_metadata);
+ fabric_metadata.skip_next = _TRUE;
+ acl_counter.count();
+ }
+
+ action nop_acl() {
+ acl_counter.count();
+ }
+
+ table acl {
+ key = {
+ standard_metadata.ingress_port: ternary @name("ig_port"); // 9
+ fabric_metadata.ip_proto: ternary @name("ip_proto"); // 8
+ fabric_metadata.l4_sport: ternary @name("l4_sport"); // 16
+ fabric_metadata.l4_dport: ternary @name("l4_dport"); // 16
+ hdr.ethernet.dst_addr: ternary @name("eth_src"); // 48
+ hdr.ethernet.src_addr: ternary @name("eth_dst"); // 48
+ hdr.vlan_tag.vlan_id: ternary @name("vlan_id"); // 12
+ fabric_metadata.last_eth_type: ternary @name("eth_type"); //16
+ hdr.ipv4.src_addr: ternary @name("ipv4_src"); // 32
+ hdr.ipv4.dst_addr: ternary @name("ipv4_dst"); // 32
+ hdr.icmp.icmp_type: ternary @name("icmp_type"); // 8
+ hdr.icmp.icmp_code: ternary @name("icmp_code"); // 8
+ }
+
+ actions = {
+ set_next_id_acl;
+ punt_to_cpu;
+ set_clone_session_id;
+ drop;
+ nop_acl;
+ }
+
+ const default_action = nop_acl();
+ size = ACL_TABLE_SIZE;
+ counters = acl_counter;
+ }
+
+ apply {
+ acl.apply();
+ }
+}
diff --git a/pipelines/fabric/impl/src/main/resources/include/control/filtering.p4 b/pipelines/fabric/impl/src/main/resources/include/control/filtering.p4
new file mode 100644
index 0000000..a3213e9
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/include/control/filtering.p4
@@ -0,0 +1,148 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <core.p4>
+#include <v1model.p4>
+
+#include "../header.p4"
+
+control Filtering (inout parsed_headers_t hdr,
+ inout fabric_metadata_t fabric_metadata,
+ inout standard_metadata_t standard_metadata) {
+
+ /*
+ * Ingress Port VLAN Table.
+ *
+ * Filter packets based on ingress port and VLAN tag.
+ */
+ direct_counter(CounterType.packets_and_bytes) ingress_port_vlan_counter;
+
+ action deny() {
+ // Packet from unconfigured port. Skip forwarding and next block.
+ // Do ACL table in case we want to punt to cpu.
+ fabric_metadata.skip_forwarding = _TRUE;
+ fabric_metadata.skip_next = _TRUE;
+ ingress_port_vlan_counter.count();
+ }
+
+ action permit() {
+ // Allow packet as is.
+ ingress_port_vlan_counter.count();
+ }
+
+ action permit_with_internal_vlan(vlan_id_t vlan_id) {
+ fabric_metadata.vlan_id = vlan_id;
+ permit();
+ }
+
+ // FIXME: remove the use of ternary match on valid inner VLAN.
+ // Use multi-table approach to remove ternary matching
+ table ingress_port_vlan {
+ key = {
+ standard_metadata.ingress_port : exact @name("ig_port");
+ hdr.vlan_tag.isValid() : exact @name("vlan_is_valid");
+ hdr.vlan_tag.vlan_id : ternary @name("vlan_id");
+ hdr.inner_vlan_tag.vlan_id : ternary @name("inner_vlan_id");
+ }
+ actions = {
+ deny();
+ permit();
+ permit_with_internal_vlan();
+ }
+ const default_action = deny();
+ counters = ingress_port_vlan_counter;
+ size = PORT_VLAN_TABLE_SIZE;
+ }
+
+ /*
+ * Forwarding Classifier.
+ *
+ * Set which type of forwarding behavior to execute in the next control block.
+ * There are six types of tables in Forwarding control block:
+ * - Bridging: default forwarding type
+ * - MPLS: destination mac address is the router mac and ethernet type is
+ * MPLS(0x8847)
+ * - IP Multicast: destination mac address is multicast address and ethernet
+ * type is IP(0x0800 or 0x86dd)
+ * - IP Unicast: destination mac address is router mac and ethernet type is
+ * IP(0x0800 or 0x86dd)
+ */
+ direct_counter(CounterType.packets_and_bytes) fwd_classifier_counter;
+
+ action set_forwarding_type(fwd_type_t fwd_type) {
+ fabric_metadata.fwd_type = fwd_type;
+ fwd_classifier_counter.count();
+ }
+
+ table fwd_classifier {
+ key = {
+ standard_metadata.ingress_port : exact @name("ig_port");
+ hdr.ethernet.dst_addr : ternary @name("eth_dst");
+ fabric_metadata.is_ipv4 : exact @name("is_ipv4");
+ fabric_metadata.is_ipv6 : exact @name("is_ipv6");
+ fabric_metadata.is_mpls : exact @name("is_mpls");
+ }
+ actions = {
+ set_forwarding_type;
+ }
+ const default_action = set_forwarding_type(FWD_BRIDGING);
+ counters = fwd_classifier_counter;
+ size = FWD_CLASSIFIER_TABLE_SIZE;
+ }
+
+ apply {
+ // Initialize lookup metadata. Packets without a VLAN header will be
+ // treated as belonging to a default VLAN ID (see parser).
+ if (hdr.vlan_tag.isValid()) {
+ fabric_metadata.vlan_id = hdr.vlan_tag.vlan_id;
+ fabric_metadata.vlan_pri = hdr.vlan_tag.pri;
+ fabric_metadata.vlan_cfi = hdr.vlan_tag.cfi;
+ }
+ #ifdef WITH_DOUBLE_VLAN_TERMINATION
+ if (hdr.inner_vlan_tag.isValid()) {
+ fabric_metadata.inner_vlan_id = hdr.inner_vlan_tag.vlan_id;
+ fabric_metadata.inner_vlan_pri = hdr.inner_vlan_tag.pri;
+ fabric_metadata.inner_vlan_cfi = hdr.inner_vlan_tag.cfi;
+ }
+ #endif // WITH_DOUBLE_VLAN_TERMINATION
+ if (!hdr.mpls.isValid()) {
+ // Packets with a valid MPLS header will have
+ // fabric_metadata.mpls_ttl set to the packet's MPLS ttl value (see
+ // parser). In any case, if we are forwarding via MPLS, ttl will be
+ // decremented in egress.
+ fabric_metadata.mpls_ttl = DEFAULT_MPLS_TTL + 1;
+ }
+
+ // Set last_eth_type checking the validity of the L2.5 headers
+ if (hdr.mpls.isValid()) {
+ fabric_metadata.last_eth_type = ETHERTYPE_MPLS;
+ } else {
+ if (hdr.vlan_tag.isValid()) {
+#if defined(WITH_XCONNECT) || defined(WITH_BNG) || defined(WITH_DOUBLE_VLAN_TERMINATION)
+ if(hdr.inner_vlan_tag.isValid()) {
+ fabric_metadata.last_eth_type = hdr.inner_vlan_tag.eth_type;
+ } else
+#endif // WITH_XCONNECT || WITH_BNG || WITH_DOUBLE_VLAN_TERMINATION
+ fabric_metadata.last_eth_type = hdr.vlan_tag.eth_type;
+ } else {
+ fabric_metadata.last_eth_type = hdr.ethernet.eth_type;
+ }
+ }
+
+ ingress_port_vlan.apply();
+ fwd_classifier.apply();
+ }
+}
diff --git a/pipelines/fabric/impl/src/main/resources/include/control/forwarding.p4 b/pipelines/fabric/impl/src/main/resources/include/control/forwarding.p4
new file mode 100644
index 0000000..89544ea
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/include/control/forwarding.p4
@@ -0,0 +1,148 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <core.p4>
+#include <v1model.p4>
+
+#include "../define.p4"
+#include "../header.p4"
+
+
+control Forwarding (inout parsed_headers_t hdr,
+ inout fabric_metadata_t fabric_metadata,
+ inout standard_metadata_t standard_metadata) {
+
+ @hidden
+ action set_next_id(next_id_t next_id) {
+ fabric_metadata.next_id = next_id;
+ }
+
+ /*
+ * Bridging Table.
+ */
+ direct_counter(CounterType.packets_and_bytes) bridging_counter;
+
+ action set_next_id_bridging(next_id_t next_id) {
+ set_next_id(next_id);
+ bridging_counter.count();
+ }
+
+ // FIXME: using ternary for eth_dst prevents our ability to scale in
+ // bridging heavy environments. Do we really need ternary? Can we come up
+ // with a multi-table/algorithmic approach?
+ table bridging {
+ key = {
+ fabric_metadata.vlan_id: exact @name("vlan_id");
+ hdr.ethernet.dst_addr: ternary @name("eth_dst");
+ }
+ actions = {
+ set_next_id_bridging;
+ @defaultonly nop;
+ }
+ const default_action = nop();
+ counters = bridging_counter;
+ size = BRIDGING_TABLE_SIZE;
+ }
+
+ /*
+ * MPLS Table.
+ */
+ direct_counter(CounterType.packets_and_bytes) mpls_counter;
+
+ action pop_mpls_and_next(next_id_t next_id) {
+ fabric_metadata.mpls_label = 0;
+ set_next_id(next_id);
+ mpls_counter.count();
+ }
+
+ table mpls {
+ key = {
+ fabric_metadata.mpls_label: exact @name("mpls_label");
+ }
+ actions = {
+ pop_mpls_and_next;
+ @defaultonly nop;
+ }
+ const default_action = nop();
+ counters = mpls_counter;
+ size = MPLS_TABLE_SIZE;
+ }
+
+ /*
+ * IPv4 Routing Table.
+ */
+ direct_counter(CounterType.packets_and_bytes) routing_v4_counter;
+
+ action set_next_id_routing_v4(next_id_t next_id) {
+ set_next_id(next_id);
+ routing_v4_counter.count();
+ }
+
+ action nop_routing_v4() {
+ routing_v4_counter.count();
+ }
+
+ #ifdef _ROUTING_V4_TABLE_ANNOT
+ _ROUTING_V4_TABLE_ANNOT
+ #endif
+ table routing_v4 {
+ key = {
+ hdr.ipv4.dst_addr: lpm @name("ipv4_dst");
+ }
+ actions = {
+ set_next_id_routing_v4;
+ nop_routing_v4;
+ @defaultonly nop;
+ }
+ const default_action = nop();
+ counters = routing_v4_counter;
+ size = ROUTING_V4_TABLE_SIZE;
+ }
+
+#ifdef WITH_IPV6
+ /*
+ * IPv6 Routing Table.
+ */
+ direct_counter(CounterType.packets_and_bytes) routing_v6_counter;
+
+ action set_next_id_routing_v6(next_id_t next_id) {
+ set_next_id(next_id);
+ routing_v6_counter.count();
+ }
+
+ table routing_v6 {
+ key = {
+ hdr.ipv6.dst_addr: lpm @name("ipv6_dst");
+ }
+ actions = {
+ set_next_id_routing_v6;
+ @defaultonly nop;
+ }
+ const default_action = nop();
+ counters = routing_v6_counter;
+ size = ROUTING_V6_TABLE_SIZE;
+ }
+#endif // WITH_IPV6
+
+ apply {
+ if (fabric_metadata.fwd_type == FWD_BRIDGING) bridging.apply();
+ else if (fabric_metadata.fwd_type == FWD_MPLS) mpls.apply();
+ else if (fabric_metadata.fwd_type == FWD_IPV4_UNICAST) routing_v4.apply();
+#ifdef WITH_IPV6
+ else if (fabric_metadata.fwd_type == FWD_IPV6_UNICAST) routing_v6.apply();
+#endif // WITH_IPV6
+ }
+}
diff --git a/pipelines/fabric/impl/src/main/resources/include/control/next.p4 b/pipelines/fabric/impl/src/main/resources/include/control/next.p4
new file mode 100644
index 0000000..e7f6e44
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/include/control/next.p4
@@ -0,0 +1,382 @@
+/*
+ * 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.
+ */
+
+#include <core.p4>
+#include <v1model.p4>
+
+#include "../header.p4"
+
+control Next (inout parsed_headers_t hdr,
+ inout fabric_metadata_t fabric_metadata,
+ inout standard_metadata_t standard_metadata) {
+
+ /*
+ * General actions.
+ */
+ @hidden
+ action output(port_num_t port_num) {
+ standard_metadata.egress_spec = port_num;
+ }
+
+ @hidden
+ action rewrite_smac(mac_addr_t smac) {
+ hdr.ethernet.src_addr = smac;
+ }
+
+ @hidden
+ action rewrite_dmac(mac_addr_t dmac) {
+ hdr.ethernet.dst_addr = dmac;
+ }
+
+ @hidden
+ action set_mpls_label(mpls_label_t label) {
+ fabric_metadata.mpls_label = label;
+ }
+
+ @hidden
+ action routing(port_num_t port_num, mac_addr_t smac, mac_addr_t dmac) {
+ rewrite_smac(smac);
+ rewrite_dmac(dmac);
+ output(port_num);
+ }
+
+ @hidden
+ action mpls_routing(port_num_t port_num, mac_addr_t smac, mac_addr_t dmac,
+ mpls_label_t label) {
+ set_mpls_label(label);
+ routing(port_num, smac, dmac);
+ }
+
+ /*
+ * Next VLAN table.
+ * Modify VLAN ID based on next ID.
+ */
+ direct_counter(CounterType.packets_and_bytes) next_vlan_counter;
+
+ action set_vlan(vlan_id_t vlan_id) {
+ fabric_metadata.vlan_id = vlan_id;
+ next_vlan_counter.count();
+ }
+
+#ifdef WITH_DOUBLE_VLAN_TERMINATION
+ action set_double_vlan(vlan_id_t outer_vlan_id, vlan_id_t inner_vlan_id) {
+ set_vlan(outer_vlan_id);
+ fabric_metadata.push_double_vlan = _TRUE;
+ fabric_metadata.inner_vlan_id = inner_vlan_id;
+ }
+#endif // WITH_DOUBLE_VLAN_TERMINATION
+
+ table next_vlan {
+ key = {
+ fabric_metadata.next_id: exact @name("next_id");
+ }
+ actions = {
+ set_vlan;
+#ifdef WITH_DOUBLE_VLAN_TERMINATION
+ set_double_vlan;
+#endif // WITH_DOUBLE_VLAN_TERMINATION
+ @defaultonly nop;
+ }
+ const default_action = nop();
+ counters = next_vlan_counter;
+ size = NEXT_VLAN_TABLE_SIZE;
+ }
+
+#ifdef WITH_XCONNECT
+ /*
+ * Cross-connect table.
+ * Bidirectional forwarding for the same next id.
+ */
+ direct_counter(CounterType.packets_and_bytes) xconnect_counter;
+
+ action output_xconnect(port_num_t port_num) {
+ output(port_num);
+ fabric_metadata.last_eth_type = ETHERTYPE_VLAN;
+ xconnect_counter.count();
+ }
+
+ action set_next_id_xconnect(next_id_t next_id) {
+ fabric_metadata.next_id = next_id;
+ xconnect_counter.count();
+ }
+
+ table xconnect {
+ key = {
+ standard_metadata.ingress_port: exact @name("ig_port");
+ fabric_metadata.next_id: exact @name("next_id");
+ }
+ actions = {
+ output_xconnect;
+ set_next_id_xconnect;
+ @defaultonly nop;
+ }
+ counters = xconnect_counter;
+ const default_action = nop();
+ size = XCONNECT_NEXT_TABLE_SIZE;
+ }
+#endif // WITH_XCONNECT
+
+#ifdef WITH_SIMPLE_NEXT
+ /*
+ * Simple Table.
+ * Do a single egress action based on next id.
+ */
+ direct_counter(CounterType.packets_and_bytes) simple_counter;
+
+ action output_simple(port_num_t port_num) {
+ output(port_num);
+ simple_counter.count();
+ }
+
+ action routing_simple(port_num_t port_num, mac_addr_t smac, mac_addr_t dmac) {
+ routing(port_num, smac, dmac);
+ simple_counter.count();
+ }
+
+ action mpls_routing_simple(port_num_t port_num, mac_addr_t smac, mac_addr_t dmac,
+ mpls_label_t label) {
+ mpls_routing(port_num, smac, dmac, label);
+ simple_counter.count();
+ }
+
+ table simple {
+ key = {
+ fabric_metadata.next_id: exact @name("next_id");
+ }
+ actions = {
+ output_simple;
+ routing_simple;
+ mpls_routing_simple;
+ @defaultonly nop;
+ }
+ const default_action = nop();
+ counters = simple_counter;
+ size = SIMPLE_NEXT_TABLE_SIZE;
+ }
+#endif // WITH_SIMPLE_NEXT
+
+#ifdef WITH_HASHED_NEXT
+ /*
+ * Hashed table.
+ * Execute an action profile selector based on next id.
+ */
+ @max_group_size(HASHED_SELECTOR_MAX_GROUP_SIZE)
+ action_selector(HashAlgorithm.crc16, HASHED_ACT_PROFILE_SIZE, 32w16) hashed_selector;
+ direct_counter(CounterType.packets_and_bytes) hashed_counter;
+
+ action output_hashed(port_num_t port_num) {
+ output(port_num);
+ hashed_counter.count();
+ }
+
+ action routing_hashed(port_num_t port_num, mac_addr_t smac, mac_addr_t dmac) {
+ routing(port_num, smac, dmac);
+ hashed_counter.count();
+ }
+
+ action mpls_routing_hashed(port_num_t port_num, mac_addr_t smac, mac_addr_t dmac,
+ mpls_label_t label) {
+ mpls_routing(port_num, smac, dmac, label);
+ hashed_counter.count();
+ }
+
+ table hashed {
+ key = {
+ fabric_metadata.next_id: exact @name("next_id");
+ hdr.ipv4.dst_addr: selector;
+ hdr.ipv4.src_addr: selector;
+ fabric_metadata.ip_proto: selector;
+ fabric_metadata.l4_sport: selector;
+ fabric_metadata.l4_dport: selector;
+ }
+ actions = {
+ output_hashed;
+ routing_hashed;
+ mpls_routing_hashed;
+ @defaultonly nop;
+ }
+ implementation = hashed_selector;
+ counters = hashed_counter;
+ const default_action = nop();
+ size = HASHED_NEXT_TABLE_SIZE;
+ }
+#endif // WITH_HASHED_NEXT
+
+ /*
+ * Multicast
+ * Maps next IDs to PRE multicat group IDs.
+ */
+ direct_counter(CounterType.packets_and_bytes) multicast_counter;
+
+ action set_mcast_group_id(mcast_group_id_t group_id) {
+ standard_metadata.mcast_grp = group_id;
+ fabric_metadata.is_multicast = _TRUE;
+ multicast_counter.count();
+ }
+
+ table multicast {
+ key = {
+ fabric_metadata.next_id: exact @name("next_id");
+ }
+ actions = {
+ set_mcast_group_id;
+ @defaultonly nop;
+ }
+ counters = multicast_counter;
+ const default_action = nop();
+ size = MULTICAST_NEXT_TABLE_SIZE;
+ }
+
+ apply {
+#ifdef WITH_XCONNECT
+ // xconnect might set a new next_id.
+ xconnect.apply();
+#endif // WITH_XCONNECT
+#ifdef WITH_SIMPLE_NEXT
+ simple.apply();
+#endif // WITH_SIMPLE_NEXT
+#ifdef WITH_HASHED_NEXT
+ hashed.apply();
+#endif // WITH_HASHED_NEXT
+ multicast.apply();
+ next_vlan.apply();
+ }
+}
+
+control EgressNextControl (inout parsed_headers_t hdr,
+ inout fabric_metadata_t fabric_metadata,
+ inout standard_metadata_t standard_metadata) {
+ @hidden
+ action pop_mpls_if_present() {
+ hdr.mpls.setInvalid();
+ // Assuming there's an IP header after the MPLS one.
+ fabric_metadata.last_eth_type = fabric_metadata.ip_eth_type;
+ }
+
+ @hidden
+ action set_mpls() {
+ hdr.mpls.setValid();
+ hdr.mpls.label = fabric_metadata.mpls_label;
+ hdr.mpls.tc = 3w0;
+ hdr.mpls.bos = 1w1; // BOS = TRUE
+ hdr.mpls.ttl = fabric_metadata.mpls_ttl; // Decrement after push.
+ fabric_metadata.last_eth_type = ETHERTYPE_MPLS;
+ }
+
+ @hidden
+ action push_vlan() {
+ // If VLAN is already valid, we overwrite it with a potentially new VLAN
+ // ID, and same CFI, PRI, and eth_type values found in ingress.
+ hdr.vlan_tag.setValid();
+ hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi;
+ hdr.vlan_tag.pri = fabric_metadata.vlan_pri;
+ hdr.vlan_tag.eth_type = fabric_metadata.last_eth_type;
+ hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id;
+ hdr.ethernet.eth_type = ETHERTYPE_VLAN;
+ }
+
+#ifdef WITH_DOUBLE_VLAN_TERMINATION
+ @hidden
+ action push_inner_vlan() {
+ // Then push inner VLAN TAG, rewriting correclty the outer vlan eth_type
+ // and the ethernet eth_type
+ hdr.inner_vlan_tag.setValid();
+ hdr.inner_vlan_tag.cfi = fabric_metadata.inner_vlan_cfi;
+ hdr.inner_vlan_tag.pri = fabric_metadata.inner_vlan_pri;
+ hdr.inner_vlan_tag.vlan_id = fabric_metadata.inner_vlan_id;
+ hdr.inner_vlan_tag.eth_type = fabric_metadata.last_eth_type;
+ hdr.vlan_tag.eth_type = ETHERTYPE_VLAN;
+ hdr.ethernet.eth_type = ETHERTYPE_QINQ;
+ }
+#endif // WITH_DOUBLE_VLAN_TERMINATION
+
+ /*
+ * Egress VLAN Table.
+ * Pops the VLAN tag if the pair egress port and VLAN ID is matched.
+ */
+ direct_counter(CounterType.packets_and_bytes) egress_vlan_counter;
+
+ action pop_vlan() {
+ hdr.ethernet.eth_type = fabric_metadata.last_eth_type;
+ hdr.vlan_tag.setInvalid();
+ egress_vlan_counter.count();
+ }
+
+ table egress_vlan {
+ key = {
+ fabric_metadata.vlan_id: exact @name("vlan_id");
+ standard_metadata.egress_port: exact @name("eg_port");
+ }
+ actions = {
+ pop_vlan;
+ @defaultonly nop;
+ }
+ const default_action = nop();
+ counters = egress_vlan_counter;
+ size = EGRESS_VLAN_TABLE_SIZE;
+ }
+
+ apply {
+ if (fabric_metadata.is_multicast == _TRUE
+ && standard_metadata.ingress_port == standard_metadata.egress_port) {
+ mark_to_drop(standard_metadata);
+ }
+
+ if (fabric_metadata.mpls_label == 0) {
+ if (hdr.mpls.isValid()) pop_mpls_if_present();
+ } else {
+ set_mpls();
+ }
+
+#ifdef WITH_DOUBLE_VLAN_TERMINATION
+ if (fabric_metadata.push_double_vlan == _TRUE) {
+ // Double VLAN termination.
+ push_vlan();
+ push_inner_vlan();
+ } else {
+ // If no push double vlan, inner_vlan_tag must be popped
+ hdr.inner_vlan_tag.setInvalid();
+#endif // WITH_DOUBLE_VLAN_TERMINATION
+ // Port-based VLAN tagging (by default all
+ // ports are assumed tagged)
+ if (!egress_vlan.apply().hit) {
+ // Push VLAN tag if not the default one.
+ if (fabric_metadata.vlan_id != DEFAULT_VLAN_ID) {
+ push_vlan();
+ }
+ }
+#ifdef WITH_DOUBLE_VLAN_TERMINATION
+ }
+#endif // WITH_DOUBLE_VLAN_TERMINATION
+
+ // TTL decrement and check.
+ if (hdr.mpls.isValid()) {
+ hdr.mpls.ttl = hdr.mpls.ttl - 1;
+ if (hdr.mpls.ttl == 0) mark_to_drop(standard_metadata);
+ } else {
+ if(hdr.ipv4.isValid()) {
+ hdr.ipv4.ttl = hdr.ipv4.ttl - 1;
+ if (hdr.ipv4.ttl == 0) mark_to_drop(standard_metadata);
+ }
+#ifdef WITH_IPV6
+ else if (hdr.ipv6.isValid()) {
+ hdr.ipv6.hop_limit = hdr.ipv6.hop_limit - 1;
+ if (hdr.ipv6.hop_limit == 0) mark_to_drop(standard_metadata);
+ }
+#endif // WITH_IPV6
+ }
+ }
+}
diff --git a/pipelines/fabric/impl/src/main/resources/include/control/packetio.p4 b/pipelines/fabric/impl/src/main/resources/include/control/packetio.p4
new file mode 100644
index 0000000..0adb8f5
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/include/control/packetio.p4
@@ -0,0 +1,50 @@
+/*
+ * 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.
+ */
+
+#include "../header.p4"
+
+control PacketIoIngress(inout parsed_headers_t hdr,
+ inout fabric_metadata_t fabric_metadata,
+ inout standard_metadata_t standard_metadata) {
+
+ apply {
+ if (hdr.packet_out.isValid()) {
+ 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;
+ }
+ }
+}
+
+control PacketIoEgress(inout parsed_headers_t hdr,
+ inout fabric_metadata_t fabric_metadata,
+ inout standard_metadata_t standard_metadata) {
+
+ apply {
+ if (fabric_metadata.is_controller_packet_out == _TRUE) {
+ // Transmit right away.
+ exit;
+ }
+ if (standard_metadata.egress_port == CPU_PORT) {
+ hdr.packet_in.setValid();
+ hdr.packet_in.ingress_port = standard_metadata.ingress_port;
+ // No need to process through the rest of the pipeline.
+ exit;
+ }
+ }
+}
diff --git a/pipelines/fabric/impl/src/main/resources/include/control/port_counter.p4 b/pipelines/fabric/impl/src/main/resources/include/control/port_counter.p4
new file mode 100644
index 0000000..a34a738
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/include/control/port_counter.p4
@@ -0,0 +1,38 @@
+/*
+ * 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 __PORT_COUNTER__
+#define __PORT_COUNTER__
+#include "../define.p4"
+#include "../header.p4"
+
+control PortCountersControl(inout parsed_headers_t hdr,
+ inout fabric_metadata_t fabric_metadata,
+ inout standard_metadata_t standard_metadata) {
+
+ counter(MAX_PORTS, CounterType.packets_and_bytes) egress_port_counter;
+ counter(MAX_PORTS, CounterType.packets_and_bytes) ingress_port_counter;
+
+ apply {
+ if (standard_metadata.egress_spec < MAX_PORTS) {
+ egress_port_counter.count((bit<32>)standard_metadata.egress_spec);
+ }
+ if (standard_metadata.ingress_port < MAX_PORTS) {
+ ingress_port_counter.count((bit<32>)standard_metadata.ingress_port);
+ }
+ }
+}
+#endif
diff --git a/pipelines/fabric/impl/src/main/resources/include/define.p4 b/pipelines/fabric/impl/src/main/resources/include/define.p4
new file mode 100644
index 0000000..8058416
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/include/define.p4
@@ -0,0 +1,175 @@
+/*
+ * 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 __DEFINE__
+#define __DEFINE__
+
+#define MAX_PORTS 511
+
+#if defined(WITH_INT_SOURCE) || defined(WITH_INT_TRANSIT) || defined(WITH_INT_SINK)
+#define WITH_INT
+#endif
+
+#ifndef WITHOUT_XCONNECT
+#define WITH_XCONNECT
+#endif
+
+#if ! defined(WITH_SIMPLE_NEXT)
+#define WITH_HASHED_NEXT
+#endif
+
+#ifndef _BOOL
+#define _BOOL bool
+#endif
+#ifndef _TRUE
+#define _TRUE true
+#endif
+#ifndef _FALSE
+#define _FALSE false
+#endif
+
+#ifndef _PKT_OUT_HDR_ANNOT
+#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
+#ifndef IP_VERSION_4
+#define IP_VERSION_4 4
+#endif
+#ifndef IP_VERSION_6
+#define IP_VERSION_6 6
+#endif
+
+#define ETH_HDR_SIZE 14
+#define IPV4_HDR_SIZE 20
+#define UDP_HDR_SIZE 8
+#define GTP_HDR_SIZE 8
+
+#define UDP_PORT_GTPU 2152
+#define GTP_GPDU 0xff
+#define GTPU_VERSION 0x01
+#define GTP_PROTOCOL_TYPE_GTP 0x01
+
+#define PKT_INSTANCE_TYPE_NORMAL 0
+#define PKT_INSTANCE_TYPE_INGRESS_CLONE 1
+#define PKT_INSTANCE_TYPE_EGRESS_CLONE 2
+#define PKT_INSTANCE_TYPE_COALESCED 3
+#define PKT_INSTANCE_TYPE_INGRESS_RECIRC 4
+#define PKT_INSTANCE_TYPE_REPLICATION 5
+#define PKT_INSTANCE_TYPE_RESUBMIT 6
+
+typedef bit<3> fwd_type_t;
+typedef bit<32> next_id_t;
+typedef bit<20> mpls_label_t;
+typedef bit<9> port_num_t;
+typedef bit<48> mac_addr_t;
+typedef bit<16> mcast_group_id_t;
+typedef bit<12> vlan_id_t;
+typedef bit<32> ipv4_addr_t;
+typedef bit<16> l4_port_t;
+
+// SPGW types
+typedef bit<2> direction_t;
+typedef bit pcc_gate_status_t;
+typedef bit<32> sdf_rule_id_t;
+typedef bit<32> pcc_rule_id_t;
+
+// spgw.p4 expects uplink packets with IP dst on this subnet
+// 140.0.0.0/8
+const ipv4_addr_t S1U_SGW_PREFIX = 2348810240;
+#define S1U_SGW_PREFIX_LEN 8
+
+const bit<16> ETHERTYPE_QINQ = 0x88A8;
+const bit<16> ETHERTYPE_QINQ_NON_STD = 0x9100;
+const bit<16> ETHERTYPE_VLAN = 0x8100;
+const bit<16> ETHERTYPE_MPLS = 0x8847;
+const bit<16> ETHERTYPE_MPLS_MULTICAST = 0x8848;
+const bit<16> ETHERTYPE_IPV4 = 0x0800;
+const bit<16> ETHERTYPE_IPV6 = 0x86dd;
+const bit<16> ETHERTYPE_ARP = 0x0806;
+const bit<16> ETHERTYPE_PPPOED = 0x8863;
+const bit<16> ETHERTYPE_PPPOES = 0x8864;
+
+const bit<16> PPPOE_PROTOCOL_IP4 = 0x0021;
+const bit<16> PPPOE_PROTOCOL_IP6 = 0x0057;
+const bit<16> PPPOE_PROTOCOL_MPLS = 0x0281;
+
+const bit<8> PROTO_ICMP = 1;
+const bit<8> PROTO_TCP = 6;
+const bit<8> PROTO_UDP = 17;
+const bit<8> PROTO_ICMPV6 = 58;
+
+const bit<4> IPV4_MIN_IHL = 5;
+
+const fwd_type_t FWD_BRIDGING = 0;
+const fwd_type_t FWD_MPLS = 1;
+const fwd_type_t FWD_IPV4_UNICAST = 2;
+const fwd_type_t FWD_IPV4_MULTICAST = 3;
+const fwd_type_t FWD_IPV6_UNICAST = 4;
+const fwd_type_t FWD_IPV6_MULTICAST = 5;
+const fwd_type_t FWD_UNKNOWN = 7;
+
+const vlan_id_t DEFAULT_VLAN_ID = 12w4094;
+
+const bit<8> DEFAULT_MPLS_TTL = 64;
+const bit<8> DEFAULT_IPV4_TTL = 64;
+
+const sdf_rule_id_t DEFAULT_SDF_RULE_ID = 0;
+const pcc_rule_id_t DEFAULT_PCC_RULE_ID = 0;
+const direction_t SPGW_DIR_UNKNOWN = 2w0;
+const direction_t SPGW_DIR_UPLINK = 2w1;
+const direction_t SPGW_DIR_DOWNLINK = 2w2;
+const pcc_gate_status_t PCC_GATE_OPEN = 1w0;
+const pcc_gate_status_t PCC_GATE_CLOSED = 1w1;
+
+/* indicate INT at LSB of DSCP */
+const bit<6> INT_DSCP = 0x1;
+
+// 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;
+
+const bit<4> NPROTO_ETHERNET = 0;
+const bit<4> NPROTO_TELEMETRY_DROP_HEADER = 1;
+const bit<4> NPROTO_TELEMETRY_SWITCH_LOCAL_HEADER = 2;
+
+const bit<6> HW_ID = 1;
+const bit<8> REPORT_FIXED_HEADER_LEN = 12;
+const bit<8> DROP_REPORT_HEADER_LEN = 12;
+const bit<8> LOCAL_REPORT_HEADER_LEN = 16;
+const bit<8> ETH_HEADER_LEN = 14;
+const bit<8> IPV4_MIN_HEAD_LEN = 20;
+const bit<8> UDP_HEADER_LEN = 8;
+
+action nop() {
+ NoAction();
+}
+
+#endif
diff --git a/pipelines/fabric/impl/src/main/resources/include/header.p4 b/pipelines/fabric/impl/src/main/resources/include/header.p4
new file mode 100644
index 0000000..09df685
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/include/header.p4
@@ -0,0 +1,259 @@
+/*
+ * 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 __HEADER__
+#define __HEADER__
+
+#include "define.p4"
+#include "int/int_header.p4"
+
+@controller_header("packet_in")
+header packet_in_header_t {
+ port_num_t ingress_port;
+ bit<7> _pad;
+}
+
+_PKT_OUT_HDR_ANNOT
+@controller_header("packet_out")
+header packet_out_header_t {
+ port_num_t egress_port;
+ bit<7> _pad;
+}
+
+header ethernet_t {
+ mac_addr_t dst_addr;
+ mac_addr_t src_addr;
+ bit<16> eth_type;
+}
+
+header vlan_tag_t {
+ bit<3> pri;
+ bit<1> cfi;
+ vlan_id_t vlan_id;
+ bit<16> eth_type;
+}
+
+header mpls_t {
+ bit<20> label;
+ bit<3> tc;
+ bit<1> bos;
+ bit<8> ttl;
+}
+
+header pppoe_t {
+ bit<4> version;
+ bit<4> type_id;
+ bit<8> code;
+ bit<16> session_id;
+ bit<16> length;
+ bit<16> protocol;
+}
+
+header ipv4_t {
+ bit<4> version;
+ bit<4> ihl;
+ bit<6> dscp;
+ bit<2> ecn;
+ bit<16> total_len;
+ bit<16> identification;
+ bit<3> flags;
+ bit<13> frag_offset;
+ bit<8> ttl;
+ bit<8> protocol;
+ bit<16> hdr_checksum;
+ bit<32> src_addr;
+ bit<32> dst_addr;
+}
+
+header ipv6_t {
+ bit<4> version;
+ bit<8> traffic_class;
+ bit<20> flow_label;
+ bit<16> payload_len;
+ bit<8> next_hdr;
+ bit<8> hop_limit;
+ bit<128> src_addr;
+ bit<128> dst_addr;
+}
+
+header tcp_t {
+ bit<16> sport;
+ bit<16> dport;
+ bit<32> seq_no;
+ bit<32> ack_no;
+ bit<4> data_offset;
+ bit<3> res;
+ bit<3> ecn;
+ bit<6> ctrl;
+ bit<16> window;
+ bit<16> checksum;
+ bit<16> urgent_ptr;
+}
+
+header udp_t {
+ bit<16> sport;
+ bit<16> dport;
+ bit<16> len;
+ bit<16> checksum;
+}
+
+header icmp_t {
+ bit<8> icmp_type;
+ bit<8> icmp_code;
+ bit<16> checksum;
+ bit<16> identifier;
+ bit<16> sequence_number;
+ bit<64> timestamp;
+}
+
+#ifdef WITH_SPGW
+// GTPU v1
+header gtpu_t {
+ bit<3> version; /* version */
+ bit<1> pt; /* protocol type */
+ bit<1> spare; /* reserved */
+ bit<1> ex_flag; /* next extension hdr present? */
+ bit<1> seq_flag; /* sequence no. */
+ bit<1> npdu_flag; /* n-pdn number present ? */
+ bit<8> msgtype; /* message type */
+ bit<16> msglen; /* message length */
+ bit<32> teid; /* tunnel endpoint id */
+}
+
+struct spgw_meta_t {
+ direction_t direction;
+ bit<16> ipv4_len;
+ bit<32> teid;
+ bit<32> s1u_enb_addr;
+ bit<32> s1u_sgw_addr;
+#ifdef WITH_SPGW_PCC_GATING
+ bit<16> l4_sport;
+ bit<16> l4_dport;
+ pcc_gate_status_t pcc_gate_status;
+ sdf_rule_id_t sdf_rule_id;
+ pcc_rule_id_t pcc_rule_id;
+#endif // WITH_SPGW_PCC_GATING
+}
+#endif // WITH_SPGW
+
+#ifdef WITH_BNG
+
+typedef bit<2> bng_type_t;
+const bng_type_t BNG_TYPE_INVALID = 2w0x0;
+const bng_type_t BNG_TYPE_UPSTREAM = 2w0x1;
+const bng_type_t BNG_TYPE_DOWNSTREAM = 2w0x2;;
+
+struct bng_meta_t {
+ bit<2> type; // upstream or downstream
+ bit<32> line_id; // subscriber line
+ bit<16> pppoe_session_id;
+ bit<32> ds_meter_result; // for downstream metering
+}
+#endif // WITH_BNG
+
+//Custom metadata definition
+struct fabric_metadata_t {
+ bit<16> last_eth_type;
+ _BOOL is_ipv4;
+ _BOOL is_ipv6;
+ _BOOL is_mpls;
+ bit<16> ip_eth_type;
+ vlan_id_t vlan_id;
+ bit<3> vlan_pri;
+ bit<1> vlan_cfi;
+#ifdef WITH_DOUBLE_VLAN_TERMINATION
+ _BOOL push_double_vlan;
+ vlan_id_t inner_vlan_id;
+ bit<3> inner_vlan_pri;
+ bit<1> inner_vlan_cfi;
+#endif // WITH_DOUBLE_VLAN_TERMINATION
+ mpls_label_t mpls_label;
+ bit<8> mpls_ttl;
+ _BOOL skip_forwarding;
+ _BOOL skip_next;
+ fwd_type_t fwd_type;
+ next_id_t next_id;
+ _BOOL is_multicast;
+ _BOOL is_controller_packet_out;
+ bit<8> ip_proto;
+ bit<16> l4_sport;
+ bit<16> l4_dport;
+#ifdef WITH_SPGW
+ spgw_meta_t spgw;
+#endif // WITH_SPGW
+#ifdef WITH_BNG
+ bng_meta_t bng;
+#endif // WITH_BNG
+#ifdef WITH_INT
+ int_metadata_t int_meta;
+#endif // WITH_INT
+}
+
+struct parsed_headers_t {
+ ethernet_t ethernet;
+ vlan_tag_t vlan_tag;
+#if defined(WITH_XCONNECT) || defined(WITH_BNG) || defined(WITH_DOUBLE_VLAN_TERMINATION)
+ vlan_tag_t inner_vlan_tag;
+#endif // WITH_XCONNECT || WITH_BNG || WITH_DOUBLE_VLAN_TERMINATION
+#ifdef WITH_BNG
+ pppoe_t pppoe;
+#endif // WITH_BNG
+ mpls_t mpls;
+#ifdef WITH_SPGW
+ ipv4_t gtpu_ipv4;
+ udp_t gtpu_udp;
+ gtpu_t gtpu;
+ ipv4_t inner_ipv4;
+ udp_t inner_udp;
+#endif // WITH_SPGW
+ ipv4_t ipv4;
+#ifdef WITH_IPV6
+ ipv6_t ipv6;
+#endif // WITH_IPV6
+ tcp_t tcp;
+ udp_t udp;
+ icmp_t icmp;
+ packet_out_header_t packet_out;
+ packet_in_header_t packet_in;
+#ifdef WITH_INT_SINK
+ // INT Report encap
+ ethernet_t report_ethernet;
+ ipv4_t report_ipv4;
+ udp_t report_udp;
+ // INT Report header (support only fixed)
+ report_fixed_header_t report_fixed_header;
+ // 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_switch_id_t int_switch_id;
+ int_port_ids_t int_port_ids;
+ int_hop_latency_t int_hop_latency;
+ int_q_occupancy_t int_q_occupancy;
+ int_ingress_tstamp_t int_ingress_tstamp;
+ int_egress_tstamp_t int_egress_tstamp;
+ int_q_congestion_t int_q_congestion;
+ int_egress_port_tx_util_t int_egress_tx_util;
+#ifdef WITH_INT_SINK
+ int_data_t int_data;
+#endif // WITH_INT_SINK
+ intl4_tail_t intl4_tail;
+#endif //WITH_INT
+}
+
+#endif
diff --git a/pipelines/fabric/impl/src/main/resources/include/int/int_header.p4 b/pipelines/fabric/impl/src/main/resources/include/int/int_header.p4
new file mode 100644
index 0000000..9b1f0e4
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/include/int/int_header.p4
@@ -0,0 +1,145 @@
+/*
+ * 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;
+ bit<32> ig_tstamp;
+ bit<32> eg_tstamp;
+}
+
+// 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;
+}
+
+#ifdef WITH_INT_SINK
+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;
+}
+#endif // WITH_INT_SINK
+
+#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/impl/src/main/resources/include/int/int_main.p4 b/pipelines/fabric/impl/src/main/resources/include/int/int_main.p4
new file mode 100644
index 0000000..c1368d8
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/include/int/int_main.p4
@@ -0,0 +1,128 @@
+/*
+ * 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 @name("ig_port");
+ }
+ actions = {
+ int_set_source;
+ @defaultonly nop();
+ }
+ const default_action = nop();
+ 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 @name("eg_spec");
+ }
+ actions = {
+ int_set_sink;
+ @defaultonly nop();
+ }
+ const default_action = nop();
+ 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/impl/src/main/resources/include/int/int_report.p4 b/pipelines/fabric/impl/src/main/resources/include/int/int_report.p4
new file mode 100644
index 0000000..8c48ba2
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/include/int/int_report.p4
@@ -0,0 +1,100 @@
+/*
+ * 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.
+ */
+
+/* -*- P4_16 -*- */
+#ifndef __INT_REPORT__
+#define __INT_REPORT__
+
+control process_int_report (
+ inout parsed_headers_t hdr,
+ inout fabric_metadata_t fabric_metadata,
+ inout standard_metadata_t standard_metadata) {
+
+ @hidden
+ action add_report_fixed_header() {
+ /* Device should include its own INT metadata as embedded,
+ * we'll not use fabric_report_header for this purpose.
+ */
+ hdr.report_fixed_header.setValid();
+ hdr.report_fixed_header.ver = 0;
+ /* only support for flow_watchlist */
+ hdr.report_fixed_header.nproto = NPROTO_ETHERNET;
+ hdr.report_fixed_header.d = 0;
+ hdr.report_fixed_header.q = 0;
+ hdr.report_fixed_header.f = 1;
+ hdr.report_fixed_header.rsvd = 0;
+ //TODO how to get information specific to the switch
+ hdr.report_fixed_header.hw_id = HW_ID;
+ // 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;
+ }
+
+ action do_report_encapsulation(mac_addr_t src_mac, mac_addr_t mon_mac, ipv4_addr_t src_ip,
+ ipv4_addr_t mon_ip, l4_port_t mon_port) {
+ //Report Ethernet Header
+ hdr.report_ethernet.setValid();
+ hdr.report_ethernet.dst_addr = mon_mac;
+ hdr.report_ethernet.src_addr = src_mac;
+ hdr.report_ethernet.eth_type = ETHERTYPE_IPV4;
+
+ //Report IPV4 Header
+ hdr.report_ipv4.setValid();
+ hdr.report_ipv4.version = 4w4;
+ hdr.report_ipv4.ihl = 4w5;
+ hdr.report_ipv4.dscp = 6w0;
+ hdr.report_ipv4.ecn = 2w0;
+ /* Total Len is report_ipv4_len + report_udp_len + report_fixed_hdr_len + ethernet_len + ipv4_totalLen */
+ hdr.report_ipv4.total_len = (bit<16>) IPV4_MIN_HEAD_LEN + (bit<16>) UDP_HEADER_LEN +
+ (bit<16>) REPORT_FIXED_HEADER_LEN + (bit<16>) ETH_HEADER_LEN + hdr.ipv4.total_len;
+ /* Dont Fragment bit should be set */
+ hdr.report_ipv4.identification = 0;
+ hdr.report_ipv4.flags = 0;
+ hdr.report_ipv4.frag_offset = 0;
+ hdr.report_ipv4.ttl = 0xFF;
+ hdr.report_ipv4.protocol = PROTO_UDP;
+ hdr.report_ipv4.src_addr = src_ip;
+ hdr.report_ipv4.dst_addr = mon_ip;
+
+ //Report UDP Header
+ hdr.report_udp.setValid();
+ hdr.report_udp.sport = 0;
+ hdr.report_udp.dport = mon_port;
+ hdr.report_udp.len = (bit<16>) UDP_HEADER_LEN + (bit<16>) REPORT_FIXED_HEADER_LEN +
+ (bit<16>) ETH_HEADER_LEN + hdr.ipv4.total_len;
+
+ add_report_fixed_header();
+ }
+
+ /* Cloned packet instance_type is PKT_INSTANCE_TYPE_INGRESS_CLONE=1
+ * Packet is forwarded according to the mirroring_add command
+ */
+ table tb_generate_report {
+ key = {
+ }
+ actions = {
+ do_report_encapsulation;
+ @defaultonly nop();
+ }
+ default_action = nop;
+ }
+
+ apply {
+ tb_generate_report.apply();
+ }
+}
+#endif
diff --git a/pipelines/fabric/impl/src/main/resources/include/int/int_sink.p4 b/pipelines/fabric/impl/src/main/resources/include/int/int_sink.p4
new file mode 100644
index 0000000..6531a17
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/include/int/int_sink.p4
@@ -0,0 +1,57 @@
+/*
+ * 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.
+ */
+
+/* -*- P4_16 -*- */
+#ifndef __INT_SINK__
+#define __INT_SINK__
+
+control process_int_sink (
+ inout parsed_headers_t hdr,
+ inout fabric_metadata_t fabric_metadata) {
+
+ @hidden
+ action restore_header () {
+ hdr.udp.dport = hdr.intl4_tail.dest_port;
+ hdr.ipv4.dscp = hdr.intl4_tail.dscp;
+ }
+
+ @hidden
+ action int_sink() {
+ // restore length fields of IPv4 header and UDP header
+ 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();
+ hdr.intl4_shim.setInvalid();
+ hdr.intl4_tail.setInvalid();
+ hdr.int_switch_id.setInvalid();
+ hdr.int_port_ids.setInvalid();
+ hdr.int_hop_latency.setInvalid();
+ hdr.int_q_occupancy.setInvalid();
+ hdr.int_ingress_tstamp.setInvalid();
+ hdr.int_egress_tstamp.setInvalid();
+ hdr.int_q_congestion.setInvalid();
+ hdr.int_egress_tx_util.setInvalid();
+ }
+
+ apply {
+ restore_header();
+ int_sink();
+ }
+}
+#endif
diff --git a/pipelines/fabric/impl/src/main/resources/include/int/int_source.p4 b/pipelines/fabric/impl/src/main/resources/include/int/int_source.p4
new file mode 100644
index 0000000..93288a4
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/include/int/int_source.p4
@@ -0,0 +1,85 @@
+/*
+ * 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.
+ */
+
+/* -*- P4_16 -*- */
+#ifndef __INT_SOURCE__
+#define __INT_SOURCE__
+
+// Insert INT header to the packet
+control process_int_source (
+ inout parsed_headers_t hdr,
+ inout fabric_metadata_t fabric_metadata,
+ inout standard_metadata_t standard_metadata) {
+
+ direct_counter(CounterType.packets_and_bytes) counter_int_source;
+
+ @hidden
+ action int_source(bit<8> max_hop, bit<5> ins_cnt, bit<4> ins_mask0003, bit<4> ins_mask0407) {
+ // 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_words = INT_HEADER_LEN_WORDS;
+ // Insert INT header.
+ hdr.int_header.setValid();
+ hdr.int_header.ver = 0;
+ hdr.int_header.rep = 0;
+ hdr.int_header.c = 0;
+ hdr.int_header.e = 0;
+ hdr.int_header.rsvd1 = 0;
+ hdr.int_header.ins_cnt = ins_cnt;
+ hdr.int_header.max_hop_cnt = max_hop;
+ hdr.int_header.total_hop_cnt = 0;
+ hdr.int_header.instruction_mask_0003 = ins_mask0003;
+ 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.
+ hdr.intl4_tail.setValid();
+ hdr.intl4_tail.next_proto = hdr.ipv4.protocol;
+ hdr.intl4_tail.dest_port = fabric_metadata.l4_dport;
+ 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 {
+ key = {
+ hdr.ipv4.src_addr: ternary @name("ipv4_src");
+ hdr.ipv4.dst_addr: ternary @name("ipv4_dst");
+ fabric_metadata.l4_sport: ternary @name("l4_sport");
+ fabric_metadata.l4_dport: ternary @name("l4_dport");
+ }
+ actions = {
+ int_source_dscp;
+ @defaultonly nop();
+ }
+ counters = counter_int_source;
+ const default_action = nop();
+ }
+
+ apply {
+ tb_int_source.apply();
+ }
+}
+#endif
diff --git a/pipelines/fabric/impl/src/main/resources/include/int/int_transit.p4 b/pipelines/fabric/impl/src/main/resources/include/int/int_transit.p4
new file mode 100644
index 0000000..b524f6f
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/include/int/int_transit.p4
@@ -0,0 +1,439 @@
+/*
+ * 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.
+ */
+
+/* -*- P4_16 -*- */
+#ifndef __INT_TRANSIT__
+#define __INT_TRANSIT__
+control process_int_transit (
+ inout parsed_headers_t hdr,
+ inout fabric_metadata_t fmeta,
+ inout standard_metadata_t smeta) {
+
+ 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
+ }
+
+#ifdef _INT_METADATA_ACTIONS
+ _INT_METADATA_ACTIONS
+#else
+ // Switch ID.
+ @hidden
+ action int_set_header_0() {
+ hdr.int_switch_id.setValid();
+ hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id;
+ }
+ // Port IDs.
+ @hidden
+ action int_set_header_1() {
+ hdr.int_port_ids.setValid();
+ hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port;
+ hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port;
+ }
+ // Hop latency.
+ @hidden
+ action int_set_header_2() {
+ hdr.int_hop_latency.setValid();
+ hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta;
+ }
+ // Queue occupancy.
+ @hidden
+ action int_set_header_3() {
+ hdr.int_q_occupancy.setValid();
+ // 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;
+ }
+ // Ingress timestamp.
+ @hidden
+ action int_set_header_4() {
+ hdr.int_ingress_tstamp.setValid();
+ hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp;
+ }
+ // Egress timestamp.
+ @hidden
+ action int_set_header_5() {
+ hdr.int_egress_tstamp.setValid();
+ hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta;
+ }
+ // Queue congestion.
+ @hidden
+ action int_set_header_6() {
+ hdr.int_q_congestion.setValid();
+ // TODO: support queue congestion.
+ hdr.int_q_congestion.q_id = 8w0;
+ hdr.int_q_congestion.q_congestion = 24w0;
+ }
+ // Egress port utilization.
+ @hidden
+ action int_set_header_7() {
+ hdr.int_egress_tx_util.setValid();
+ // 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.
+ @hidden
+ 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;
+ }
+
+ @hidden
+ 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;
+ }
+
+ @hidden
+ 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;
+ }
+
+ @hidden
+ 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.
+ @hidden
+ action int_set_header_0003_i0() {
+ }
+ @hidden
+ action int_set_header_0003_i1() {
+ int_set_header_3();
+ add_1();
+ }
+ @hidden
+ action int_set_header_0003_i2() {
+ int_set_header_2();
+ add_1();
+ }
+ @hidden
+ action int_set_header_0003_i3() {
+ int_set_header_3();
+ int_set_header_2();
+ add_2();
+ }
+ @hidden
+ action int_set_header_0003_i4() {
+ int_set_header_1();
+ add_1();
+ }
+ @hidden
+ action int_set_header_0003_i5() {
+ int_set_header_3();
+ int_set_header_1();
+ add_2();
+ }
+ @hidden
+ action int_set_header_0003_i6() {
+ int_set_header_2();
+ int_set_header_1();
+ add_2();
+ }
+ @hidden
+ action int_set_header_0003_i7() {
+ int_set_header_3();
+ int_set_header_2();
+ int_set_header_1();
+ add_3();
+ }
+ @hidden
+ action int_set_header_0003_i8() {
+ int_set_header_0();
+ add_1();
+ }
+ @hidden
+ action int_set_header_0003_i9() {
+ int_set_header_3();
+ int_set_header_0();
+ add_2();
+ }
+ @hidden
+ action int_set_header_0003_i10() {
+ int_set_header_2();
+ int_set_header_0();
+ add_2();
+ }
+ @hidden
+ action int_set_header_0003_i11() {
+ int_set_header_3();
+ int_set_header_2();
+ int_set_header_0();
+ add_3();
+ }
+ @hidden
+ action int_set_header_0003_i12() {
+ int_set_header_1();
+ int_set_header_0();
+ add_2();
+ }
+ @hidden
+ action int_set_header_0003_i13() {
+ int_set_header_3();
+ int_set_header_1();
+ int_set_header_0();
+ add_3();
+ }
+ @hidden
+ action int_set_header_0003_i14() {
+ int_set_header_2();
+ int_set_header_1();
+ int_set_header_0();
+ add_3();
+ }
+ @hidden
+ 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.
+ @hidden
+ action int_set_header_0407_i0() {
+ }
+ @hidden
+ action int_set_header_0407_i1() {
+ int_set_header_7();
+ add_1();
+ }
+ @hidden
+ action int_set_header_0407_i2() {
+ int_set_header_6();
+ add_1();
+ }
+ @hidden
+ action int_set_header_0407_i3() {
+ int_set_header_7();
+ int_set_header_6();
+ add_2();
+ }
+ @hidden
+ action int_set_header_0407_i4() {
+ int_set_header_5();
+ add_1();
+ }
+ @hidden
+ action int_set_header_0407_i5() {
+ int_set_header_7();
+ int_set_header_5();
+ add_2();
+ }
+ @hidden
+ action int_set_header_0407_i6() {
+ int_set_header_6();
+ int_set_header_5();
+ add_2();
+ }
+ @hidden
+ action int_set_header_0407_i7() {
+ int_set_header_7();
+ int_set_header_6();
+ int_set_header_5();
+ add_3();
+ }
+ @hidden
+ action int_set_header_0407_i8() {
+ int_set_header_4();
+ add_1();
+ }
+ @hidden
+ action int_set_header_0407_i9() {
+ int_set_header_7();
+ int_set_header_4();
+ add_2();
+ }
+ @hidden
+ action int_set_header_0407_i10() {
+ int_set_header_6();
+ int_set_header_4();
+ add_2();
+ }
+ @hidden
+ action int_set_header_0407_i11() {
+ int_set_header_7();
+ int_set_header_6();
+ int_set_header_4();
+ add_3();
+ }
+ @hidden
+ action int_set_header_0407_i12() {
+ int_set_header_5();
+ int_set_header_4();
+ add_2();
+ }
+ @hidden
+ action int_set_header_0407_i13() {
+ int_set_header_7();
+ int_set_header_5();
+ int_set_header_4();
+ add_3();
+ }
+ @hidden
+ action int_set_header_0407_i14() {
+ int_set_header_6();
+ int_set_header_5();
+ int_set_header_4();
+ add_3();
+ }
+ @hidden
+ 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 {
+ // 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("int_is_valid");
+ }
+ actions = {
+ init_metadata;
+ @defaultonly nop;
+ }
+ const default_action = nop();
+ size = 1;
+ }
+
+ // Table to process instruction bits 0-3.
+ @hidden
+ table tb_int_inst_0003 {
+ key = {
+ hdr.int_header.instruction_mask_0003 : exact;
+ }
+ actions = {
+ int_set_header_0003_i0;
+ int_set_header_0003_i1;
+ int_set_header_0003_i2;
+ int_set_header_0003_i3;
+ int_set_header_0003_i4;
+ int_set_header_0003_i5;
+ int_set_header_0003_i6;
+ int_set_header_0003_i7;
+ int_set_header_0003_i8;
+ int_set_header_0003_i9;
+ int_set_header_0003_i10;
+ int_set_header_0003_i11;
+ int_set_header_0003_i12;
+ int_set_header_0003_i13;
+ int_set_header_0003_i14;
+ int_set_header_0003_i15;
+ }
+ 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.
+ @hidden
+ table tb_int_inst_0407 {
+ key = {
+ hdr.int_header.instruction_mask_0407 : exact;
+ }
+ actions = {
+ int_set_header_0407_i0;
+ int_set_header_0407_i1;
+ int_set_header_0407_i2;
+ int_set_header_0407_i3;
+ int_set_header_0407_i4;
+ int_set_header_0407_i5;
+ int_set_header_0407_i6;
+ int_set_header_0407_i7;
+ int_set_header_0407_i8;
+ int_set_header_0407_i9;
+ int_set_header_0407_i10;
+ int_set_header_0407_i11;
+ int_set_header_0407_i12;
+ int_set_header_0407_i13;
+ int_set_header_0407_i14;
+ int_set_header_0407_i15;
+ }
+ 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();
+ // Increment hop cnt
+ hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 1;
+ // Update headers lengths.
+ if (hdr.ipv4.isValid()) {
+ hdr.ipv4.total_len = hdr.ipv4.total_len + fmeta.int_meta.new_bytes;
+ }
+ if (hdr.udp.isValid()) {
+ hdr.udp.len = hdr.udp.len + fmeta.int_meta.new_bytes;
+ }
+ if (hdr.intl4_shim.isValid()) {
+ hdr.intl4_shim.len_words = hdr.intl4_shim.len_words + fmeta.int_meta.new_words;
+ }
+ }
+}
+
+#endif
diff --git a/pipelines/fabric/impl/src/main/resources/include/parser.p4 b/pipelines/fabric/impl/src/main/resources/include/parser.p4
new file mode 100644
index 0000000..3fadebf
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/include/parser.p4
@@ -0,0 +1,328 @@
+/*
+ * 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 __PARSER__
+#define __PARSER__
+
+#include "define.p4"
+
+parser FabricParser (packet_in packet,
+ 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;
+ default: parse_ethernet;
+ }
+ }
+
+ state parse_packet_out {
+ packet.extract(hdr.packet_out);
+ transition parse_ethernet;
+ }
+
+ state parse_ethernet {
+ packet.extract(hdr.ethernet);
+ fabric_metadata.last_eth_type = hdr.ethernet.eth_type;
+ fabric_metadata.vlan_id = DEFAULT_VLAN_ID;
+ transition select(hdr.ethernet.eth_type){
+ ETHERTYPE_QINQ: parse_vlan_tag;
+ ETHERTYPE_QINQ_NON_STD: parse_vlan_tag;
+ ETHERTYPE_VLAN: parse_vlan_tag;
+ ETHERTYPE_MPLS: parse_mpls;
+ ETHERTYPE_IPV4: pre_parse_ipv4;
+#ifdef WITH_IPV6
+ ETHERTYPE_IPV6: pre_parse_ipv6;
+#endif // WITH_IPV6
+ default: accept;
+ }
+ }
+
+ state parse_vlan_tag {
+ packet.extract(hdr.vlan_tag);
+ transition select(hdr.vlan_tag.eth_type){
+ ETHERTYPE_IPV4: pre_parse_ipv4;
+#ifdef WITH_IPV6
+ ETHERTYPE_IPV6: pre_parse_ipv6;
+#endif // WITH_IPV6
+ ETHERTYPE_MPLS: parse_mpls;
+#if defined(WITH_XCONNECT) || defined(WITH_BNG) || defined(WITH_DOUBLE_VLAN_TERMINATION)
+ ETHERTYPE_VLAN: parse_inner_vlan_tag;
+#endif // WITH_XCONNECT
+ default: accept;
+ }
+ }
+
+#if defined(WITH_XCONNECT) || defined(WITH_BNG) || defined(WITH_DOUBLE_VLAN_TERMINATION)
+ state parse_inner_vlan_tag {
+ packet.extract(hdr.inner_vlan_tag);
+ transition select(hdr.inner_vlan_tag.eth_type){
+ ETHERTYPE_IPV4: pre_parse_ipv4;
+#ifdef WITH_IPV6
+ ETHERTYPE_IPV6: pre_parse_ipv6;
+#endif // WITH_IPV6
+ ETHERTYPE_MPLS: parse_mpls;
+#ifdef WITH_BNG
+ ETHERTYPE_PPPOED: parse_pppoe;
+ ETHERTYPE_PPPOES: parse_pppoe;
+#endif // WITH_BNG
+ default: accept;
+ }
+ }
+#endif // WITH_XCONNECT || WITH_BNG || WITH_DOUBLE_VLAN_TERMINATION
+
+#ifdef WITH_BNG
+ state parse_pppoe {
+ packet.extract(hdr.pppoe);
+ transition select(hdr.pppoe.protocol) {
+ PPPOE_PROTOCOL_MPLS: parse_mpls;
+ PPPOE_PROTOCOL_IP4: pre_parse_ipv4;
+#ifdef WITH_IPV6
+ PPPOE_PROTOCOL_IP6: pre_parse_ipv6;
+#endif // WITH_IPV6
+ default: accept;
+ }
+ }
+#endif // WITH_BNG
+
+ state parse_mpls {
+ packet.extract(hdr.mpls);
+ fabric_metadata.is_mpls = _TRUE;
+ fabric_metadata.mpls_label = hdr.mpls.label;
+ fabric_metadata.mpls_ttl = hdr.mpls.ttl;
+ // There is only one MPLS label for this fabric.
+ // Assume header after MPLS header is IPv4/IPv6
+ // Lookup first 4 bits for version
+ transition select(packet.lookahead<bit<IP_VER_LENGTH>>()) {
+ // The packet should be either IPv4 or IPv6.
+ // If we have MPLS, go directly to parsing state without
+ // moving to pre_ states, the packet is considered MPLS
+ IP_VERSION_4: parse_ipv4;
+#ifdef WITH_IPV6
+ IP_VERSION_6: parse_ipv6;
+#endif // WITH_IPV6
+ default: parse_ethernet;
+ }
+ }
+
+ // Intermediate state to set is_ipv4
+ state pre_parse_ipv4 {
+ fabric_metadata.is_ipv4 = _TRUE;
+ transition parse_ipv4;
+ }
+ state parse_ipv4 {
+ packet.extract(hdr.ipv4);
+ fabric_metadata.ip_proto = hdr.ipv4.protocol;
+ fabric_metadata.ip_eth_type = ETHERTYPE_IPV4;
+ last_ipv4_dscp = hdr.ipv4.dscp;
+ //Need header verification?
+ transition select(hdr.ipv4.protocol) {
+ PROTO_TCP: parse_tcp;
+ PROTO_UDP: parse_udp;
+ PROTO_ICMP: parse_icmp;
+ default: accept;
+ }
+ }
+
+#ifdef WITH_IPV6
+ // Intermediate state to set is_ipv6
+ state pre_parse_ipv6 {
+ fabric_metadata.is_ipv6 = _TRUE;
+ transition parse_ipv6;
+ }
+ state parse_ipv6 {
+ packet.extract(hdr.ipv6);
+ fabric_metadata.ip_proto = hdr.ipv6.next_hdr;
+ fabric_metadata.ip_eth_type = ETHERTYPE_IPV6;
+ transition select(hdr.ipv6.next_hdr) {
+ PROTO_TCP: parse_tcp;
+ PROTO_UDP: parse_udp;
+ PROTO_ICMPV6: parse_icmp;
+ default: accept;
+ }
+ }
+#endif // WITH_IPV6
+
+ state parse_tcp {
+ packet.extract(hdr.tcp);
+ fabric_metadata.l4_sport = hdr.tcp.sport;
+ fabric_metadata.l4_dport = hdr.tcp.dport;
+#ifdef WITH_INT
+ transition parse_int;
+#else
+ transition accept;
+#endif // WITH_INT
+ }
+
+ state parse_udp {
+ packet.extract(hdr.udp);
+ fabric_metadata.l4_sport = hdr.udp.sport;
+ fabric_metadata.l4_dport = hdr.udp.dport;
+ transition select(hdr.udp.dport) {
+#ifdef WITH_SPGW
+ UDP_PORT_GTPU: parse_gtpu;
+#endif // WITH_SPGW
+#ifdef WITH_INT
+ default: parse_int;
+#else
+ default: accept;
+#endif // WITH_INT
+ }
+ }
+
+ state parse_icmp {
+ packet.extract(hdr.icmp);
+ transition accept;
+ }
+
+#ifdef WITH_SPGW
+ state parse_gtpu {
+ transition select(hdr.ipv4.dst_addr[31:32-S1U_SGW_PREFIX_LEN]) {
+ // Avoid parsing GTP and inner headers if we know this GTP packet
+ // is not to be processed by this switch.
+ // FIXME: use parser value sets when support is ready in ONOS.
+ // To set the S1U_SGW_PREFIX value at runtime.
+ S1U_SGW_PREFIX[31:32-S1U_SGW_PREFIX_LEN]: do_parse_gtpu;
+ default: accept;
+ }
+ }
+
+ state do_parse_gtpu {
+ packet.extract(hdr.gtpu);
+ transition parse_inner_ipv4;
+ }
+
+ 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;
+ PROTO_ICMP: parse_icmp;
+ default: accept;
+ }
+ }
+
+ state parse_inner_udp {
+ packet.extract(hdr.inner_udp);
+ fabric_metadata.l4_sport = hdr.inner_udp.sport;
+ fabric_metadata.l4_dport = hdr.inner_udp.dport;
+#ifdef WITH_INT
+ 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_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_SINK
+ packet.emit(hdr.ethernet);
+ packet.emit(hdr.vlan_tag);
+#if defined(WITH_XCONNECT) || defined(WITH_BNG) || defined(WITH_DOUBLE_VLAN_TERMINATION)
+ packet.emit(hdr.inner_vlan_tag);
+#endif // WITH_XCONNECT || WITH_BNG || WITH_DOUBLE_VLAN_TERMINATION
+#ifdef WITH_BNG
+ packet.emit(hdr.pppoe);
+#endif // WITH_BNG
+ packet.emit(hdr.mpls);
+#ifdef WITH_SPGW
+ packet.emit(hdr.gtpu_ipv4);
+ packet.emit(hdr.gtpu_udp);
+ packet.emit(hdr.gtpu);
+#endif // WITH_SPGW
+ packet.emit(hdr.ipv4);
+#ifdef WITH_IPV6
+ packet.emit(hdr.ipv6);
+#endif // WITH_IPV6
+ packet.emit(hdr.tcp);
+ packet.emit(hdr.udp);
+ packet.emit(hdr.icmp);
+#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);
+ packet.emit(hdr.int_q_occupancy);
+ packet.emit(hdr.int_ingress_tstamp);
+ packet.emit(hdr.int_egress_tstamp);
+ packet.emit(hdr.int_q_congestion);
+ packet.emit(hdr.int_egress_tx_util);
+#endif // WITH_INT_TRANSIT
+#ifdef WITH_INT_SINK
+ packet.emit(hdr.int_data);
+#endif // WITH_INT_SINK
+ packet.emit(hdr.intl4_tail);
+#endif // WITH_INT
+ }
+}
+
+#endif
diff --git a/pipelines/fabric/impl/src/main/resources/include/size.p4 b/pipelines/fabric/impl/src/main/resources/include/size.p4
new file mode 100644
index 0000000..2883094
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/include/size.p4
@@ -0,0 +1,28 @@
+#ifndef __TABLE_SIZE__
+#define __TABLE_SIZE__
+
+// Default sizes when building for BMv2.
+#define BNG_MAX_SUBSC 8192
+#define BNG_MAX_NET_PER_SUBSC 4
+#define BNG_MAX_SUBSC_NET BNG_MAX_NET_PER_SUBSC * BNG_MAX_SUBSC
+#ifdef WITH_BNG
+ #define PORT_VLAN_TABLE_SIZE BNG_MAX_SUBSC
+#else
+ #define PORT_VLAN_TABLE_SIZE 1024
+#endif // WITH_BNG
+#define FWD_CLASSIFIER_TABLE_SIZE 1024
+#define BRIDGING_TABLE_SIZE 1024
+#define MPLS_TABLE_SIZE 1024
+#define ROUTING_V4_TABLE_SIZE 1024
+#define ROUTING_V6_TABLE_SIZE 1024
+#define ACL_TABLE_SIZE 1024
+#define XCONNECT_NEXT_TABLE_SIZE 1024
+#define NEXT_VLAN_TABLE_SIZE 1024
+#define SIMPLE_NEXT_TABLE_SIZE 1024
+#define HASHED_NEXT_TABLE_SIZE 1024
+#define HASHED_SELECTOR_MAX_GROUP_SIZE 16
+#define HASHED_ACT_PROFILE_SIZE 32w1024
+#define MULTICAST_NEXT_TABLE_SIZE 1024
+#define EGRESS_VLAN_TABLE_SIZE 1024
+
+#endif
diff --git a/pipelines/fabric/impl/src/main/resources/include/spgw.p4 b/pipelines/fabric/impl/src/main/resources/include/spgw.p4
new file mode 100644
index 0000000..6eb4c40
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/include/spgw.p4
@@ -0,0 +1,287 @@
+/*
+ * 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 __SPGW__
+#define __SPGW__
+
+control spgw_normalizer(
+ in bool is_gtpu_encapped,
+ out ipv4_t gtpu_ipv4,
+ out udp_t gtpu_udp,
+ inout ipv4_t ipv4,
+ inout udp_t udp,
+ in ipv4_t inner_ipv4,
+ in udp_t inner_udp
+ ) {
+ apply {
+ if (! is_gtpu_encapped) return;
+ gtpu_ipv4 = ipv4;
+ ipv4 = inner_ipv4;
+ gtpu_udp = udp;
+ if (inner_udp.isValid()) {
+ udp = inner_udp;
+ } else {
+ udp.setInvalid();
+ }
+ }
+}
+
+control spgw_ingress(
+ inout ipv4_t gtpu_ipv4,
+ inout udp_t gtpu_udp,
+ inout gtpu_t gtpu,
+ inout ipv4_t ipv4,
+ inout udp_t udp,
+ inout fabric_metadata_t fabric_meta,
+ inout standard_metadata_t standard_metadata
+ ) {
+
+ direct_counter(CounterType.packets_and_bytes) ue_counter;
+
+ @hidden
+ action gtpu_decap() {
+ gtpu_ipv4.setInvalid();
+ gtpu_udp.setInvalid();
+ gtpu.setInvalid();
+ }
+
+ action set_dl_sess_info(bit<32> teid,
+ bit<32> s1u_enb_addr,
+ bit<32> s1u_sgw_addr) {
+ fabric_meta.spgw.teid = teid;
+ fabric_meta.spgw.s1u_enb_addr = s1u_enb_addr;
+ fabric_meta.spgw.s1u_sgw_addr = s1u_sgw_addr;
+ ue_counter.count();
+ }
+
+ table dl_sess_lookup {
+ key = {
+ // UE addr for downlink
+ ipv4.dst_addr : exact @name("ipv4_dst");
+ }
+ actions = {
+ set_dl_sess_info();
+ @defaultonly nop();
+ }
+ const default_action = nop();
+ counters = ue_counter;
+ }
+
+ table s1u_filter_table {
+ key = {
+ // IP addresses of the S1U interfaces of this SPGW-U instance (when uplink)
+ gtpu_ipv4.dst_addr : exact @name("gtp_ipv4_dst");
+ }
+ actions = {
+ nop();
+ }
+ const default_action = nop();
+ }
+
+#ifdef WITH_SPGW_PCC_GATING
+ action set_sdf_rule_id(sdf_rule_id_t id) {
+ fabric_meta.spgw.sdf_rule_id = id;
+ }
+
+ action set_pcc_rule_id(pcc_rule_id_t id) {
+ fabric_meta.spgw.pcc_rule_id = id;
+ }
+
+ action set_pcc_info(pcc_gate_status_t gate_status) {
+ fabric_meta.spgw.pcc_gate_status = gate_status;
+ }
+
+ table sdf_rule_lookup {
+ key = {
+ fabric_meta.spgw.direction : exact @name("spgw_direction");
+ ipv4.src_addr : ternary @name("ipv4_src");
+ ipv4.dst_addr : ternary @name("ipv4_dst");
+ ipv4.protocol : ternary @name("ip_proto");
+ fabric_meta.l4_sport : ternary @name("l4_sport");
+ fabric_meta.l4_dport : ternary @name("l4_dport");
+ }
+ actions = {
+ set_sdf_rule_id();
+ }
+ const default_action = set_sdf_rule_id(DEFAULT_SDF_RULE_ID);
+ }
+
+ table pcc_rule_lookup {
+ key = {
+ fabric_meta.spgw.sdf_rule_id : exact @name("sdf_rule_id");
+ }
+ actions = {
+ set_pcc_rule_id();
+ }
+ const default_action = set_pcc_rule_id(DEFAULT_PCC_RULE_ID);
+ }
+
+ table pcc_info_lookup {
+ key = {
+ fabric_meta.spgw.pcc_rule_id : exact @name("pcc_rule_id");
+ }
+ actions = {
+ set_pcc_info();
+ }
+ const default_action = set_pcc_info(PCC_GATE_OPEN);
+ }
+#endif // WITH_SPGW_PCC_GATING
+
+ apply {
+ if (gtpu.isValid()) {
+ // If here, pkt has outer IP dst on
+ // S1U_SGW_PREFIX/S1U_SGW_PREFIX_LEN subnet.
+ // TODO: check also that gtpu.msgtype == GTP_GPDU
+ if (!s1u_filter_table.apply().hit) {
+ mark_to_drop(standard_metadata);
+ }
+ fabric_meta.spgw.direction = SPGW_DIR_UPLINK;
+ gtpu_decap();
+ } else if (dl_sess_lookup.apply().hit) {
+ fabric_meta.spgw.direction = SPGW_DIR_DOWNLINK;
+ } else {
+ fabric_meta.spgw.direction = SPGW_DIR_UNKNOWN;
+ // No SPGW processing needed.
+ return;
+ }
+
+#ifdef WITH_SPGW_PCC_GATING
+ // Allow all traffic by default.
+ fabric_meta.spgw.pcc_gate_status = PCC_GATE_OPEN;
+
+ sdf_rule_lookup.apply();
+ pcc_rule_lookup.apply();
+ pcc_info_lookup.apply();
+
+ if (fabric_meta.spgw.pcc_gate_status == PCC_GATE_CLOSED) {
+ mark_to_drop(standard_metadata);
+ }
+#endif // WITH_SPGW_PCC_GATING
+
+ // Don't ask why... we'll need this later.
+ fabric_meta.spgw.ipv4_len = ipv4.total_len;
+ }
+}
+
+
+control spgw_egress(
+ in ipv4_t ipv4,
+ inout ipv4_t gtpu_ipv4,
+ inout udp_t gtpu_udp,
+ inout gtpu_t gtpu,
+ in fabric_metadata_t fabric_meta,
+ in standard_metadata_t std_meta
+ ) {
+
+ @hidden
+ action gtpu_encap() {
+ gtpu_ipv4.setValid();
+ gtpu_ipv4.version = IP_VERSION_4;
+ gtpu_ipv4.ihl = IPV4_MIN_IHL;
+ gtpu_ipv4.dscp = 0;
+ gtpu_ipv4.ecn = 0;
+ gtpu_ipv4.total_len = ipv4.total_len
+ + (IPV4_HDR_SIZE + UDP_HDR_SIZE + GTP_HDR_SIZE);
+ gtpu_ipv4.identification = 0x1513; /* From NGIC */
+ gtpu_ipv4.flags = 0;
+ gtpu_ipv4.frag_offset = 0;
+ gtpu_ipv4.ttl = DEFAULT_IPV4_TTL;
+ gtpu_ipv4.protocol = PROTO_UDP;
+ gtpu_ipv4.dst_addr = fabric_meta.spgw.s1u_enb_addr;
+ gtpu_ipv4.src_addr = fabric_meta.spgw.s1u_sgw_addr;
+ gtpu_ipv4.hdr_checksum = 0; // Updated later
+
+ gtpu_udp.setValid();
+ gtpu_udp.sport = UDP_PORT_GTPU;
+ gtpu_udp.dport = UDP_PORT_GTPU;
+ gtpu_udp.len = fabric_meta.spgw.ipv4_len
+ + (UDP_HDR_SIZE + GTP_HDR_SIZE);
+ gtpu_udp.checksum = 0; // Updated later
+
+ gtpu.setValid();
+ gtpu.version = GTPU_VERSION;
+ gtpu.pt = GTP_PROTOCOL_TYPE_GTP;
+ gtpu.spare = 0;
+ gtpu.ex_flag = 0;
+ gtpu.seq_flag = 0;
+ gtpu.npdu_flag = 0;
+ gtpu.msgtype = GTP_GPDU;
+ gtpu.msglen = fabric_meta.spgw.ipv4_len;
+ gtpu.teid = fabric_meta.spgw.teid;
+ }
+
+ apply {
+ if (fabric_meta.spgw.direction == SPGW_DIR_DOWNLINK) {
+ gtpu_encap();
+ }
+ }
+}
+
+
+control update_gtpu_checksum(
+ inout ipv4_t gtpu_ipv4,
+ inout udp_t gtpu_udp,
+ in gtpu_t gtpu,
+ in ipv4_t ipv4,
+ in udp_t udp
+ ) {
+ apply {
+ // Compute outer IPv4 checksum.
+ update_checksum(gtpu_ipv4.isValid(),
+ {
+ gtpu_ipv4.version,
+ gtpu_ipv4.ihl,
+ gtpu_ipv4.dscp,
+ gtpu_ipv4.ecn,
+ gtpu_ipv4.total_len,
+ gtpu_ipv4.identification,
+ gtpu_ipv4.flags,
+ gtpu_ipv4.frag_offset,
+ gtpu_ipv4.ttl,
+ gtpu_ipv4.protocol,
+ gtpu_ipv4.src_addr,
+ gtpu_ipv4.dst_addr
+ },
+ gtpu_ipv4.hdr_checksum,
+ HashAlgorithm.csum16
+ );
+
+#ifdef WITH_SPGW_UDP_CSUM_UPDATE
+ // Compute outer UDP checksum.
+ update_checksum_with_payload(gtpu_udp.isValid(),
+ {
+ gtpu_ipv4.src_addr,
+ gtpu_ipv4.dst_addr,
+ 8w0,
+ gtpu_ipv4.protocol,
+ gtpu_udp.len,
+ gtpu_udp.sport,
+ gtpu_udp.dport,
+ gtpu_udp.len,
+ gtpu,
+ ipv4,
+ // FIXME: we are assuming only UDP for downlink packets
+ // How to conditionally switch between UDP/TCP/ICMP?
+ udp
+ },
+ gtpu_udp.checksum,
+ HashAlgorithm.csum16
+ );
+#endif // WITH_SPGW_UDP_CSUM_UPDATE
+ }
+}
+
+#endif
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/bmv2.json
new file mode 100644
index 0000000..933529d
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/bmv2.json
@@ -0,0 +1,7271 @@
+{
+ "header_types" : [
+ {
+ "name" : "scalars_0",
+ "id" : 0,
+ "fields" : [
+ ["tmp_0", 4, false],
+ ["tmp", 32, false],
+ ["tmp_1", 32, false],
+ ["bng_ingress_s_tag", 12, false],
+ ["bng_ingress_c_tag", 12, false],
+ ["bng_ingress_upstream_tmp", 1, false],
+ ["bng_ingress_downstream_tmp", 1, false],
+ ["bng_ingress_upstream_hasReturned", 1, false],
+ ["egress_next_tmp", 1, false],
+ ["fabric_metadata_t._last_eth_type0", 16, false],
+ ["fabric_metadata_t._is_ipv41", 1, false],
+ ["fabric_metadata_t._is_ipv62", 1, false],
+ ["fabric_metadata_t._is_mpls3", 1, false],
+ ["fabric_metadata_t._ip_eth_type4", 16, false],
+ ["fabric_metadata_t._vlan_id5", 12, false],
+ ["fabric_metadata_t._vlan_pri6", 3, false],
+ ["fabric_metadata_t._vlan_cfi7", 1, false],
+ ["fabric_metadata_t._push_double_vlan8", 1, false],
+ ["fabric_metadata_t._inner_vlan_id9", 12, false],
+ ["fabric_metadata_t._inner_vlan_pri10", 3, false],
+ ["fabric_metadata_t._inner_vlan_cfi11", 1, false],
+ ["fabric_metadata_t._mpls_label12", 20, false],
+ ["fabric_metadata_t._mpls_ttl13", 8, false],
+ ["fabric_metadata_t._skip_forwarding14", 1, false],
+ ["fabric_metadata_t._skip_next15", 1, false],
+ ["fabric_metadata_t._fwd_type16", 3, false],
+ ["fabric_metadata_t._next_id17", 32, false],
+ ["fabric_metadata_t._is_multicast18", 1, false],
+ ["fabric_metadata_t._is_controller_packet_out19", 1, false],
+ ["fabric_metadata_t._ip_proto20", 8, false],
+ ["fabric_metadata_t._l4_sport21", 16, false],
+ ["fabric_metadata_t._l4_dport22", 16, false],
+ ["fabric_metadata_t._bng_type23", 2, false],
+ ["fabric_metadata_t._bng_line_id24", 32, false],
+ ["fabric_metadata_t._bng_pppoe_session_id25", 16, false],
+ ["fabric_metadata_t._bng_ds_meter_result26", 32, false],
+ ["_padding_0", 7, 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],
+ ["recirculate_flag", 32, false],
+ ["checksum_error", 1, false],
+ ["parser_error", 32, false],
+ ["priority", 3, false],
+ ["_padding", 2, false]
+ ]
+ },
+ {
+ "name" : "ethernet_t",
+ "id" : 2,
+ "fields" : [
+ ["dst_addr", 48, false],
+ ["src_addr", 48, false],
+ ["eth_type", 16, false]
+ ]
+ },
+ {
+ "name" : "vlan_tag_t",
+ "id" : 3,
+ "fields" : [
+ ["pri", 3, false],
+ ["cfi", 1, false],
+ ["vlan_id", 12, false],
+ ["eth_type", 16, false]
+ ]
+ },
+ {
+ "name" : "pppoe_t",
+ "id" : 4,
+ "fields" : [
+ ["version", 4, false],
+ ["type_id", 4, false],
+ ["code", 8, false],
+ ["session_id", 16, false],
+ ["length", 16, false],
+ ["protocol", 16, false]
+ ]
+ },
+ {
+ "name" : "mpls_t",
+ "id" : 5,
+ "fields" : [
+ ["label", 20, false],
+ ["tc", 3, false],
+ ["bos", 1, false],
+ ["ttl", 8, false]
+ ]
+ },
+ {
+ "name" : "ipv4_t",
+ "id" : 6,
+ "fields" : [
+ ["version", 4, false],
+ ["ihl", 4, false],
+ ["dscp", 6, false],
+ ["ecn", 2, false],
+ ["total_len", 16, false],
+ ["identification", 16, false],
+ ["flags", 3, false],
+ ["frag_offset", 13, false],
+ ["ttl", 8, false],
+ ["protocol", 8, false],
+ ["hdr_checksum", 16, false],
+ ["src_addr", 32, false],
+ ["dst_addr", 32, false]
+ ]
+ },
+ {
+ "name" : "tcp_t",
+ "id" : 7,
+ "fields" : [
+ ["sport", 16, false],
+ ["dport", 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" : "udp_t",
+ "id" : 8,
+ "fields" : [
+ ["sport", 16, false],
+ ["dport", 16, false],
+ ["len", 16, false],
+ ["checksum", 16, false]
+ ]
+ },
+ {
+ "name" : "icmp_t",
+ "id" : 9,
+ "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" : 10,
+ "fields" : [
+ ["egress_port", 9, false],
+ ["_pad", 7, false]
+ ]
+ },
+ {
+ "name" : "packet_in_header_t",
+ "id" : 11,
+ "fields" : [
+ ["ingress_port", 9, false],
+ ["_pad", 7, 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" : "inner_vlan_tag",
+ "id" : 4,
+ "header_type" : "vlan_tag_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "pppoe",
+ "id" : 5,
+ "header_type" : "pppoe_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "mpls",
+ "id" : 6,
+ "header_type" : "mpls_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "ipv4",
+ "id" : 7,
+ "header_type" : "ipv4_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "tcp",
+ "id" : 8,
+ "header_type" : "tcp_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "udp",
+ "id" : 9,
+ "header_type" : "udp_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "icmp",
+ "id" : 10,
+ "header_type" : "icmp_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "packet_out",
+ "id" : 11,
+ "header_type" : "packet_out_header_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "packet_in",
+ "id" : 12,
+ "header_type" : "packet_in_header_t",
+ "metadata" : false,
+ "pi_omit" : true
+ }
+ ],
+ "header_stacks" : [],
+ "header_union_types" : [],
+ "header_unions" : [],
+ "header_union_stacks" : [],
+ "field_lists" : [
+ {
+ "id" : 1,
+ "name" : "fl",
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 46,
+ "column" : 40,
+ "source_fragment" : "{standard_metadata.ingress_port}"
+ },
+ "elements" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ }
+ ]
+ }
+ ],
+ "errors" : [
+ ["NoError", 1],
+ ["PacketTooShort", 2],
+ ["NoMatch", 3],
+ ["StackOutOfBounds", 4],
+ ["HeaderTooShort", 5],
+ ["ParserTimeout", 6],
+ ["ParserInvalidArgument", 7]
+ ],
+ "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"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0ffe"
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x88a8",
+ "mask" : null,
+ "next_state" : "parse_vlan_tag"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x9100",
+ "mask" : null,
+ "next_state" : "parse_vlan_tag"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100",
+ "mask" : null,
+ "next_state" : "parse_vlan_tag"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847",
+ "mask" : null,
+ "next_state" : "parse_mpls"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0800",
+ "mask" : null,
+ "next_state" : "pre_parse_ipv4"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_vlan_tag",
+ "id" : 3,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "vlan_tag"
+ }
+ ],
+ "op" : "extract"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x0800",
+ "mask" : null,
+ "next_state" : "pre_parse_ipv4"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847",
+ "mask" : null,
+ "next_state" : "parse_mpls"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100",
+ "mask" : null,
+ "next_state" : "parse_inner_vlan_tag"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "eth_type"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_inner_vlan_tag",
+ "id" : 4,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "inner_vlan_tag"
+ }
+ ],
+ "op" : "extract"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x0800",
+ "mask" : null,
+ "next_state" : "pre_parse_ipv4"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847",
+ "mask" : null,
+ "next_state" : "parse_mpls"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8863",
+ "mask" : null,
+ "next_state" : "parse_pppoe"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8864",
+ "mask" : null,
+ "next_state" : "parse_pppoe"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "eth_type"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_pppoe",
+ "id" : 5,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "pppoe"
+ }
+ ],
+ "op" : "extract"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x0281",
+ "mask" : null,
+ "next_state" : "parse_mpls"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0021",
+ "mask" : null,
+ "next_state" : "pre_parse_ipv4"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["pppoe", "protocol"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_mpls",
+ "id" : 6,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "mpls"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._is_mpls3"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_label12"]
+ },
+ {
+ "type" : "field",
+ "value" : ["mpls", "label"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_ttl13"]
+ },
+ {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp_0"]
+ },
+ {
+ "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_0"]
+ }
+ ]
+ },
+ {
+ "name" : "pre_parse_ipv4",
+ "id" : 7,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._is_ipv41"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : "parse_ipv4"
+ }
+ ],
+ "transition_key" : []
+ },
+ {
+ "name" : "parse_ipv4",
+ "id" : 8,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "ipv4"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._ip_proto20"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ipv4", "protocol"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._ip_eth_type4"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0800"
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x06",
+ "mask" : null,
+ "next_state" : "parse_tcp"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x11",
+ "mask" : null,
+ "next_state" : "parse_udp"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x01",
+ "mask" : null,
+ "next_state" : "parse_icmp"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["ipv4", "protocol"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_tcp",
+ "id" : 9,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "tcp"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_sport21"]
+ },
+ {
+ "type" : "field",
+ "value" : ["tcp", "sport"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_dport22"]
+ },
+ {
+ "type" : "field",
+ "value" : ["tcp", "dport"]
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : []
+ },
+ {
+ "name" : "parse_udp",
+ "id" : 10,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "udp"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_sport21"]
+ },
+ {
+ "type" : "field",
+ "value" : ["udp", "sport"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_dport22"]
+ },
+ {
+ "type" : "field",
+ "value" : ["udp", "dport"]
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["udp", "dport"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_icmp",
+ "id" : 11,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "icmp"
+ }
+ ],
+ "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" : 276,
+ "column" : 8,
+ "source_fragment" : "FabricDeparser"
+ },
+ "order" : ["packet_in", "ethernet", "vlan_tag", "inner_vlan_tag", "pppoe", "mpls", "ipv4", "tcp", "udp", "icmp"]
+ }
+ ],
+ "meter_arrays" : [
+ {
+ "name" : "FabricIngress.bng_ingress.downstream.m_besteff",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 152,
+ "column" : 33,
+ "source_fragment" : "m_besteff"
+ },
+ "is_direct" : false,
+ "size" : 8192,
+ "rate_count" : 2,
+ "type" : "bytes"
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.downstream.m_prio",
+ "id" : 1,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 153,
+ "column" : 33,
+ "source_fragment" : "m_prio"
+ },
+ "is_direct" : false,
+ "size" : 8192,
+ "rate_count" : 2,
+ "type" : "bytes"
+ }
+ ],
+ "counter_arrays" : [
+ {
+ "name" : "FabricIngress.bng_ingress.upstream.c_terminated",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 36,
+ "column" : 39,
+ "source_fragment" : "c_terminated"
+ },
+ "size" : 8192,
+ "is_direct" : false
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.upstream.c_dropped",
+ "id" : 1,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 37,
+ "column" : 39,
+ "source_fragment" : "c_dropped"
+ },
+ "size" : 8192,
+ "is_direct" : false
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.upstream.c_control",
+ "id" : 2,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 38,
+ "column" : 39,
+ "source_fragment" : "c_control"
+ },
+ "size" : 8192,
+ "is_direct" : false
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.downstream.c_line_rx",
+ "id" : 3,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 150,
+ "column" : 49,
+ "source_fragment" : "c_line_rx"
+ },
+ "size" : 8192,
+ "is_direct" : false
+ },
+ {
+ "name" : "FabricIngress.filtering.ingress_port_vlan_counter",
+ "id" : 4,
+ "is_direct" : true,
+ "binding" : "FabricIngress.filtering.ingress_port_vlan",
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 31,
+ "column" : 50,
+ "source_fragment" : "ingress_port_vlan_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.filtering.fwd_classifier_counter",
+ "id" : 5,
+ "is_direct" : true,
+ "binding" : "FabricIngress.filtering.fwd_classifier",
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 83,
+ "column" : 50,
+ "source_fragment" : "fwd_classifier_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.bridging_counter",
+ "id" : 6,
+ "is_direct" : true,
+ "binding" : "FabricIngress.forwarding.bridging",
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 36,
+ "column" : 50,
+ "source_fragment" : "bridging_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.mpls_counter",
+ "id" : 7,
+ "is_direct" : true,
+ "binding" : "FabricIngress.forwarding.mpls",
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 63,
+ "column" : 50,
+ "source_fragment" : "mpls_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.routing_v4_counter",
+ "id" : 8,
+ "is_direct" : true,
+ "binding" : "FabricIngress.forwarding.routing_v4",
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 87,
+ "column" : 50,
+ "source_fragment" : "routing_v4_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.acl.acl_counter",
+ "id" : 9,
+ "is_direct" : true,
+ "binding" : "FabricIngress.acl.acl",
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 30,
+ "column" : 50,
+ "source_fragment" : "acl_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.next_vlan_counter",
+ "id" : 10,
+ "is_direct" : true,
+ "binding" : "FabricIngress.next.next_vlan",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 67,
+ "column" : 50,
+ "source_fragment" : "next_vlan_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.hashed_counter",
+ "id" : 11,
+ "is_direct" : true,
+ "binding" : "FabricIngress.next.hashed",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 178,
+ "column" : 50,
+ "source_fragment" : "hashed_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.multicast_counter",
+ "id" : 12,
+ "is_direct" : true,
+ "binding" : "FabricIngress.next.multicast",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 222,
+ "column" : 50,
+ "source_fragment" : "multicast_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.port_counters_control.egress_port_counter",
+ "id" : 13,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 26,
+ "column" : 48,
+ "source_fragment" : "egress_port_counter"
+ },
+ "size" : 511,
+ "is_direct" : false
+ },
+ {
+ "name" : "FabricIngress.port_counters_control.ingress_port_counter",
+ "id" : 14,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 27,
+ "column" : 48,
+ "source_fragment" : "ingress_port_counter"
+ },
+ "size" : 511,
+ "is_direct" : false
+ },
+ {
+ "name" : "FabricEgress.bng_egress.downstream.c_line_tx",
+ "id" : 15,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 265,
+ "column" : 49,
+ "source_fragment" : "c_line_tx"
+ },
+ "size" : 8192,
+ "is_direct" : false
+ },
+ {
+ "name" : "FabricEgress.egress_next.egress_vlan_counter",
+ "id" : 16,
+ "is_direct" : true,
+ "binding" : "FabricEgress.egress_next.egress_vlan",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 310,
+ "column" : 50,
+ "source_fragment" : "egress_vlan_counter"
+ }
+ }
+ ],
+ "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/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" : "nop",
+ "id" : 0,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 1,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 2,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 3,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 4,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 5,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 6,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 7,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 8,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.upstream.punt_to_cpu",
+ "id" : 9,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_spec"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00ff"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 44,
+ "column" : 8,
+ "source_fragment" : "smeta.egress_spec = 255"
+ }
+ },
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricIngress.bng_ingress.upstream.c_control"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_line_id24"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 45,
+ "column" : 8,
+ "source_fragment" : "c_control.count(fmeta.bng.line_id)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.upstream.term_disabled",
+ "id" : 10,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_type23"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../header.p4",
+ "line" : 155,
+ "column" : 36,
+ "source_fragment" : "2w0x0; ..."
+ }
+ },
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "mark_to_drop(smeta)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.upstream.term_enabled_v4",
+ "id" : 11,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "eth_type"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0800"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 110,
+ "column" : 31,
+ "source_fragment" : "0x0800; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0800"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 110,
+ "column" : 31,
+ "source_fragment" : "0x0800; ..."
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "pppoe"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.pppoe.setInvalid()"
+ }
+ },
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricIngress.bng_ingress.upstream.c_terminated"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_line_id24"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 70,
+ "column" : 8,
+ "source_fragment" : "c_terminated.count(fmeta.bng.line_id)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.downstream.set_session",
+ "id" : 12,
+ "runtime_data" : [
+ {
+ "name" : "pppoe_session_id",
+ "bitwidth" : 16
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_type23"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../header.p4",
+ "line" : 157,
+ "column" : 39,
+ "source_fragment" : "2w0x2;; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_pppoe_session_id25"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 157,
+ "column" : 35,
+ "source_fragment" : "= pppoe_session_id; ..."
+ }
+ },
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricIngress.bng_ingress.downstream.c_line_rx"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_line_id24"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 158,
+ "column" : 8,
+ "source_fragment" : "c_line_rx.count(fmeta.bng.line_id)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.downstream.drop",
+ "id" : 13,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_type23"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../header.p4",
+ "line" : 157,
+ "column" : 39,
+ "source_fragment" : "2w0x2;; ..."
+ }
+ },
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricIngress.bng_ingress.downstream.c_line_rx"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_line_id24"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 163,
+ "column" : 8,
+ "source_fragment" : "c_line_rx.count(fmeta.bng.line_id)"
+ }
+ },
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 164,
+ "column" : 8,
+ "source_fragment" : "mark_to_drop(smeta)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.downstream.qos_prio",
+ "id" : 14,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.downstream.qos_besteff",
+ "id" : 15,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.set_line",
+ "id" : 16,
+ "runtime_data" : [
+ {
+ "name" : "line_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_line_id24"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 321,
+ "column" : 30,
+ "source_fragment" : "= line_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.filtering.deny",
+ "id" : 17,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_forwarding14"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 36,
+ "column" : 40,
+ "source_fragment" : "= true; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_next15"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 37,
+ "column" : 34,
+ "source_fragment" : "= true; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.filtering.permit",
+ "id" : 18,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.filtering.permit_with_internal_vlan",
+ "id" : 19,
+ "runtime_data" : [
+ {
+ "name" : "vlan_id",
+ "bitwidth" : 12
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 47,
+ "column" : 32,
+ "source_fragment" : "= vlan_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.filtering.set_forwarding_type",
+ "id" : 20,
+ "runtime_data" : [
+ {
+ "name" : "fwd_type",
+ "bitwidth" : 3
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._fwd_type16"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 86,
+ "column" : 33,
+ "source_fragment" : "= fwd_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.forwarding.set_next_id_bridging",
+ "id" : 21,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id17"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 30,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.forwarding.pop_mpls_and_next",
+ "id" : 22,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_label12"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 66,
+ "column" : 35,
+ "source_fragment" : "= 0; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id17"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 30,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.forwarding.set_next_id_routing_v4",
+ "id" : 23,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id17"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 30,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.forwarding.nop_routing_v4",
+ "id" : 24,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.acl.set_next_id_acl",
+ "id" : 25,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id17"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 33,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.punt_to_cpu",
+ "id" : 26,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_spec"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00ff"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 39,
+ "column" : 8,
+ "source_fragment" : "standard_metadata.egress_spec = 255"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_next15"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 40,
+ "column" : 34,
+ "source_fragment" : "= true; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.set_clone_session_id",
+ "id" : 27,
+ "runtime_data" : [
+ {
+ "name" : "clone_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "clone_ingress_pkt_to_egress",
+ "parameters" : [
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x1"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 46,
+ "column" : 8,
+ "source_fragment" : "clone3(CloneType.I2E, clone_id, {standard_metadata.ingress_port})"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.drop",
+ "id" : 28,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 51,
+ "column" : 8,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_next15"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 52,
+ "column" : 34,
+ "source_fragment" : "= true; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.nop_acl",
+ "id" : 29,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.next.set_vlan",
+ "id" : 30,
+ "runtime_data" : [
+ {
+ "name" : "vlan_id",
+ "bitwidth" : 12
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 70,
+ "column" : 32,
+ "source_fragment" : "= vlan_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.set_double_vlan",
+ "id" : 31,
+ "runtime_data" : [
+ {
+ "name" : "outer_vlan_id",
+ "bitwidth" : 12
+ },
+ {
+ "name" : "inner_vlan_id",
+ "bitwidth" : 12
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 70,
+ "column" : 32,
+ "source_fragment" : "= vlan_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._push_double_vlan8"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 77,
+ "column" : 41,
+ "source_fragment" : "= true; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._inner_vlan_id9"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 1
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 78,
+ "column" : 38,
+ "source_fragment" : "= inner_vlan_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.output_hashed",
+ "id" : 32,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.routing_hashed",
+ "id" : 33,
+ "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" : 36,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.mpls_routing_hashed",
+ "id" : 34,
+ "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" : ["scalars", "fabric_metadata_t._mpls_label12"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 3
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 46,
+ "column" : 35,
+ "source_fragment" : "= label; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "src_addr"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 1
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 36,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.set_mcast_group_id",
+ "id" : 35,
+ "runtime_data" : [
+ {
+ "name" : "group_id",
+ "bitwidth" : 16
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "mcast_grp"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 225,
+ "column" : 8,
+ "source_fragment" : "standard_metadata.mcast_grp = group_id"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._is_multicast18"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 226,
+ "column" : 37,
+ "source_fragment" : "= true; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act",
+ "id" : 36,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_spec"]
+ },
+ {
+ "type" : "field",
+ "value" : ["packet_out", "egress_port"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 25,
+ "column" : 12,
+ "source_fragment" : "standard_metadata.egress_spec = hdr.packet_out.egress_port"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "packet_out"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 26,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_out.setInvalid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._is_controller_packet_out19"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 27,
+ "column" : 53,
+ "source_fragment" : "= true; ..."
+ }
+ },
+ {
+ "op" : "exit",
+ "parameters" : [],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 29,
+ "column" : 12,
+ "source_fragment" : "exit"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_0",
+ "id" : 37,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "vlan_id"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 110,
+ "column" : 36,
+ "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_pri6"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "pri"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 111,
+ "column" : 37,
+ "source_fragment" : "= hdr.vlan_tag.pri; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_cfi7"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "cfi"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 112,
+ "column" : 37,
+ "source_fragment" : "= hdr.vlan_tag.cfi; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_1",
+ "id" : 38,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._inner_vlan_id9"]
+ },
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "vlan_id"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 116,
+ "column" : 42,
+ "source_fragment" : "= hdr.inner_vlan_tag.vlan_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._inner_vlan_pri10"]
+ },
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "pri"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 117,
+ "column" : 43,
+ "source_fragment" : "= hdr.inner_vlan_tag.pri; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._inner_vlan_cfi11"]
+ },
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "cfi"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 118,
+ "column" : 43,
+ "source_fragment" : "= hdr.inner_vlan_tag.cfi; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_2",
+ "id" : 39,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_ttl13"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x41"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 126,
+ "column" : 37,
+ "source_fragment" : "= DEFAULT_MPLS_TTL + 1; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_3",
+ "id" : 40,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 108,
+ "column" : 31,
+ "source_fragment" : "0x8847; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_4",
+ "id" : 41,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "eth_type"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 136,
+ "column" : 50,
+ "source_fragment" : "= hdr.inner_vlan_tag.eth_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_5",
+ "id" : 42,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "eth_type"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 139,
+ "column" : 50,
+ "source_fragment" : "= hdr.vlan_tag.eth_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_6",
+ "id" : 43,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 141,
+ "column" : 46,
+ "source_fragment" : "= hdr.ethernet.eth_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_7",
+ "id" : 44,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_spec"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 31,
+ "column" : 38,
+ "source_fragment" : "(bit<32>)standard_metadata.egress_spec"
+ }
+ },
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricIngress.port_counters_control.egress_port_counter"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 31,
+ "column" : 12,
+ "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_8",
+ "id" : 45,
+ "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", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 34,
+ "column" : 39,
+ "source_fragment" : "(bit<32>)standard_metadata.ingress_port"
+ }
+ },
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricIngress.port_counters_control.ingress_port_counter"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp_1"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 34,
+ "column" : 12,
+ "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_9",
+ "id" : 46,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_s_tag"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "vlan_id"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 339,
+ "column" : 16,
+ "source_fragment" : "s_tag = hdr.vlan_tag.vlan_id"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_c_tag"]
+ },
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "vlan_id"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 340,
+ "column" : 16,
+ "source_fragment" : "c_tag = hdr.inner_vlan_tag.vlan_id"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_10",
+ "id" : 47,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_s_tag"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 344,
+ "column" : 16,
+ "source_fragment" : "s_tag = fmeta.vlan_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_c_tag"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._inner_vlan_id9"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 345,
+ "column" : 16,
+ "source_fragment" : "c_tag = fmeta.inner_vlan_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_11",
+ "id" : 48,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_upstream_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_12",
+ "id" : 49,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_upstream_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_13",
+ "id" : 50,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_type23"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../header.p4",
+ "line" : 156,
+ "column" : 37,
+ "source_fragment" : "2w0x1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_upstream_hasReturned"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_14",
+ "id" : 51,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_upstream_hasReturned"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 124,
+ "column" : 12,
+ "source_fragment" : "return"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_15",
+ "id" : 52,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricIngress.bng_ingress.upstream.c_dropped"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_line_id24"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 129,
+ "column" : 20,
+ "source_fragment" : "c_dropped.count(fmeta.bng.line_id)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_16",
+ "id" : 53,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_downstream_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_17",
+ "id" : 54,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_downstream_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_18",
+ "id" : 55,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "execute_meter",
+ "parameters" : [
+ {
+ "type" : "meter_array",
+ "value" : "FabricIngress.bng_ingress.downstream.m_prio"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_line_id24"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_ds_meter_result26"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 236,
+ "column" : 24,
+ "source_fragment" : "m_prio.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_19",
+ "id" : 56,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "execute_meter",
+ "parameters" : [
+ {
+ "type" : "meter_array",
+ "value" : "FabricIngress.bng_ingress.downstream.m_besteff"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_line_id24"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_ds_meter_result26"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 239,
+ "column" : 24,
+ "source_fragment" : "m_besteff.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "nop",
+ "id" : 57,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricEgress.bng_egress.downstream.encap_v4",
+ "id" : 58,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "eth_type"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8864"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 114,
+ "column" : 33,
+ "source_fragment" : "0x8864; ..."
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "pppoe"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 271,
+ "column" : 8,
+ "source_fragment" : "hdr.pppoe.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["pppoe", "version"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 272,
+ "column" : 8,
+ "source_fragment" : "hdr.pppoe.version = 4w1"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["pppoe", "type_id"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 273,
+ "column" : 8,
+ "source_fragment" : "hdr.pppoe.type_id = 4w1"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["pppoe", "code"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 274,
+ "column" : 8,
+ "source_fragment" : "hdr.pppoe.code = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["pppoe", "session_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_pppoe_session_id25"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 275,
+ "column" : 8,
+ "source_fragment" : "hdr.pppoe.session_id = fmeta.bng.pppoe_session_id; ..."
+ }
+ },
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricEgress.bng_egress.downstream.c_line_tx"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_line_id24"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 276,
+ "column" : 8,
+ "source_fragment" : "c_line_tx.count(fmeta.bng.line_id)"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["pppoe", "length"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["ipv4", "total_len"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0002"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 281,
+ "column" : 8,
+ "source_fragment" : "hdr.pppoe.length = hdr.ipv4.total_len + 16w2"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["pppoe", "protocol"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0021"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 116,
+ "column" : 35,
+ "source_fragment" : "0x0021; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.pop_mpls_if_present",
+ "id" : 59,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "mpls"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 264,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.setInvalid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._ip_eth_type4"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 266,
+ "column" : 38,
+ "source_fragment" : "= fabric_metadata.ip_eth_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.set_mpls",
+ "id" : 60,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "mpls"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 271,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "label"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_label12"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 272,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.label = fabric_metadata.mpls_label; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "tc"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 273,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.tc = 3w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "bos"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 274,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.bos = 1w1"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_ttl13"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 275,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.ttl = fabric_metadata.mpls_ttl; // Decrement after push. ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 108,
+ "column" : 31,
+ "source_fragment" : "0x8847; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.push_vlan",
+ "id" : 61,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "vlan_tag"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 283,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "cfi"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_cfi7"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 284,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "pri"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_pri6"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 285,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "eth_type"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 286,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.eth_type = fabric_metadata.last_eth_type; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "vlan_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 287,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 107,
+ "column" : 31,
+ "source_fragment" : "0x8100; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.push_vlan",
+ "id" : 62,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "vlan_tag"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 283,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "cfi"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_cfi7"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 284,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "pri"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_pri6"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 285,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "eth_type"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 286,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.eth_type = fabric_metadata.last_eth_type; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "vlan_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 287,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 107,
+ "column" : 31,
+ "source_fragment" : "0x8100; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.push_inner_vlan",
+ "id" : 63,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "inner_vlan_tag"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 296,
+ "column" : 8,
+ "source_fragment" : "hdr.inner_vlan_tag.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "cfi"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._inner_vlan_cfi11"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 297,
+ "column" : 8,
+ "source_fragment" : "hdr.inner_vlan_tag.cfi = fabric_metadata.inner_vlan_cfi; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "pri"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._inner_vlan_pri10"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 298,
+ "column" : 8,
+ "source_fragment" : "hdr.inner_vlan_tag.pri = fabric_metadata.inner_vlan_pri; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "vlan_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._inner_vlan_id9"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 299,
+ "column" : 8,
+ "source_fragment" : "hdr.inner_vlan_tag.vlan_id = fabric_metadata.inner_vlan_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "eth_type"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 300,
+ "column" : 8,
+ "source_fragment" : "hdr.inner_vlan_tag.eth_type = fabric_metadata.last_eth_type; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "eth_type"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 107,
+ "column" : 31,
+ "source_fragment" : "0x8100; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x88a8"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 105,
+ "column" : 31,
+ "source_fragment" : "0x88A8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.pop_vlan",
+ "id" : 64,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 313,
+ "column" : 8,
+ "source_fragment" : "hdr.ethernet.eth_type = fabric_metadata.last_eth_type; ..."
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "vlan_tag"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 314,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.setInvalid()"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_20",
+ "id" : 65,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "exit",
+ "parameters" : [],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 41,
+ "column" : 12,
+ "source_fragment" : "exit"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_21",
+ "id" : 66,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "packet_in"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 44,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_in.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["packet_in", "ingress_port"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 45,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port"
+ }
+ },
+ {
+ "op" : "exit",
+ "parameters" : [],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 47,
+ "column" : 12,
+ "source_fragment" : "exit"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_22",
+ "id" : 67,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 335,
+ "column" : 12,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_23",
+ "id" : 68,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "egress_next_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_24",
+ "id" : 69,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "egress_next_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_25",
+ "id" : 70,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "inner_vlan_tag"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 351,
+ "column" : 12,
+ "source_fragment" : "hdr.inner_vlan_tag.setInvalid()"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_26",
+ "id" : 71,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 368,
+ "column" : 35,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_27",
+ "id" : 72,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 367,
+ "column" : 12,
+ "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_28",
+ "id" : 73,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 372,
+ "column" : 39,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_29",
+ "id" : 74,
+ "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" : 371,
+ "column" : 16,
+ "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1"
+ }
+ }
+ ]
+ }
+ ],
+ "pipelines" : [
+ {
+ "name" : "ingress",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 46,
+ "column" : 8,
+ "source_fragment" : "FabricIngress"
+ },
+ "init_table" : "node_2",
+ "tables" : [
+ {
+ "name" : "tbl_act",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 25,
+ "column" : 42,
+ "source_fragment" : "= hdr.packet_out.egress_port; ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [36],
+ "actions" : ["act"],
+ "base_default_next" : "node_4",
+ "next_tables" : {
+ "act" : "node_4"
+ },
+ "default_entry" : {
+ "action_id" : 36,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_0",
+ "id" : 1,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 110,
+ "column" : 36,
+ "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [37],
+ "actions" : ["act_0"],
+ "base_default_next" : "node_6",
+ "next_tables" : {
+ "act_0" : "node_6"
+ },
+ "default_entry" : {
+ "action_id" : 37,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_1",
+ "id" : 2,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 116,
+ "column" : 42,
+ "source_fragment" : "= hdr.inner_vlan_tag.vlan_id; ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [38],
+ "actions" : ["act_1"],
+ "base_default_next" : "node_8",
+ "next_tables" : {
+ "act_1" : "node_8"
+ },
+ "default_entry" : {
+ "action_id" : 38,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_2",
+ "id" : 3,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 126,
+ "column" : 37,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [39],
+ "actions" : ["act_2"],
+ "base_default_next" : "node_10",
+ "next_tables" : {
+ "act_2" : "node_10"
+ },
+ "default_entry" : {
+ "action_id" : 39,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_3",
+ "id" : 4,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 131,
+ "column" : 42,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [40],
+ "actions" : ["act_3"],
+ "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+ "next_tables" : {
+ "act_3" : "FabricIngress.filtering.ingress_port_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 40,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_4",
+ "id" : 5,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 136,
+ "column" : 50,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [41],
+ "actions" : ["act_4"],
+ "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+ "next_tables" : {
+ "act_4" : "FabricIngress.filtering.ingress_port_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 41,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_5",
+ "id" : 6,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 139,
+ "column" : 50,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [42],
+ "actions" : ["act_5"],
+ "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+ "next_tables" : {
+ "act_5" : "FabricIngress.filtering.ingress_port_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 42,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_6",
+ "id" : 7,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 141,
+ "column" : 46,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [43],
+ "actions" : ["act_6"],
+ "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+ "next_tables" : {
+ "act_6" : "FabricIngress.filtering.ingress_port_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 43,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.filtering.ingress_port_vlan",
+ "id" : 8,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 53,
+ "column" : 10,
+ "source_fragment" : "ingress_port_vlan"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "vlan_is_valid",
+ "target" : ["vlan_tag", "$valid$"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "vlan_id",
+ "target" : ["vlan_tag", "vlan_id"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "inner_vlan_id",
+ "target" : ["inner_vlan_tag", "vlan_id"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 8192,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [17, 18, 19],
+ "actions" : ["FabricIngress.filtering.deny", "FabricIngress.filtering.permit", "FabricIngress.filtering.permit_with_internal_vlan"],
+ "base_default_next" : "FabricIngress.filtering.fwd_classifier",
+ "next_tables" : {
+ "FabricIngress.filtering.deny" : "FabricIngress.filtering.fwd_classifier",
+ "FabricIngress.filtering.permit" : "FabricIngress.filtering.fwd_classifier",
+ "FabricIngress.filtering.permit_with_internal_vlan" : "FabricIngress.filtering.fwd_classifier"
+ },
+ "default_entry" : {
+ "action_id" : 17,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.filtering.fwd_classifier",
+ "id" : 9,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 90,
+ "column" : 10,
+ "source_fragment" : "fwd_classifier"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_dst",
+ "target" : ["ethernet", "dst_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "is_ipv4",
+ "target" : ["scalars", "fabric_metadata_t._is_ipv41"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "is_ipv6",
+ "target" : ["scalars", "fabric_metadata_t._is_ipv62"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "is_mpls",
+ "target" : ["scalars", "fabric_metadata_t._is_mpls3"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [20],
+ "actions" : ["FabricIngress.filtering.set_forwarding_type"],
+ "base_default_next" : "node_19",
+ "next_tables" : {
+ "FabricIngress.filtering.set_forwarding_type" : "node_19"
+ },
+ "default_entry" : {
+ "action_id" : 20,
+ "action_const" : true,
+ "action_data" : ["0x0"],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.bridging",
+ "id" : 10,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 46,
+ "column" : 10,
+ "source_fragment" : "bridging"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "vlan_id",
+ "target" : ["scalars", "fabric_metadata_t._vlan_id5"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_dst",
+ "target" : ["ethernet", "dst_addr"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [21, 3],
+ "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"],
+ "base_default_next" : "FabricIngress.acl.acl",
+ "next_tables" : {
+ "FabricIngress.forwarding.set_next_id_bridging" : "FabricIngress.acl.acl",
+ "nop" : "FabricIngress.acl.acl"
+ },
+ "default_entry" : {
+ "action_id" : 3,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.mpls",
+ "id" : 11,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 71,
+ "column" : 10,
+ "source_fragment" : "mpls"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "mpls_label",
+ "target" : ["scalars", "fabric_metadata_t._mpls_label12"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [22, 4],
+ "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"],
+ "base_default_next" : "FabricIngress.acl.acl",
+ "next_tables" : {
+ "FabricIngress.forwarding.pop_mpls_and_next" : "FabricIngress.acl.acl",
+ "nop" : "FabricIngress.acl.acl"
+ },
+ "default_entry" : {
+ "action_id" : 4,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.routing_v4",
+ "id" : 12,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 101,
+ "column" : 10,
+ "source_fragment" : "routing_v4"
+ },
+ "key" : [
+ {
+ "match_type" : "lpm",
+ "name" : "ipv4_dst",
+ "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" : [23, 24, 5],
+ "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"],
+ "base_default_next" : "FabricIngress.acl.acl",
+ "next_tables" : {
+ "FabricIngress.forwarding.set_next_id_routing_v4" : "FabricIngress.acl.acl",
+ "FabricIngress.forwarding.nop_routing_v4" : "FabricIngress.acl.acl",
+ "nop" : "FabricIngress.acl.acl"
+ },
+ "default_entry" : {
+ "action_id" : 5,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.acl.acl",
+ "id" : 13,
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 60,
+ "column" : 10,
+ "source_fragment" : "acl"
+ },
+ "key" : [
+ {
+ "match_type" : "ternary",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ip_proto",
+ "target" : ["scalars", "fabric_metadata_t._ip_proto20"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "l4_sport",
+ "target" : ["scalars", "fabric_metadata_t._l4_sport21"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "l4_dport",
+ "target" : ["scalars", "fabric_metadata_t._l4_dport22"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_src",
+ "target" : ["ethernet", "dst_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_dst",
+ "target" : ["ethernet", "src_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "vlan_id",
+ "target" : ["vlan_tag", "vlan_id"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_type",
+ "target" : ["scalars", "fabric_metadata_t._last_eth_type0"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ipv4_src",
+ "target" : ["ipv4", "src_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ipv4_dst",
+ "target" : ["ipv4", "dst_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "icmp_type",
+ "target" : ["icmp", "icmp_type"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "icmp_code",
+ "target" : ["icmp", "icmp_code"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [25, 26, 27, 28, 29],
+ "actions" : ["FabricIngress.acl.set_next_id_acl", "FabricIngress.acl.punt_to_cpu", "FabricIngress.acl.set_clone_session_id", "FabricIngress.acl.drop", "FabricIngress.acl.nop_acl"],
+ "base_default_next" : "node_27",
+ "next_tables" : {
+ "FabricIngress.acl.set_next_id_acl" : "node_27",
+ "FabricIngress.acl.punt_to_cpu" : "node_27",
+ "FabricIngress.acl.set_clone_session_id" : "node_27",
+ "FabricIngress.acl.drop" : "node_27",
+ "FabricIngress.acl.nop_acl" : "node_27"
+ },
+ "default_entry" : {
+ "action_id" : 29,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.next.hashed",
+ "id" : 14,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 196,
+ "column" : 10,
+ "source_fragment" : "hashed"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "next_id",
+ "target" : ["scalars", "fabric_metadata_t._next_id17"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "indirect_ws",
+ "action_profile" : "FabricIngress.next.hashed_selector",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [32, 33, 34, 7],
+ "actions" : ["FabricIngress.next.output_hashed", "FabricIngress.next.routing_hashed", "FabricIngress.next.mpls_routing_hashed", "nop"],
+ "base_default_next" : "FabricIngress.next.multicast",
+ "next_tables" : {
+ "FabricIngress.next.output_hashed" : "FabricIngress.next.multicast",
+ "FabricIngress.next.routing_hashed" : "FabricIngress.next.multicast",
+ "FabricIngress.next.mpls_routing_hashed" : "FabricIngress.next.multicast",
+ "nop" : "FabricIngress.next.multicast"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.multicast",
+ "id" : 15,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 230,
+ "column" : 10,
+ "source_fragment" : "multicast"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "next_id",
+ "target" : ["scalars", "fabric_metadata_t._next_id17"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [35, 8],
+ "actions" : ["FabricIngress.next.set_mcast_group_id", "nop"],
+ "base_default_next" : "FabricIngress.next.next_vlan",
+ "next_tables" : {
+ "FabricIngress.next.set_mcast_group_id" : "FabricIngress.next.next_vlan",
+ "nop" : "FabricIngress.next.next_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 8,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.next.next_vlan",
+ "id" : 16,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 82,
+ "column" : 10,
+ "source_fragment" : "next_vlan"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "next_id",
+ "target" : ["scalars", "fabric_metadata_t._next_id17"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [30, 31, 6],
+ "actions" : ["FabricIngress.next.set_vlan", "FabricIngress.next.set_double_vlan", "nop"],
+ "base_default_next" : "node_31",
+ "next_tables" : {
+ "FabricIngress.next.set_vlan" : "node_31",
+ "FabricIngress.next.set_double_vlan" : "node_31",
+ "nop" : "node_31"
+ },
+ "default_entry" : {
+ "action_id" : 6,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_7",
+ "id" : 17,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 31,
+ "column" : 12,
+ "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [44],
+ "actions" : ["act_7"],
+ "base_default_next" : "node_33",
+ "next_tables" : {
+ "act_7" : "node_33"
+ },
+ "default_entry" : {
+ "action_id" : 44,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_8",
+ "id" : 18,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 34,
+ "column" : 12,
+ "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [45],
+ "actions" : ["act_8"],
+ "base_default_next" : "node_35",
+ "next_tables" : {
+ "act_8" : "node_35"
+ },
+ "default_entry" : {
+ "action_id" : 45,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_9",
+ "id" : 19,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 339,
+ "column" : 22,
+ "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [46],
+ "actions" : ["act_9"],
+ "base_default_next" : "FabricIngress.bng_ingress.t_line_map",
+ "next_tables" : {
+ "act_9" : "FabricIngress.bng_ingress.t_line_map"
+ },
+ "default_entry" : {
+ "action_id" : 46,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_10",
+ "id" : 20,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 344,
+ "column" : 22,
+ "source_fragment" : "= fmeta.vlan_id; ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [47],
+ "actions" : ["act_10"],
+ "base_default_next" : "FabricIngress.bng_ingress.t_line_map",
+ "next_tables" : {
+ "act_10" : "FabricIngress.bng_ingress.t_line_map"
+ },
+ "default_entry" : {
+ "action_id" : 47,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.t_line_map",
+ "id" : 21,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 324,
+ "column" : 14,
+ "source_fragment" : "t_line_map"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "s_tag",
+ "target" : ["scalars", "bng_ingress_s_tag"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "c_tag",
+ "target" : ["scalars", "bng_ingress_c_tag"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 8192,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [2, 16],
+ "actions" : ["nop", "FabricIngress.bng_ingress.set_line"],
+ "base_default_next" : "node_39",
+ "next_tables" : {
+ "nop" : "node_39",
+ "FabricIngress.bng_ingress.set_line" : "node_39"
+ },
+ "default_entry" : {
+ "action_id" : 2,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_11",
+ "id" : 22,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 353,
+ "column" : 31,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [50],
+ "actions" : ["act_13"],
+ "base_default_next" : "FabricIngress.bng_ingress.upstream.t_pppoe_cp",
+ "next_tables" : {
+ "act_13" : "FabricIngress.bng_ingress.upstream.t_pppoe_cp"
+ },
+ "default_entry" : {
+ "action_id" : 50,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.upstream.t_pppoe_cp",
+ "id" : 23,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 48,
+ "column" : 10,
+ "source_fragment" : "t_pppoe_cp"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "pppoe_code",
+ "target" : ["pppoe", "code"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "pppoe_protocol",
+ "target" : ["pppoe", "protocol"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 16,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [9, 0],
+ "actions" : ["FabricIngress.bng_ingress.upstream.punt_to_cpu", "nop"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "__HIT__" : "tbl_act_12",
+ "__MISS__" : "tbl_act_13"
+ },
+ "default_entry" : {
+ "action_id" : 0,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_12",
+ "id" : 24,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [48],
+ "actions" : ["act_11"],
+ "base_default_next" : "node_44",
+ "next_tables" : {
+ "act_11" : "node_44"
+ },
+ "default_entry" : {
+ "action_id" : 48,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_13",
+ "id" : 25,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [49],
+ "actions" : ["act_12"],
+ "base_default_next" : "node_44",
+ "next_tables" : {
+ "act_12" : "node_44"
+ },
+ "default_entry" : {
+ "action_id" : 49,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_14",
+ "id" : 26,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 124,
+ "column" : 12,
+ "source_fragment" : "return"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [51],
+ "actions" : ["act_14"],
+ "base_default_next" : "node_46",
+ "next_tables" : {
+ "act_14" : "node_46"
+ },
+ "default_entry" : {
+ "action_id" : 51,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.upstream.t_pppoe_term_v4",
+ "id" : 27,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 85,
+ "column" : 10,
+ "source_fragment" : "t_pppoe_term_v4"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "line_id",
+ "target" : ["scalars", "fabric_metadata_t._bng_line_id24"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "ipv4_src",
+ "target" : ["ipv4", "src_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "pppoe_session_id",
+ "target" : ["pppoe", "session_id"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 32768,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [11, 10],
+ "actions" : ["FabricIngress.bng_ingress.upstream.term_enabled_v4", "FabricIngress.bng_ingress.upstream.term_disabled"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "FabricIngress.bng_ingress.upstream.term_disabled" : "tbl_act_15",
+ "FabricIngress.bng_ingress.upstream.term_enabled_v4" : null
+ },
+ "default_entry" : {
+ "action_id" : 10,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_15",
+ "id" : 28,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 129,
+ "column" : 20,
+ "source_fragment" : "c_dropped.count(fmeta.bng.line_id)"
+ },
+ "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
+ }
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.downstream.t_line_session_map",
+ "id" : 29,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 167,
+ "column" : 10,
+ "source_fragment" : "t_line_session_map"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "line_id",
+ "target" : ["scalars", "fabric_metadata_t._bng_line_id24"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 8192,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [1, 12, 13],
+ "actions" : ["nop", "FabricIngress.bng_ingress.downstream.set_session", "FabricIngress.bng_ingress.downstream.drop"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "__HIT__" : "tbl_act_16",
+ "__MISS__" : "tbl_act_17"
+ },
+ "default_entry" : {
+ "action_id" : 1,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_16",
+ "id" : 30,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [53],
+ "actions" : ["act_16"],
+ "base_default_next" : "node_53",
+ "next_tables" : {
+ "act_16" : "node_53"
+ },
+ "default_entry" : {
+ "action_id" : 53,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_17",
+ "id" : 31,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [54],
+ "actions" : ["act_17"],
+ "base_default_next" : "node_53",
+ "next_tables" : {
+ "act_17" : "node_53"
+ },
+ "default_entry" : {
+ "action_id" : 54,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.downstream.t_qos_v4",
+ "id" : 32,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 192,
+ "column" : 10,
+ "source_fragment" : "t_qos_v4"
+ },
+ "key" : [
+ {
+ "match_type" : "ternary",
+ "name" : "line_id",
+ "target" : ["scalars", "fabric_metadata_t._bng_line_id24"],
+ "mask" : null
+ },
+ {
+ "match_type" : "lpm",
+ "name" : "ipv4_src",
+ "target" : ["ipv4", "src_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ipv4_dscp",
+ "target" : ["ipv4", "dscp"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ipv4_ecn",
+ "target" : ["ipv4", "ecn"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 256,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [14, 15],
+ "actions" : ["FabricIngress.bng_ingress.downstream.qos_prio", "FabricIngress.bng_ingress.downstream.qos_besteff"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "FabricIngress.bng_ingress.downstream.qos_prio" : "tbl_act_18",
+ "FabricIngress.bng_ingress.downstream.qos_besteff" : "tbl_act_19"
+ },
+ "default_entry" : {
+ "action_id" : 15,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_18",
+ "id" : 33,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 236,
+ "column" : 24,
+ "source_fragment" : "m_prio.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [55],
+ "actions" : ["act_18"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "act_18" : null
+ },
+ "default_entry" : {
+ "action_id" : 55,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_19",
+ "id" : 34,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 239,
+ "column" : 24,
+ "source_fragment" : "m_besteff.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [56],
+ "actions" : ["act_19"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "act_19" : null
+ },
+ "default_entry" : {
+ "action_id" : 56,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ }
+ ],
+ "action_profiles" : [
+ {
+ "name" : "FabricIngress.next.hashed_selector",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 177,
+ "column" : 57,
+ "source_fragment" : "hashed_selector"
+ },
+ "max_size" : 1024,
+ "selector" : {
+ "algo" : "crc16",
+ "input" : [
+ {
+ "type" : "field",
+ "value" : ["ipv4", "dst_addr"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ipv4", "src_addr"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._ip_proto20"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_sport21"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_dport22"]
+ }
+ ]
+ }
+ }
+ ],
+ "conditionals" : [
+ {
+ "name" : "node_2",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 24,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_out.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["packet_out", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act",
+ "false_next" : "node_4"
+ },
+ {
+ "name" : "node_4",
+ "id" : 1,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 109,
+ "column" : 12,
+ "source_fragment" : "hdr.vlan_tag.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["vlan_tag", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_0",
+ "false_next" : "node_6"
+ },
+ {
+ "name" : "node_6",
+ "id" : 2,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 115,
+ "column" : 12,
+ "source_fragment" : "hdr.inner_vlan_tag.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_1",
+ "false_next" : "node_8"
+ },
+ {
+ "name" : "node_8",
+ "id" : 3,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 121,
+ "column" : 12,
+ "source_fragment" : "!hdr.mpls.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "not",
+ "left" : null,
+ "right" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["mpls", "$valid$"]
+ }
+ }
+ }
+ }
+ },
+ "true_next" : "tbl_act_2",
+ "false_next" : "node_10"
+ },
+ {
+ "name" : "node_10",
+ "id" : 4,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 130,
+ "column" : 12,
+ "source_fragment" : "hdr.mpls.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["mpls", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_3",
+ "false_next" : "node_12"
+ },
+ {
+ "name" : "node_12",
+ "id" : 5,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 133,
+ "column" : 16,
+ "source_fragment" : "hdr.vlan_tag.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["vlan_tag", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "node_13",
+ "false_next" : "tbl_act_6"
+ },
+ {
+ "name" : "node_13",
+ "id" : 6,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 135,
+ "column" : 19,
+ "source_fragment" : "hdr.inner_vlan_tag.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_4",
+ "false_next" : "tbl_act_5"
+ },
+ {
+ "name" : "node_19",
+ "id" : 7,
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 71,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.skip_forwarding == false"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_forwarding14"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ },
+ "true_next" : "node_20",
+ "false_next" : "FabricIngress.acl.acl"
+ },
+ {
+ "name" : "node_20",
+ "id" : 8,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 141,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.fwd_type == FWD_BRIDGING"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._fwd_type16"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ }
+ },
+ "true_next" : "FabricIngress.forwarding.bridging",
+ "false_next" : "node_22"
+ },
+ {
+ "name" : "node_22",
+ "id" : 9,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 142,
+ "column" : 17,
+ "source_fragment" : "fabric_metadata.fwd_type == FWD_MPLS"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._fwd_type16"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "true_next" : "FabricIngress.forwarding.mpls",
+ "false_next" : "node_24"
+ },
+ {
+ "name" : "node_24",
+ "id" : 10,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 143,
+ "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_type16"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "true_next" : "FabricIngress.forwarding.routing_v4",
+ "false_next" : "FabricIngress.acl.acl"
+ },
+ {
+ "name" : "node_27",
+ "id" : 11,
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 75,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.skip_next == false"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_next15"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ },
+ "true_next" : "FabricIngress.next.hashed",
+ "false_next" : "node_35"
+ },
+ {
+ "name" : "node_31",
+ "id" : 12,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 30,
+ "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_7",
+ "false_next" : "node_33"
+ },
+ {
+ "name" : "node_33",
+ "id" : 13,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 33,
+ "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_8",
+ "false_next" : "node_35"
+ },
+ {
+ "name" : "node_35",
+ "id" : 14,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 338,
+ "column" : 15,
+ "source_fragment" : "hdr.pppoe.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["pppoe", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_9",
+ "false_next" : "tbl_act_10"
+ },
+ {
+ "name" : "node_39",
+ "id" : 15,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 352,
+ "column" : 16,
+ "source_fragment" : "hdr.pppoe.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["pppoe", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_11",
+ "false_next" : "FabricIngress.bng_ingress.downstream.t_line_session_map"
+ },
+ {
+ "name" : "node_44",
+ "id" : 16,
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_upstream_tmp"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_14",
+ "false_next" : "node_46"
+ },
+ {
+ "name" : "node_46",
+ "id" : 17,
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "not",
+ "left" : null,
+ "right" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_upstream_hasReturned"]
+ }
+ }
+ }
+ }
+ },
+ "false_next" : null,
+ "true_next" : "node_47"
+ },
+ {
+ "name" : "node_47",
+ "id" : 18,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 126,
+ "column" : 12,
+ "source_fragment" : "hdr.ipv4.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["ipv4", "$valid$"]
+ }
+ }
+ },
+ "false_next" : null,
+ "true_next" : "FabricIngress.bng_ingress.upstream.t_pppoe_term_v4"
+ },
+ {
+ "name" : "node_53",
+ "id" : 19,
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_downstream_tmp"]
+ }
+ }
+ },
+ "false_next" : null,
+ "true_next" : "node_54"
+ },
+ {
+ "name" : "node_54",
+ "id" : 20,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 233,
+ "column" : 16,
+ "source_fragment" : "hdr.ipv4.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["ipv4", "$valid$"]
+ }
+ }
+ },
+ "false_next" : null,
+ "true_next" : "FabricIngress.bng_ingress.downstream.t_qos_v4"
+ }
+ ]
+ },
+ {
+ "name" : "egress",
+ "id" : 1,
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 93,
+ "column" : 8,
+ "source_fragment" : "FabricEgress"
+ },
+ "init_table" : "node_60",
+ "tables" : [
+ {
+ "name" : "tbl_act_20",
+ "id" : 35,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 41,
+ "column" : 12,
+ "source_fragment" : "exit"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [65],
+ "actions" : ["act_20"],
+ "base_default_next" : "node_62",
+ "next_tables" : {
+ "act_20" : "node_62"
+ },
+ "default_entry" : {
+ "action_id" : 65,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_21",
+ "id" : 36,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 44,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_in.setValid(); ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [66],
+ "actions" : ["act_21"],
+ "base_default_next" : "node_64",
+ "next_tables" : {
+ "act_21" : "node_64"
+ },
+ "default_entry" : {
+ "action_id" : 66,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_22",
+ "id" : 37,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 335,
+ "column" : 12,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [67],
+ "actions" : ["act_22"],
+ "base_default_next" : "node_66",
+ "next_tables" : {
+ "act_22" : "node_66"
+ },
+ "default_entry" : {
+ "action_id" : 67,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_egress_next_pop_mpls_if_present",
+ "id" : 38,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 339,
+ "column" : 36,
+ "source_fragment" : "pop_mpls_if_present()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [59],
+ "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"],
+ "base_default_next" : "node_70",
+ "next_tables" : {
+ "FabricEgress.egress_next.pop_mpls_if_present" : "node_70"
+ },
+ "default_entry" : {
+ "action_id" : 59,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_egress_next_set_mpls",
+ "id" : 39,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 341,
+ "column" : 12,
+ "source_fragment" : "set_mpls()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [60],
+ "actions" : ["FabricEgress.egress_next.set_mpls"],
+ "base_default_next" : "node_70",
+ "next_tables" : {
+ "FabricEgress.egress_next.set_mpls" : "node_70"
+ },
+ "default_entry" : {
+ "action_id" : 60,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_egress_next_push_vlan",
+ "id" : 40,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 347,
+ "column" : 12,
+ "source_fragment" : "push_vlan()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [61],
+ "actions" : ["FabricEgress.egress_next.push_vlan"],
+ "base_default_next" : "tbl_egress_next_push_inner_vlan",
+ "next_tables" : {
+ "FabricEgress.egress_next.push_vlan" : "tbl_egress_next_push_inner_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 61,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_egress_next_push_inner_vlan",
+ "id" : 41,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 348,
+ "column" : 12,
+ "source_fragment" : "push_inner_vlan()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [63],
+ "actions" : ["FabricEgress.egress_next.push_inner_vlan"],
+ "base_default_next" : "node_80",
+ "next_tables" : {
+ "FabricEgress.egress_next.push_inner_vlan" : "node_80"
+ },
+ "default_entry" : {
+ "action_id" : 63,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_23",
+ "id" : 42,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 351,
+ "column" : 12,
+ "source_fragment" : "hdr.inner_vlan_tag.setInvalid()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [70],
+ "actions" : ["act_25"],
+ "base_default_next" : "FabricEgress.egress_next.egress_vlan",
+ "next_tables" : {
+ "act_25" : "FabricEgress.egress_next.egress_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 70,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricEgress.egress_next.egress_vlan",
+ "id" : 43,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 318,
+ "column" : 10,
+ "source_fragment" : "egress_vlan"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "vlan_id",
+ "target" : ["scalars", "fabric_metadata_t._vlan_id5"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "eg_port",
+ "target" : ["standard_metadata", "egress_port"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [64, 57],
+ "actions" : ["FabricEgress.egress_next.pop_vlan", "nop"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "__HIT__" : "tbl_act_24",
+ "__MISS__" : "tbl_act_25"
+ },
+ "default_entry" : {
+ "action_id" : 57,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_24",
+ "id" : 44,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [68],
+ "actions" : ["act_23"],
+ "base_default_next" : "node_77",
+ "next_tables" : {
+ "act_23" : "node_77"
+ },
+ "default_entry" : {
+ "action_id" : 68,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_25",
+ "id" : 45,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [69],
+ "actions" : ["act_24"],
+ "base_default_next" : "node_77",
+ "next_tables" : {
+ "act_24" : "node_77"
+ },
+ "default_entry" : {
+ "action_id" : 69,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_egress_next_push_vlan_0",
+ "id" : 46,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 358,
+ "column" : 20,
+ "source_fragment" : "push_vlan()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [62],
+ "actions" : ["FabricEgress.egress_next.push_vlan"],
+ "base_default_next" : "node_80",
+ "next_tables" : {
+ "FabricEgress.egress_next.push_vlan" : "node_80"
+ },
+ "default_entry" : {
+ "action_id" : 62,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_26",
+ "id" : 47,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 367,
+ "column" : 25,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [72],
+ "actions" : ["act_27"],
+ "base_default_next" : "node_82",
+ "next_tables" : {
+ "act_27" : "node_82"
+ },
+ "default_entry" : {
+ "action_id" : 72,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_27",
+ "id" : 48,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 368,
+ "column" : 35,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [71],
+ "actions" : ["act_26"],
+ "base_default_next" : "node_88",
+ "next_tables" : {
+ "act_26" : "node_88"
+ },
+ "default_entry" : {
+ "action_id" : 71,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_28",
+ "id" : 49,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 371,
+ "column" : 29,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [74],
+ "actions" : ["act_29"],
+ "base_default_next" : "node_86",
+ "next_tables" : {
+ "act_29" : "node_86"
+ },
+ "default_entry" : {
+ "action_id" : 74,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_29",
+ "id" : 50,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 372,
+ "column" : 39,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [73],
+ "actions" : ["act_28"],
+ "base_default_next" : "node_88",
+ "next_tables" : {
+ "act_28" : "node_88"
+ },
+ "default_entry" : {
+ "action_id" : 73,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_bng_egress_downstream_encap_v4",
+ "id" : 51,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 295,
+ "column" : 12,
+ "source_fragment" : "encap_v4()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [58],
+ "actions" : ["FabricEgress.bng_egress.downstream.encap_v4"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "FabricEgress.bng_egress.downstream.encap_v4" : null
+ },
+ "default_entry" : {
+ "action_id" : 58,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ }
+ ],
+ "action_profiles" : [],
+ "conditionals" : [
+ {
+ "name" : "node_60",
+ "id" : 21,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 39,
+ "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_out19"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ },
+ "true_next" : "tbl_act_20",
+ "false_next" : "node_62"
+ },
+ {
+ "name" : "node_62",
+ "id" : 22,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 43,
+ "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" : "tbl_act_21",
+ "false_next" : "node_64"
+ },
+ {
+ "name" : "node_64",
+ "id" : 23,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 333,
+ "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_multicast18"]
+ }
+ }
+ },
+ "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_act_22",
+ "false_next" : "node_66"
+ },
+ {
+ "name" : "node_66",
+ "id" : 24,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 338,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.mpls_label == 0"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_label12"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ }
+ },
+ "true_next" : "node_67",
+ "false_next" : "tbl_egress_next_set_mpls"
+ },
+ {
+ "name" : "node_67",
+ "id" : 25,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 339,
+ "column" : 16,
+ "source_fragment" : "hdr.mpls.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["mpls", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_egress_next_pop_mpls_if_present",
+ "false_next" : "node_70"
+ },
+ {
+ "name" : "node_70",
+ "id" : 26,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 345,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.push_double_vlan == true"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._push_double_vlan8"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ },
+ "true_next" : "tbl_egress_next_push_vlan",
+ "false_next" : "tbl_act_23"
+ },
+ {
+ "name" : "node_77",
+ "id" : 27,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 355,
+ "column" : 16,
+ "source_fragment" : "!egress_vlan.apply().hit"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "not",
+ "left" : null,
+ "right" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "egress_next_tmp"]
+ }
+ }
+ }
+ }
+ },
+ "true_next" : "node_78",
+ "false_next" : "node_80"
+ },
+ {
+ "name" : "node_78",
+ "id" : 28,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 357,
+ "column" : 20,
+ "source_fragment" : "fabric_metadata.vlan_id != DEFAULT_VLAN_ID"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "!=",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0ffe"
+ }
+ }
+ },
+ "true_next" : "tbl_egress_next_push_vlan_0",
+ "false_next" : "node_80"
+ },
+ {
+ "name" : "node_80",
+ "id" : 29,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 366,
+ "column" : 12,
+ "source_fragment" : "hdr.mpls.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["mpls", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_26",
+ "false_next" : "node_84"
+ },
+ {
+ "name" : "node_82",
+ "id" : 30,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 368,
+ "column" : 16,
+ "source_fragment" : "hdr.mpls.ttl == 0"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ }
+ },
+ "true_next" : "tbl_act_27",
+ "false_next" : "node_88"
+ },
+ {
+ "name" : "node_84",
+ "id" : 31,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 370,
+ "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_28",
+ "false_next" : "node_88"
+ },
+ {
+ "name" : "node_86",
+ "id" : 32,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 372,
+ "column" : 20,
+ "source_fragment" : "hdr.ipv4.ttl == 0"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["ipv4", "ttl"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ }
+ },
+ "true_next" : "tbl_act_29",
+ "false_next" : "node_88"
+ },
+ {
+ "name" : "node_88",
+ "id" : 33,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 369,
+ "column" : 12,
+ "source_fragment" : "fmeta.bng.type == BNG_TYPE_DOWNSTREAM"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_type23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "false_next" : null,
+ "true_next" : "node_89"
+ },
+ {
+ "name" : "node_89",
+ "id" : 34,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 294,
+ "column" : 12,
+ "source_fragment" : "hdr.ipv4.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["ipv4", "$valid$"]
+ }
+ }
+ },
+ "false_next" : null,
+ "true_next" : "tbl_bng_egress_downstream_encap_v4"
+ }
+ ]
+ }
+ ],
+ "checksums" : [
+ {
+ "name" : "cksum",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "include/checksum.p4",
+ "line" : 28,
+ "column" : 8,
+ "source_fragment" : "update_checksum(hdr.ipv4.isValid(), ..."
+ },
+ "target" : ["ipv4", "hdr_checksum"],
+ "type" : "generic",
+ "calculation" : "calc",
+ "verify" : false,
+ "update" : true,
+ "if_cond" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["ipv4", "$valid$"]
+ }
+ }
+ }
+ },
+ {
+ "name" : "cksum_0",
+ "id" : 1,
+ "source_info" : {
+ "filename" : "include/checksum.p4",
+ "line" : 57,
+ "column" : 8,
+ "source_fragment" : "verify_checksum(hdr.ipv4.isValid(), ..."
+ },
+ "target" : ["ipv4", "hdr_checksum"],
+ "type" : "generic",
+ "calculation" : "calc_0",
+ "verify" : true,
+ "update" : false,
+ "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"]
+ ],
+ [
+ "intrinsic_metadata.priority",
+ ["standard_metadata", "priority"]
+ ]
+ ],
+ "program" : "fabric.p4",
+ "__meta__" : {
+ "version" : [2, 18],
+ "compiler" : "https://github.com/p4lang/p4c"
+ }
+}
\ No newline at end of file
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/cpu_port.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/cpu_port.txt
new file mode 100644
index 0000000..ace9d03
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/cpu_port.txt
@@ -0,0 +1 @@
+255
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/p4info.txt
new file mode 100644
index 0000000..98b6cac
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-bng/bmv2/default/p4info.txt
@@ -0,0 +1,1110 @@
+pkg_info {
+ arch: "v1model"
+}
+tables {
+ preamble {
+ id: 33603300
+ name: "FabricIngress.bng_ingress.upstream.t_pppoe_cp"
+ alias: "t_pppoe_cp"
+ }
+ match_fields {
+ id: 1
+ name: "pppoe_code"
+ bitwidth: 8
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "pppoe_protocol"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16830893
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ size: 16
+}
+tables {
+ preamble {
+ id: 33595047
+ name: "FabricIngress.bng_ingress.upstream.t_pppoe_term_v4"
+ alias: "t_pppoe_term_v4"
+ }
+ match_fields {
+ id: 1
+ name: "line_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "ipv4_src"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ match_fields {
+ id: 3
+ name: "pppoe_session_id"
+ bitwidth: 16
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16780562
+ }
+ action_refs {
+ id: 16785853
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16785853
+ size: 32768
+}
+tables {
+ preamble {
+ id: 33594775
+ name: "FabricIngress.bng_ingress.downstream.t_line_session_map"
+ alias: "t_line_session_map"
+ }
+ match_fields {
+ id: 1
+ name: "line_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ action_refs {
+ id: 16795395
+ }
+ action_refs {
+ id: 16822844
+ }
+ const_default_action_id: 16819938
+ size: 8192
+}
+tables {
+ preamble {
+ id: 33602462
+ name: "FabricIngress.bng_ingress.downstream.t_qos_v4"
+ alias: "t_qos_v4"
+ }
+ match_fields {
+ id: 1
+ name: "line_id"
+ bitwidth: 32
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 2
+ name: "ipv4_src"
+ bitwidth: 32
+ match_type: LPM
+ }
+ match_fields {
+ id: 3
+ name: "ipv4_dscp"
+ bitwidth: 6
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 4
+ name: "ipv4_ecn"
+ bitwidth: 2
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16830304
+ }
+ action_refs {
+ id: 16804676
+ }
+ const_default_action_id: 16804676
+ size: 256
+}
+tables {
+ preamble {
+ id: 33592041
+ name: "FabricIngress.bng_ingress.t_line_map"
+ alias: "t_line_map"
+ }
+ match_fields {
+ id: 1
+ name: "s_tag"
+ bitwidth: 12
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "c_tag"
+ bitwidth: 12
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ action_refs {
+ id: 16829385
+ }
+ const_default_action_id: 16819938
+ size: 8192
+}
+tables {
+ preamble {
+ id: 33611649
+ name: "FabricIngress.filtering.ingress_port_vlan"
+ alias: "ingress_port_vlan"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "vlan_is_valid"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ match_fields {
+ id: 3
+ name: "vlan_id"
+ bitwidth: 12
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 4
+ name: "inner_vlan_id"
+ bitwidth: 12
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16836487
+ }
+ action_refs {
+ id: 16818236
+ }
+ action_refs {
+ id: 16794911
+ }
+ const_default_action_id: 16836487
+ direct_resource_ids: 318815501
+ size: 8192
+}
+tables {
+ preamble {
+ id: 33596298
+ name: "FabricIngress.filtering.fwd_classifier"
+ alias: "fwd_classifier"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "eth_dst"
+ bitwidth: 48
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 3
+ name: "is_ipv4"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ match_fields {
+ id: 4
+ name: "is_ipv6"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ match_fields {
+ id: 5
+ name: "is_mpls"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16840921
+ }
+ const_default_action_id: 16840921
+ direct_resource_ids: 318827326
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33596749
+ name: "FabricIngress.forwarding.bridging"
+ alias: "bridging"
+ }
+ match_fields {
+ id: 1
+ name: "vlan_id"
+ bitwidth: 12
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "eth_dst"
+ bitwidth: 48
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16811012
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318770289
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33574274
+ name: "FabricIngress.forwarding.mpls"
+ alias: "mpls"
+ }
+ match_fields {
+ id: 1
+ name: "mpls_label"
+ bitwidth: 20
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16827758
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318830507
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33562650
+ name: "FabricIngress.forwarding.routing_v4"
+ alias: "routing_v4"
+ }
+ match_fields {
+ id: 1
+ name: "ipv4_dst"
+ bitwidth: 32
+ match_type: LPM
+ }
+ action_refs {
+ id: 16777434
+ }
+ action_refs {
+ id: 16804187
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318811107
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33618978
+ name: "FabricIngress.acl.acl"
+ alias: "acl"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 2
+ name: "ip_proto"
+ bitwidth: 8
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 3
+ name: "l4_sport"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 4
+ name: "l4_dport"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 5
+ name: "eth_src"
+ bitwidth: 48
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 6
+ name: "eth_dst"
+ bitwidth: 48
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 7
+ name: "vlan_id"
+ bitwidth: 12
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 8
+ name: "eth_type"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 9
+ name: "ipv4_src"
+ bitwidth: 32
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 10
+ name: "ipv4_dst"
+ bitwidth: 32
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 11
+ name: "icmp_type"
+ bitwidth: 8
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 12
+ name: "icmp_code"
+ bitwidth: 8
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16807382
+ }
+ action_refs {
+ id: 16829684
+ }
+ action_refs {
+ id: 16781601
+ }
+ action_refs {
+ id: 16820765
+ }
+ action_refs {
+ id: 16827694
+ }
+ const_default_action_id: 16827694
+ direct_resource_ids: 318801025
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33599709
+ name: "FabricIngress.next.next_vlan"
+ alias: "next_vlan"
+ }
+ match_fields {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16790685
+ }
+ action_refs {
+ id: 16803337
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318768144
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33608588
+ name: "FabricIngress.next.hashed"
+ alias: "hashed"
+ }
+ match_fields {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16815357
+ }
+ action_refs {
+ id: 16791402
+ }
+ action_refs {
+ id: 16779255
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ implementation_id: 285217164
+ direct_resource_ids: 318800532
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33606828
+ name: "FabricIngress.next.multicast"
+ alias: "multicast"
+ }
+ match_fields {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16779917
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318801752
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33599342
+ name: "FabricEgress.egress_next.egress_vlan"
+ alias: "egress_vlan"
+ }
+ match_fields {
+ id: 1
+ name: "vlan_id"
+ bitwidth: 12
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "eg_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16790030
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318827144
+ size: 1024
+}
+actions {
+ preamble {
+ id: 16819938
+ name: "nop"
+ alias: "nop"
+ }
+}
+actions {
+ preamble {
+ id: 16830893
+ name: "FabricIngress.bng_ingress.upstream.punt_to_cpu"
+ alias: "upstream.punt_to_cpu"
+ }
+}
+actions {
+ preamble {
+ id: 16785853
+ name: "FabricIngress.bng_ingress.upstream.term_disabled"
+ alias: "term_disabled"
+ }
+}
+actions {
+ preamble {
+ id: 16780562
+ name: "FabricIngress.bng_ingress.upstream.term_enabled_v4"
+ alias: "term_enabled_v4"
+ }
+}
+actions {
+ preamble {
+ id: 16795395
+ name: "FabricIngress.bng_ingress.downstream.set_session"
+ alias: "set_session"
+ }
+ params {
+ id: 1
+ name: "pppoe_session_id"
+ bitwidth: 16
+ }
+}
+actions {
+ preamble {
+ id: 16822844
+ name: "FabricIngress.bng_ingress.downstream.drop"
+ alias: "downstream.drop"
+ }
+}
+actions {
+ preamble {
+ id: 16830304
+ name: "FabricIngress.bng_ingress.downstream.qos_prio"
+ alias: "qos_prio"
+ }
+}
+actions {
+ preamble {
+ id: 16804676
+ name: "FabricIngress.bng_ingress.downstream.qos_besteff"
+ alias: "qos_besteff"
+ }
+}
+actions {
+ preamble {
+ id: 16829385
+ name: "FabricIngress.bng_ingress.set_line"
+ alias: "set_line"
+ }
+ params {
+ id: 1
+ name: "line_id"
+ bitwidth: 32
+ }
+}
+actions {
+ preamble {
+ id: 16836487
+ name: "FabricIngress.filtering.deny"
+ alias: "deny"
+ }
+}
+actions {
+ preamble {
+ id: 16818236
+ name: "FabricIngress.filtering.permit"
+ alias: "permit"
+ }
+}
+actions {
+ preamble {
+ id: 16794911
+ name: "FabricIngress.filtering.permit_with_internal_vlan"
+ alias: "permit_with_internal_vlan"
+ }
+ params {
+ id: 1
+ name: "vlan_id"
+ bitwidth: 12
+ }
+}
+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: 16807382
+ name: "FabricIngress.acl.set_next_id_acl"
+ alias: "set_next_id_acl"
+ }
+ params {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ }
+}
+actions {
+ preamble {
+ id: 16829684
+ name: "FabricIngress.acl.punt_to_cpu"
+ alias: "acl.punt_to_cpu"
+ }
+}
+actions {
+ preamble {
+ id: 16781601
+ name: "FabricIngress.acl.set_clone_session_id"
+ alias: "set_clone_session_id"
+ }
+ params {
+ id: 1
+ name: "clone_id"
+ bitwidth: 32
+ }
+}
+actions {
+ preamble {
+ id: 16820765
+ name: "FabricIngress.acl.drop"
+ alias: "acl.drop"
+ }
+}
+actions {
+ preamble {
+ id: 16827694
+ name: "FabricIngress.acl.nop_acl"
+ alias: "nop_acl"
+ }
+}
+actions {
+ preamble {
+ id: 16790685
+ name: "FabricIngress.next.set_vlan"
+ alias: "set_vlan"
+ }
+ params {
+ id: 1
+ name: "vlan_id"
+ bitwidth: 12
+ }
+}
+actions {
+ preamble {
+ id: 16803337
+ name: "FabricIngress.next.set_double_vlan"
+ alias: "set_double_vlan"
+ }
+ params {
+ id: 1
+ name: "outer_vlan_id"
+ bitwidth: 12
+ }
+ params {
+ id: 2
+ name: "inner_vlan_id"
+ bitwidth: 12
+ }
+}
+actions {
+ preamble {
+ id: 16815357
+ name: "FabricIngress.next.output_hashed"
+ alias: "output_hashed"
+ }
+ params {
+ id: 1
+ name: "port_num"
+ bitwidth: 9
+ }
+}
+actions {
+ preamble {
+ id: 16791402
+ name: "FabricIngress.next.routing_hashed"
+ alias: "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: 16779255
+ name: "FabricIngress.next.mpls_routing_hashed"
+ alias: "mpls_routing_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: 16779917
+ name: "FabricIngress.next.set_mcast_group_id"
+ alias: "set_mcast_group_id"
+ }
+ params {
+ id: 1
+ name: "group_id"
+ bitwidth: 16
+ }
+}
+actions {
+ preamble {
+ id: 16784000
+ name: "FabricEgress.bng_egress.downstream.encap_v4"
+ alias: "encap_v4"
+ }
+}
+actions {
+ preamble {
+ id: 16790030
+ name: "FabricEgress.egress_next.pop_vlan"
+ alias: "pop_vlan"
+ }
+}
+action_profiles {
+ preamble {
+ id: 285217164
+ name: "FabricIngress.next.hashed_selector"
+ alias: "hashed_selector"
+ }
+ table_ids: 33608588
+ with_selector: true
+ size: 1024
+ max_group_size: 16
+}
+counters {
+ preamble {
+ id: 302022672
+ name: "FabricIngress.bng_ingress.upstream.c_terminated"
+ alias: "c_terminated"
+ }
+ spec {
+ unit: PACKETS
+ }
+ size: 8192
+}
+counters {
+ preamble {
+ id: 302043418
+ name: "FabricIngress.bng_ingress.upstream.c_dropped"
+ alias: "c_dropped"
+ }
+ spec {
+ unit: PACKETS
+ }
+ size: 8192
+}
+counters {
+ preamble {
+ id: 302008909
+ name: "FabricIngress.bng_ingress.upstream.c_control"
+ alias: "c_control"
+ }
+ spec {
+ unit: PACKETS
+ }
+ size: 8192
+}
+counters {
+ preamble {
+ id: 302004781
+ name: "FabricIngress.bng_ingress.downstream.c_line_rx"
+ alias: "c_line_rx"
+ }
+ spec {
+ unit: BOTH
+ }
+ size: 8192
+}
+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
+}
+counters {
+ preamble {
+ id: 302046535
+ name: "FabricEgress.bng_egress.downstream.c_line_tx"
+ alias: "c_line_tx"
+ }
+ spec {
+ unit: BOTH
+ }
+ size: 8192
+}
+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: 318801025
+ name: "FabricIngress.acl.acl_counter"
+ alias: "acl_counter"
+ }
+ spec {
+ unit: BOTH
+ }
+ direct_table_id: 33618978
+}
+direct_counters {
+ preamble {
+ id: 318768144
+ name: "FabricIngress.next.next_vlan_counter"
+ alias: "next_vlan_counter"
+ }
+ spec {
+ unit: BOTH
+ }
+ direct_table_id: 33599709
+}
+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: 318827144
+ name: "FabricEgress.egress_next.egress_vlan_counter"
+ alias: "egress_vlan_counter"
+ }
+ spec {
+ unit: BOTH
+ }
+ direct_table_id: 33599342
+}
+meters {
+ preamble {
+ id: 335569952
+ name: "FabricIngress.bng_ingress.downstream.m_besteff"
+ alias: "m_besteff"
+ }
+ spec {
+ unit: BYTES
+ }
+ size: 8192
+}
+meters {
+ preamble {
+ id: 335568260
+ name: "FabricIngress.bng_ingress.downstream.m_prio"
+ alias: "m_prio"
+ }
+ spec {
+ unit: BYTES
+ }
+ size: 8192
+}
+controller_packet_metadata {
+ preamble {
+ id: 67146229
+ name: "packet_in"
+ alias: "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"
+ alias: "packet_out"
+ annotations: "@controller_header(\"packet_out\")"
+ }
+ metadata {
+ id: 1
+ name: "egress_port"
+ bitwidth: 9
+ }
+ metadata {
+ id: 2
+ name: "_pad"
+ bitwidth: 7
+ }
+}
+type_info {
+}
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json
new file mode 100644
index 0000000..5a7432d
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json
@@ -0,0 +1,21118 @@
+{
+ "header_types" : [
+ {
+ "name" : "scalars_0",
+ "id" : 0,
+ "fields" : [
+ ["last_ipv4_dscp_0", 6, false],
+ ["tmp_0", 4, false],
+ ["tmp", 8, false],
+ ["tmp_1", 32, false],
+ ["tmp_2", 32, false],
+ ["tmp_3", 32, false],
+ ["spgw_ingress_tmp", 1, false],
+ ["spgw_ingress_tmp_0", 1, false],
+ ["bng_ingress_s_tag", 12, false],
+ ["bng_ingress_c_tag", 12, false],
+ ["bng_ingress_upstream_tmp", 1, false],
+ ["bng_ingress_downstream_tmp", 1, false],
+ ["spgw_normalizer_hasReturned", 1, false],
+ ["spgw_ingress_hasReturned", 1, false],
+ ["bng_ingress_upstream_hasReturned", 1, false],
+ ["key_0", 64, false],
+ ["egress_next_tmp", 1, false],
+ ["process_int_main_process_int_transit_hasReturned", 1, false],
+ ["fabric_metadata_t._last_eth_type0", 16, false],
+ ["fabric_metadata_t._is_ipv41", 1, false],
+ ["fabric_metadata_t._is_ipv62", 1, false],
+ ["fabric_metadata_t._is_mpls3", 1, false],
+ ["fabric_metadata_t._ip_eth_type4", 16, false],
+ ["fabric_metadata_t._vlan_id5", 12, false],
+ ["fabric_metadata_t._vlan_pri6", 3, false],
+ ["fabric_metadata_t._vlan_cfi7", 1, false],
+ ["fabric_metadata_t._push_double_vlan8", 1, false],
+ ["fabric_metadata_t._inner_vlan_id9", 12, false],
+ ["fabric_metadata_t._inner_vlan_pri10", 3, false],
+ ["fabric_metadata_t._inner_vlan_cfi11", 1, false],
+ ["fabric_metadata_t._mpls_label12", 20, false],
+ ["fabric_metadata_t._mpls_ttl13", 8, false],
+ ["fabric_metadata_t._skip_forwarding14", 1, false],
+ ["fabric_metadata_t._skip_next15", 1, false],
+ ["fabric_metadata_t._fwd_type16", 3, false],
+ ["fabric_metadata_t._next_id17", 32, false],
+ ["fabric_metadata_t._is_multicast18", 1, false],
+ ["fabric_metadata_t._is_controller_packet_out19", 1, false],
+ ["fabric_metadata_t._ip_proto20", 8, false],
+ ["fabric_metadata_t._l4_sport21", 16, false],
+ ["fabric_metadata_t._l4_dport22", 16, false],
+ ["fabric_metadata_t._spgw_direction23", 2, false],
+ ["fabric_metadata_t._spgw_ipv4_len24", 16, false],
+ ["fabric_metadata_t._spgw_teid25", 32, false],
+ ["fabric_metadata_t._spgw_s1u_enb_addr26", 32, false],
+ ["fabric_metadata_t._spgw_s1u_sgw_addr27", 32, false],
+ ["fabric_metadata_t._bng_type28", 2, false],
+ ["fabric_metadata_t._bng_line_id29", 32, false],
+ ["fabric_metadata_t._bng_pppoe_session_id30", 16, false],
+ ["fabric_metadata_t._bng_ds_meter_result31", 32, false],
+ ["fabric_metadata_t._int_meta_source32", 1, false],
+ ["fabric_metadata_t._int_meta_transit33", 1, false],
+ ["fabric_metadata_t._int_meta_sink34", 1, false],
+ ["fabric_metadata_t._int_meta_switch_id35", 32, false],
+ ["fabric_metadata_t._int_meta_new_words36", 8, false],
+ ["fabric_metadata_t._int_meta_new_bytes37", 16, false],
+ ["fabric_metadata_t._int_meta_ig_tstamp38", 32, false],
+ ["fabric_metadata_t._int_meta_eg_tstamp39", 32, false],
+ ["_padding_0", 7, 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],
+ ["recirculate_flag", 32, false],
+ ["checksum_error", 1, false],
+ ["parser_error", 32, false],
+ ["priority", 3, false],
+ ["_padding", 2, false]
+ ]
+ },
+ {
+ "name" : "ethernet_t",
+ "id" : 2,
+ "fields" : [
+ ["dst_addr", 48, false],
+ ["src_addr", 48, false],
+ ["eth_type", 16, false]
+ ]
+ },
+ {
+ "name" : "vlan_tag_t",
+ "id" : 3,
+ "fields" : [
+ ["pri", 3, false],
+ ["cfi", 1, false],
+ ["vlan_id", 12, false],
+ ["eth_type", 16, false]
+ ]
+ },
+ {
+ "name" : "pppoe_t",
+ "id" : 4,
+ "fields" : [
+ ["version", 4, false],
+ ["type_id", 4, false],
+ ["code", 8, false],
+ ["session_id", 16, false],
+ ["length", 16, false],
+ ["protocol", 16, false]
+ ]
+ },
+ {
+ "name" : "mpls_t",
+ "id" : 5,
+ "fields" : [
+ ["label", 20, false],
+ ["tc", 3, false],
+ ["bos", 1, false],
+ ["ttl", 8, false]
+ ]
+ },
+ {
+ "name" : "ipv4_t",
+ "id" : 6,
+ "fields" : [
+ ["version", 4, false],
+ ["ihl", 4, false],
+ ["dscp", 6, false],
+ ["ecn", 2, false],
+ ["total_len", 16, false],
+ ["identification", 16, false],
+ ["flags", 3, false],
+ ["frag_offset", 13, false],
+ ["ttl", 8, false],
+ ["protocol", 8, false],
+ ["hdr_checksum", 16, false],
+ ["src_addr", 32, false],
+ ["dst_addr", 32, false]
+ ]
+ },
+ {
+ "name" : "udp_t",
+ "id" : 7,
+ "fields" : [
+ ["sport", 16, false],
+ ["dport", 16, false],
+ ["len", 16, false],
+ ["checksum", 16, false]
+ ]
+ },
+ {
+ "name" : "gtpu_t",
+ "id" : 8,
+ "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" : "ipv6_t",
+ "id" : 9,
+ "fields" : [
+ ["version", 4, false],
+ ["traffic_class", 8, false],
+ ["flow_label", 20, false],
+ ["payload_len", 16, false],
+ ["next_hdr", 8, false],
+ ["hop_limit", 8, false],
+ ["src_addr", 128, false],
+ ["dst_addr", 128, false]
+ ]
+ },
+ {
+ "name" : "tcp_t",
+ "id" : 10,
+ "fields" : [
+ ["sport", 16, false],
+ ["dport", 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" : 11,
+ "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" : 12,
+ "fields" : [
+ ["egress_port", 9, false],
+ ["_pad", 7, false]
+ ]
+ },
+ {
+ "name" : "packet_in_header_t",
+ "id" : 13,
+ "fields" : [
+ ["ingress_port", 9, false],
+ ["_pad", 7, false]
+ ]
+ },
+ {
+ "name" : "report_fixed_header_t",
+ "id" : 14,
+ "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" : "intl4_shim_t",
+ "id" : 15,
+ "fields" : [
+ ["int_type", 8, false],
+ ["rsvd1", 8, false],
+ ["len_words", 8, false],
+ ["rsvd2", 8, false]
+ ]
+ },
+ {
+ "name" : "int_header_t",
+ "id" : 16,
+ "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" : 17,
+ "fields" : [
+ ["switch_id", 32, false]
+ ]
+ },
+ {
+ "name" : "int_port_ids_t",
+ "id" : 18,
+ "fields" : [
+ ["ingress_port_id", 16, false],
+ ["egress_port_id", 16, false]
+ ]
+ },
+ {
+ "name" : "int_hop_latency_t",
+ "id" : 19,
+ "fields" : [
+ ["hop_latency", 32, false]
+ ]
+ },
+ {
+ "name" : "int_q_occupancy_t",
+ "id" : 20,
+ "fields" : [
+ ["q_id", 8, false],
+ ["q_occupancy", 24, false]
+ ]
+ },
+ {
+ "name" : "int_ingress_tstamp_t",
+ "id" : 21,
+ "fields" : [
+ ["ingress_tstamp", 32, false]
+ ]
+ },
+ {
+ "name" : "int_egress_tstamp_t",
+ "id" : 22,
+ "fields" : [
+ ["egress_tstamp", 32, false]
+ ]
+ },
+ {
+ "name" : "int_q_congestion_t",
+ "id" : 23,
+ "fields" : [
+ ["q_id", 8, false],
+ ["q_congestion", 24, false]
+ ]
+ },
+ {
+ "name" : "int_egress_port_tx_util_t",
+ "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" : 26,
+ "fields" : [
+ ["next_proto", 8, false],
+ ["dest_port", 16, false],
+ ["padding", 2, false],
+ ["dscp", 6, 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" : "inner_vlan_tag",
+ "id" : 4,
+ "header_type" : "vlan_tag_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "pppoe",
+ "id" : 5,
+ "header_type" : "pppoe_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "mpls",
+ "id" : 6,
+ "header_type" : "mpls_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "gtpu_ipv4",
+ "id" : 7,
+ "header_type" : "ipv4_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "gtpu_udp",
+ "id" : 8,
+ "header_type" : "udp_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "gtpu",
+ "id" : 9,
+ "header_type" : "gtpu_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "inner_ipv4",
+ "id" : 10,
+ "header_type" : "ipv4_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "inner_udp",
+ "id" : 11,
+ "header_type" : "udp_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "ipv4",
+ "id" : 12,
+ "header_type" : "ipv4_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "ipv6",
+ "id" : 13,
+ "header_type" : "ipv6_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "tcp",
+ "id" : 14,
+ "header_type" : "tcp_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "udp",
+ "id" : 15,
+ "header_type" : "udp_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "icmp",
+ "id" : 16,
+ "header_type" : "icmp_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "packet_out",
+ "id" : 17,
+ "header_type" : "packet_out_header_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "packet_in",
+ "id" : 18,
+ "header_type" : "packet_in_header_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "report_ethernet",
+ "id" : 19,
+ "header_type" : "ethernet_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "report_ipv4",
+ "id" : 20,
+ "header_type" : "ipv4_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "report_udp",
+ "id" : 21,
+ "header_type" : "udp_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "report_fixed_header",
+ "id" : 22,
+ "header_type" : "report_fixed_header_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "intl4_shim",
+ "id" : 23,
+ "header_type" : "intl4_shim_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "int_header",
+ "id" : 24,
+ "header_type" : "int_header_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "int_switch_id",
+ "id" : 25,
+ "header_type" : "int_switch_id_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "int_port_ids",
+ "id" : 26,
+ "header_type" : "int_port_ids_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "int_hop_latency",
+ "id" : 27,
+ "header_type" : "int_hop_latency_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "int_q_occupancy",
+ "id" : 28,
+ "header_type" : "int_q_occupancy_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "int_ingress_tstamp",
+ "id" : 29,
+ "header_type" : "int_ingress_tstamp_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "int_egress_tstamp",
+ "id" : 30,
+ "header_type" : "int_egress_tstamp_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "int_q_congestion",
+ "id" : 31,
+ "header_type" : "int_q_congestion_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "int_egress_tx_util",
+ "id" : 32,
+ "header_type" : "int_egress_port_tx_util_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "int_data",
+ "id" : 33,
+ "header_type" : "int_data_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "intl4_tail",
+ "id" : 34,
+ "header_type" : "intl4_tail_t",
+ "metadata" : false,
+ "pi_omit" : true
+ }
+ ],
+ "header_stacks" : [],
+ "header_union_types" : [],
+ "header_unions" : [],
+ "header_union_stacks" : [],
+ "field_lists" : [
+ {
+ "id" : 1,
+ "name" : "fl",
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 46,
+ "column" : 40,
+ "source_fragment" : "{standard_metadata.ingress_port}"
+ },
+ "elements" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ }
+ ]
+ },
+ {
+ "id" : 2,
+ "name" : "fl_0",
+ "elements" : []
+ }
+ ],
+ "errors" : [
+ ["NoError", 1],
+ ["PacketTooShort", 2],
+ ["NoMatch", 3],
+ ["StackOutOfBounds", 4],
+ ["HeaderTooShort", 5],
+ ["ParserTimeout", 6],
+ ["ParserInvalidArgument", 7]
+ ],
+ "enums" : [],
+ "parsers" : [
+ {
+ "name" : "parser",
+ "id" : 0,
+ "init_state" : "start",
+ "parse_states" : [
+ {
+ "name" : "start",
+ "id" : 0,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "last_ipv4_dscp_0"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "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"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0ffe"
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x88a8",
+ "mask" : null,
+ "next_state" : "parse_vlan_tag"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x9100",
+ "mask" : null,
+ "next_state" : "parse_vlan_tag"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100",
+ "mask" : null,
+ "next_state" : "parse_vlan_tag"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847",
+ "mask" : null,
+ "next_state" : "parse_mpls"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0800",
+ "mask" : null,
+ "next_state" : "pre_parse_ipv4"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x86dd",
+ "mask" : null,
+ "next_state" : "pre_parse_ipv6"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_vlan_tag",
+ "id" : 3,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "vlan_tag"
+ }
+ ],
+ "op" : "extract"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x0800",
+ "mask" : null,
+ "next_state" : "pre_parse_ipv4"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x86dd",
+ "mask" : null,
+ "next_state" : "pre_parse_ipv6"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847",
+ "mask" : null,
+ "next_state" : "parse_mpls"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100",
+ "mask" : null,
+ "next_state" : "parse_inner_vlan_tag"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "eth_type"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_inner_vlan_tag",
+ "id" : 4,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "inner_vlan_tag"
+ }
+ ],
+ "op" : "extract"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x0800",
+ "mask" : null,
+ "next_state" : "pre_parse_ipv4"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x86dd",
+ "mask" : null,
+ "next_state" : "pre_parse_ipv6"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847",
+ "mask" : null,
+ "next_state" : "parse_mpls"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8863",
+ "mask" : null,
+ "next_state" : "parse_pppoe"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8864",
+ "mask" : null,
+ "next_state" : "parse_pppoe"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "eth_type"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_pppoe",
+ "id" : 5,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "pppoe"
+ }
+ ],
+ "op" : "extract"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x0281",
+ "mask" : null,
+ "next_state" : "parse_mpls"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0021",
+ "mask" : null,
+ "next_state" : "pre_parse_ipv4"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0057",
+ "mask" : null,
+ "next_state" : "pre_parse_ipv6"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["pppoe", "protocol"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_mpls",
+ "id" : 6,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "mpls"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._is_mpls3"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_label12"]
+ },
+ {
+ "type" : "field",
+ "value" : ["mpls", "label"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_ttl13"]
+ },
+ {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp_0"]
+ },
+ {
+ "type" : "lookahead",
+ "value" : [0, 4]
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x04",
+ "mask" : null,
+ "next_state" : "parse_ipv4"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x06",
+ "mask" : null,
+ "next_state" : "parse_ipv6"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : "parse_ethernet"
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp_0"]
+ }
+ ]
+ },
+ {
+ "name" : "pre_parse_ipv4",
+ "id" : 7,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._is_ipv41"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : "parse_ipv4"
+ }
+ ],
+ "transition_key" : []
+ },
+ {
+ "name" : "parse_ipv4",
+ "id" : 8,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "ipv4"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._ip_proto20"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ipv4", "protocol"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._ip_eth_type4"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0800"
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "last_ipv4_dscp_0"]
+ },
+ {
+ "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" : "pre_parse_ipv6",
+ "id" : 9,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._is_ipv62"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : "parse_ipv6"
+ }
+ ],
+ "transition_key" : []
+ },
+ {
+ "name" : "parse_ipv6",
+ "id" : 10,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "ipv6"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._ip_proto20"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ipv6", "next_hdr"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._ip_eth_type4"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x86dd"
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x06",
+ "mask" : null,
+ "next_state" : "parse_tcp"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x11",
+ "mask" : null,
+ "next_state" : "parse_udp"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x3a",
+ "mask" : null,
+ "next_state" : "parse_icmp"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["ipv6", "next_hdr"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_tcp",
+ "id" : 11,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "tcp"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_sport21"]
+ },
+ {
+ "type" : "field",
+ "value" : ["tcp", "sport"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_dport22"]
+ },
+ {
+ "type" : "field",
+ "value" : ["tcp", "dport"]
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : "parse_int"
+ }
+ ],
+ "transition_key" : []
+ },
+ {
+ "name" : "parse_udp",
+ "id" : 12,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "udp"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_sport21"]
+ },
+ {
+ "type" : "field",
+ "value" : ["udp", "sport"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_dport22"]
+ },
+ {
+ "type" : "field",
+ "value" : ["udp", "dport"]
+ }
+ ],
+ "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", "dport"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_icmp",
+ "id" : 13,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "icmp"
+ }
+ ],
+ "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"]
+ },
+ {
+ "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"]
+ }
+ ]
+ },
+ {
+ "name" : "do_parse_gtpu",
+ "id" : 15,
+ "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_0"]
+ },
+ {
+ "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" : 16,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "inner_udp"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_sport21"]
+ },
+ {
+ "type" : "field",
+ "value" : ["inner_udp", "sport"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_dport22"]
+ },
+ {
+ "type" : "field",
+ "value" : ["inner_udp", "dport"]
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : "parse_int"
+ }
+ ],
+ "transition_key" : []
+ },
+ {
+ "name" : "parse_int",
+ "id" : 17,
+ "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_0"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_intl4_shim",
+ "id" : 18,
+ "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" : 19,
+ "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" : 20,
+ "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" : 276,
+ "column" : 8,
+ "source_fragment" : "FabricDeparser"
+ },
+ "order" : ["packet_in", "report_ethernet", "report_ipv4", "report_udp", "report_fixed_header", "ethernet", "vlan_tag", "inner_vlan_tag", "pppoe", "mpls", "gtpu_ipv4", "gtpu_udp", "gtpu", "ipv4", "ipv6", "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" : [
+ {
+ "name" : "FabricIngress.bng_ingress.downstream.m_besteff",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 152,
+ "column" : 33,
+ "source_fragment" : "m_besteff"
+ },
+ "is_direct" : false,
+ "size" : 8192,
+ "rate_count" : 2,
+ "type" : "bytes"
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.downstream.m_prio",
+ "id" : 1,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 153,
+ "column" : 33,
+ "source_fragment" : "m_prio"
+ },
+ "is_direct" : false,
+ "size" : 8192,
+ "rate_count" : 2,
+ "type" : "bytes"
+ }
+ ],
+ "counter_arrays" : [
+ {
+ "name" : "FabricIngress.spgw_ingress.ue_counter",
+ "id" : 0,
+ "is_direct" : true,
+ "binding" : "FabricIngress.spgw_ingress.dl_sess_lookup",
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 52,
+ "column" : 50,
+ "source_fragment" : "ue_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.process_set_source_sink.counter_set_source",
+ "id" : 1,
+ "is_direct" : true,
+ "binding" : "FabricIngress.process_set_source_sink.tb_set_source",
+ "source_info" : {
+ "filename" : "include/int/int_main.p4",
+ "line" : 39,
+ "column" : 50,
+ "source_fragment" : "counter_set_source"
+ }
+ },
+ {
+ "name" : "FabricIngress.process_set_source_sink.counter_set_sink",
+ "id" : 2,
+ "is_direct" : true,
+ "binding" : "FabricIngress.process_set_source_sink.tb_set_sink",
+ "source_info" : {
+ "filename" : "include/int/int_main.p4",
+ "line" : 60,
+ "column" : 50,
+ "source_fragment" : "counter_set_sink"
+ }
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.upstream.c_terminated",
+ "id" : 3,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 36,
+ "column" : 39,
+ "source_fragment" : "c_terminated"
+ },
+ "size" : 8192,
+ "is_direct" : false
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.upstream.c_dropped",
+ "id" : 4,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 37,
+ "column" : 39,
+ "source_fragment" : "c_dropped"
+ },
+ "size" : 8192,
+ "is_direct" : false
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.upstream.c_control",
+ "id" : 5,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 38,
+ "column" : 39,
+ "source_fragment" : "c_control"
+ },
+ "size" : 8192,
+ "is_direct" : false
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.downstream.c_line_rx",
+ "id" : 6,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 150,
+ "column" : 49,
+ "source_fragment" : "c_line_rx"
+ },
+ "size" : 8192,
+ "is_direct" : false
+ },
+ {
+ "name" : "FabricIngress.filtering.ingress_port_vlan_counter",
+ "id" : 7,
+ "is_direct" : true,
+ "binding" : "FabricIngress.filtering.ingress_port_vlan",
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 31,
+ "column" : 50,
+ "source_fragment" : "ingress_port_vlan_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.filtering.fwd_classifier_counter",
+ "id" : 8,
+ "is_direct" : true,
+ "binding" : "FabricIngress.filtering.fwd_classifier",
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 83,
+ "column" : 50,
+ "source_fragment" : "fwd_classifier_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.bridging_counter",
+ "id" : 9,
+ "is_direct" : true,
+ "binding" : "FabricIngress.forwarding.bridging",
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 36,
+ "column" : 50,
+ "source_fragment" : "bridging_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.mpls_counter",
+ "id" : 10,
+ "is_direct" : true,
+ "binding" : "FabricIngress.forwarding.mpls",
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 63,
+ "column" : 50,
+ "source_fragment" : "mpls_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.routing_v4_counter",
+ "id" : 11,
+ "is_direct" : true,
+ "binding" : "FabricIngress.forwarding.routing_v4",
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 87,
+ "column" : 50,
+ "source_fragment" : "routing_v4_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.routing_v6_counter",
+ "id" : 12,
+ "is_direct" : true,
+ "binding" : "FabricIngress.forwarding.routing_v6",
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 119,
+ "column" : 50,
+ "source_fragment" : "routing_v6_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.acl.acl_counter",
+ "id" : 13,
+ "is_direct" : true,
+ "binding" : "FabricIngress.acl.acl",
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 30,
+ "column" : 50,
+ "source_fragment" : "acl_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.next_vlan_counter",
+ "id" : 14,
+ "is_direct" : true,
+ "binding" : "FabricIngress.next.next_vlan",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 67,
+ "column" : 50,
+ "source_fragment" : "next_vlan_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.xconnect_counter",
+ "id" : 15,
+ "is_direct" : true,
+ "binding" : "FabricIngress.next.xconnect",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 103,
+ "column" : 50,
+ "source_fragment" : "xconnect_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.simple_counter",
+ "id" : 16,
+ "is_direct" : true,
+ "binding" : "FabricIngress.next.simple",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 137,
+ "column" : 50,
+ "source_fragment" : "simple_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.hashed_counter",
+ "id" : 17,
+ "is_direct" : true,
+ "binding" : "FabricIngress.next.hashed",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 178,
+ "column" : 50,
+ "source_fragment" : "hashed_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.multicast_counter",
+ "id" : 18,
+ "is_direct" : true,
+ "binding" : "FabricIngress.next.multicast",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 222,
+ "column" : 50,
+ "source_fragment" : "multicast_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.port_counters_control.egress_port_counter",
+ "id" : 19,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 26,
+ "column" : 48,
+ "source_fragment" : "egress_port_counter"
+ },
+ "size" : 511,
+ "is_direct" : false
+ },
+ {
+ "name" : "FabricIngress.port_counters_control.ingress_port_counter",
+ "id" : 20,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 27,
+ "column" : 48,
+ "source_fragment" : "ingress_port_counter"
+ },
+ "size" : 511,
+ "is_direct" : false
+ },
+ {
+ "name" : "FabricEgress.bng_egress.downstream.c_line_tx",
+ "id" : 21,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 265,
+ "column" : 49,
+ "source_fragment" : "c_line_tx"
+ },
+ "size" : 8192,
+ "is_direct" : false
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_source.counter_int_source",
+ "id" : 22,
+ "is_direct" : true,
+ "binding" : "FabricEgress.process_int_main.process_int_source.tb_int_source",
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 27,
+ "column" : 50,
+ "source_fragment" : "counter_int_source"
+ }
+ },
+ {
+ "name" : "FabricEgress.egress_next.egress_vlan_counter",
+ "id" : 23,
+ "is_direct" : true,
+ "binding" : "FabricEgress.egress_next.egress_vlan",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 310,
+ "column" : 50,
+ "source_fragment" : "egress_vlan_counter"
+ }
+ }
+ ],
+ "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" : 243,
+ "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" : "nop",
+ "id" : 0,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 1,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 2,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 3,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 4,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 5,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 6,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 7,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 8,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 9,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 10,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 11,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 12,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 13,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 14,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 15,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.spgw_ingress.gtpu_decap",
+ "id" : 16,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "gtpu_ipv4"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 56,
+ "column" : 8,
+ "source_fragment" : "gtpu_ipv4.setInvalid()"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "gtpu_udp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 57,
+ "column" : 8,
+ "source_fragment" : "gtpu_udp.setInvalid()"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "gtpu"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 58,
+ "column" : 8,
+ "source_fragment" : "gtpu.setInvalid()"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.spgw_ingress.set_dl_sess_info",
+ "id" : 17,
+ "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" : ["scalars", "fabric_metadata_t._spgw_teid25"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 64,
+ "column" : 30,
+ "source_fragment" : "= teid; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_s1u_enb_addr26"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 1
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 65,
+ "column" : 38,
+ "source_fragment" : "= s1u_enb_addr; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_s1u_sgw_addr27"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 2
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 66,
+ "column" : 38,
+ "source_fragment" : "= s1u_sgw_addr; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.process_set_source_sink.int_set_source",
+ "id" : 18,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_source32"]
+ },
+ {
+ "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" : 40,
+ "source_fragment" : "= true; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.process_set_source_sink.int_set_sink",
+ "id" : 19,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_sink34"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_main.p4",
+ "line" : 63,
+ "column" : 38,
+ "source_fragment" : "= true; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.upstream.punt_to_cpu",
+ "id" : 20,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_spec"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00ff"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 44,
+ "column" : 8,
+ "source_fragment" : "smeta.egress_spec = 255"
+ }
+ },
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricIngress.bng_ingress.upstream.c_control"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_line_id29"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 45,
+ "column" : 8,
+ "source_fragment" : "c_control.count(fmeta.bng.line_id)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.upstream.term_disabled",
+ "id" : 21,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_type28"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../header.p4",
+ "line" : 155,
+ "column" : 36,
+ "source_fragment" : "2w0x0; ..."
+ }
+ },
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "mark_to_drop(smeta)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.upstream.term_disabled",
+ "id" : 22,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_type28"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../header.p4",
+ "line" : 155,
+ "column" : 36,
+ "source_fragment" : "2w0x0; ..."
+ }
+ },
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "mark_to_drop(smeta)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.upstream.term_enabled_v4",
+ "id" : 23,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "eth_type"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0800"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 110,
+ "column" : 31,
+ "source_fragment" : "0x0800; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0800"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 110,
+ "column" : 31,
+ "source_fragment" : "0x0800; ..."
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "pppoe"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.pppoe.setInvalid()"
+ }
+ },
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricIngress.bng_ingress.upstream.c_terminated"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_line_id29"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 70,
+ "column" : 8,
+ "source_fragment" : "c_terminated.count(fmeta.bng.line_id)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.upstream.term_enabled_v6",
+ "id" : 24,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "eth_type"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x86dd"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 111,
+ "column" : 31,
+ "source_fragment" : "0x86dd; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x86dd"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 111,
+ "column" : 31,
+ "source_fragment" : "0x86dd; ..."
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "pppoe"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.pppoe.setInvalid()"
+ }
+ },
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricIngress.bng_ingress.upstream.c_terminated"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_line_id29"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 70,
+ "column" : 8,
+ "source_fragment" : "c_terminated.count(fmeta.bng.line_id)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.downstream.set_session",
+ "id" : 25,
+ "runtime_data" : [
+ {
+ "name" : "pppoe_session_id",
+ "bitwidth" : 16
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_type28"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../header.p4",
+ "line" : 157,
+ "column" : 39,
+ "source_fragment" : "2w0x2;; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_pppoe_session_id30"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 157,
+ "column" : 35,
+ "source_fragment" : "= pppoe_session_id; ..."
+ }
+ },
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricIngress.bng_ingress.downstream.c_line_rx"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_line_id29"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 158,
+ "column" : 8,
+ "source_fragment" : "c_line_rx.count(fmeta.bng.line_id)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.downstream.drop",
+ "id" : 26,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_type28"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../header.p4",
+ "line" : 157,
+ "column" : 39,
+ "source_fragment" : "2w0x2;; ..."
+ }
+ },
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricIngress.bng_ingress.downstream.c_line_rx"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_line_id29"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 163,
+ "column" : 8,
+ "source_fragment" : "c_line_rx.count(fmeta.bng.line_id)"
+ }
+ },
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 164,
+ "column" : 8,
+ "source_fragment" : "mark_to_drop(smeta)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.downstream.qos_prio",
+ "id" : 27,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.downstream.qos_prio",
+ "id" : 28,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.downstream.qos_besteff",
+ "id" : 29,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.downstream.qos_besteff",
+ "id" : 30,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.set_line",
+ "id" : 31,
+ "runtime_data" : [
+ {
+ "name" : "line_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_line_id29"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 321,
+ "column" : 30,
+ "source_fragment" : "= line_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.filtering.deny",
+ "id" : 32,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_forwarding14"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 36,
+ "column" : 40,
+ "source_fragment" : "= true; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_next15"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 37,
+ "column" : 34,
+ "source_fragment" : "= true; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.filtering.permit",
+ "id" : 33,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.filtering.permit_with_internal_vlan",
+ "id" : 34,
+ "runtime_data" : [
+ {
+ "name" : "vlan_id",
+ "bitwidth" : 12
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 47,
+ "column" : 32,
+ "source_fragment" : "= vlan_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.filtering.set_forwarding_type",
+ "id" : 35,
+ "runtime_data" : [
+ {
+ "name" : "fwd_type",
+ "bitwidth" : 3
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._fwd_type16"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 86,
+ "column" : 33,
+ "source_fragment" : "= fwd_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.forwarding.set_next_id_bridging",
+ "id" : 36,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id17"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 30,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.forwarding.pop_mpls_and_next",
+ "id" : 37,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_label12"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 66,
+ "column" : 35,
+ "source_fragment" : "= 0; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id17"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 30,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.forwarding.set_next_id_routing_v4",
+ "id" : 38,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id17"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 30,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.forwarding.nop_routing_v4",
+ "id" : 39,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.forwarding.set_next_id_routing_v6",
+ "id" : 40,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id17"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 30,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.set_next_id_acl",
+ "id" : 41,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id17"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 33,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.punt_to_cpu",
+ "id" : 42,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_spec"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00ff"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 39,
+ "column" : 8,
+ "source_fragment" : "standard_metadata.egress_spec = 255"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_next15"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 40,
+ "column" : 34,
+ "source_fragment" : "= true; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.set_clone_session_id",
+ "id" : 43,
+ "runtime_data" : [
+ {
+ "name" : "clone_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "clone_ingress_pkt_to_egress",
+ "parameters" : [
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x1"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 46,
+ "column" : 8,
+ "source_fragment" : "clone3(CloneType.I2E, clone_id, {standard_metadata.ingress_port})"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.drop",
+ "id" : 44,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 51,
+ "column" : 8,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_next15"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 52,
+ "column" : 34,
+ "source_fragment" : "= true; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.nop_acl",
+ "id" : 45,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.next.set_vlan",
+ "id" : 46,
+ "runtime_data" : [
+ {
+ "name" : "vlan_id",
+ "bitwidth" : 12
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 70,
+ "column" : 32,
+ "source_fragment" : "= vlan_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.set_double_vlan",
+ "id" : 47,
+ "runtime_data" : [
+ {
+ "name" : "outer_vlan_id",
+ "bitwidth" : 12
+ },
+ {
+ "name" : "inner_vlan_id",
+ "bitwidth" : 12
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 70,
+ "column" : 32,
+ "source_fragment" : "= vlan_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._push_double_vlan8"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 77,
+ "column" : 41,
+ "source_fragment" : "= true; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._inner_vlan_id9"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 1
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 78,
+ "column" : 38,
+ "source_fragment" : "= inner_vlan_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.output_xconnect",
+ "id" : 48,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 107,
+ "column" : 31,
+ "source_fragment" : "0x8100; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.set_next_id_xconnect",
+ "id" : 49,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id17"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 112,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.output_simple",
+ "id" : 50,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.routing_simple",
+ "id" : 51,
+ "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" : 36,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.mpls_routing_simple",
+ "id" : 52,
+ "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" : ["scalars", "fabric_metadata_t._mpls_label12"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 3
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 46,
+ "column" : 35,
+ "source_fragment" : "= label; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "src_addr"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 1
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 36,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.output_hashed",
+ "id" : 53,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.routing_hashed",
+ "id" : 54,
+ "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" : 36,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.mpls_routing_hashed",
+ "id" : 55,
+ "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" : ["scalars", "fabric_metadata_t._mpls_label12"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 3
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 46,
+ "column" : 35,
+ "source_fragment" : "= label; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "src_addr"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 1
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 36,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.set_mcast_group_id",
+ "id" : 56,
+ "runtime_data" : [
+ {
+ "name" : "group_id",
+ "bitwidth" : 16
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "mcast_grp"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 225,
+ "column" : 8,
+ "source_fragment" : "standard_metadata.mcast_grp = group_id"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._is_multicast18"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 226,
+ "column" : 37,
+ "source_fragment" : "= true; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act",
+ "id" : 57,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "spgw_normalizer_hasReturned"]
+ },
+ {
+ "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" : 58,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "gtpu_ipv4"
+ }
+ ],
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 62,
+ "column" : 50,
+ "source_fragment" : "hdr.gtpu_ipv4"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "gtpu_udp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 62,
+ "column" : 65,
+ "source_fragment" : "hdr.gtpu_udp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "spgw_normalizer_hasReturned"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_1",
+ "id" : 59,
+ "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" : 60,
+ "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" : 61,
+ "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" : 62,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_spec"]
+ },
+ {
+ "type" : "field",
+ "value" : ["packet_out", "egress_port"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 25,
+ "column" : 12,
+ "source_fragment" : "standard_metadata.egress_spec = hdr.packet_out.egress_port"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "packet_out"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 26,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_out.setInvalid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._is_controller_packet_out19"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 27,
+ "column" : 53,
+ "source_fragment" : "= true; ..."
+ }
+ },
+ {
+ "op" : "exit",
+ "parameters" : [],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 29,
+ "column" : 12,
+ "source_fragment" : "exit"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_5",
+ "id" : 63,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "vlan_id"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 110,
+ "column" : 36,
+ "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_pri6"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "pri"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 111,
+ "column" : 37,
+ "source_fragment" : "= hdr.vlan_tag.pri; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_cfi7"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "cfi"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 112,
+ "column" : 37,
+ "source_fragment" : "= hdr.vlan_tag.cfi; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_6",
+ "id" : 64,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._inner_vlan_id9"]
+ },
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "vlan_id"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 116,
+ "column" : 42,
+ "source_fragment" : "= hdr.inner_vlan_tag.vlan_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._inner_vlan_pri10"]
+ },
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "pri"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 117,
+ "column" : 43,
+ "source_fragment" : "= hdr.inner_vlan_tag.pri; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._inner_vlan_cfi11"]
+ },
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "cfi"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 118,
+ "column" : 43,
+ "source_fragment" : "= hdr.inner_vlan_tag.cfi; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_7",
+ "id" : 65,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_ttl13"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x41"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 126,
+ "column" : 37,
+ "source_fragment" : "= DEFAULT_MPLS_TTL + 1; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_8",
+ "id" : 66,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 108,
+ "column" : 31,
+ "source_fragment" : "0x8847; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_9",
+ "id" : 67,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "eth_type"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 136,
+ "column" : 50,
+ "source_fragment" : "= hdr.inner_vlan_tag.eth_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_10",
+ "id" : 68,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "eth_type"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 139,
+ "column" : 50,
+ "source_fragment" : "= hdr.vlan_tag.eth_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_11",
+ "id" : 69,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 141,
+ "column" : 46,
+ "source_fragment" : "= hdr.ethernet.eth_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_12",
+ "id" : 70,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "spgw_ingress_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_13",
+ "id" : 71,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "spgw_ingress_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_14",
+ "id" : 72,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 149,
+ "column" : 16,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_15",
+ "id" : 73,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_direction23"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 143,
+ "column" : 36,
+ "source_fragment" : "2w1; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_16",
+ "id" : 74,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "spgw_ingress_tmp_0"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_17",
+ "id" : 75,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "spgw_ingress_tmp_0"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_18",
+ "id" : 76,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_direction23"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 144,
+ "column" : 38,
+ "source_fragment" : "2w2; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_19",
+ "id" : 77,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_direction23"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 142,
+ "column" : 37,
+ "source_fragment" : "2w0; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "spgw_ingress_hasReturned"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 158,
+ "column" : 12,
+ "source_fragment" : "return"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_20",
+ "id" : 78,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "spgw_ingress_hasReturned"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_21",
+ "id" : 79,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len24"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ipv4", "total_len"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 175,
+ "column" : 34,
+ "source_fragment" : "= ipv4.total_len; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_22",
+ "id" : 80,
+ "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", "egress_spec"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 31,
+ "column" : 38,
+ "source_fragment" : "(bit<32>)standard_metadata.egress_spec"
+ }
+ },
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricIngress.port_counters_control.egress_port_counter"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp_2"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 31,
+ "column" : 12,
+ "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_23",
+ "id" : 81,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp_3"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 34,
+ "column" : 39,
+ "source_fragment" : "(bit<32>)standard_metadata.ingress_port"
+ }
+ },
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricIngress.port_counters_control.ingress_port_counter"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp_3"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 34,
+ "column" : 12,
+ "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_24",
+ "id" : 82,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "clone_ingress_pkt_to_egress",
+ "parameters" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x000001f4"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x2"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_main.p4",
+ "line" : 89,
+ "column" : 12,
+ "source_fragment" : "clone(CloneType.I2E, REPORT_MIRROR_SESSION_ID)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_25",
+ "id" : 83,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_s_tag"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "vlan_id"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 339,
+ "column" : 16,
+ "source_fragment" : "s_tag = hdr.vlan_tag.vlan_id"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_c_tag"]
+ },
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "vlan_id"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 340,
+ "column" : 16,
+ "source_fragment" : "c_tag = hdr.inner_vlan_tag.vlan_id"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_26",
+ "id" : 84,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_s_tag"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 344,
+ "column" : 16,
+ "source_fragment" : "s_tag = fmeta.vlan_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_c_tag"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._inner_vlan_id9"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 345,
+ "column" : 16,
+ "source_fragment" : "c_tag = fmeta.inner_vlan_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_27",
+ "id" : 85,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_upstream_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_28",
+ "id" : 86,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_upstream_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_29",
+ "id" : 87,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_type28"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../header.p4",
+ "line" : 156,
+ "column" : 37,
+ "source_fragment" : "2w0x1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_upstream_hasReturned"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_30",
+ "id" : 88,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_upstream_hasReturned"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 124,
+ "column" : 12,
+ "source_fragment" : "return"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_31",
+ "id" : 89,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricIngress.bng_ingress.upstream.c_dropped"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_line_id29"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 129,
+ "column" : 20,
+ "source_fragment" : "c_dropped.count(fmeta.bng.line_id)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_32",
+ "id" : 90,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricIngress.bng_ingress.upstream.c_dropped"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_line_id29"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 137,
+ "column" : 19,
+ "source_fragment" : "c_dropped.count(fmeta.bng.line_id)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_33",
+ "id" : 91,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "key_0"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : ">>",
+ "left" : {
+ "type" : "field",
+ "value" : ["ipv6", "src_addr"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x40"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffffffffffffffffffffffffffff"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffffffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 110,
+ "column" : 12,
+ "source_fragment" : "hdr.ipv6.src_addr[127:64]"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_34",
+ "id" : 92,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_downstream_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_35",
+ "id" : 93,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_downstream_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_36",
+ "id" : 94,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "execute_meter",
+ "parameters" : [
+ {
+ "type" : "meter_array",
+ "value" : "FabricIngress.bng_ingress.downstream.m_prio"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_line_id29"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_ds_meter_result31"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 236,
+ "column" : 24,
+ "source_fragment" : "m_prio.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_37",
+ "id" : 95,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "execute_meter",
+ "parameters" : [
+ {
+ "type" : "meter_array",
+ "value" : "FabricIngress.bng_ingress.downstream.m_besteff"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_line_id29"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_ds_meter_result31"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 239,
+ "column" : 24,
+ "source_fragment" : "m_besteff.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_38",
+ "id" : 96,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "execute_meter",
+ "parameters" : [
+ {
+ "type" : "meter_array",
+ "value" : "FabricIngress.bng_ingress.downstream.m_prio"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_line_id29"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_ds_meter_result31"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 248,
+ "column" : 24,
+ "source_fragment" : "m_prio.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_39",
+ "id" : 97,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "execute_meter",
+ "parameters" : [
+ {
+ "type" : "meter_array",
+ "value" : "FabricIngress.bng_ingress.downstream.m_besteff"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_line_id29"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_ds_meter_result31"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 251,
+ "column" : 24,
+ "source_fragment" : "m_besteff.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "nop",
+ "id" : 98,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 99,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 100,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 101,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "NoAction",
+ "id" : 102,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "NoAction",
+ "id" : 103,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricEgress.spgw_egress.gtpu_encap",
+ "id" : 104,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "gtpu_ipv4"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 191,
+ "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" : 192,
+ "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" : 125,
+ "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" : 194,
+ "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" : 195,
+ "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" : 196,
+ "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" : 198,
+ "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" : 199,
+ "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" : 200,
+ "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" : 138,
+ "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" : 122,
+ "column" : 25,
+ "source_fragment" : "17; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu_ipv4", "dst_addr"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_s1u_enb_addr26"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 203,
+ "column" : 8,
+ "source_fragment" : "gtpu_ipv4.dst_addr = fabric_meta.spgw.s1u_enb_addr; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu_ipv4", "src_addr"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_s1u_sgw_addr27"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 204,
+ "column" : 8,
+ "source_fragment" : "gtpu_ipv4.src_addr = fabric_meta.spgw.s1u_sgw_addr; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu_ipv4", "hdr_checksum"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 205,
+ "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" : 207,
+ "column" : 8,
+ "source_fragment" : "gtpu_udp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu_udp", "sport"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0868"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 208,
+ "column" : 8,
+ "source_fragment" : "gtpu_udp.sport = 2152"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu_udp", "dport"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0868"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 209,
+ "column" : 8,
+ "source_fragment" : "gtpu_udp.dport = 2152"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu_udp", "len"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0010"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 210,
+ "column" : 8,
+ "source_fragment" : "gtpu_udp.len = fabric_meta.spgw.ipv4_len ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu_udp", "checksum"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 212,
+ "column" : 8,
+ "source_fragment" : "gtpu_udp.checksum = 0"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "gtpu"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 214,
+ "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" : 215,
+ "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" : 216,
+ "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" : 217,
+ "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" : 218,
+ "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" : 219,
+ "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" : 220,
+ "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" : 221,
+ "column" : 8,
+ "source_fragment" : "gtpu.msgtype = 0xff"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu", "msglen"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len24"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 222,
+ "column" : 8,
+ "source_fragment" : "gtpu.msglen = fabric_meta.spgw.ipv4_len; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu", "teid"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_teid25"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 223,
+ "column" : 8,
+ "source_fragment" : "gtpu.teid = fabric_meta.spgw.teid; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.bng_egress.downstream.encap_v4",
+ "id" : 105,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "eth_type"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8864"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 114,
+ "column" : 33,
+ "source_fragment" : "0x8864; ..."
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "pppoe"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 271,
+ "column" : 8,
+ "source_fragment" : "hdr.pppoe.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["pppoe", "version"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 272,
+ "column" : 8,
+ "source_fragment" : "hdr.pppoe.version = 4w1"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["pppoe", "type_id"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 273,
+ "column" : 8,
+ "source_fragment" : "hdr.pppoe.type_id = 4w1"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["pppoe", "code"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 274,
+ "column" : 8,
+ "source_fragment" : "hdr.pppoe.code = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["pppoe", "session_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_pppoe_session_id30"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 275,
+ "column" : 8,
+ "source_fragment" : "hdr.pppoe.session_id = fmeta.bng.pppoe_session_id; ..."
+ }
+ },
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricEgress.bng_egress.downstream.c_line_tx"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_line_id29"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 276,
+ "column" : 8,
+ "source_fragment" : "c_line_tx.count(fmeta.bng.line_id)"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["pppoe", "length"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["ipv4", "total_len"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0002"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 281,
+ "column" : 8,
+ "source_fragment" : "hdr.pppoe.length = hdr.ipv4.total_len + 16w2"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["pppoe", "protocol"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0021"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 116,
+ "column" : 35,
+ "source_fragment" : "0x0021; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.bng_egress.downstream.encap_v6",
+ "id" : 106,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "eth_type"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8864"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 114,
+ "column" : 33,
+ "source_fragment" : "0x8864; ..."
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "pppoe"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 271,
+ "column" : 8,
+ "source_fragment" : "hdr.pppoe.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["pppoe", "version"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 272,
+ "column" : 8,
+ "source_fragment" : "hdr.pppoe.version = 4w1"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["pppoe", "type_id"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 273,
+ "column" : 8,
+ "source_fragment" : "hdr.pppoe.type_id = 4w1"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["pppoe", "code"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 274,
+ "column" : 8,
+ "source_fragment" : "hdr.pppoe.code = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["pppoe", "session_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_pppoe_session_id30"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 275,
+ "column" : 8,
+ "source_fragment" : "hdr.pppoe.session_id = fmeta.bng.pppoe_session_id; ..."
+ }
+ },
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricEgress.bng_egress.downstream.c_line_tx"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_line_id29"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 276,
+ "column" : 8,
+ "source_fragment" : "c_line_tx.count(fmeta.bng.line_id)"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["pppoe", "length"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["ipv6", "payload_len"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x002a"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 288,
+ "column" : 8,
+ "source_fragment" : "hdr.pppoe.length = hdr.ipv6.payload_len + 16w42"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["pppoe", "protocol"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0057"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 117,
+ "column" : 35,
+ "source_fragment" : "0x0057; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_source.int_source_dscp",
+ "id" : 107,
+ "runtime_data" : [
+ {
+ "name" : "max_hop",
+ "bitwidth" : 8
+ },
+ {
+ "name" : "ins_cnt",
+ "bitwidth" : 5
+ },
+ {
+ "name" : "ins_mask0003",
+ "bitwidth" : 4
+ },
+ {
+ "name" : "ins_mask0407",
+ "bitwidth" : 4
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "intl4_shim"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 32,
+ "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" : 34,
+ "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" : 153,
+ "column" : 36,
+ "source_fragment" : "4; ..."
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_header"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 37,
+ "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" : 38,
+ "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" : 39,
+ "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" : 40,
+ "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" : 41,
+ "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" : 42,
+ "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" : 43,
+ "column" : 8,
+ "source_fragment" : "hdr.int_header.ins_cnt = ins_cnt; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_header", "max_hop_cnt"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 44,
+ "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" : 45,
+ "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" : 46,
+ "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" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_header.instruction_mask_0407 = ins_mask0407; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_header", "instruction_mask_0811"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 48,
+ "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" : 49,
+ "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" : 51,
+ "column" : 8,
+ "source_fragment" : "hdr.intl4_tail.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["intl4_tail", "next_proto"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ipv4", "protocol"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 52,
+ "column" : 8,
+ "source_fragment" : "hdr.intl4_tail.next_proto = hdr.ipv4.protocol"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["intl4_tail", "dest_port"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_dport22"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 53,
+ "column" : 8,
+ "source_fragment" : "hdr.intl4_tail.dest_port = fabric_metadata.l4_dport; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["intl4_tail", "dscp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ipv4", "dscp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.intl4_tail.dscp = hdr.ipv4.dscp"
+ }
+ },
+ {
+ "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" : 56,
+ "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" : 57,
+ "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" : 149,
+ "column" : 24,
+ "source_fragment" : "0x1; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.init_metadata",
+ "id" : 108,
+ "runtime_data" : [
+ {
+ "name" : "switch_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_transit33"]
+ },
+ {
+ "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" : 31,
+ "source_fragment" : "= true; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id35"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 31,
+ "column" : 33,
+ "source_fragment" : "= switch_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0",
+ "id" : 109,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1",
+ "id" : 110,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 60,
+ "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" : 62,
+ "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" : 63,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 97,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0004"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 98,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2",
+ "id" : 111,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_hop_latency"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_hop_latency", "hop_latency"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 55,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 97,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0004"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 98,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3",
+ "id" : 112,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 60,
+ "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" : 62,
+ "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" : 63,
+ "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" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_hop_latency", "hop_latency"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 55,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4",
+ "id" : 113,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_port_ids"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "ingress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "egress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 97,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0004"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 98,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5",
+ "id" : 114,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 60,
+ "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" : 62,
+ "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" : 63,
+ "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" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "ingress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "egress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6",
+ "id" : 115,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_hop_latency"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_hop_latency", "hop_latency"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 55,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_port_ids"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "ingress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "egress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7",
+ "id" : 116,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 60,
+ "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" : 62,
+ "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" : 63,
+ "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" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_hop_latency", "hop_latency"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 55,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_port_ids"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "ingress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "egress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x03"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 109,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 3; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000c"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 110,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8",
+ "id" : 117,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_switch_id"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_switch_id", "switch_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id35"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 97,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0004"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 98,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9",
+ "id" : 118,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 60,
+ "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" : 62,
+ "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" : 63,
+ "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" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_switch_id", "switch_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id35"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10",
+ "id" : 119,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_hop_latency"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_hop_latency", "hop_latency"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 55,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_switch_id"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_switch_id", "switch_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id35"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11",
+ "id" : 120,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 60,
+ "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" : 62,
+ "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" : 63,
+ "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" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_hop_latency", "hop_latency"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 55,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_switch_id"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_switch_id", "switch_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id35"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x03"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 109,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 3; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000c"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 110,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12",
+ "id" : 121,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_port_ids"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "ingress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "egress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_switch_id"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_switch_id", "switch_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id35"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13",
+ "id" : 122,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 60,
+ "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" : 62,
+ "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" : 63,
+ "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" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "ingress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "egress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_switch_id"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_switch_id", "switch_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id35"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x03"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 109,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 3; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000c"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 110,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14",
+ "id" : 123,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_hop_latency"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_hop_latency", "hop_latency"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 55,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_port_ids"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "ingress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "egress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_switch_id"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_switch_id", "switch_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id35"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x03"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 109,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 3; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000c"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 110,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15",
+ "id" : 124,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 60,
+ "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" : 62,
+ "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" : 63,
+ "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" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_hop_latency", "hop_latency"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 55,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_port_ids"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "ingress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "egress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_switch_id"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_switch_id", "switch_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id35"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x04"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 115,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 4; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0010"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 116,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 16; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0",
+ "id" : 125,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1",
+ "id" : 126,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tx_util"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 88,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tx_util", "egress_port_tx_util"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 90,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 97,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0004"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 98,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2",
+ "id" : 127,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_congestion"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 80,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_id"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 82,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_id = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_congestion"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 83,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 97,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0004"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 98,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3",
+ "id" : 128,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tx_util"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 88,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tx_util", "egress_port_tx_util"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 90,
+ "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" : 80,
+ "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" : 82,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_id = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_congestion"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 83,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4",
+ "id" : 129,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tstamp", "egress_tstamp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 97,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0004"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 98,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5",
+ "id" : 130,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tx_util"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 88,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tx_util", "egress_port_tx_util"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 90,
+ "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" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tstamp", "egress_tstamp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6",
+ "id" : 131,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_congestion"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 80,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_id"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 82,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_id = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_congestion"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 83,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tstamp", "egress_tstamp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7",
+ "id" : 132,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tx_util"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 88,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tx_util", "egress_port_tx_util"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 90,
+ "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" : 80,
+ "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" : 82,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_id = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_congestion"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 83,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tstamp", "egress_tstamp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x03"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 109,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 3; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000c"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 110,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8",
+ "id" : 133,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_ingress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 68,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_ingress_tstamp", "ingress_tstamp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 97,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0004"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 98,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9",
+ "id" : 134,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tx_util"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 88,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tx_util", "egress_port_tx_util"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 90,
+ "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" : 68,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_ingress_tstamp", "ingress_tstamp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10",
+ "id" : 135,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_congestion"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 80,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_id"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 82,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_id = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_congestion"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 83,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_ingress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 68,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_ingress_tstamp", "ingress_tstamp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11",
+ "id" : 136,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tx_util"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 88,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tx_util", "egress_port_tx_util"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 90,
+ "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" : 80,
+ "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" : 82,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_id = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_congestion"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 83,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_ingress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 68,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_ingress_tstamp", "ingress_tstamp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x03"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 109,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 3; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000c"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 110,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12",
+ "id" : 137,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tstamp", "egress_tstamp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_ingress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 68,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_ingress_tstamp", "ingress_tstamp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13",
+ "id" : 138,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tx_util"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 88,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tx_util", "egress_port_tx_util"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 90,
+ "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" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tstamp", "egress_tstamp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_ingress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 68,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_ingress_tstamp", "ingress_tstamp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x03"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 109,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 3; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000c"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 110,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14",
+ "id" : 139,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_congestion"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 80,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_id"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 82,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_id = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_congestion"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 83,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tstamp", "egress_tstamp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_ingress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 68,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_ingress_tstamp", "ingress_tstamp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x03"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 109,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 3; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000c"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 110,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15",
+ "id" : 140,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tx_util"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 88,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tx_util", "egress_port_tx_util"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 90,
+ "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" : 80,
+ "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" : 82,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_id = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_congestion"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 83,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tstamp", "egress_tstamp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_ingress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 68,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_ingress_tstamp", "ingress_tstamp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x04"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 115,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 4; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0010"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 116,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 16; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_report.do_report_encapsulation",
+ "id" : 141,
+ "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/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/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/int_report.p4",
+ "line" : 52,
+ "column" : 8,
+ "source_fragment" : "hdr.report_ethernet.src_addr = src_mac"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["report_ethernet", "eth_type"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0800"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 110,
+ "column" : 31,
+ "source_fragment" : "0x0800; ..."
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "report_ipv4"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/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/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/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/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/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/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/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/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/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/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" : 122,
+ "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/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/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/int_report.p4",
+ "line" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.report_udp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["report_udp", "sport"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_report.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.report_udp.sport = 0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["report_udp", "dport"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 4
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_report.p4",
+ "line" : 76,
+ "column" : 8,
+ "source_fragment" : "hdr.report_udp.dport = 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/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" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "report_fixed_header"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_report.p4",
+ "line" : 31,
+ "column" : 8,
+ "source_fragment" : "hdr.report_fixed_header.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["report_fixed_header", "ver"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_report.p4",
+ "line" : 32,
+ "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" : 159,
+ "column" : 31,
+ "source_fragment" : "0; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["report_fixed_header", "d"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_report.p4",
+ "line" : 35,
+ "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/int_report.p4",
+ "line" : 36,
+ "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/int_report.p4",
+ "line" : 37,
+ "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/int_report.p4",
+ "line" : 38,
+ "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" : 163,
+ "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/int_report.p4",
+ "line" : 42,
+ "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/int_report.p4",
+ "line" : 44,
+ "column" : 8,
+ "source_fragment" : "hdr.report_fixed_header.ingress_tstamp = (bit<32>) standard_metadata.enq_timestamp"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_sink.restore_header",
+ "id" : 142,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["udp", "dport"]
+ },
+ {
+ "type" : "field",
+ "value" : ["intl4_tail", "dest_port"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_sink.p4",
+ "line" : 27,
+ "column" : 8,
+ "source_fragment" : "hdr.udp.dport = hdr.intl4_tail.dest_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ipv4", "dscp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["intl4_tail", "dscp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_sink.p4",
+ "line" : 28,
+ "column" : 8,
+ "source_fragment" : "hdr.ipv4.dscp = hdr.intl4_tail.dscp"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_sink.int_sink",
+ "id" : 143,
+ "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_words"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_sink.p4",
+ "line" : 35,
+ "column" : 8,
+ "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len - 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" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "<<",
+ "left" : {
+ "type" : "field",
+ "value" : ["intl4_shim", "len_words"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_sink.p4",
+ "line" : 36,
+ "column" : 8,
+ "source_fragment" : "hdr.udp.len = hdr.udp.len - len_bytes"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_header"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_sink.p4",
+ "line" : 38,
+ "column" : 8,
+ "source_fragment" : "hdr.int_header.setInvalid()"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_data"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_sink.p4",
+ "line" : 39,
+ "column" : 8,
+ "source_fragment" : "hdr.int_data.setInvalid()"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "intl4_shim"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_sink.p4",
+ "line" : 40,
+ "column" : 8,
+ "source_fragment" : "hdr.intl4_shim.setInvalid()"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "intl4_tail"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_sink.p4",
+ "line" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.intl4_tail.setInvalid()"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_switch_id"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_sink.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setInvalid()"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_port_ids"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_sink.p4",
+ "line" : 43,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setInvalid()"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_hop_latency"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_sink.p4",
+ "line" : 44,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setInvalid()"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_sink.p4",
+ "line" : 45,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_occupancy.setInvalid()"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_ingress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_sink.p4",
+ "line" : 46,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setInvalid()"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_sink.p4",
+ "line" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setInvalid()"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_congestion"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_sink.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.setInvalid()"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tx_util"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_sink.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setInvalid()"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.pop_mpls_if_present",
+ "id" : 144,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "mpls"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 264,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.setInvalid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._ip_eth_type4"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 266,
+ "column" : 38,
+ "source_fragment" : "= fabric_metadata.ip_eth_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.set_mpls",
+ "id" : 145,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "mpls"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 271,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "label"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_label12"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 272,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.label = fabric_metadata.mpls_label; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "tc"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 273,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.tc = 3w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "bos"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 274,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.bos = 1w1"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_ttl13"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 275,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.ttl = fabric_metadata.mpls_ttl; // Decrement after push. ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 108,
+ "column" : 31,
+ "source_fragment" : "0x8847; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.push_vlan",
+ "id" : 146,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "vlan_tag"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 283,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "cfi"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_cfi7"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 284,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "pri"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_pri6"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 285,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "eth_type"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 286,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.eth_type = fabric_metadata.last_eth_type; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "vlan_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 287,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 107,
+ "column" : 31,
+ "source_fragment" : "0x8100; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.push_vlan",
+ "id" : 147,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "vlan_tag"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 283,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "cfi"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_cfi7"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 284,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "pri"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_pri6"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 285,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "eth_type"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 286,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.eth_type = fabric_metadata.last_eth_type; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "vlan_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 287,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 107,
+ "column" : 31,
+ "source_fragment" : "0x8100; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.push_inner_vlan",
+ "id" : 148,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "inner_vlan_tag"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 296,
+ "column" : 8,
+ "source_fragment" : "hdr.inner_vlan_tag.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "cfi"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._inner_vlan_cfi11"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 297,
+ "column" : 8,
+ "source_fragment" : "hdr.inner_vlan_tag.cfi = fabric_metadata.inner_vlan_cfi; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "pri"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._inner_vlan_pri10"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 298,
+ "column" : 8,
+ "source_fragment" : "hdr.inner_vlan_tag.pri = fabric_metadata.inner_vlan_pri; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "vlan_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._inner_vlan_id9"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 299,
+ "column" : 8,
+ "source_fragment" : "hdr.inner_vlan_tag.vlan_id = fabric_metadata.inner_vlan_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "eth_type"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 300,
+ "column" : 8,
+ "source_fragment" : "hdr.inner_vlan_tag.eth_type = fabric_metadata.last_eth_type; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "eth_type"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 107,
+ "column" : 31,
+ "source_fragment" : "0x8100; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x88a8"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 105,
+ "column" : 31,
+ "source_fragment" : "0x88A8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.pop_vlan",
+ "id" : 149,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 313,
+ "column" : 8,
+ "source_fragment" : "hdr.ethernet.eth_type = fabric_metadata.last_eth_type; ..."
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "vlan_tag"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 314,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.setInvalid()"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_40",
+ "id" : 150,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "exit",
+ "parameters" : [],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 41,
+ "column" : 12,
+ "source_fragment" : "exit"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_41",
+ "id" : 151,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "packet_in"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 44,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_in.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["packet_in", "ingress_port"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 45,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port"
+ }
+ },
+ {
+ "op" : "exit",
+ "parameters" : [],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 47,
+ "column" : 12,
+ "source_fragment" : "exit"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_42",
+ "id" : 152,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 335,
+ "column" : 12,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_43",
+ "id" : 153,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "egress_next_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_44",
+ "id" : 154,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "egress_next_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_45",
+ "id" : 155,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "inner_vlan_tag"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 351,
+ "column" : 12,
+ "source_fragment" : "hdr.inner_vlan_tag.setInvalid()"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_46",
+ "id" : 156,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 368,
+ "column" : 35,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_47",
+ "id" : 157,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 367,
+ "column" : 12,
+ "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_48",
+ "id" : 158,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 372,
+ "column" : 39,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_49",
+ "id" : 159,
+ "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" : 371,
+ "column" : 16,
+ "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_50",
+ "id" : 160,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 377,
+ "column" : 45,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_51",
+ "id" : 161,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ipv6", "hop_limit"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["ipv6", "hop_limit"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 376,
+ "column" : 16,
+ "source_fragment" : "hdr.ipv6.hop_limit = hdr.ipv6.hop_limit - 1"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_52",
+ "id" : 162,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "process_int_main_process_int_transit_hasReturned"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_53",
+ "id" : 163,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "process_int_main_process_int_transit_hasReturned"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 420,
+ "column" : 12,
+ "source_fragment" : "return"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_54",
+ "id" : 164,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ipv4", "total_len"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["ipv4", "total_len"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 428,
+ "column" : 12,
+ "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + fmeta.int_meta.new_bytes"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_55",
+ "id" : 165,
+ "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" : 425,
+ "column" : 8,
+ "source_fragment" : "hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 1"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_56",
+ "id" : 166,
+ "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" : ["scalars", "fabric_metadata_t._int_meta_new_bytes37"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 431,
+ "column" : 12,
+ "source_fragment" : "hdr.udp.len = hdr.udp.len + fmeta.int_meta.new_bytes"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_57",
+ "id" : 167,
+ "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" : ["scalars", "fabric_metadata_t._int_meta_new_words36"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 434,
+ "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" : 46,
+ "column" : 8,
+ "source_fragment" : "FabricIngress"
+ },
+ "init_table" : "tbl_act",
+ "tables" : [
+ {
+ "name" : "tbl_act",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 62,
+ "column" : 50,
+ "source_fragment" : "hdr.gtpu_ipv4, hdr.gtpu_udp"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [58],
+ "actions" : ["act_0"],
+ "base_default_next" : "node_3",
+ "next_tables" : {
+ "act_0" : "node_3"
+ },
+ "default_entry" : {
+ "action_id" : 58,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_0",
+ "id" : 1,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 30,
+ "column" : 32,
+ "source_fragment" : "return"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [57],
+ "actions" : ["act"],
+ "base_default_next" : "node_5",
+ "next_tables" : {
+ "act" : "node_5"
+ },
+ "default_entry" : {
+ "action_id" : 57,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_1",
+ "id" : 2,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 31,
+ "column" : 18,
+ "source_fragment" : "= ipv4; ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [61],
+ "actions" : ["act_3"],
+ "base_default_next" : "node_7",
+ "next_tables" : {
+ "act_3" : "node_7"
+ },
+ "default_entry" : {
+ "action_id" : 61,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_2",
+ "id" : 3,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 35,
+ "column" : 16,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [59],
+ "actions" : ["act_1"],
+ "base_default_next" : "node_10",
+ "next_tables" : {
+ "act_1" : "node_10"
+ },
+ "default_entry" : {
+ "action_id" : 59,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_3",
+ "id" : 4,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 37,
+ "column" : 12,
+ "source_fragment" : "udp.setInvalid()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [60],
+ "actions" : ["act_2"],
+ "base_default_next" : "node_10",
+ "next_tables" : {
+ "act_2" : "node_10"
+ },
+ "default_entry" : {
+ "action_id" : 60,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_4",
+ "id" : 5,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 25,
+ "column" : 42,
+ "source_fragment" : "= hdr.packet_out.egress_port; ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [62],
+ "actions" : ["act_4"],
+ "base_default_next" : "node_12",
+ "next_tables" : {
+ "act_4" : "node_12"
+ },
+ "default_entry" : {
+ "action_id" : 62,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_5",
+ "id" : 6,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 110,
+ "column" : 36,
+ "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [63],
+ "actions" : ["act_5"],
+ "base_default_next" : "node_14",
+ "next_tables" : {
+ "act_5" : "node_14"
+ },
+ "default_entry" : {
+ "action_id" : 63,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_6",
+ "id" : 7,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 116,
+ "column" : 42,
+ "source_fragment" : "= hdr.inner_vlan_tag.vlan_id; ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [64],
+ "actions" : ["act_6"],
+ "base_default_next" : "node_16",
+ "next_tables" : {
+ "act_6" : "node_16"
+ },
+ "default_entry" : {
+ "action_id" : 64,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_7",
+ "id" : 8,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 126,
+ "column" : 37,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [65],
+ "actions" : ["act_7"],
+ "base_default_next" : "node_18",
+ "next_tables" : {
+ "act_7" : "node_18"
+ },
+ "default_entry" : {
+ "action_id" : 65,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_8",
+ "id" : 9,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 131,
+ "column" : 42,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [66],
+ "actions" : ["act_8"],
+ "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+ "next_tables" : {
+ "act_8" : "FabricIngress.filtering.ingress_port_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 66,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_9",
+ "id" : 10,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 136,
+ "column" : 50,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [67],
+ "actions" : ["act_9"],
+ "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+ "next_tables" : {
+ "act_9" : "FabricIngress.filtering.ingress_port_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 67,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_10",
+ "id" : 11,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 139,
+ "column" : 50,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [68],
+ "actions" : ["act_10"],
+ "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+ "next_tables" : {
+ "act_10" : "FabricIngress.filtering.ingress_port_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 68,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_11",
+ "id" : 12,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 141,
+ "column" : 46,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [69],
+ "actions" : ["act_11"],
+ "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+ "next_tables" : {
+ "act_11" : "FabricIngress.filtering.ingress_port_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 69,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.filtering.ingress_port_vlan",
+ "id" : 13,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 53,
+ "column" : 10,
+ "source_fragment" : "ingress_port_vlan"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "vlan_is_valid",
+ "target" : ["vlan_tag", "$valid$"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "vlan_id",
+ "target" : ["vlan_tag", "vlan_id"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "inner_vlan_id",
+ "target" : ["inner_vlan_tag", "vlan_id"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 8192,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [32, 33, 34],
+ "actions" : ["FabricIngress.filtering.deny", "FabricIngress.filtering.permit", "FabricIngress.filtering.permit_with_internal_vlan"],
+ "base_default_next" : "FabricIngress.filtering.fwd_classifier",
+ "next_tables" : {
+ "FabricIngress.filtering.deny" : "FabricIngress.filtering.fwd_classifier",
+ "FabricIngress.filtering.permit" : "FabricIngress.filtering.fwd_classifier",
+ "FabricIngress.filtering.permit_with_internal_vlan" : "FabricIngress.filtering.fwd_classifier"
+ },
+ "default_entry" : {
+ "action_id" : 32,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.filtering.fwd_classifier",
+ "id" : 14,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 90,
+ "column" : 10,
+ "source_fragment" : "fwd_classifier"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_dst",
+ "target" : ["ethernet", "dst_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "is_ipv4",
+ "target" : ["scalars", "fabric_metadata_t._is_ipv41"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "is_ipv6",
+ "target" : ["scalars", "fabric_metadata_t._is_ipv62"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "is_mpls",
+ "target" : ["scalars", "fabric_metadata_t._is_mpls3"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [35],
+ "actions" : ["FabricIngress.filtering.set_forwarding_type"],
+ "base_default_next" : "tbl_act_12",
+ "next_tables" : {
+ "FabricIngress.filtering.set_forwarding_type" : "tbl_act_12"
+ },
+ "default_entry" : {
+ "action_id" : 35,
+ "action_const" : true,
+ "action_data" : ["0x0"],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_12",
+ "id" : 15,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [78],
+ "actions" : ["act_20"],
+ "base_default_next" : "node_28",
+ "next_tables" : {
+ "act_20" : "node_28"
+ },
+ "default_entry" : {
+ "action_id" : 78,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.spgw_ingress.s1u_filter_table",
+ "id" : 16,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 83,
+ "column" : 10,
+ "source_fragment" : "s1u_filter_table"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "gtp_ipv4_dst",
+ "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" : ["nop"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "__HIT__" : "tbl_act_13",
+ "__MISS__" : "tbl_act_14"
+ },
+ "default_entry" : {
+ "action_id" : 1,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_13",
+ "id" : 17,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [70],
+ "actions" : ["act_12"],
+ "base_default_next" : "node_32",
+ "next_tables" : {
+ "act_12" : "node_32"
+ },
+ "default_entry" : {
+ "action_id" : 70,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_14",
+ "id" : 18,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [71],
+ "actions" : ["act_13"],
+ "base_default_next" : "node_32",
+ "next_tables" : {
+ "act_13" : "node_32"
+ },
+ "default_entry" : {
+ "action_id" : 71,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_15",
+ "id" : 19,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 149,
+ "column" : 16,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [72],
+ "actions" : ["act_14"],
+ "base_default_next" : "tbl_act_16",
+ "next_tables" : {
+ "act_14" : "tbl_act_16"
+ },
+ "default_entry" : {
+ "action_id" : 72,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_16",
+ "id" : 20,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 151,
+ "column" : 39,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [73],
+ "actions" : ["act_15"],
+ "base_default_next" : "tbl_spgw_ingress_gtpu_decap",
+ "next_tables" : {
+ "act_15" : "tbl_spgw_ingress_gtpu_decap"
+ },
+ "default_entry" : {
+ "action_id" : 73,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_spgw_ingress_gtpu_decap",
+ "id" : 21,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 152,
+ "column" : 12,
+ "source_fragment" : "gtpu_decap()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [16],
+ "actions" : ["FabricIngress.spgw_ingress.gtpu_decap"],
+ "base_default_next" : "node_42",
+ "next_tables" : {
+ "FabricIngress.spgw_ingress.gtpu_decap" : "node_42"
+ },
+ "default_entry" : {
+ "action_id" : 16,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.spgw_ingress.dl_sess_lookup",
+ "id" : 22,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 70,
+ "column" : 10,
+ "source_fragment" : "dl_sess_lookup"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "ipv4_dst",
+ "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" : [17, 0],
+ "actions" : ["FabricIngress.spgw_ingress.set_dl_sess_info", "nop"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "__HIT__" : "tbl_act_17",
+ "__MISS__" : "tbl_act_18"
+ },
+ "default_entry" : {
+ "action_id" : 0,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_17",
+ "id" : 23,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [74],
+ "actions" : ["act_16"],
+ "base_default_next" : "node_39",
+ "next_tables" : {
+ "act_16" : "node_39"
+ },
+ "default_entry" : {
+ "action_id" : 74,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_18",
+ "id" : 24,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [75],
+ "actions" : ["act_17"],
+ "base_default_next" : "node_39",
+ "next_tables" : {
+ "act_17" : "node_39"
+ },
+ "default_entry" : {
+ "action_id" : 75,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_19",
+ "id" : 25,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 154,
+ "column" : 39,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [76],
+ "actions" : ["act_18"],
+ "base_default_next" : "node_42",
+ "next_tables" : {
+ "act_18" : "node_42"
+ },
+ "default_entry" : {
+ "action_id" : 76,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_20",
+ "id" : 26,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 156,
+ "column" : 39,
+ "source_fragment" : "= SPGW_DIR_UNKNOWN; ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [77],
+ "actions" : ["act_19"],
+ "base_default_next" : "node_42",
+ "next_tables" : {
+ "act_19" : "node_42"
+ },
+ "default_entry" : {
+ "action_id" : 77,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_21",
+ "id" : 27,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 175,
+ "column" : 34,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [79],
+ "actions" : ["act_21"],
+ "base_default_next" : "node_44",
+ "next_tables" : {
+ "act_21" : "node_44"
+ },
+ "default_entry" : {
+ "action_id" : 79,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.bridging",
+ "id" : 28,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 46,
+ "column" : 10,
+ "source_fragment" : "bridging"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "vlan_id",
+ "target" : ["scalars", "fabric_metadata_t._vlan_id5"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_dst",
+ "target" : ["ethernet", "dst_addr"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [36, 7],
+ "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"],
+ "base_default_next" : "FabricIngress.acl.acl",
+ "next_tables" : {
+ "FabricIngress.forwarding.set_next_id_bridging" : "FabricIngress.acl.acl",
+ "nop" : "FabricIngress.acl.acl"
+ },
+ "default_entry" : {
+ "action_id" : 7,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.mpls",
+ "id" : 29,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 71,
+ "column" : 10,
+ "source_fragment" : "mpls"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "mpls_label",
+ "target" : ["scalars", "fabric_metadata_t._mpls_label12"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [37, 8],
+ "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"],
+ "base_default_next" : "FabricIngress.acl.acl",
+ "next_tables" : {
+ "FabricIngress.forwarding.pop_mpls_and_next" : "FabricIngress.acl.acl",
+ "nop" : "FabricIngress.acl.acl"
+ },
+ "default_entry" : {
+ "action_id" : 8,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.routing_v4",
+ "id" : 30,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 101,
+ "column" : 10,
+ "source_fragment" : "routing_v4"
+ },
+ "key" : [
+ {
+ "match_type" : "lpm",
+ "name" : "ipv4_dst",
+ "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" : [38, 39, 9],
+ "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"],
+ "base_default_next" : "FabricIngress.acl.acl",
+ "next_tables" : {
+ "FabricIngress.forwarding.set_next_id_routing_v4" : "FabricIngress.acl.acl",
+ "FabricIngress.forwarding.nop_routing_v4" : "FabricIngress.acl.acl",
+ "nop" : "FabricIngress.acl.acl"
+ },
+ "default_entry" : {
+ "action_id" : 9,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.routing_v6",
+ "id" : 31,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 126,
+ "column" : 10,
+ "source_fragment" : "routing_v6"
+ },
+ "key" : [
+ {
+ "match_type" : "lpm",
+ "name" : "ipv6_dst",
+ "target" : ["ipv6", "dst_addr"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "lpm",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [40, 10],
+ "actions" : ["FabricIngress.forwarding.set_next_id_routing_v6", "nop"],
+ "base_default_next" : "FabricIngress.acl.acl",
+ "next_tables" : {
+ "FabricIngress.forwarding.set_next_id_routing_v6" : "FabricIngress.acl.acl",
+ "nop" : "FabricIngress.acl.acl"
+ },
+ "default_entry" : {
+ "action_id" : 10,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.acl.acl",
+ "id" : 32,
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 60,
+ "column" : 10,
+ "source_fragment" : "acl"
+ },
+ "key" : [
+ {
+ "match_type" : "ternary",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ip_proto",
+ "target" : ["scalars", "fabric_metadata_t._ip_proto20"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "l4_sport",
+ "target" : ["scalars", "fabric_metadata_t._l4_sport21"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "l4_dport",
+ "target" : ["scalars", "fabric_metadata_t._l4_dport22"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_src",
+ "target" : ["ethernet", "dst_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_dst",
+ "target" : ["ethernet", "src_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "vlan_id",
+ "target" : ["vlan_tag", "vlan_id"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_type",
+ "target" : ["scalars", "fabric_metadata_t._last_eth_type0"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ipv4_src",
+ "target" : ["ipv4", "src_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ipv4_dst",
+ "target" : ["ipv4", "dst_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "icmp_type",
+ "target" : ["icmp", "icmp_type"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "icmp_code",
+ "target" : ["icmp", "icmp_code"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [41, 42, 43, 44, 45],
+ "actions" : ["FabricIngress.acl.set_next_id_acl", "FabricIngress.acl.punt_to_cpu", "FabricIngress.acl.set_clone_session_id", "FabricIngress.acl.drop", "FabricIngress.acl.nop_acl"],
+ "base_default_next" : "node_54",
+ "next_tables" : {
+ "FabricIngress.acl.set_next_id_acl" : "node_54",
+ "FabricIngress.acl.punt_to_cpu" : "node_54",
+ "FabricIngress.acl.set_clone_session_id" : "node_54",
+ "FabricIngress.acl.drop" : "node_54",
+ "FabricIngress.acl.nop_acl" : "node_54"
+ },
+ "default_entry" : {
+ "action_id" : 45,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.next.xconnect",
+ "id" : 33,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 116,
+ "column" : 10,
+ "source_fragment" : "xconnect"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "next_id",
+ "target" : ["scalars", "fabric_metadata_t._next_id17"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [48, 49, 12],
+ "actions" : ["FabricIngress.next.output_xconnect", "FabricIngress.next.set_next_id_xconnect", "nop"],
+ "base_default_next" : "FabricIngress.next.simple",
+ "next_tables" : {
+ "FabricIngress.next.output_xconnect" : "FabricIngress.next.simple",
+ "FabricIngress.next.set_next_id_xconnect" : "FabricIngress.next.simple",
+ "nop" : "FabricIngress.next.simple"
+ },
+ "default_entry" : {
+ "action_id" : 12,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.next.simple",
+ "id" : 34,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 155,
+ "column" : 10,
+ "source_fragment" : "simple"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "next_id",
+ "target" : ["scalars", "fabric_metadata_t._next_id17"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [50, 51, 52, 13],
+ "actions" : ["FabricIngress.next.output_simple", "FabricIngress.next.routing_simple", "FabricIngress.next.mpls_routing_simple", "nop"],
+ "base_default_next" : "FabricIngress.next.hashed",
+ "next_tables" : {
+ "FabricIngress.next.output_simple" : "FabricIngress.next.hashed",
+ "FabricIngress.next.routing_simple" : "FabricIngress.next.hashed",
+ "FabricIngress.next.mpls_routing_simple" : "FabricIngress.next.hashed",
+ "nop" : "FabricIngress.next.hashed"
+ },
+ "default_entry" : {
+ "action_id" : 13,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.next.hashed",
+ "id" : 35,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 196,
+ "column" : 10,
+ "source_fragment" : "hashed"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "next_id",
+ "target" : ["scalars", "fabric_metadata_t._next_id17"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "indirect_ws",
+ "action_profile" : "FabricIngress.next.hashed_selector",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [53, 54, 55, 14],
+ "actions" : ["FabricIngress.next.output_hashed", "FabricIngress.next.routing_hashed", "FabricIngress.next.mpls_routing_hashed", "nop"],
+ "base_default_next" : "FabricIngress.next.multicast",
+ "next_tables" : {
+ "FabricIngress.next.output_hashed" : "FabricIngress.next.multicast",
+ "FabricIngress.next.routing_hashed" : "FabricIngress.next.multicast",
+ "FabricIngress.next.mpls_routing_hashed" : "FabricIngress.next.multicast",
+ "nop" : "FabricIngress.next.multicast"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.multicast",
+ "id" : 36,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 230,
+ "column" : 10,
+ "source_fragment" : "multicast"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "next_id",
+ "target" : ["scalars", "fabric_metadata_t._next_id17"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [56, 15],
+ "actions" : ["FabricIngress.next.set_mcast_group_id", "nop"],
+ "base_default_next" : "FabricIngress.next.next_vlan",
+ "next_tables" : {
+ "FabricIngress.next.set_mcast_group_id" : "FabricIngress.next.next_vlan",
+ "nop" : "FabricIngress.next.next_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 15,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.next.next_vlan",
+ "id" : 37,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 82,
+ "column" : 10,
+ "source_fragment" : "next_vlan"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "next_id",
+ "target" : ["scalars", "fabric_metadata_t._next_id17"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [46, 47, 11],
+ "actions" : ["FabricIngress.next.set_vlan", "FabricIngress.next.set_double_vlan", "nop"],
+ "base_default_next" : "node_60",
+ "next_tables" : {
+ "FabricIngress.next.set_vlan" : "node_60",
+ "FabricIngress.next.set_double_vlan" : "node_60",
+ "nop" : "node_60"
+ },
+ "default_entry" : {
+ "action_id" : 11,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_22",
+ "id" : 38,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 31,
+ "column" : 12,
+ "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [80],
+ "actions" : ["act_22"],
+ "base_default_next" : "node_62",
+ "next_tables" : {
+ "act_22" : "node_62"
+ },
+ "default_entry" : {
+ "action_id" : 80,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_23",
+ "id" : 39,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 34,
+ "column" : 12,
+ "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [81],
+ "actions" : ["act_23"],
+ "base_default_next" : "FabricIngress.process_set_source_sink.tb_set_source",
+ "next_tables" : {
+ "act_23" : "FabricIngress.process_set_source_sink.tb_set_source"
+ },
+ "default_entry" : {
+ "action_id" : 81,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.process_set_source_sink.tb_set_source",
+ "id" : 40,
+ "source_info" : {
+ "filename" : "include/int/int_main.p4",
+ "line" : 46,
+ "column" : 10,
+ "source_fragment" : "tb_set_source"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 511,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [18, 2],
+ "actions" : ["FabricIngress.process_set_source_sink.int_set_source", "nop"],
+ "base_default_next" : "FabricIngress.process_set_source_sink.tb_set_sink",
+ "next_tables" : {
+ "FabricIngress.process_set_source_sink.int_set_source" : "FabricIngress.process_set_source_sink.tb_set_sink",
+ "nop" : "FabricIngress.process_set_source_sink.tb_set_sink"
+ },
+ "default_entry" : {
+ "action_id" : 2,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.process_set_source_sink.tb_set_sink",
+ "id" : 41,
+ "source_info" : {
+ "filename" : "include/int/int_main.p4",
+ "line" : 67,
+ "column" : 10,
+ "source_fragment" : "tb_set_sink"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "eg_spec",
+ "target" : ["standard_metadata", "egress_spec"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 511,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [19, 3],
+ "actions" : ["FabricIngress.process_set_source_sink.int_set_sink", "nop"],
+ "base_default_next" : "node_66",
+ "next_tables" : {
+ "FabricIngress.process_set_source_sink.int_set_sink" : "node_66",
+ "nop" : "node_66"
+ },
+ "default_entry" : {
+ "action_id" : 3,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_24",
+ "id" : 42,
+ "source_info" : {
+ "filename" : "include/int/int_main.p4",
+ "line" : 89,
+ "column" : 12,
+ "source_fragment" : "clone(CloneType.I2E, REPORT_MIRROR_SESSION_ID)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [82],
+ "actions" : ["act_24"],
+ "base_default_next" : "node_68",
+ "next_tables" : {
+ "act_24" : "node_68"
+ },
+ "default_entry" : {
+ "action_id" : 82,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_25",
+ "id" : 43,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 339,
+ "column" : 22,
+ "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [83],
+ "actions" : ["act_25"],
+ "base_default_next" : "FabricIngress.bng_ingress.t_line_map",
+ "next_tables" : {
+ "act_25" : "FabricIngress.bng_ingress.t_line_map"
+ },
+ "default_entry" : {
+ "action_id" : 83,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_26",
+ "id" : 44,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 344,
+ "column" : 22,
+ "source_fragment" : "= fmeta.vlan_id; ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [84],
+ "actions" : ["act_26"],
+ "base_default_next" : "FabricIngress.bng_ingress.t_line_map",
+ "next_tables" : {
+ "act_26" : "FabricIngress.bng_ingress.t_line_map"
+ },
+ "default_entry" : {
+ "action_id" : 84,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.t_line_map",
+ "id" : 45,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 324,
+ "column" : 14,
+ "source_fragment" : "t_line_map"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "s_tag",
+ "target" : ["scalars", "bng_ingress_s_tag"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "c_tag",
+ "target" : ["scalars", "bng_ingress_c_tag"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 8192,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [6, 31],
+ "actions" : ["nop", "FabricIngress.bng_ingress.set_line"],
+ "base_default_next" : "node_72",
+ "next_tables" : {
+ "nop" : "node_72",
+ "FabricIngress.bng_ingress.set_line" : "node_72"
+ },
+ "default_entry" : {
+ "action_id" : 6,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_27",
+ "id" : 46,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 353,
+ "column" : 31,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [87],
+ "actions" : ["act_29"],
+ "base_default_next" : "FabricIngress.bng_ingress.upstream.t_pppoe_cp",
+ "next_tables" : {
+ "act_29" : "FabricIngress.bng_ingress.upstream.t_pppoe_cp"
+ },
+ "default_entry" : {
+ "action_id" : 87,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.upstream.t_pppoe_cp",
+ "id" : 47,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 48,
+ "column" : 10,
+ "source_fragment" : "t_pppoe_cp"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "pppoe_code",
+ "target" : ["pppoe", "code"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "pppoe_protocol",
+ "target" : ["pppoe", "protocol"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 16,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [20, 4],
+ "actions" : ["FabricIngress.bng_ingress.upstream.punt_to_cpu", "nop"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "__HIT__" : "tbl_act_28",
+ "__MISS__" : "tbl_act_29"
+ },
+ "default_entry" : {
+ "action_id" : 4,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_28",
+ "id" : 48,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [85],
+ "actions" : ["act_27"],
+ "base_default_next" : "node_77",
+ "next_tables" : {
+ "act_27" : "node_77"
+ },
+ "default_entry" : {
+ "action_id" : 85,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_29",
+ "id" : 49,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [86],
+ "actions" : ["act_28"],
+ "base_default_next" : "node_77",
+ "next_tables" : {
+ "act_28" : "node_77"
+ },
+ "default_entry" : {
+ "action_id" : 86,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_30",
+ "id" : 50,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 124,
+ "column" : 12,
+ "source_fragment" : "return"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [88],
+ "actions" : ["act_30"],
+ "base_default_next" : "node_79",
+ "next_tables" : {
+ "act_30" : "node_79"
+ },
+ "default_entry" : {
+ "action_id" : 88,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.upstream.t_pppoe_term_v4",
+ "id" : 51,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 85,
+ "column" : 10,
+ "source_fragment" : "t_pppoe_term_v4"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "line_id",
+ "target" : ["scalars", "fabric_metadata_t._bng_line_id29"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "ipv4_src",
+ "target" : ["ipv4", "src_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "pppoe_session_id",
+ "target" : ["pppoe", "session_id"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 32768,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [23, 21],
+ "actions" : ["FabricIngress.bng_ingress.upstream.term_enabled_v4", "FabricIngress.bng_ingress.upstream.term_disabled"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "FabricIngress.bng_ingress.upstream.term_disabled" : "tbl_act_31",
+ "FabricIngress.bng_ingress.upstream.term_enabled_v4" : null
+ },
+ "default_entry" : {
+ "action_id" : 21,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_31",
+ "id" : 52,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 129,
+ "column" : 20,
+ "source_fragment" : "c_dropped.count(fmeta.bng.line_id)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [89],
+ "actions" : ["act_31"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "act_31" : null
+ },
+ "default_entry" : {
+ "action_id" : 89,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_32",
+ "id" : 53,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 110,
+ "column" : 12,
+ "source_fragment" : "hdr.ipv6.src_addr[127:64]"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [91],
+ "actions" : ["act_33"],
+ "base_default_next" : "FabricIngress.bng_ingress.upstream.t_pppoe_term_v6",
+ "next_tables" : {
+ "act_33" : "FabricIngress.bng_ingress.upstream.t_pppoe_term_v6"
+ },
+ "default_entry" : {
+ "action_id" : 91,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.upstream.t_pppoe_term_v6",
+ "id" : 54,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 107,
+ "column" : 10,
+ "source_fragment" : "t_pppoe_term_v6"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "line_id",
+ "target" : ["scalars", "fabric_metadata_t._bng_line_id29"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "ipv6_src_net_id",
+ "target" : ["scalars", "key_0"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "pppoe_session_id",
+ "target" : ["pppoe", "session_id"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 32768,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [24, 22],
+ "actions" : ["FabricIngress.bng_ingress.upstream.term_enabled_v6", "FabricIngress.bng_ingress.upstream.term_disabled"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "FabricIngress.bng_ingress.upstream.term_disabled" : "tbl_act_33",
+ "FabricIngress.bng_ingress.upstream.term_enabled_v6" : null
+ },
+ "default_entry" : {
+ "action_id" : 22,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_33",
+ "id" : 55,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 137,
+ "column" : 19,
+ "source_fragment" : "c_dropped.count(fmeta.bng.line_id)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [90],
+ "actions" : ["act_32"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "act_32" : null
+ },
+ "default_entry" : {
+ "action_id" : 90,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.downstream.t_line_session_map",
+ "id" : 56,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 167,
+ "column" : 10,
+ "source_fragment" : "t_line_session_map"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "line_id",
+ "target" : ["scalars", "fabric_metadata_t._bng_line_id29"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 8192,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [5, 25, 26],
+ "actions" : ["nop", "FabricIngress.bng_ingress.downstream.set_session", "FabricIngress.bng_ingress.downstream.drop"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "__HIT__" : "tbl_act_34",
+ "__MISS__" : "tbl_act_35"
+ },
+ "default_entry" : {
+ "action_id" : 5,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_34",
+ "id" : 57,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [92],
+ "actions" : ["act_34"],
+ "base_default_next" : "node_90",
+ "next_tables" : {
+ "act_34" : "node_90"
+ },
+ "default_entry" : {
+ "action_id" : 92,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_35",
+ "id" : 58,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [93],
+ "actions" : ["act_35"],
+ "base_default_next" : "node_90",
+ "next_tables" : {
+ "act_35" : "node_90"
+ },
+ "default_entry" : {
+ "action_id" : 93,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.downstream.t_qos_v4",
+ "id" : 59,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 192,
+ "column" : 10,
+ "source_fragment" : "t_qos_v4"
+ },
+ "key" : [
+ {
+ "match_type" : "ternary",
+ "name" : "line_id",
+ "target" : ["scalars", "fabric_metadata_t._bng_line_id29"],
+ "mask" : null
+ },
+ {
+ "match_type" : "lpm",
+ "name" : "ipv4_src",
+ "target" : ["ipv4", "src_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ipv4_dscp",
+ "target" : ["ipv4", "dscp"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ipv4_ecn",
+ "target" : ["ipv4", "ecn"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 256,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [27, 29],
+ "actions" : ["FabricIngress.bng_ingress.downstream.qos_prio", "FabricIngress.bng_ingress.downstream.qos_besteff"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "FabricIngress.bng_ingress.downstream.qos_prio" : "tbl_act_36",
+ "FabricIngress.bng_ingress.downstream.qos_besteff" : "tbl_act_37"
+ },
+ "default_entry" : {
+ "action_id" : 29,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_36",
+ "id" : 60,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 236,
+ "column" : 24,
+ "source_fragment" : "m_prio.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [94],
+ "actions" : ["act_36"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "act_36" : null
+ },
+ "default_entry" : {
+ "action_id" : 94,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_37",
+ "id" : 61,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 239,
+ "column" : 24,
+ "source_fragment" : "m_besteff.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [95],
+ "actions" : ["act_37"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "act_37" : null
+ },
+ "default_entry" : {
+ "action_id" : 95,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.bng_ingress.downstream.t_qos_v6",
+ "id" : 62,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 208,
+ "column" : 10,
+ "source_fragment" : "t_qos_v6"
+ },
+ "key" : [
+ {
+ "match_type" : "ternary",
+ "name" : "line_id",
+ "target" : ["scalars", "fabric_metadata_t._bng_line_id29"],
+ "mask" : null
+ },
+ {
+ "match_type" : "lpm",
+ "name" : "ipv6_src",
+ "target" : ["ipv6", "src_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ipv6_traffic_class",
+ "target" : ["ipv6", "traffic_class"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 256,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [28, 30],
+ "actions" : ["FabricIngress.bng_ingress.downstream.qos_prio", "FabricIngress.bng_ingress.downstream.qos_besteff"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "FabricIngress.bng_ingress.downstream.qos_prio" : "tbl_act_38",
+ "FabricIngress.bng_ingress.downstream.qos_besteff" : "tbl_act_39"
+ },
+ "default_entry" : {
+ "action_id" : 30,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_38",
+ "id" : 63,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 248,
+ "column" : 24,
+ "source_fragment" : "m_prio.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [96],
+ "actions" : ["act_38"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "act_38" : null
+ },
+ "default_entry" : {
+ "action_id" : 96,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_39",
+ "id" : 64,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 251,
+ "column" : 24,
+ "source_fragment" : "m_besteff.execute_meter(fmeta.bng.line_id, fmeta.bng.ds_meter_result)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [97],
+ "actions" : ["act_39"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "act_39" : null
+ },
+ "default_entry" : {
+ "action_id" : 97,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ }
+ ],
+ "action_profiles" : [
+ {
+ "name" : "FabricIngress.next.hashed_selector",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 177,
+ "column" : 57,
+ "source_fragment" : "hashed_selector"
+ },
+ "max_size" : 1024,
+ "selector" : {
+ "algo" : "crc16",
+ "input" : [
+ {
+ "type" : "field",
+ "value" : ["ipv4", "dst_addr"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ipv4", "src_addr"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._ip_proto20"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_sport21"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_dport22"]
+ }
+ ]
+ }
+ }
+ ],
+ "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"]
+ }
+ }
+ }
+ }
+ },
+ "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" : 24,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_out.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["packet_out", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_4",
+ "false_next" : "node_12"
+ },
+ {
+ "name" : "node_12",
+ "id" : 4,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 109,
+ "column" : 12,
+ "source_fragment" : "hdr.vlan_tag.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["vlan_tag", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_5",
+ "false_next" : "node_14"
+ },
+ {
+ "name" : "node_14",
+ "id" : 5,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 115,
+ "column" : 12,
+ "source_fragment" : "hdr.inner_vlan_tag.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_6",
+ "false_next" : "node_16"
+ },
+ {
+ "name" : "node_16",
+ "id" : 6,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 121,
+ "column" : 12,
+ "source_fragment" : "!hdr.mpls.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "not",
+ "left" : null,
+ "right" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["mpls", "$valid$"]
+ }
+ }
+ }
+ }
+ },
+ "true_next" : "tbl_act_7",
+ "false_next" : "node_18"
+ },
+ {
+ "name" : "node_18",
+ "id" : 7,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 130,
+ "column" : 12,
+ "source_fragment" : "hdr.mpls.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["mpls", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_8",
+ "false_next" : "node_20"
+ },
+ {
+ "name" : "node_20",
+ "id" : 8,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 133,
+ "column" : 16,
+ "source_fragment" : "hdr.vlan_tag.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["vlan_tag", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "node_21",
+ "false_next" : "tbl_act_11"
+ },
+ {
+ "name" : "node_21",
+ "id" : 9,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 135,
+ "column" : 19,
+ "source_fragment" : "hdr.inner_vlan_tag.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_9",
+ "false_next" : "tbl_act_10"
+ },
+ {
+ "name" : "node_28",
+ "id" : 10,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 144,
+ "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_32",
+ "id" : 11,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 148,
+ "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"]
+ }
+ }
+ }
+ }
+ },
+ "true_next" : "tbl_act_15",
+ "false_next" : "tbl_act_16"
+ },
+ {
+ "name" : "node_39",
+ "id" : 12,
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "spgw_ingress_tmp_0"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_19",
+ "false_next" : "tbl_act_20"
+ },
+ {
+ "name" : "node_42",
+ "id" : 13,
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "not",
+ "left" : null,
+ "right" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "spgw_ingress_hasReturned"]
+ }
+ }
+ }
+ }
+ },
+ "true_next" : "tbl_act_21",
+ "false_next" : "node_44"
+ },
+ {
+ "name" : "node_44",
+ "id" : 14,
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 71,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.skip_forwarding == false"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_forwarding14"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ },
+ "true_next" : "node_45",
+ "false_next" : "FabricIngress.acl.acl"
+ },
+ {
+ "name" : "node_45",
+ "id" : 15,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 141,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.fwd_type == FWD_BRIDGING"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._fwd_type16"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ }
+ },
+ "true_next" : "FabricIngress.forwarding.bridging",
+ "false_next" : "node_47"
+ },
+ {
+ "name" : "node_47",
+ "id" : 16,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 142,
+ "column" : 17,
+ "source_fragment" : "fabric_metadata.fwd_type == FWD_MPLS"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._fwd_type16"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "true_next" : "FabricIngress.forwarding.mpls",
+ "false_next" : "node_49"
+ },
+ {
+ "name" : "node_49",
+ "id" : 17,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 143,
+ "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_type16"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "true_next" : "FabricIngress.forwarding.routing_v4",
+ "false_next" : "node_51"
+ },
+ {
+ "name" : "node_51",
+ "id" : 18,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 145,
+ "column" : 17,
+ "source_fragment" : "fabric_metadata.fwd_type == FWD_IPV6_UNICAST"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._fwd_type16"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x04"
+ }
+ }
+ },
+ "true_next" : "FabricIngress.forwarding.routing_v6",
+ "false_next" : "FabricIngress.acl.acl"
+ },
+ {
+ "name" : "node_54",
+ "id" : 19,
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 75,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.skip_next == false"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_next15"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ },
+ "true_next" : "FabricIngress.next.xconnect",
+ "false_next" : "node_68"
+ },
+ {
+ "name" : "node_60",
+ "id" : 20,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 30,
+ "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_22",
+ "false_next" : "node_62"
+ },
+ {
+ "name" : "node_62",
+ "id" : 21,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 33,
+ "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_23",
+ "false_next" : "FabricIngress.process_set_source_sink.tb_set_source"
+ },
+ {
+ "name" : "node_66",
+ "id" : 22,
+ "source_info" : {
+ "filename" : "include/int/int_main.p4",
+ "line" : 86,
+ "column" : 11,
+ "source_fragment" : "fabric_metadata.int_meta.sink == true"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_sink34"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ },
+ "true_next" : "tbl_act_24",
+ "false_next" : "node_68"
+ },
+ {
+ "name" : "node_68",
+ "id" : 23,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 338,
+ "column" : 15,
+ "source_fragment" : "hdr.pppoe.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["pppoe", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_25",
+ "false_next" : "tbl_act_26"
+ },
+ {
+ "name" : "node_72",
+ "id" : 24,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 352,
+ "column" : 16,
+ "source_fragment" : "hdr.pppoe.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["pppoe", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_27",
+ "false_next" : "FabricIngress.bng_ingress.downstream.t_line_session_map"
+ },
+ {
+ "name" : "node_77",
+ "id" : 25,
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_upstream_tmp"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_30",
+ "false_next" : "node_79"
+ },
+ {
+ "name" : "node_79",
+ "id" : 26,
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "not",
+ "left" : null,
+ "right" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_upstream_hasReturned"]
+ }
+ }
+ }
+ }
+ },
+ "false_next" : null,
+ "true_next" : "node_80"
+ },
+ {
+ "name" : "node_80",
+ "id" : 27,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 126,
+ "column" : 12,
+ "source_fragment" : "hdr.ipv4.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["ipv4", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "FabricIngress.bng_ingress.upstream.t_pppoe_term_v4",
+ "false_next" : "node_83"
+ },
+ {
+ "name" : "node_83",
+ "id" : 28,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 134,
+ "column" : 17,
+ "source_fragment" : "hdr.ipv6.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["ipv6", "$valid$"]
+ }
+ }
+ },
+ "false_next" : null,
+ "true_next" : "tbl_act_32"
+ },
+ {
+ "name" : "node_90",
+ "id" : 29,
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "bng_ingress_downstream_tmp"]
+ }
+ }
+ },
+ "false_next" : null,
+ "true_next" : "node_91"
+ },
+ {
+ "name" : "node_91",
+ "id" : 30,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 233,
+ "column" : 16,
+ "source_fragment" : "hdr.ipv4.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["ipv4", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "FabricIngress.bng_ingress.downstream.t_qos_v4",
+ "false_next" : "node_95"
+ },
+ {
+ "name" : "node_95",
+ "id" : 31,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 245,
+ "column" : 21,
+ "source_fragment" : "hdr.ipv6.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["ipv6", "$valid$"]
+ }
+ }
+ },
+ "false_next" : null,
+ "true_next" : "FabricIngress.bng_ingress.downstream.t_qos_v6"
+ }
+ ]
+ },
+ {
+ "name" : "egress",
+ "id" : 1,
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 93,
+ "column" : 8,
+ "source_fragment" : "FabricEgress"
+ },
+ "init_table" : "node_101",
+ "tables" : [
+ {
+ "name" : "tbl_act_40",
+ "id" : 65,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 41,
+ "column" : 12,
+ "source_fragment" : "exit"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [150],
+ "actions" : ["act_40"],
+ "base_default_next" : "node_103",
+ "next_tables" : {
+ "act_40" : "node_103"
+ },
+ "default_entry" : {
+ "action_id" : 150,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_41",
+ "id" : 66,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 44,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_in.setValid(); ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [151],
+ "actions" : ["act_41"],
+ "base_default_next" : "node_105",
+ "next_tables" : {
+ "act_41" : "node_105"
+ },
+ "default_entry" : {
+ "action_id" : 151,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_42",
+ "id" : 67,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 335,
+ "column" : 12,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [152],
+ "actions" : ["act_42"],
+ "base_default_next" : "node_107",
+ "next_tables" : {
+ "act_42" : "node_107"
+ },
+ "default_entry" : {
+ "action_id" : 152,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_egress_next_pop_mpls_if_present",
+ "id" : 68,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 339,
+ "column" : 36,
+ "source_fragment" : "pop_mpls_if_present()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [144],
+ "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"],
+ "base_default_next" : "node_111",
+ "next_tables" : {
+ "FabricEgress.egress_next.pop_mpls_if_present" : "node_111"
+ },
+ "default_entry" : {
+ "action_id" : 144,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_egress_next_set_mpls",
+ "id" : 69,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 341,
+ "column" : 12,
+ "source_fragment" : "set_mpls()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [145],
+ "actions" : ["FabricEgress.egress_next.set_mpls"],
+ "base_default_next" : "node_111",
+ "next_tables" : {
+ "FabricEgress.egress_next.set_mpls" : "node_111"
+ },
+ "default_entry" : {
+ "action_id" : 145,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_egress_next_push_vlan",
+ "id" : 70,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 347,
+ "column" : 12,
+ "source_fragment" : "push_vlan()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [146],
+ "actions" : ["FabricEgress.egress_next.push_vlan"],
+ "base_default_next" : "tbl_egress_next_push_inner_vlan",
+ "next_tables" : {
+ "FabricEgress.egress_next.push_vlan" : "tbl_egress_next_push_inner_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 146,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_egress_next_push_inner_vlan",
+ "id" : 71,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 348,
+ "column" : 12,
+ "source_fragment" : "push_inner_vlan()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [148],
+ "actions" : ["FabricEgress.egress_next.push_inner_vlan"],
+ "base_default_next" : "node_121",
+ "next_tables" : {
+ "FabricEgress.egress_next.push_inner_vlan" : "node_121"
+ },
+ "default_entry" : {
+ "action_id" : 148,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_43",
+ "id" : 72,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 351,
+ "column" : 12,
+ "source_fragment" : "hdr.inner_vlan_tag.setInvalid()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [155],
+ "actions" : ["act_45"],
+ "base_default_next" : "FabricEgress.egress_next.egress_vlan",
+ "next_tables" : {
+ "act_45" : "FabricEgress.egress_next.egress_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 155,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricEgress.egress_next.egress_vlan",
+ "id" : 73,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 318,
+ "column" : 10,
+ "source_fragment" : "egress_vlan"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "vlan_id",
+ "target" : ["scalars", "fabric_metadata_t._vlan_id5"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "eg_port",
+ "target" : ["standard_metadata", "egress_port"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [149, 101],
+ "actions" : ["FabricEgress.egress_next.pop_vlan", "nop"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "__HIT__" : "tbl_act_44",
+ "__MISS__" : "tbl_act_45"
+ },
+ "default_entry" : {
+ "action_id" : 101,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_44",
+ "id" : 74,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [153],
+ "actions" : ["act_43"],
+ "base_default_next" : "node_118",
+ "next_tables" : {
+ "act_43" : "node_118"
+ },
+ "default_entry" : {
+ "action_id" : 153,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_45",
+ "id" : 75,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [154],
+ "actions" : ["act_44"],
+ "base_default_next" : "node_118",
+ "next_tables" : {
+ "act_44" : "node_118"
+ },
+ "default_entry" : {
+ "action_id" : 154,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_egress_next_push_vlan_0",
+ "id" : 76,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 358,
+ "column" : 20,
+ "source_fragment" : "push_vlan()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [147],
+ "actions" : ["FabricEgress.egress_next.push_vlan"],
+ "base_default_next" : "node_121",
+ "next_tables" : {
+ "FabricEgress.egress_next.push_vlan" : "node_121"
+ },
+ "default_entry" : {
+ "action_id" : 147,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_46",
+ "id" : 77,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 367,
+ "column" : 25,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [157],
+ "actions" : ["act_47"],
+ "base_default_next" : "node_123",
+ "next_tables" : {
+ "act_47" : "node_123"
+ },
+ "default_entry" : {
+ "action_id" : 157,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_47",
+ "id" : 78,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 368,
+ "column" : 35,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [156],
+ "actions" : ["act_46"],
+ "base_default_next" : "node_133",
+ "next_tables" : {
+ "act_46" : "node_133"
+ },
+ "default_entry" : {
+ "action_id" : 156,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_48",
+ "id" : 79,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 371,
+ "column" : 29,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [159],
+ "actions" : ["act_49"],
+ "base_default_next" : "node_127",
+ "next_tables" : {
+ "act_49" : "node_127"
+ },
+ "default_entry" : {
+ "action_id" : 159,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_49",
+ "id" : 80,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 372,
+ "column" : 39,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [158],
+ "actions" : ["act_48"],
+ "base_default_next" : "node_133",
+ "next_tables" : {
+ "act_48" : "node_133"
+ },
+ "default_entry" : {
+ "action_id" : 158,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_50",
+ "id" : 81,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 376,
+ "column" : 35,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [161],
+ "actions" : ["act_51"],
+ "base_default_next" : "node_131",
+ "next_tables" : {
+ "act_51" : "node_131"
+ },
+ "default_entry" : {
+ "action_id" : 161,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_51",
+ "id" : 82,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 377,
+ "column" : 45,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [160],
+ "actions" : ["act_50"],
+ "base_default_next" : "node_133",
+ "next_tables" : {
+ "act_50" : "node_133"
+ },
+ "default_entry" : {
+ "action_id" : 160,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_spgw_egress_gtpu_encap",
+ "id" : 83,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 228,
+ "column" : 12,
+ "source_fragment" : "gtpu_encap()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [104],
+ "actions" : ["FabricEgress.spgw_egress.gtpu_encap"],
+ "base_default_next" : "node_135",
+ "next_tables" : {
+ "FabricEgress.spgw_egress.gtpu_encap" : "node_135"
+ },
+ "default_entry" : {
+ "action_id" : 104,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_bng_egress_downstream_encap_v4",
+ "id" : 84,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 295,
+ "column" : 12,
+ "source_fragment" : "encap_v4()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [105],
+ "actions" : ["FabricEgress.bng_egress.downstream.encap_v4"],
+ "base_default_next" : "node_140",
+ "next_tables" : {
+ "FabricEgress.bng_egress.downstream.encap_v4" : "node_140"
+ },
+ "default_entry" : {
+ "action_id" : 105,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_bng_egress_downstream_encap_v6",
+ "id" : 85,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 300,
+ "column" : 12,
+ "source_fragment" : "encap_v6()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [106],
+ "actions" : ["FabricEgress.bng_egress.downstream.encap_v6"],
+ "base_default_next" : "node_140",
+ "next_tables" : {
+ "FabricEgress.bng_egress.downstream.encap_v6" : "node_140"
+ },
+ "default_entry" : {
+ "action_id" : 106,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_source.tb_int_source",
+ "id" : 86,
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 66,
+ "column" : 10,
+ "source_fragment" : "tb_int_source"
+ },
+ "key" : [
+ {
+ "match_type" : "ternary",
+ "name" : "ipv4_src",
+ "target" : ["ipv4", "src_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ipv4_dst",
+ "target" : ["ipv4", "dst_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "l4_sport",
+ "target" : ["scalars", "fabric_metadata_t._l4_sport21"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "l4_dport",
+ "target" : ["scalars", "fabric_metadata_t._l4_dport22"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [107, 98],
+ "actions" : ["FabricEgress.process_int_main.process_int_source.int_source_dscp", "nop"],
+ "base_default_next" : "node_143",
+ "next_tables" : {
+ "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_143",
+ "nop" : "node_143"
+ },
+ "default_entry" : {
+ "action_id" : 98,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_52",
+ "id" : 87,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [162],
+ "actions" : ["act_52"],
+ "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert",
+ "next_tables" : {
+ "act_52" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert"
+ },
+ "default_entry" : {
+ "action_id" : 162,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert",
+ "id" : 88,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 315,
+ "column" : 10,
+ "source_fragment" : "tb_int_insert"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "int_is_valid",
+ "target" : ["int_header", "$valid$"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [108, 99],
+ "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "nop"],
+ "base_default_next" : "node_146",
+ "next_tables" : {
+ "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_146",
+ "nop" : "node_146"
+ },
+ "default_entry" : {
+ "action_id" : 99,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_53",
+ "id" : 89,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 420,
+ "column" : 12,
+ "source_fragment" : "return"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [163],
+ "actions" : ["act_53"],
+ "base_default_next" : "node_148",
+ "next_tables" : {
+ "act_53" : "node_148"
+ },
+ "default_entry" : {
+ "action_id" : 163,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003",
+ "id" : 90,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 331,
+ "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" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 102],
+ "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" : 102,
+ "action_const" : false,
+ "action_data" : [],
+ "action_entry_const" : false
+ },
+ "entries" : [
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 354,
+ "column" : 12,
+ "source_fragment" : "(0x0) : int_set_header_0003_i0()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x00"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 109,
+ "action_data" : []
+ },
+ "priority" : 1
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 355,
+ "column" : 12,
+ "source_fragment" : "(0x1) : int_set_header_0003_i1()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x01"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 110,
+ "action_data" : []
+ },
+ "priority" : 2
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 356,
+ "column" : 12,
+ "source_fragment" : "(0x2) : int_set_header_0003_i2()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x02"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 111,
+ "action_data" : []
+ },
+ "priority" : 3
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 357,
+ "column" : 12,
+ "source_fragment" : "(0x3) : int_set_header_0003_i3()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x03"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 112,
+ "action_data" : []
+ },
+ "priority" : 4
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 358,
+ "column" : 12,
+ "source_fragment" : "(0x4) : int_set_header_0003_i4()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x04"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 113,
+ "action_data" : []
+ },
+ "priority" : 5
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 359,
+ "column" : 12,
+ "source_fragment" : "(0x5) : int_set_header_0003_i5()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x05"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 114,
+ "action_data" : []
+ },
+ "priority" : 6
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 360,
+ "column" : 12,
+ "source_fragment" : "(0x6) : int_set_header_0003_i6()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x06"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 115,
+ "action_data" : []
+ },
+ "priority" : 7
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 361,
+ "column" : 12,
+ "source_fragment" : "(0x7) : int_set_header_0003_i7()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x07"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 116,
+ "action_data" : []
+ },
+ "priority" : 8
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 362,
+ "column" : 12,
+ "source_fragment" : "(0x8) : int_set_header_0003_i8()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x08"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 117,
+ "action_data" : []
+ },
+ "priority" : 9
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 363,
+ "column" : 12,
+ "source_fragment" : "(0x9) : int_set_header_0003_i9()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x09"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 118,
+ "action_data" : []
+ },
+ "priority" : 10
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 364,
+ "column" : 12,
+ "source_fragment" : "(0xA) : int_set_header_0003_i10()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0a"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 119,
+ "action_data" : []
+ },
+ "priority" : 11
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 365,
+ "column" : 12,
+ "source_fragment" : "(0xB) : int_set_header_0003_i11()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0b"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 120,
+ "action_data" : []
+ },
+ "priority" : 12
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 366,
+ "column" : 12,
+ "source_fragment" : "(0xC) : int_set_header_0003_i12()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0c"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 121,
+ "action_data" : []
+ },
+ "priority" : 13
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 367,
+ "column" : 12,
+ "source_fragment" : "(0xD) : int_set_header_0003_i13()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0d"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 122,
+ "action_data" : []
+ },
+ "priority" : 14
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 368,
+ "column" : 12,
+ "source_fragment" : "(0xE) : int_set_header_0003_i14()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0e"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 123,
+ "action_data" : []
+ },
+ "priority" : 15
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 369,
+ "column" : 12,
+ "source_fragment" : "(0xF) : int_set_header_0003_i15()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0f"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 124,
+ "action_data" : []
+ },
+ "priority" : 16
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407",
+ "id" : 91,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 375,
+ "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" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 103],
+ "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_54",
+ "next_tables" : {
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0" : "tbl_act_54",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1" : "tbl_act_54",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2" : "tbl_act_54",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3" : "tbl_act_54",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4" : "tbl_act_54",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5" : "tbl_act_54",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6" : "tbl_act_54",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7" : "tbl_act_54",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8" : "tbl_act_54",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9" : "tbl_act_54",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10" : "tbl_act_54",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11" : "tbl_act_54",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12" : "tbl_act_54",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13" : "tbl_act_54",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14" : "tbl_act_54",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15" : "tbl_act_54",
+ "NoAction" : "tbl_act_54"
+ },
+ "default_entry" : {
+ "action_id" : 103,
+ "action_const" : false,
+ "action_data" : [],
+ "action_entry_const" : false
+ },
+ "entries" : [
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 398,
+ "column" : 12,
+ "source_fragment" : "(0x0) : int_set_header_0407_i0()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x00"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 125,
+ "action_data" : []
+ },
+ "priority" : 1
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 399,
+ "column" : 12,
+ "source_fragment" : "(0x1) : int_set_header_0407_i1()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x01"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 126,
+ "action_data" : []
+ },
+ "priority" : 2
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 400,
+ "column" : 12,
+ "source_fragment" : "(0x2) : int_set_header_0407_i2()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x02"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 127,
+ "action_data" : []
+ },
+ "priority" : 3
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 401,
+ "column" : 12,
+ "source_fragment" : "(0x3) : int_set_header_0407_i3()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x03"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 128,
+ "action_data" : []
+ },
+ "priority" : 4
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 402,
+ "column" : 12,
+ "source_fragment" : "(0x4) : int_set_header_0407_i4()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x04"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 129,
+ "action_data" : []
+ },
+ "priority" : 5
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 403,
+ "column" : 12,
+ "source_fragment" : "(0x5) : int_set_header_0407_i5()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x05"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 130,
+ "action_data" : []
+ },
+ "priority" : 6
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 404,
+ "column" : 12,
+ "source_fragment" : "(0x6) : int_set_header_0407_i6()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x06"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 131,
+ "action_data" : []
+ },
+ "priority" : 7
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 405,
+ "column" : 12,
+ "source_fragment" : "(0x7) : int_set_header_0407_i7()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x07"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 132,
+ "action_data" : []
+ },
+ "priority" : 8
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 406,
+ "column" : 12,
+ "source_fragment" : "(0x8) : int_set_header_0407_i8()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x08"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 133,
+ "action_data" : []
+ },
+ "priority" : 9
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 407,
+ "column" : 12,
+ "source_fragment" : "(0x9) : int_set_header_0407_i9()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x09"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 134,
+ "action_data" : []
+ },
+ "priority" : 10
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 408,
+ "column" : 12,
+ "source_fragment" : "(0xA) : int_set_header_0407_i10()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0a"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 135,
+ "action_data" : []
+ },
+ "priority" : 11
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 409,
+ "column" : 12,
+ "source_fragment" : "(0xB) : int_set_header_0407_i11()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0b"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 136,
+ "action_data" : []
+ },
+ "priority" : 12
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 410,
+ "column" : 12,
+ "source_fragment" : "(0xC) : int_set_header_0407_i12()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0c"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 137,
+ "action_data" : []
+ },
+ "priority" : 13
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 411,
+ "column" : 12,
+ "source_fragment" : "(0xD) : int_set_header_0407_i13()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0d"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 138,
+ "action_data" : []
+ },
+ "priority" : 14
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 412,
+ "column" : 12,
+ "source_fragment" : "(0xE) : int_set_header_0407_i14()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0e"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 139,
+ "action_data" : []
+ },
+ "priority" : 15
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 413,
+ "column" : 12,
+ "source_fragment" : "(0xF) : int_set_header_0407_i15()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0f"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 140,
+ "action_data" : []
+ },
+ "priority" : 16
+ }
+ ]
+ },
+ {
+ "name" : "tbl_act_54",
+ "id" : 92,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 425,
+ "column" : 37,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [165],
+ "actions" : ["act_55"],
+ "base_default_next" : "node_152",
+ "next_tables" : {
+ "act_55" : "node_152"
+ },
+ "default_entry" : {
+ "action_id" : 165,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_55",
+ "id" : 93,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 428,
+ "column" : 31,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [164],
+ "actions" : ["act_54"],
+ "base_default_next" : "node_154",
+ "next_tables" : {
+ "act_54" : "node_154"
+ },
+ "default_entry" : {
+ "action_id" : 164,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_56",
+ "id" : 94,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 431,
+ "column" : 24,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [166],
+ "actions" : ["act_56"],
+ "base_default_next" : "node_156",
+ "next_tables" : {
+ "act_56" : "node_156"
+ },
+ "default_entry" : {
+ "action_id" : 166,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_57",
+ "id" : 95,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 434,
+ "column" : 37,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [167],
+ "actions" : ["act_57"],
+ "base_default_next" : "node_158",
+ "next_tables" : {
+ "act_57" : "node_158"
+ },
+ "default_entry" : {
+ "action_id" : 167,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_report.tb_generate_report",
+ "id" : 96,
+ "source_info" : {
+ "filename" : "include/int/int_report.p4",
+ "line" : 86,
+ "column" : 10,
+ "source_fragment" : "tb_generate_report"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [141, 100],
+ "actions" : ["FabricEgress.process_int_main.process_int_report.do_report_encapsulation", "nop"],
+ "base_default_next" : "node_160",
+ "next_tables" : {
+ "FabricEgress.process_int_main.process_int_report.do_report_encapsulation" : "node_160",
+ "nop" : "node_160"
+ },
+ "default_entry" : {
+ "action_id" : 100,
+ "action_const" : false,
+ "action_data" : [],
+ "action_entry_const" : false
+ }
+ },
+ {
+ "name" : "tbl_process_int_main_process_int_sink_restore_header",
+ "id" : 97,
+ "source_info" : {
+ "filename" : "include/int/int_sink.p4",
+ "line" : 53,
+ "column" : 8,
+ "source_fragment" : "restore_header()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [142],
+ "actions" : ["FabricEgress.process_int_main.process_int_sink.restore_header"],
+ "base_default_next" : "tbl_process_int_main_process_int_sink_int_sink",
+ "next_tables" : {
+ "FabricEgress.process_int_main.process_int_sink.restore_header" : "tbl_process_int_main_process_int_sink_int_sink"
+ },
+ "default_entry" : {
+ "action_id" : 142,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_process_int_main_process_int_sink_int_sink",
+ "id" : 98,
+ "source_info" : {
+ "filename" : "include/int/int_sink.p4",
+ "line" : 54,
+ "column" : 8,
+ "source_fragment" : "int_sink()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [143],
+ "actions" : ["FabricEgress.process_int_main.process_int_sink.int_sink"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "FabricEgress.process_int_main.process_int_sink.int_sink" : null
+ },
+ "default_entry" : {
+ "action_id" : 143,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ }
+ ],
+ "action_profiles" : [],
+ "conditionals" : [
+ {
+ "name" : "node_101",
+ "id" : 32,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 39,
+ "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_out19"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ },
+ "true_next" : "tbl_act_40",
+ "false_next" : "node_103"
+ },
+ {
+ "name" : "node_103",
+ "id" : 33,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 43,
+ "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" : "tbl_act_41",
+ "false_next" : "node_105"
+ },
+ {
+ "name" : "node_105",
+ "id" : 34,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 333,
+ "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_multicast18"]
+ }
+ }
+ },
+ "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_act_42",
+ "false_next" : "node_107"
+ },
+ {
+ "name" : "node_107",
+ "id" : 35,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 338,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.mpls_label == 0"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_label12"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ }
+ },
+ "true_next" : "node_108",
+ "false_next" : "tbl_egress_next_set_mpls"
+ },
+ {
+ "name" : "node_108",
+ "id" : 36,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 339,
+ "column" : 16,
+ "source_fragment" : "hdr.mpls.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["mpls", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_egress_next_pop_mpls_if_present",
+ "false_next" : "node_111"
+ },
+ {
+ "name" : "node_111",
+ "id" : 37,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 345,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.push_double_vlan == true"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._push_double_vlan8"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ },
+ "true_next" : "tbl_egress_next_push_vlan",
+ "false_next" : "tbl_act_43"
+ },
+ {
+ "name" : "node_118",
+ "id" : 38,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 355,
+ "column" : 16,
+ "source_fragment" : "!egress_vlan.apply().hit"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "not",
+ "left" : null,
+ "right" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "egress_next_tmp"]
+ }
+ }
+ }
+ }
+ },
+ "true_next" : "node_119",
+ "false_next" : "node_121"
+ },
+ {
+ "name" : "node_119",
+ "id" : 39,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 357,
+ "column" : 20,
+ "source_fragment" : "fabric_metadata.vlan_id != DEFAULT_VLAN_ID"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "!=",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0ffe"
+ }
+ }
+ },
+ "true_next" : "tbl_egress_next_push_vlan_0",
+ "false_next" : "node_121"
+ },
+ {
+ "name" : "node_121",
+ "id" : 40,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 366,
+ "column" : 12,
+ "source_fragment" : "hdr.mpls.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["mpls", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_46",
+ "false_next" : "node_125"
+ },
+ {
+ "name" : "node_123",
+ "id" : 41,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 368,
+ "column" : 16,
+ "source_fragment" : "hdr.mpls.ttl == 0"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ }
+ },
+ "true_next" : "tbl_act_47",
+ "false_next" : "node_133"
+ },
+ {
+ "name" : "node_125",
+ "id" : 42,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 370,
+ "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_48",
+ "false_next" : "node_129"
+ },
+ {
+ "name" : "node_127",
+ "id" : 43,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 372,
+ "column" : 20,
+ "source_fragment" : "hdr.ipv4.ttl == 0"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["ipv4", "ttl"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ }
+ },
+ "true_next" : "tbl_act_49",
+ "false_next" : "node_133"
+ },
+ {
+ "name" : "node_129",
+ "id" : 44,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 375,
+ "column" : 21,
+ "source_fragment" : "hdr.ipv6.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["ipv6", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_50",
+ "false_next" : "node_133"
+ },
+ {
+ "name" : "node_131",
+ "id" : 45,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 377,
+ "column" : 20,
+ "source_fragment" : "hdr.ipv6.hop_limit == 0"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["ipv6", "hop_limit"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ }
+ },
+ "true_next" : "tbl_act_51",
+ "false_next" : "node_133"
+ },
+ {
+ "name" : "node_133",
+ "id" : 46,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 227,
+ "column" : 12,
+ "source_fragment" : "fabric_meta.spgw.direction == SPGW_DIR_DOWNLINK"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_direction23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "true_next" : "tbl_spgw_egress_gtpu_encap",
+ "false_next" : "node_135"
+ },
+ {
+ "name" : "node_135",
+ "id" : 47,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 369,
+ "column" : 12,
+ "source_fragment" : "fmeta.bng.type == BNG_TYPE_DOWNSTREAM"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._bng_type28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "true_next" : "node_136",
+ "false_next" : "node_140"
+ },
+ {
+ "name" : "node_136",
+ "id" : 48,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 294,
+ "column" : 12,
+ "source_fragment" : "hdr.ipv4.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["ipv4", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_bng_egress_downstream_encap_v4",
+ "false_next" : "node_138"
+ },
+ {
+ "name" : "node_138",
+ "id" : 49,
+ "source_info" : {
+ "filename" : "include/bng.p4",
+ "line" : 299,
+ "column" : 17,
+ "source_fragment" : "hdr.ipv6.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["ipv6", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_bng_egress_downstream_encap_v6",
+ "false_next" : "node_140"
+ },
+ {
+ "name" : "node_140",
+ "id" : 50,
+ "source_info" : {
+ "filename" : "include/int/int_main.p4",
+ "line" : 102,
+ "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_141"
+ },
+ {
+ "name" : "node_141",
+ "id" : 51,
+ "source_info" : {
+ "filename" : "include/int/int_main.p4",
+ "line" : 106,
+ "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" : ["scalars", "fabric_metadata_t._int_meta_source32"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ },
+ "true_next" : "FabricEgress.process_int_main.process_int_source.tb_int_source",
+ "false_next" : "node_143"
+ },
+ {
+ "name" : "node_143",
+ "id" : 52,
+ "source_info" : {
+ "filename" : "include/int/int_main.p4",
+ "line" : 110,
+ "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_52"
+ },
+ {
+ "name" : "node_146",
+ "id" : 53,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 419,
+ "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" : ["scalars", "fabric_metadata_t._int_meta_transit33"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ },
+ "true_next" : "tbl_act_53",
+ "false_next" : "node_148"
+ },
+ {
+ "name" : "node_148",
+ "id" : 54,
+ "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"]
+ }
+ }
+ }
+ }
+ },
+ "true_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003",
+ "false_next" : "node_158"
+ },
+ {
+ "name" : "node_152",
+ "id" : 55,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 427,
+ "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_55",
+ "false_next" : "node_154"
+ },
+ {
+ "name" : "node_154",
+ "id" : 56,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 430,
+ "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_56",
+ "false_next" : "node_156"
+ },
+ {
+ "name" : "node_156",
+ "id" : 57,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 433,
+ "column" : 12,
+ "source_fragment" : "hdr.intl4_shim.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["intl4_shim", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_57",
+ "false_next" : "node_158"
+ },
+ {
+ "name" : "node_158",
+ "id" : 58,
+ "source_info" : {
+ "filename" : "include/int/int_main.p4",
+ "line" : 115,
+ "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_main.process_int_report.tb_generate_report",
+ "false_next" : "node_160"
+ },
+ {
+ "name" : "node_160",
+ "id" : 59,
+ "source_info" : {
+ "filename" : "include/int/int_main.p4",
+ "line" : 119,
+ "column" : 20,
+ "source_fragment" : "fabric_metadata.int_meta.sink == true"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_sink34"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ },
+ "false_next" : null,
+ "true_next" : "tbl_process_int_main_process_int_sink_restore_header"
+ }
+ ]
+ }
+ ],
+ "checksums" : [
+ {
+ "name" : "cksum",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "include/checksum.p4",
+ "line" : 28,
+ "column" : 8,
+ "source_fragment" : "update_checksum(hdr.ipv4.isValid(), ..."
+ },
+ "target" : ["ipv4", "hdr_checksum"],
+ "type" : "generic",
+ "calculation" : "calc",
+ "verify" : false,
+ "update" : true,
+ "if_cond" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["ipv4", "$valid$"]
+ }
+ }
+ }
+ },
+ {
+ "name" : "cksum_0",
+ "id" : 1,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 243,
+ "column" : 8,
+ "source_fragment" : "update_checksum(gtpu_ipv4.isValid(), ..."
+ },
+ "target" : ["gtpu_ipv4", "hdr_checksum"],
+ "type" : "generic",
+ "calculation" : "calc_0",
+ "verify" : false,
+ "update" : true,
+ "if_cond" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["gtpu_ipv4", "$valid$"]
+ }
+ }
+ }
+ },
+ {
+ "name" : "cksum_1",
+ "id" : 2,
+ "source_info" : {
+ "filename" : "include/checksum.p4",
+ "line" : 57,
+ "column" : 8,
+ "source_fragment" : "verify_checksum(hdr.ipv4.isValid(), ..."
+ },
+ "target" : ["ipv4", "hdr_checksum"],
+ "type" : "generic",
+ "calculation" : "calc_1",
+ "verify" : true,
+ "update" : false,
+ "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"]
+ ],
+ [
+ "intrinsic_metadata.priority",
+ ["standard_metadata", "priority"]
+ ]
+ ],
+ "program" : "fabric.p4",
+ "__meta__" : {
+ "version" : [2, 18],
+ "compiler" : "https://github.com/p4lang/p4c"
+ }
+}
\ No newline at end of file
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/cpu_port.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/cpu_port.txt
new file mode 100644
index 0000000..ace9d03
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/cpu_port.txt
@@ -0,0 +1 @@
+255
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt
new file mode 100644
index 0000000..2a1ca9e
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt
@@ -0,0 +1,1738 @@
+pkg_info {
+ arch: "v1model"
+}
+tables {
+ preamble {
+ id: 33582731
+ name: "FabricIngress.spgw_ingress.dl_sess_lookup"
+ alias: "dl_sess_lookup"
+ }
+ match_fields {
+ id: 1
+ name: "ipv4_dst"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16804065
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318781522
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33615906
+ name: "FabricIngress.spgw_ingress.s1u_filter_table"
+ alias: "s1u_filter_table"
+ }
+ match_fields {
+ id: 1
+ name: "gtp_ipv4_dst"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16819938
+ }
+ const_default_action_id: 16819938
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33581620
+ name: "FabricIngress.process_set_source_sink.tb_set_source"
+ alias: "tb_set_source"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16778827
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318787614
+ size: 511
+}
+tables {
+ preamble {
+ id: 33561619
+ name: "FabricIngress.process_set_source_sink.tb_set_sink"
+ alias: "tb_set_sink"
+ }
+ match_fields {
+ id: 1
+ name: "eg_spec"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16788951
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318770551
+ size: 511
+}
+tables {
+ preamble {
+ id: 33603300
+ name: "FabricIngress.bng_ingress.upstream.t_pppoe_cp"
+ alias: "t_pppoe_cp"
+ }
+ match_fields {
+ id: 1
+ name: "pppoe_code"
+ bitwidth: 8
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "pppoe_protocol"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16830893
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ size: 16
+}
+tables {
+ preamble {
+ id: 33595047
+ name: "FabricIngress.bng_ingress.upstream.t_pppoe_term_v4"
+ alias: "t_pppoe_term_v4"
+ }
+ match_fields {
+ id: 1
+ name: "line_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "ipv4_src"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ match_fields {
+ id: 3
+ name: "pppoe_session_id"
+ bitwidth: 16
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16780562
+ }
+ action_refs {
+ id: 16785853
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16785853
+ size: 32768
+}
+tables {
+ preamble {
+ id: 33579386
+ name: "FabricIngress.bng_ingress.upstream.t_pppoe_term_v6"
+ alias: "t_pppoe_term_v6"
+ }
+ match_fields {
+ id: 1
+ name: "line_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "ipv6_src_net_id"
+ bitwidth: 64
+ match_type: EXACT
+ }
+ match_fields {
+ id: 3
+ name: "pppoe_session_id"
+ bitwidth: 16
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16824882
+ }
+ action_refs {
+ id: 16785853
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16785853
+ size: 32768
+}
+tables {
+ preamble {
+ id: 33594775
+ name: "FabricIngress.bng_ingress.downstream.t_line_session_map"
+ alias: "t_line_session_map"
+ }
+ match_fields {
+ id: 1
+ name: "line_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ action_refs {
+ id: 16795395
+ }
+ action_refs {
+ id: 16822844
+ }
+ const_default_action_id: 16819938
+ size: 8192
+}
+tables {
+ preamble {
+ id: 33602462
+ name: "FabricIngress.bng_ingress.downstream.t_qos_v4"
+ alias: "t_qos_v4"
+ }
+ match_fields {
+ id: 1
+ name: "line_id"
+ bitwidth: 32
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 2
+ name: "ipv4_src"
+ bitwidth: 32
+ match_type: LPM
+ }
+ match_fields {
+ id: 3
+ name: "ipv4_dscp"
+ bitwidth: 6
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 4
+ name: "ipv4_ecn"
+ bitwidth: 2
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16830304
+ }
+ action_refs {
+ id: 16804676
+ }
+ const_default_action_id: 16804676
+ size: 256
+}
+tables {
+ preamble {
+ id: 33616597
+ name: "FabricIngress.bng_ingress.downstream.t_qos_v6"
+ alias: "t_qos_v6"
+ }
+ match_fields {
+ id: 1
+ name: "line_id"
+ bitwidth: 32
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 2
+ name: "ipv6_src"
+ bitwidth: 128
+ match_type: LPM
+ }
+ match_fields {
+ id: 3
+ name: "ipv6_traffic_class"
+ bitwidth: 8
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16830304
+ }
+ action_refs {
+ id: 16804676
+ }
+ const_default_action_id: 16804676
+ size: 256
+}
+tables {
+ preamble {
+ id: 33592041
+ name: "FabricIngress.bng_ingress.t_line_map"
+ alias: "t_line_map"
+ }
+ match_fields {
+ id: 1
+ name: "s_tag"
+ bitwidth: 12
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "c_tag"
+ bitwidth: 12
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ action_refs {
+ id: 16829385
+ }
+ const_default_action_id: 16819938
+ size: 8192
+}
+tables {
+ preamble {
+ id: 33611649
+ name: "FabricIngress.filtering.ingress_port_vlan"
+ alias: "ingress_port_vlan"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "vlan_is_valid"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ match_fields {
+ id: 3
+ name: "vlan_id"
+ bitwidth: 12
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 4
+ name: "inner_vlan_id"
+ bitwidth: 12
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16836487
+ }
+ action_refs {
+ id: 16818236
+ }
+ action_refs {
+ id: 16794911
+ }
+ const_default_action_id: 16836487
+ direct_resource_ids: 318815501
+ size: 8192
+}
+tables {
+ preamble {
+ id: 33596298
+ name: "FabricIngress.filtering.fwd_classifier"
+ alias: "fwd_classifier"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "eth_dst"
+ bitwidth: 48
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 3
+ name: "is_ipv4"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ match_fields {
+ id: 4
+ name: "is_ipv6"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ match_fields {
+ id: 5
+ name: "is_mpls"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16840921
+ }
+ const_default_action_id: 16840921
+ direct_resource_ids: 318827326
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33596749
+ name: "FabricIngress.forwarding.bridging"
+ alias: "bridging"
+ }
+ match_fields {
+ id: 1
+ name: "vlan_id"
+ bitwidth: 12
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "eth_dst"
+ bitwidth: 48
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16811012
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318770289
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33574274
+ name: "FabricIngress.forwarding.mpls"
+ alias: "mpls"
+ }
+ match_fields {
+ id: 1
+ name: "mpls_label"
+ bitwidth: 20
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16827758
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318830507
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33562650
+ name: "FabricIngress.forwarding.routing_v4"
+ alias: "routing_v4"
+ }
+ match_fields {
+ id: 1
+ name: "ipv4_dst"
+ bitwidth: 32
+ match_type: LPM
+ }
+ action_refs {
+ id: 16777434
+ }
+ action_refs {
+ id: 16804187
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318811107
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33614081
+ name: "FabricIngress.forwarding.routing_v6"
+ alias: "routing_v6"
+ }
+ match_fields {
+ id: 1
+ name: "ipv6_dst"
+ bitwidth: 128
+ match_type: LPM
+ }
+ action_refs {
+ id: 16809751
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318799210
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33618978
+ name: "FabricIngress.acl.acl"
+ alias: "acl"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 2
+ name: "ip_proto"
+ bitwidth: 8
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 3
+ name: "l4_sport"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 4
+ name: "l4_dport"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 5
+ name: "eth_src"
+ bitwidth: 48
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 6
+ name: "eth_dst"
+ bitwidth: 48
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 7
+ name: "vlan_id"
+ bitwidth: 12
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 8
+ name: "eth_type"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 9
+ name: "ipv4_src"
+ bitwidth: 32
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 10
+ name: "ipv4_dst"
+ bitwidth: 32
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 11
+ name: "icmp_type"
+ bitwidth: 8
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 12
+ name: "icmp_code"
+ bitwidth: 8
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16807382
+ }
+ action_refs {
+ id: 16829684
+ }
+ action_refs {
+ id: 16781601
+ }
+ action_refs {
+ id: 16820765
+ }
+ action_refs {
+ id: 16827694
+ }
+ const_default_action_id: 16827694
+ direct_resource_ids: 318801025
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33599709
+ name: "FabricIngress.next.next_vlan"
+ alias: "next_vlan"
+ }
+ match_fields {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16790685
+ }
+ action_refs {
+ id: 16803337
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318768144
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33596977
+ name: "FabricIngress.next.xconnect"
+ alias: "xconnect"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "next_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16842190
+ }
+ action_refs {
+ id: 16837052
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318778156
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33571723
+ name: "FabricIngress.next.simple"
+ alias: "simple"
+ }
+ match_fields {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16802668
+ }
+ action_refs {
+ id: 16814145
+ }
+ action_refs {
+ id: 16783036
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318769096
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33608588
+ name: "FabricIngress.next.hashed"
+ alias: "hashed"
+ }
+ match_fields {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16815357
+ }
+ action_refs {
+ id: 16791402
+ }
+ action_refs {
+ id: 16779255
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ implementation_id: 285217164
+ direct_resource_ids: 318800532
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33606828
+ name: "FabricIngress.next.multicast"
+ alias: "multicast"
+ }
+ match_fields {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16779917
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318801752
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33612258
+ name: "FabricEgress.process_int_main.process_int_source.tb_int_source"
+ alias: "tb_int_source"
+ }
+ match_fields {
+ id: 1
+ name: "ipv4_src"
+ bitwidth: 32
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 2
+ name: "ipv4_dst"
+ bitwidth: 32
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 3
+ name: "l4_sport"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 4
+ name: "l4_dport"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16785857
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318800047
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33599867
+ name: "FabricEgress.process_int_main.process_int_transit.tb_int_insert"
+ alias: "tb_int_insert"
+ }
+ match_fields {
+ id: 1
+ name: "int_is_valid"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16780783
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ size: 1
+}
+tables {
+ preamble {
+ id: 33618104
+ name: "FabricEgress.process_int_main.process_int_report.tb_generate_report"
+ alias: "tb_generate_report"
+ }
+ action_refs {
+ id: 16788620
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33599342
+ name: "FabricEgress.egress_next.egress_vlan"
+ alias: "egress_vlan"
+ }
+ match_fields {
+ id: 1
+ name: "vlan_id"
+ bitwidth: 12
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "eg_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16790030
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318827144
+ size: 1024
+}
+actions {
+ preamble {
+ id: 16819938
+ name: "nop"
+ alias: "nop"
+ }
+}
+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: 16788951
+ name: "FabricIngress.process_set_source_sink.int_set_sink"
+ alias: "int_set_sink"
+ }
+}
+actions {
+ preamble {
+ id: 16830893
+ name: "FabricIngress.bng_ingress.upstream.punt_to_cpu"
+ alias: "upstream.punt_to_cpu"
+ }
+}
+actions {
+ preamble {
+ id: 16785853
+ name: "FabricIngress.bng_ingress.upstream.term_disabled"
+ alias: "term_disabled"
+ }
+}
+actions {
+ preamble {
+ id: 16780562
+ name: "FabricIngress.bng_ingress.upstream.term_enabled_v4"
+ alias: "term_enabled_v4"
+ }
+}
+actions {
+ preamble {
+ id: 16824882
+ name: "FabricIngress.bng_ingress.upstream.term_enabled_v6"
+ alias: "term_enabled_v6"
+ }
+}
+actions {
+ preamble {
+ id: 16795395
+ name: "FabricIngress.bng_ingress.downstream.set_session"
+ alias: "set_session"
+ }
+ params {
+ id: 1
+ name: "pppoe_session_id"
+ bitwidth: 16
+ }
+}
+actions {
+ preamble {
+ id: 16822844
+ name: "FabricIngress.bng_ingress.downstream.drop"
+ alias: "downstream.drop"
+ }
+}
+actions {
+ preamble {
+ id: 16830304
+ name: "FabricIngress.bng_ingress.downstream.qos_prio"
+ alias: "qos_prio"
+ }
+}
+actions {
+ preamble {
+ id: 16804676
+ name: "FabricIngress.bng_ingress.downstream.qos_besteff"
+ alias: "qos_besteff"
+ }
+}
+actions {
+ preamble {
+ id: 16829385
+ name: "FabricIngress.bng_ingress.set_line"
+ alias: "set_line"
+ }
+ params {
+ id: 1
+ name: "line_id"
+ bitwidth: 32
+ }
+}
+actions {
+ preamble {
+ id: 16836487
+ name: "FabricIngress.filtering.deny"
+ alias: "deny"
+ }
+}
+actions {
+ preamble {
+ id: 16818236
+ name: "FabricIngress.filtering.permit"
+ alias: "permit"
+ }
+}
+actions {
+ preamble {
+ id: 16794911
+ name: "FabricIngress.filtering.permit_with_internal_vlan"
+ alias: "permit_with_internal_vlan"
+ }
+ params {
+ id: 1
+ name: "vlan_id"
+ bitwidth: 12
+ }
+}
+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: 16809751
+ name: "FabricIngress.forwarding.set_next_id_routing_v6"
+ alias: "set_next_id_routing_v6"
+ }
+ params {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ }
+}
+actions {
+ preamble {
+ id: 16807382
+ name: "FabricIngress.acl.set_next_id_acl"
+ alias: "set_next_id_acl"
+ }
+ params {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ }
+}
+actions {
+ preamble {
+ id: 16829684
+ name: "FabricIngress.acl.punt_to_cpu"
+ alias: "acl.punt_to_cpu"
+ }
+}
+actions {
+ preamble {
+ id: 16781601
+ name: "FabricIngress.acl.set_clone_session_id"
+ alias: "set_clone_session_id"
+ }
+ params {
+ id: 1
+ name: "clone_id"
+ bitwidth: 32
+ }
+}
+actions {
+ preamble {
+ id: 16820765
+ name: "FabricIngress.acl.drop"
+ alias: "acl.drop"
+ }
+}
+actions {
+ preamble {
+ id: 16827694
+ name: "FabricIngress.acl.nop_acl"
+ alias: "nop_acl"
+ }
+}
+actions {
+ preamble {
+ id: 16790685
+ name: "FabricIngress.next.set_vlan"
+ alias: "set_vlan"
+ }
+ params {
+ id: 1
+ name: "vlan_id"
+ bitwidth: 12
+ }
+}
+actions {
+ preamble {
+ id: 16803337
+ name: "FabricIngress.next.set_double_vlan"
+ alias: "set_double_vlan"
+ }
+ params {
+ id: 1
+ name: "outer_vlan_id"
+ bitwidth: 12
+ }
+ params {
+ id: 2
+ name: "inner_vlan_id"
+ bitwidth: 12
+ }
+}
+actions {
+ preamble {
+ id: 16842190
+ name: "FabricIngress.next.output_xconnect"
+ alias: "output_xconnect"
+ }
+ params {
+ id: 1
+ name: "port_num"
+ bitwidth: 9
+ }
+}
+actions {
+ preamble {
+ id: 16837052
+ name: "FabricIngress.next.set_next_id_xconnect"
+ alias: "set_next_id_xconnect"
+ }
+ params {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ }
+}
+actions {
+ preamble {
+ id: 16802668
+ name: "FabricIngress.next.output_simple"
+ alias: "output_simple"
+ }
+ params {
+ id: 1
+ name: "port_num"
+ bitwidth: 9
+ }
+}
+actions {
+ preamble {
+ id: 16814145
+ name: "FabricIngress.next.routing_simple"
+ alias: "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: 16783036
+ name: "FabricIngress.next.mpls_routing_simple"
+ alias: "mpls_routing_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: 16815357
+ name: "FabricIngress.next.output_hashed"
+ alias: "output_hashed"
+ }
+ params {
+ id: 1
+ name: "port_num"
+ bitwidth: 9
+ }
+}
+actions {
+ preamble {
+ id: 16791402
+ name: "FabricIngress.next.routing_hashed"
+ alias: "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: 16779255
+ name: "FabricIngress.next.mpls_routing_hashed"
+ alias: "mpls_routing_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: 16779917
+ name: "FabricIngress.next.set_mcast_group_id"
+ alias: "set_mcast_group_id"
+ }
+ params {
+ id: 1
+ name: "group_id"
+ bitwidth: 16
+ }
+}
+actions {
+ preamble {
+ id: 16800567
+ name: "NoAction"
+ alias: "NoAction"
+ }
+}
+actions {
+ preamble {
+ id: 16784000
+ name: "FabricEgress.bng_egress.downstream.encap_v4"
+ alias: "encap_v4"
+ }
+}
+actions {
+ preamble {
+ id: 16801306
+ name: "FabricEgress.bng_egress.downstream.encap_v6"
+ alias: "encap_v6"
+ }
+}
+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: 16788620
+ name: "FabricEgress.process_int_main.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: 16790030
+ name: "FabricEgress.egress_next.pop_vlan"
+ alias: "pop_vlan"
+ }
+}
+action_profiles {
+ preamble {
+ id: 285217164
+ name: "FabricIngress.next.hashed_selector"
+ alias: "hashed_selector"
+ }
+ table_ids: 33608588
+ with_selector: true
+ size: 1024
+ max_group_size: 16
+}
+counters {
+ preamble {
+ id: 302022672
+ name: "FabricIngress.bng_ingress.upstream.c_terminated"
+ alias: "c_terminated"
+ }
+ spec {
+ unit: PACKETS
+ }
+ size: 8192
+}
+counters {
+ preamble {
+ id: 302043418
+ name: "FabricIngress.bng_ingress.upstream.c_dropped"
+ alias: "c_dropped"
+ }
+ spec {
+ unit: PACKETS
+ }
+ size: 8192
+}
+counters {
+ preamble {
+ id: 302008909
+ name: "FabricIngress.bng_ingress.upstream.c_control"
+ alias: "c_control"
+ }
+ spec {
+ unit: PACKETS
+ }
+ size: 8192
+}
+counters {
+ preamble {
+ id: 302004781
+ name: "FabricIngress.bng_ingress.downstream.c_line_rx"
+ alias: "c_line_rx"
+ }
+ spec {
+ unit: BOTH
+ }
+ size: 8192
+}
+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
+}
+counters {
+ preamble {
+ id: 302046535
+ name: "FabricEgress.bng_egress.downstream.c_line_tx"
+ alias: "c_line_tx"
+ }
+ spec {
+ unit: BOTH
+ }
+ size: 8192
+}
+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: 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
+ 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: 318799210
+ name: "FabricIngress.forwarding.routing_v6_counter"
+ alias: "routing_v6_counter"
+ }
+ spec {
+ unit: BOTH
+ }
+ direct_table_id: 33614081
+}
+direct_counters {
+ preamble {
+ id: 318801025
+ name: "FabricIngress.acl.acl_counter"
+ alias: "acl_counter"
+ }
+ spec {
+ unit: BOTH
+ }
+ direct_table_id: 33618978
+}
+direct_counters {
+ preamble {
+ id: 318768144
+ name: "FabricIngress.next.next_vlan_counter"
+ alias: "next_vlan_counter"
+ }
+ spec {
+ unit: BOTH
+ }
+ direct_table_id: 33599709
+}
+direct_counters {
+ preamble {
+ id: 318778156
+ name: "FabricIngress.next.xconnect_counter"
+ alias: "xconnect_counter"
+ }
+ spec {
+ unit: BOTH
+ }
+ direct_table_id: 33596977
+}
+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
+}
+meters {
+ preamble {
+ id: 335569952
+ name: "FabricIngress.bng_ingress.downstream.m_besteff"
+ alias: "m_besteff"
+ }
+ spec {
+ unit: BYTES
+ }
+ size: 8192
+}
+meters {
+ preamble {
+ id: 335568260
+ name: "FabricIngress.bng_ingress.downstream.m_prio"
+ alias: "m_prio"
+ }
+ spec {
+ unit: BYTES
+ }
+ size: 8192
+}
+controller_packet_metadata {
+ preamble {
+ id: 67146229
+ name: "packet_in"
+ alias: "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"
+ alias: "packet_out"
+ annotations: "@controller_header(\"packet_out\")"
+ }
+ metadata {
+ id: 1
+ name: "egress_port"
+ bitwidth: 9
+ }
+ metadata {
+ id: 2
+ name: "_pad"
+ bitwidth: 7
+ }
+}
+type_info {
+}
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json
new file mode 100644
index 0000000..7aa7642
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json
@@ -0,0 +1,13316 @@
+{
+ "header_types" : [
+ {
+ "name" : "scalars_0",
+ "id" : 0,
+ "fields" : [
+ ["last_ipv4_dscp_0", 6, false],
+ ["tmp_0", 4, false],
+ ["tmp", 32, false],
+ ["tmp_1", 32, false],
+ ["egress_next_tmp", 1, false],
+ ["process_int_main_process_int_transit_hasReturned", 1, false],
+ ["fabric_metadata_t._last_eth_type0", 16, false],
+ ["fabric_metadata_t._is_ipv41", 1, false],
+ ["fabric_metadata_t._is_ipv62", 1, false],
+ ["fabric_metadata_t._is_mpls3", 1, false],
+ ["fabric_metadata_t._ip_eth_type4", 16, false],
+ ["fabric_metadata_t._vlan_id5", 12, false],
+ ["fabric_metadata_t._vlan_pri6", 3, false],
+ ["fabric_metadata_t._vlan_cfi7", 1, false],
+ ["fabric_metadata_t._mpls_label8", 20, false],
+ ["fabric_metadata_t._mpls_ttl9", 8, false],
+ ["fabric_metadata_t._skip_forwarding10", 1, false],
+ ["fabric_metadata_t._skip_next11", 1, false],
+ ["fabric_metadata_t._fwd_type12", 3, false],
+ ["fabric_metadata_t._next_id13", 32, false],
+ ["fabric_metadata_t._is_multicast14", 1, false],
+ ["fabric_metadata_t._is_controller_packet_out15", 1, false],
+ ["fabric_metadata_t._ip_proto16", 8, false],
+ ["fabric_metadata_t._l4_sport17", 16, false],
+ ["fabric_metadata_t._l4_dport18", 16, false],
+ ["fabric_metadata_t._int_meta_source19", 1, false],
+ ["fabric_metadata_t._int_meta_transit20", 1, false],
+ ["fabric_metadata_t._int_meta_sink21", 1, false],
+ ["fabric_metadata_t._int_meta_switch_id22", 32, false],
+ ["fabric_metadata_t._int_meta_new_words23", 8, false],
+ ["fabric_metadata_t._int_meta_new_bytes24", 16, false],
+ ["fabric_metadata_t._int_meta_ig_tstamp25", 32, false],
+ ["fabric_metadata_t._int_meta_eg_tstamp26", 32, false],
+ ["_padding_0", 3, 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],
+ ["recirculate_flag", 32, false],
+ ["checksum_error", 1, false],
+ ["parser_error", 32, false],
+ ["priority", 3, false],
+ ["_padding", 2, false]
+ ]
+ },
+ {
+ "name" : "ethernet_t",
+ "id" : 2,
+ "fields" : [
+ ["dst_addr", 48, false],
+ ["src_addr", 48, false],
+ ["eth_type", 16, false]
+ ]
+ },
+ {
+ "name" : "vlan_tag_t",
+ "id" : 3,
+ "fields" : [
+ ["pri", 3, false],
+ ["cfi", 1, false],
+ ["vlan_id", 12, false],
+ ["eth_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" : "tcp_t",
+ "id" : 6,
+ "fields" : [
+ ["sport", 16, false],
+ ["dport", 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" : "udp_t",
+ "id" : 7,
+ "fields" : [
+ ["sport", 16, false],
+ ["dport", 16, false],
+ ["len", 16, false],
+ ["checksum", 16, false]
+ ]
+ },
+ {
+ "name" : "icmp_t",
+ "id" : 8,
+ "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" : 9,
+ "fields" : [
+ ["egress_port", 9, false],
+ ["_pad", 7, false]
+ ]
+ },
+ {
+ "name" : "packet_in_header_t",
+ "id" : 10,
+ "fields" : [
+ ["ingress_port", 9, false],
+ ["_pad", 7, false]
+ ]
+ },
+ {
+ "name" : "intl4_shim_t",
+ "id" : 11,
+ "fields" : [
+ ["int_type", 8, false],
+ ["rsvd1", 8, false],
+ ["len_words", 8, false],
+ ["rsvd2", 8, false]
+ ]
+ },
+ {
+ "name" : "int_header_t",
+ "id" : 12,
+ "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" : 13,
+ "fields" : [
+ ["switch_id", 32, false]
+ ]
+ },
+ {
+ "name" : "int_port_ids_t",
+ "id" : 14,
+ "fields" : [
+ ["ingress_port_id", 16, false],
+ ["egress_port_id", 16, false]
+ ]
+ },
+ {
+ "name" : "int_hop_latency_t",
+ "id" : 15,
+ "fields" : [
+ ["hop_latency", 32, false]
+ ]
+ },
+ {
+ "name" : "int_q_occupancy_t",
+ "id" : 16,
+ "fields" : [
+ ["q_id", 8, false],
+ ["q_occupancy", 24, false]
+ ]
+ },
+ {
+ "name" : "int_ingress_tstamp_t",
+ "id" : 17,
+ "fields" : [
+ ["ingress_tstamp", 32, false]
+ ]
+ },
+ {
+ "name" : "int_egress_tstamp_t",
+ "id" : 18,
+ "fields" : [
+ ["egress_tstamp", 32, false]
+ ]
+ },
+ {
+ "name" : "int_q_congestion_t",
+ "id" : 19,
+ "fields" : [
+ ["q_id", 8, false],
+ ["q_congestion", 24, false]
+ ]
+ },
+ {
+ "name" : "int_egress_port_tx_util_t",
+ "id" : 20,
+ "fields" : [
+ ["egress_port_tx_util", 32, false]
+ ]
+ },
+ {
+ "name" : "intl4_tail_t",
+ "id" : 21,
+ "fields" : [
+ ["next_proto", 8, false],
+ ["dest_port", 16, false],
+ ["padding", 2, false],
+ ["dscp", 6, 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" : "inner_vlan_tag",
+ "id" : 4,
+ "header_type" : "vlan_tag_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "mpls",
+ "id" : 5,
+ "header_type" : "mpls_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "ipv4",
+ "id" : 6,
+ "header_type" : "ipv4_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "tcp",
+ "id" : 7,
+ "header_type" : "tcp_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "udp",
+ "id" : 8,
+ "header_type" : "udp_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "icmp",
+ "id" : 9,
+ "header_type" : "icmp_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "packet_out",
+ "id" : 10,
+ "header_type" : "packet_out_header_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "packet_in",
+ "id" : 11,
+ "header_type" : "packet_in_header_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "intl4_shim",
+ "id" : 12,
+ "header_type" : "intl4_shim_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "int_header",
+ "id" : 13,
+ "header_type" : "int_header_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "int_switch_id",
+ "id" : 14,
+ "header_type" : "int_switch_id_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "int_port_ids",
+ "id" : 15,
+ "header_type" : "int_port_ids_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "int_hop_latency",
+ "id" : 16,
+ "header_type" : "int_hop_latency_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "int_q_occupancy",
+ "id" : 17,
+ "header_type" : "int_q_occupancy_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "int_ingress_tstamp",
+ "id" : 18,
+ "header_type" : "int_ingress_tstamp_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "int_egress_tstamp",
+ "id" : 19,
+ "header_type" : "int_egress_tstamp_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "int_q_congestion",
+ "id" : 20,
+ "header_type" : "int_q_congestion_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "int_egress_tx_util",
+ "id" : 21,
+ "header_type" : "int_egress_port_tx_util_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "intl4_tail",
+ "id" : 22,
+ "header_type" : "intl4_tail_t",
+ "metadata" : false,
+ "pi_omit" : true
+ }
+ ],
+ "header_stacks" : [],
+ "header_union_types" : [],
+ "header_unions" : [],
+ "header_union_stacks" : [],
+ "field_lists" : [
+ {
+ "id" : 1,
+ "name" : "fl",
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 46,
+ "column" : 40,
+ "source_fragment" : "{standard_metadata.ingress_port}"
+ },
+ "elements" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ }
+ ]
+ }
+ ],
+ "errors" : [
+ ["NoError", 1],
+ ["PacketTooShort", 2],
+ ["NoMatch", 3],
+ ["StackOutOfBounds", 4],
+ ["HeaderTooShort", 5],
+ ["ParserTimeout", 6],
+ ["ParserInvalidArgument", 7]
+ ],
+ "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"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0ffe"
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x88a8",
+ "mask" : null,
+ "next_state" : "parse_vlan_tag"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x9100",
+ "mask" : null,
+ "next_state" : "parse_vlan_tag"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100",
+ "mask" : null,
+ "next_state" : "parse_vlan_tag"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847",
+ "mask" : null,
+ "next_state" : "parse_mpls"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0800",
+ "mask" : null,
+ "next_state" : "pre_parse_ipv4"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_vlan_tag",
+ "id" : 3,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "vlan_tag"
+ }
+ ],
+ "op" : "extract"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x0800",
+ "mask" : null,
+ "next_state" : "pre_parse_ipv4"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847",
+ "mask" : null,
+ "next_state" : "parse_mpls"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100",
+ "mask" : null,
+ "next_state" : "parse_inner_vlan_tag"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "eth_type"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_inner_vlan_tag",
+ "id" : 4,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "inner_vlan_tag"
+ }
+ ],
+ "op" : "extract"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x0800",
+ "mask" : null,
+ "next_state" : "pre_parse_ipv4"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847",
+ "mask" : null,
+ "next_state" : "parse_mpls"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "eth_type"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_mpls",
+ "id" : 5,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "mpls"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._is_mpls3"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_label8"]
+ },
+ {
+ "type" : "field",
+ "value" : ["mpls", "label"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_ttl9"]
+ },
+ {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp_0"]
+ },
+ {
+ "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_0"]
+ }
+ ]
+ },
+ {
+ "name" : "pre_parse_ipv4",
+ "id" : 6,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._is_ipv41"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : "parse_ipv4"
+ }
+ ],
+ "transition_key" : []
+ },
+ {
+ "name" : "parse_ipv4",
+ "id" : 7,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "ipv4"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._ip_proto16"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ipv4", "protocol"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._ip_eth_type4"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0800"
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "last_ipv4_dscp_0"]
+ },
+ {
+ "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_tcp",
+ "id" : 8,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "tcp"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_sport17"]
+ },
+ {
+ "type" : "field",
+ "value" : ["tcp", "sport"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_dport18"]
+ },
+ {
+ "type" : "field",
+ "value" : ["tcp", "dport"]
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : "parse_int"
+ }
+ ],
+ "transition_key" : []
+ },
+ {
+ "name" : "parse_udp",
+ "id" : 9,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "udp"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_sport17"]
+ },
+ {
+ "type" : "field",
+ "value" : ["udp", "sport"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_dport18"]
+ },
+ {
+ "type" : "field",
+ "value" : ["udp", "dport"]
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : "parse_int"
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["udp", "dport"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_icmp",
+ "id" : 10,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "icmp"
+ }
+ ],
+ "op" : "extract"
+ }
+ ],
+ "transitions" : [
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : []
+ },
+ {
+ "name" : "parse_int",
+ "id" : 11,
+ "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_0"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_intl4_shim",
+ "id" : 12,
+ "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" : 13,
+ "parser_ops" : [],
+ "transitions" : [
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : []
+ },
+ {
+ "name" : "parse_intl4_tail",
+ "id" : 14,
+ "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" : 276,
+ "column" : 8,
+ "source_fragment" : "FabricDeparser"
+ },
+ "order" : ["packet_in", "ethernet", "vlan_tag", "inner_vlan_tag", "mpls", "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", "intl4_tail"]
+ }
+ ],
+ "meter_arrays" : [],
+ "counter_arrays" : [
+ {
+ "name" : "FabricIngress.process_set_source_sink.counter_set_source",
+ "id" : 0,
+ "is_direct" : true,
+ "binding" : "FabricIngress.process_set_source_sink.tb_set_source",
+ "source_info" : {
+ "filename" : "include/int/int_main.p4",
+ "line" : 39,
+ "column" : 50,
+ "source_fragment" : "counter_set_source"
+ }
+ },
+ {
+ "name" : "FabricIngress.filtering.ingress_port_vlan_counter",
+ "id" : 1,
+ "is_direct" : true,
+ "binding" : "FabricIngress.filtering.ingress_port_vlan",
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 31,
+ "column" : 50,
+ "source_fragment" : "ingress_port_vlan_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.filtering.fwd_classifier_counter",
+ "id" : 2,
+ "is_direct" : true,
+ "binding" : "FabricIngress.filtering.fwd_classifier",
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 83,
+ "column" : 50,
+ "source_fragment" : "fwd_classifier_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.bridging_counter",
+ "id" : 3,
+ "is_direct" : true,
+ "binding" : "FabricIngress.forwarding.bridging",
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 36,
+ "column" : 50,
+ "source_fragment" : "bridging_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.mpls_counter",
+ "id" : 4,
+ "is_direct" : true,
+ "binding" : "FabricIngress.forwarding.mpls",
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 63,
+ "column" : 50,
+ "source_fragment" : "mpls_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.routing_v4_counter",
+ "id" : 5,
+ "is_direct" : true,
+ "binding" : "FabricIngress.forwarding.routing_v4",
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 87,
+ "column" : 50,
+ "source_fragment" : "routing_v4_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.acl.acl_counter",
+ "id" : 6,
+ "is_direct" : true,
+ "binding" : "FabricIngress.acl.acl",
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 30,
+ "column" : 50,
+ "source_fragment" : "acl_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.next_vlan_counter",
+ "id" : 7,
+ "is_direct" : true,
+ "binding" : "FabricIngress.next.next_vlan",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 67,
+ "column" : 50,
+ "source_fragment" : "next_vlan_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.xconnect_counter",
+ "id" : 8,
+ "is_direct" : true,
+ "binding" : "FabricIngress.next.xconnect",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 103,
+ "column" : 50,
+ "source_fragment" : "xconnect_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.hashed_counter",
+ "id" : 9,
+ "is_direct" : true,
+ "binding" : "FabricIngress.next.hashed",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 178,
+ "column" : 50,
+ "source_fragment" : "hashed_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.multicast_counter",
+ "id" : 10,
+ "is_direct" : true,
+ "binding" : "FabricIngress.next.multicast",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 222,
+ "column" : 50,
+ "source_fragment" : "multicast_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.port_counters_control.egress_port_counter",
+ "id" : 11,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 26,
+ "column" : 48,
+ "source_fragment" : "egress_port_counter"
+ },
+ "size" : 511,
+ "is_direct" : false
+ },
+ {
+ "name" : "FabricIngress.port_counters_control.ingress_port_counter",
+ "id" : 12,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 27,
+ "column" : 48,
+ "source_fragment" : "ingress_port_counter"
+ },
+ "size" : 511,
+ "is_direct" : false
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_source.counter_int_source",
+ "id" : 13,
+ "is_direct" : true,
+ "binding" : "FabricEgress.process_int_main.process_int_source.tb_int_source",
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 27,
+ "column" : 50,
+ "source_fragment" : "counter_int_source"
+ }
+ },
+ {
+ "name" : "FabricEgress.egress_next.egress_vlan_counter",
+ "id" : 14,
+ "is_direct" : true,
+ "binding" : "FabricEgress.egress_next.egress_vlan",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 310,
+ "column" : 50,
+ "source_fragment" : "egress_vlan_counter"
+ }
+ }
+ ],
+ "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/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" : "nop",
+ "id" : 0,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 1,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 2,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 3,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 4,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 5,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 6,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 7,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.process_set_source_sink.int_set_source",
+ "id" : 8,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_source19"]
+ },
+ {
+ "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" : 40,
+ "source_fragment" : "= true; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.filtering.deny",
+ "id" : 9,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_forwarding10"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 36,
+ "column" : 40,
+ "source_fragment" : "= true; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_next11"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 37,
+ "column" : 34,
+ "source_fragment" : "= true; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.filtering.permit",
+ "id" : 10,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.filtering.permit_with_internal_vlan",
+ "id" : 11,
+ "runtime_data" : [
+ {
+ "name" : "vlan_id",
+ "bitwidth" : 12
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 47,
+ "column" : 32,
+ "source_fragment" : "= vlan_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.filtering.set_forwarding_type",
+ "id" : 12,
+ "runtime_data" : [
+ {
+ "name" : "fwd_type",
+ "bitwidth" : 3
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._fwd_type12"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 86,
+ "column" : 33,
+ "source_fragment" : "= fwd_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.forwarding.set_next_id_bridging",
+ "id" : 13,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id13"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 30,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.forwarding.pop_mpls_and_next",
+ "id" : 14,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_label8"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 66,
+ "column" : 35,
+ "source_fragment" : "= 0; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id13"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 30,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.forwarding.set_next_id_routing_v4",
+ "id" : 15,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id13"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 30,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.forwarding.nop_routing_v4",
+ "id" : 16,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.acl.set_next_id_acl",
+ "id" : 17,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id13"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 33,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.punt_to_cpu",
+ "id" : 18,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_spec"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00ff"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 39,
+ "column" : 8,
+ "source_fragment" : "standard_metadata.egress_spec = 255"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_next11"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 40,
+ "column" : 34,
+ "source_fragment" : "= true; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.set_clone_session_id",
+ "id" : 19,
+ "runtime_data" : [
+ {
+ "name" : "clone_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "clone_ingress_pkt_to_egress",
+ "parameters" : [
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x1"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 46,
+ "column" : 8,
+ "source_fragment" : "clone3(CloneType.I2E, clone_id, {standard_metadata.ingress_port})"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.drop",
+ "id" : 20,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 51,
+ "column" : 8,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_next11"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 52,
+ "column" : 34,
+ "source_fragment" : "= true; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.nop_acl",
+ "id" : 21,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.next.set_vlan",
+ "id" : 22,
+ "runtime_data" : [
+ {
+ "name" : "vlan_id",
+ "bitwidth" : 12
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 70,
+ "column" : 32,
+ "source_fragment" : "= vlan_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.output_xconnect",
+ "id" : 23,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 107,
+ "column" : 31,
+ "source_fragment" : "0x8100; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.set_next_id_xconnect",
+ "id" : 24,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id13"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 112,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.output_hashed",
+ "id" : 25,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.routing_hashed",
+ "id" : 26,
+ "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" : 36,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.mpls_routing_hashed",
+ "id" : 27,
+ "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" : ["scalars", "fabric_metadata_t._mpls_label8"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 3
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 46,
+ "column" : 35,
+ "source_fragment" : "= label; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "src_addr"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 1
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 36,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.set_mcast_group_id",
+ "id" : 28,
+ "runtime_data" : [
+ {
+ "name" : "group_id",
+ "bitwidth" : 16
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "mcast_grp"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 225,
+ "column" : 8,
+ "source_fragment" : "standard_metadata.mcast_grp = group_id"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._is_multicast14"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 226,
+ "column" : 37,
+ "source_fragment" : "= true; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act",
+ "id" : 29,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_spec"]
+ },
+ {
+ "type" : "field",
+ "value" : ["packet_out", "egress_port"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 25,
+ "column" : 12,
+ "source_fragment" : "standard_metadata.egress_spec = hdr.packet_out.egress_port"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "packet_out"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 26,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_out.setInvalid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._is_controller_packet_out15"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 27,
+ "column" : 53,
+ "source_fragment" : "= true; ..."
+ }
+ },
+ {
+ "op" : "exit",
+ "parameters" : [],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 29,
+ "column" : 12,
+ "source_fragment" : "exit"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_0",
+ "id" : 30,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "vlan_id"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 110,
+ "column" : 36,
+ "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_pri6"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "pri"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 111,
+ "column" : 37,
+ "source_fragment" : "= hdr.vlan_tag.pri; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_cfi7"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "cfi"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 112,
+ "column" : 37,
+ "source_fragment" : "= hdr.vlan_tag.cfi; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_1",
+ "id" : 31,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_ttl9"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x41"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 126,
+ "column" : 37,
+ "source_fragment" : "= DEFAULT_MPLS_TTL + 1; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_2",
+ "id" : 32,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 108,
+ "column" : 31,
+ "source_fragment" : "0x8847; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_3",
+ "id" : 33,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "eth_type"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 136,
+ "column" : 50,
+ "source_fragment" : "= hdr.inner_vlan_tag.eth_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_4",
+ "id" : 34,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "eth_type"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 139,
+ "column" : 50,
+ "source_fragment" : "= hdr.vlan_tag.eth_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_5",
+ "id" : 35,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 141,
+ "column" : 46,
+ "source_fragment" : "= hdr.ethernet.eth_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_6",
+ "id" : 36,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_spec"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 31,
+ "column" : 38,
+ "source_fragment" : "(bit<32>)standard_metadata.egress_spec"
+ }
+ },
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricIngress.port_counters_control.egress_port_counter"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 31,
+ "column" : 12,
+ "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_7",
+ "id" : 37,
+ "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", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 34,
+ "column" : 39,
+ "source_fragment" : "(bit<32>)standard_metadata.ingress_port"
+ }
+ },
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricIngress.port_counters_control.ingress_port_counter"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp_1"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 34,
+ "column" : 12,
+ "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "nop",
+ "id" : 38,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 39,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 40,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "NoAction",
+ "id" : 41,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "NoAction",
+ "id" : 42,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_source.int_source_dscp",
+ "id" : 43,
+ "runtime_data" : [
+ {
+ "name" : "max_hop",
+ "bitwidth" : 8
+ },
+ {
+ "name" : "ins_cnt",
+ "bitwidth" : 5
+ },
+ {
+ "name" : "ins_mask0003",
+ "bitwidth" : 4
+ },
+ {
+ "name" : "ins_mask0407",
+ "bitwidth" : 4
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "intl4_shim"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 32,
+ "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" : 34,
+ "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" : 153,
+ "column" : 36,
+ "source_fragment" : "4; ..."
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_header"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 37,
+ "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" : 38,
+ "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" : 39,
+ "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" : 40,
+ "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" : 41,
+ "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" : 42,
+ "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" : 43,
+ "column" : 8,
+ "source_fragment" : "hdr.int_header.ins_cnt = ins_cnt; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_header", "max_hop_cnt"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 44,
+ "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" : 45,
+ "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" : 46,
+ "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" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_header.instruction_mask_0407 = ins_mask0407; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_header", "instruction_mask_0811"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 48,
+ "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" : 49,
+ "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" : 51,
+ "column" : 8,
+ "source_fragment" : "hdr.intl4_tail.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["intl4_tail", "next_proto"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ipv4", "protocol"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 52,
+ "column" : 8,
+ "source_fragment" : "hdr.intl4_tail.next_proto = hdr.ipv4.protocol"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["intl4_tail", "dest_port"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_dport18"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 53,
+ "column" : 8,
+ "source_fragment" : "hdr.intl4_tail.dest_port = fabric_metadata.l4_dport; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["intl4_tail", "dscp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ipv4", "dscp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.intl4_tail.dscp = hdr.ipv4.dscp"
+ }
+ },
+ {
+ "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" : 56,
+ "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" : 57,
+ "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" : 149,
+ "column" : 24,
+ "source_fragment" : "0x1; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.init_metadata",
+ "id" : 44,
+ "runtime_data" : [
+ {
+ "name" : "switch_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_transit20"]
+ },
+ {
+ "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" : 31,
+ "source_fragment" : "= true; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id22"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 31,
+ "column" : 33,
+ "source_fragment" : "= switch_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0",
+ "id" : 45,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1",
+ "id" : 46,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 60,
+ "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" : 62,
+ "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" : 63,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 97,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0004"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 98,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2",
+ "id" : 47,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_hop_latency"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_hop_latency", "hop_latency"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 55,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 97,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0004"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 98,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3",
+ "id" : 48,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 60,
+ "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" : 62,
+ "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" : 63,
+ "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" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_hop_latency", "hop_latency"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 55,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4",
+ "id" : 49,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_port_ids"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "ingress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "egress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 97,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0004"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 98,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5",
+ "id" : 50,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 60,
+ "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" : 62,
+ "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" : 63,
+ "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" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "ingress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "egress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6",
+ "id" : 51,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_hop_latency"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_hop_latency", "hop_latency"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 55,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_port_ids"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "ingress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "egress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7",
+ "id" : 52,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 60,
+ "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" : 62,
+ "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" : 63,
+ "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" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_hop_latency", "hop_latency"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 55,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_port_ids"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "ingress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "egress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x03"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 109,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 3; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000c"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 110,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8",
+ "id" : 53,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_switch_id"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_switch_id", "switch_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id22"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 97,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0004"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 98,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9",
+ "id" : 54,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 60,
+ "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" : 62,
+ "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" : 63,
+ "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" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_switch_id", "switch_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id22"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10",
+ "id" : 55,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_hop_latency"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_hop_latency", "hop_latency"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 55,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_switch_id"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_switch_id", "switch_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id22"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11",
+ "id" : 56,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 60,
+ "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" : 62,
+ "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" : 63,
+ "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" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_hop_latency", "hop_latency"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 55,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_switch_id"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_switch_id", "switch_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id22"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x03"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 109,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 3; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000c"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 110,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12",
+ "id" : 57,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_port_ids"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "ingress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "egress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_switch_id"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_switch_id", "switch_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id22"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13",
+ "id" : 58,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 60,
+ "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" : 62,
+ "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" : 63,
+ "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" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "ingress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "egress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_switch_id"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_switch_id", "switch_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id22"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x03"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 109,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 3; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000c"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 110,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14",
+ "id" : 59,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_hop_latency"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_hop_latency", "hop_latency"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 55,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_port_ids"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "ingress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "egress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_switch_id"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_switch_id", "switch_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id22"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x03"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 109,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 3; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000c"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 110,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15",
+ "id" : 60,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 60,
+ "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" : 62,
+ "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" : 63,
+ "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" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_hop_latency", "hop_latency"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 55,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_port_ids"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "ingress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "egress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_switch_id"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_switch_id", "switch_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id22"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x04"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 115,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 4; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0010"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 116,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 16; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0",
+ "id" : 61,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1",
+ "id" : 62,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tx_util"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 88,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tx_util", "egress_port_tx_util"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 90,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 97,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0004"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 98,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2",
+ "id" : 63,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_congestion"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 80,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_id"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 82,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_id = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_congestion"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 83,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 97,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0004"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 98,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3",
+ "id" : 64,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tx_util"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 88,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tx_util", "egress_port_tx_util"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 90,
+ "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" : 80,
+ "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" : 82,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_id = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_congestion"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 83,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4",
+ "id" : 65,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tstamp", "egress_tstamp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 97,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0004"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 98,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5",
+ "id" : 66,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tx_util"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 88,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tx_util", "egress_port_tx_util"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 90,
+ "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" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tstamp", "egress_tstamp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6",
+ "id" : 67,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_congestion"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 80,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_id"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 82,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_id = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_congestion"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 83,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tstamp", "egress_tstamp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7",
+ "id" : 68,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tx_util"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 88,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tx_util", "egress_port_tx_util"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 90,
+ "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" : 80,
+ "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" : 82,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_id = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_congestion"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 83,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tstamp", "egress_tstamp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x03"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 109,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 3; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000c"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 110,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8",
+ "id" : 69,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_ingress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 68,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_ingress_tstamp", "ingress_tstamp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 97,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0004"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 98,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9",
+ "id" : 70,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tx_util"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 88,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tx_util", "egress_port_tx_util"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 90,
+ "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" : 68,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_ingress_tstamp", "ingress_tstamp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10",
+ "id" : 71,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_congestion"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 80,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_id"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 82,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_id = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_congestion"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 83,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_ingress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 68,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_ingress_tstamp", "ingress_tstamp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11",
+ "id" : 72,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tx_util"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 88,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tx_util", "egress_port_tx_util"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 90,
+ "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" : 80,
+ "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" : 82,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_id = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_congestion"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 83,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_ingress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 68,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_ingress_tstamp", "ingress_tstamp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x03"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 109,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 3; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000c"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 110,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12",
+ "id" : 73,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tstamp", "egress_tstamp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_ingress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 68,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_ingress_tstamp", "ingress_tstamp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13",
+ "id" : 74,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tx_util"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 88,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tx_util", "egress_port_tx_util"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 90,
+ "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" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tstamp", "egress_tstamp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_ingress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 68,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_ingress_tstamp", "ingress_tstamp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x03"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 109,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 3; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000c"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 110,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14",
+ "id" : 75,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_congestion"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 80,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_id"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 82,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_id = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_congestion"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 83,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tstamp", "egress_tstamp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_ingress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 68,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_ingress_tstamp", "ingress_tstamp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x03"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 109,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 3; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000c"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 110,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15",
+ "id" : 76,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tx_util"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 88,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tx_util", "egress_port_tx_util"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 90,
+ "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" : 80,
+ "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" : 82,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_id = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_congestion"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 83,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tstamp", "egress_tstamp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_ingress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 68,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_ingress_tstamp", "ingress_tstamp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x04"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 115,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 4; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0010"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 116,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 16; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.pop_mpls_if_present",
+ "id" : 77,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "mpls"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 264,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.setInvalid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._ip_eth_type4"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 266,
+ "column" : 38,
+ "source_fragment" : "= fabric_metadata.ip_eth_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.set_mpls",
+ "id" : 78,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "mpls"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 271,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "label"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_label8"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 272,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.label = fabric_metadata.mpls_label; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "tc"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 273,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.tc = 3w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "bos"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 274,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.bos = 1w1"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_ttl9"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 275,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.ttl = fabric_metadata.mpls_ttl; // Decrement after push. ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 108,
+ "column" : 31,
+ "source_fragment" : "0x8847; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.push_vlan",
+ "id" : 79,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "vlan_tag"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 283,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "cfi"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_cfi7"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 284,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "pri"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_pri6"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 285,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "eth_type"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 286,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.eth_type = fabric_metadata.last_eth_type; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "vlan_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 287,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 107,
+ "column" : 31,
+ "source_fragment" : "0x8100; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.pop_vlan",
+ "id" : 80,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 313,
+ "column" : 8,
+ "source_fragment" : "hdr.ethernet.eth_type = fabric_metadata.last_eth_type; ..."
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "vlan_tag"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 314,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.setInvalid()"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_8",
+ "id" : 81,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "exit",
+ "parameters" : [],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 41,
+ "column" : 12,
+ "source_fragment" : "exit"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_9",
+ "id" : 82,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "packet_in"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 44,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_in.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["packet_in", "ingress_port"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 45,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port"
+ }
+ },
+ {
+ "op" : "exit",
+ "parameters" : [],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 47,
+ "column" : 12,
+ "source_fragment" : "exit"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_10",
+ "id" : 83,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 335,
+ "column" : 12,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_11",
+ "id" : 84,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "egress_next_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_12",
+ "id" : 85,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "egress_next_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_13",
+ "id" : 86,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 368,
+ "column" : 35,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_14",
+ "id" : 87,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 367,
+ "column" : 12,
+ "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_15",
+ "id" : 88,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 372,
+ "column" : 39,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_16",
+ "id" : 89,
+ "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" : 371,
+ "column" : 16,
+ "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_17",
+ "id" : 90,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "process_int_main_process_int_transit_hasReturned"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_18",
+ "id" : 91,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "process_int_main_process_int_transit_hasReturned"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 420,
+ "column" : 12,
+ "source_fragment" : "return"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_19",
+ "id" : 92,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ipv4", "total_len"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["ipv4", "total_len"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 428,
+ "column" : 12,
+ "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + fmeta.int_meta.new_bytes"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_20",
+ "id" : 93,
+ "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" : 425,
+ "column" : 8,
+ "source_fragment" : "hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 1"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_21",
+ "id" : 94,
+ "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" : ["scalars", "fabric_metadata_t._int_meta_new_bytes24"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 431,
+ "column" : 12,
+ "source_fragment" : "hdr.udp.len = hdr.udp.len + fmeta.int_meta.new_bytes"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_22",
+ "id" : 95,
+ "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" : ["scalars", "fabric_metadata_t._int_meta_new_words23"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 434,
+ "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" : 46,
+ "column" : 8,
+ "source_fragment" : "FabricIngress"
+ },
+ "init_table" : "node_2",
+ "tables" : [
+ {
+ "name" : "tbl_act",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 25,
+ "column" : 42,
+ "source_fragment" : "= hdr.packet_out.egress_port; ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [29],
+ "actions" : ["act"],
+ "base_default_next" : "node_4",
+ "next_tables" : {
+ "act" : "node_4"
+ },
+ "default_entry" : {
+ "action_id" : 29,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_0",
+ "id" : 1,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 110,
+ "column" : 36,
+ "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [30],
+ "actions" : ["act_0"],
+ "base_default_next" : "node_6",
+ "next_tables" : {
+ "act_0" : "node_6"
+ },
+ "default_entry" : {
+ "action_id" : 30,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_1",
+ "id" : 2,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 126,
+ "column" : 37,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [31],
+ "actions" : ["act_1"],
+ "base_default_next" : "node_8",
+ "next_tables" : {
+ "act_1" : "node_8"
+ },
+ "default_entry" : {
+ "action_id" : 31,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_2",
+ "id" : 3,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 131,
+ "column" : 42,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [32],
+ "actions" : ["act_2"],
+ "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+ "next_tables" : {
+ "act_2" : "FabricIngress.filtering.ingress_port_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 32,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_3",
+ "id" : 4,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 136,
+ "column" : 50,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [33],
+ "actions" : ["act_3"],
+ "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+ "next_tables" : {
+ "act_3" : "FabricIngress.filtering.ingress_port_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 33,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_4",
+ "id" : 5,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 139,
+ "column" : 50,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [34],
+ "actions" : ["act_4"],
+ "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+ "next_tables" : {
+ "act_4" : "FabricIngress.filtering.ingress_port_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 34,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_5",
+ "id" : 6,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 141,
+ "column" : 46,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [35],
+ "actions" : ["act_5"],
+ "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+ "next_tables" : {
+ "act_5" : "FabricIngress.filtering.ingress_port_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 35,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.filtering.ingress_port_vlan",
+ "id" : 7,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 53,
+ "column" : 10,
+ "source_fragment" : "ingress_port_vlan"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "vlan_is_valid",
+ "target" : ["vlan_tag", "$valid$"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "vlan_id",
+ "target" : ["vlan_tag", "vlan_id"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "inner_vlan_id",
+ "target" : ["inner_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" : [9, 10, 11],
+ "actions" : ["FabricIngress.filtering.deny", "FabricIngress.filtering.permit", "FabricIngress.filtering.permit_with_internal_vlan"],
+ "base_default_next" : "FabricIngress.filtering.fwd_classifier",
+ "next_tables" : {
+ "FabricIngress.filtering.deny" : "FabricIngress.filtering.fwd_classifier",
+ "FabricIngress.filtering.permit" : "FabricIngress.filtering.fwd_classifier",
+ "FabricIngress.filtering.permit_with_internal_vlan" : "FabricIngress.filtering.fwd_classifier"
+ },
+ "default_entry" : {
+ "action_id" : 9,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.filtering.fwd_classifier",
+ "id" : 8,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 90,
+ "column" : 10,
+ "source_fragment" : "fwd_classifier"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_dst",
+ "target" : ["ethernet", "dst_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "is_ipv4",
+ "target" : ["scalars", "fabric_metadata_t._is_ipv41"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "is_ipv6",
+ "target" : ["scalars", "fabric_metadata_t._is_ipv62"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "is_mpls",
+ "target" : ["scalars", "fabric_metadata_t._is_mpls3"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [12],
+ "actions" : ["FabricIngress.filtering.set_forwarding_type"],
+ "base_default_next" : "node_17",
+ "next_tables" : {
+ "FabricIngress.filtering.set_forwarding_type" : "node_17"
+ },
+ "default_entry" : {
+ "action_id" : 12,
+ "action_const" : true,
+ "action_data" : ["0x0"],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.bridging",
+ "id" : 9,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 46,
+ "column" : 10,
+ "source_fragment" : "bridging"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "vlan_id",
+ "target" : ["scalars", "fabric_metadata_t._vlan_id5"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_dst",
+ "target" : ["ethernet", "dst_addr"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [13, 1],
+ "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"],
+ "base_default_next" : "FabricIngress.acl.acl",
+ "next_tables" : {
+ "FabricIngress.forwarding.set_next_id_bridging" : "FabricIngress.acl.acl",
+ "nop" : "FabricIngress.acl.acl"
+ },
+ "default_entry" : {
+ "action_id" : 1,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.mpls",
+ "id" : 10,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 71,
+ "column" : 10,
+ "source_fragment" : "mpls"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "mpls_label",
+ "target" : ["scalars", "fabric_metadata_t._mpls_label8"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [14, 2],
+ "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"],
+ "base_default_next" : "FabricIngress.acl.acl",
+ "next_tables" : {
+ "FabricIngress.forwarding.pop_mpls_and_next" : "FabricIngress.acl.acl",
+ "nop" : "FabricIngress.acl.acl"
+ },
+ "default_entry" : {
+ "action_id" : 2,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.routing_v4",
+ "id" : 11,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 101,
+ "column" : 10,
+ "source_fragment" : "routing_v4"
+ },
+ "key" : [
+ {
+ "match_type" : "lpm",
+ "name" : "ipv4_dst",
+ "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" : [15, 16, 3],
+ "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"],
+ "base_default_next" : "FabricIngress.acl.acl",
+ "next_tables" : {
+ "FabricIngress.forwarding.set_next_id_routing_v4" : "FabricIngress.acl.acl",
+ "FabricIngress.forwarding.nop_routing_v4" : "FabricIngress.acl.acl",
+ "nop" : "FabricIngress.acl.acl"
+ },
+ "default_entry" : {
+ "action_id" : 3,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.acl.acl",
+ "id" : 12,
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 60,
+ "column" : 10,
+ "source_fragment" : "acl"
+ },
+ "key" : [
+ {
+ "match_type" : "ternary",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ip_proto",
+ "target" : ["scalars", "fabric_metadata_t._ip_proto16"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "l4_sport",
+ "target" : ["scalars", "fabric_metadata_t._l4_sport17"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "l4_dport",
+ "target" : ["scalars", "fabric_metadata_t._l4_dport18"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_src",
+ "target" : ["ethernet", "dst_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_dst",
+ "target" : ["ethernet", "src_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "vlan_id",
+ "target" : ["vlan_tag", "vlan_id"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_type",
+ "target" : ["scalars", "fabric_metadata_t._last_eth_type0"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ipv4_src",
+ "target" : ["ipv4", "src_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ipv4_dst",
+ "target" : ["ipv4", "dst_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "icmp_type",
+ "target" : ["icmp", "icmp_type"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "icmp_code",
+ "target" : ["icmp", "icmp_code"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [17, 18, 19, 20, 21],
+ "actions" : ["FabricIngress.acl.set_next_id_acl", "FabricIngress.acl.punt_to_cpu", "FabricIngress.acl.set_clone_session_id", "FabricIngress.acl.drop", "FabricIngress.acl.nop_acl"],
+ "base_default_next" : "node_25",
+ "next_tables" : {
+ "FabricIngress.acl.set_next_id_acl" : "node_25",
+ "FabricIngress.acl.punt_to_cpu" : "node_25",
+ "FabricIngress.acl.set_clone_session_id" : "node_25",
+ "FabricIngress.acl.drop" : "node_25",
+ "FabricIngress.acl.nop_acl" : "node_25"
+ },
+ "default_entry" : {
+ "action_id" : 21,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.next.xconnect",
+ "id" : 13,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 116,
+ "column" : 10,
+ "source_fragment" : "xconnect"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "next_id",
+ "target" : ["scalars", "fabric_metadata_t._next_id13"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [23, 24, 5],
+ "actions" : ["FabricIngress.next.output_xconnect", "FabricIngress.next.set_next_id_xconnect", "nop"],
+ "base_default_next" : "FabricIngress.next.hashed",
+ "next_tables" : {
+ "FabricIngress.next.output_xconnect" : "FabricIngress.next.hashed",
+ "FabricIngress.next.set_next_id_xconnect" : "FabricIngress.next.hashed",
+ "nop" : "FabricIngress.next.hashed"
+ },
+ "default_entry" : {
+ "action_id" : 5,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.next.hashed",
+ "id" : 14,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 196,
+ "column" : 10,
+ "source_fragment" : "hashed"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "next_id",
+ "target" : ["scalars", "fabric_metadata_t._next_id13"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "indirect_ws",
+ "action_profile" : "FabricIngress.next.hashed_selector",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [25, 26, 27, 6],
+ "actions" : ["FabricIngress.next.output_hashed", "FabricIngress.next.routing_hashed", "FabricIngress.next.mpls_routing_hashed", "nop"],
+ "base_default_next" : "FabricIngress.next.multicast",
+ "next_tables" : {
+ "FabricIngress.next.output_hashed" : "FabricIngress.next.multicast",
+ "FabricIngress.next.routing_hashed" : "FabricIngress.next.multicast",
+ "FabricIngress.next.mpls_routing_hashed" : "FabricIngress.next.multicast",
+ "nop" : "FabricIngress.next.multicast"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.multicast",
+ "id" : 15,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 230,
+ "column" : 10,
+ "source_fragment" : "multicast"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "next_id",
+ "target" : ["scalars", "fabric_metadata_t._next_id13"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [28, 7],
+ "actions" : ["FabricIngress.next.set_mcast_group_id", "nop"],
+ "base_default_next" : "FabricIngress.next.next_vlan",
+ "next_tables" : {
+ "FabricIngress.next.set_mcast_group_id" : "FabricIngress.next.next_vlan",
+ "nop" : "FabricIngress.next.next_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 7,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.next.next_vlan",
+ "id" : 16,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 82,
+ "column" : 10,
+ "source_fragment" : "next_vlan"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "next_id",
+ "target" : ["scalars", "fabric_metadata_t._next_id13"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [22, 4],
+ "actions" : ["FabricIngress.next.set_vlan", "nop"],
+ "base_default_next" : "node_30",
+ "next_tables" : {
+ "FabricIngress.next.set_vlan" : "node_30",
+ "nop" : "node_30"
+ },
+ "default_entry" : {
+ "action_id" : 4,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_6",
+ "id" : 17,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 31,
+ "column" : 12,
+ "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [36],
+ "actions" : ["act_6"],
+ "base_default_next" : "node_32",
+ "next_tables" : {
+ "act_6" : "node_32"
+ },
+ "default_entry" : {
+ "action_id" : 36,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_7",
+ "id" : 18,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 34,
+ "column" : 12,
+ "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [37],
+ "actions" : ["act_7"],
+ "base_default_next" : "FabricIngress.process_set_source_sink.tb_set_source",
+ "next_tables" : {
+ "act_7" : "FabricIngress.process_set_source_sink.tb_set_source"
+ },
+ "default_entry" : {
+ "action_id" : 37,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.process_set_source_sink.tb_set_source",
+ "id" : 19,
+ "source_info" : {
+ "filename" : "include/int/int_main.p4",
+ "line" : 46,
+ "column" : 10,
+ "source_fragment" : "tb_set_source"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 511,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [8, 0],
+ "actions" : ["FabricIngress.process_set_source_sink.int_set_source", "nop"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "FabricIngress.process_set_source_sink.int_set_source" : null,
+ "nop" : null
+ },
+ "default_entry" : {
+ "action_id" : 0,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ }
+ ],
+ "action_profiles" : [
+ {
+ "name" : "FabricIngress.next.hashed_selector",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 177,
+ "column" : 57,
+ "source_fragment" : "hashed_selector"
+ },
+ "max_size" : 1024,
+ "selector" : {
+ "algo" : "crc16",
+ "input" : [
+ {
+ "type" : "field",
+ "value" : ["ipv4", "dst_addr"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ipv4", "src_addr"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._ip_proto16"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_sport17"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_dport18"]
+ }
+ ]
+ }
+ }
+ ],
+ "conditionals" : [
+ {
+ "name" : "node_2",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 24,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_out.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["packet_out", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act",
+ "false_next" : "node_4"
+ },
+ {
+ "name" : "node_4",
+ "id" : 1,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 109,
+ "column" : 12,
+ "source_fragment" : "hdr.vlan_tag.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["vlan_tag", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_0",
+ "false_next" : "node_6"
+ },
+ {
+ "name" : "node_6",
+ "id" : 2,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 121,
+ "column" : 12,
+ "source_fragment" : "!hdr.mpls.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "not",
+ "left" : null,
+ "right" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["mpls", "$valid$"]
+ }
+ }
+ }
+ }
+ },
+ "true_next" : "tbl_act_1",
+ "false_next" : "node_8"
+ },
+ {
+ "name" : "node_8",
+ "id" : 3,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 130,
+ "column" : 12,
+ "source_fragment" : "hdr.mpls.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["mpls", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_2",
+ "false_next" : "node_10"
+ },
+ {
+ "name" : "node_10",
+ "id" : 4,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 133,
+ "column" : 16,
+ "source_fragment" : "hdr.vlan_tag.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["vlan_tag", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "node_11",
+ "false_next" : "tbl_act_5"
+ },
+ {
+ "name" : "node_11",
+ "id" : 5,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 135,
+ "column" : 19,
+ "source_fragment" : "hdr.inner_vlan_tag.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_3",
+ "false_next" : "tbl_act_4"
+ },
+ {
+ "name" : "node_17",
+ "id" : 6,
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 71,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.skip_forwarding == false"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_forwarding10"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ },
+ "true_next" : "node_18",
+ "false_next" : "FabricIngress.acl.acl"
+ },
+ {
+ "name" : "node_18",
+ "id" : 7,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 141,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.fwd_type == FWD_BRIDGING"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._fwd_type12"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ }
+ },
+ "true_next" : "FabricIngress.forwarding.bridging",
+ "false_next" : "node_20"
+ },
+ {
+ "name" : "node_20",
+ "id" : 8,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 142,
+ "column" : 17,
+ "source_fragment" : "fabric_metadata.fwd_type == FWD_MPLS"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._fwd_type12"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "true_next" : "FabricIngress.forwarding.mpls",
+ "false_next" : "node_22"
+ },
+ {
+ "name" : "node_22",
+ "id" : 9,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 143,
+ "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_type12"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "true_next" : "FabricIngress.forwarding.routing_v4",
+ "false_next" : "FabricIngress.acl.acl"
+ },
+ {
+ "name" : "node_25",
+ "id" : 10,
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 75,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.skip_next == false"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_next11"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ },
+ "false_next" : null,
+ "true_next" : "FabricIngress.next.xconnect"
+ },
+ {
+ "name" : "node_30",
+ "id" : 11,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 30,
+ "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_6",
+ "false_next" : "node_32"
+ },
+ {
+ "name" : "node_32",
+ "id" : 12,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 33,
+ "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_7",
+ "false_next" : "FabricIngress.process_set_source_sink.tb_set_source"
+ }
+ ]
+ },
+ {
+ "name" : "egress",
+ "id" : 1,
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 93,
+ "column" : 8,
+ "source_fragment" : "FabricEgress"
+ },
+ "init_table" : "node_37",
+ "tables" : [
+ {
+ "name" : "tbl_act_8",
+ "id" : 20,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 41,
+ "column" : 12,
+ "source_fragment" : "exit"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [81],
+ "actions" : ["act_8"],
+ "base_default_next" : "node_39",
+ "next_tables" : {
+ "act_8" : "node_39"
+ },
+ "default_entry" : {
+ "action_id" : 81,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_9",
+ "id" : 21,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 44,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_in.setValid(); ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [82],
+ "actions" : ["act_9"],
+ "base_default_next" : "node_41",
+ "next_tables" : {
+ "act_9" : "node_41"
+ },
+ "default_entry" : {
+ "action_id" : 82,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_10",
+ "id" : 22,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 335,
+ "column" : 12,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [83],
+ "actions" : ["act_10"],
+ "base_default_next" : "node_43",
+ "next_tables" : {
+ "act_10" : "node_43"
+ },
+ "default_entry" : {
+ "action_id" : 83,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_egress_next_pop_mpls_if_present",
+ "id" : 23,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 339,
+ "column" : 36,
+ "source_fragment" : "pop_mpls_if_present()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [77],
+ "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"],
+ "base_default_next" : "FabricEgress.egress_next.egress_vlan",
+ "next_tables" : {
+ "FabricEgress.egress_next.pop_mpls_if_present" : "FabricEgress.egress_next.egress_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 77,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_egress_next_set_mpls",
+ "id" : 24,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 341,
+ "column" : 12,
+ "source_fragment" : "set_mpls()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [78],
+ "actions" : ["FabricEgress.egress_next.set_mpls"],
+ "base_default_next" : "FabricEgress.egress_next.egress_vlan",
+ "next_tables" : {
+ "FabricEgress.egress_next.set_mpls" : "FabricEgress.egress_next.egress_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 78,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricEgress.egress_next.egress_vlan",
+ "id" : 25,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 318,
+ "column" : 10,
+ "source_fragment" : "egress_vlan"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "vlan_id",
+ "target" : ["scalars", "fabric_metadata_t._vlan_id5"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "eg_port",
+ "target" : ["standard_metadata", "egress_port"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [80, 40],
+ "actions" : ["FabricEgress.egress_next.pop_vlan", "nop"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "__HIT__" : "tbl_act_11",
+ "__MISS__" : "tbl_act_12"
+ },
+ "default_entry" : {
+ "action_id" : 40,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_11",
+ "id" : 26,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [84],
+ "actions" : ["act_11"],
+ "base_default_next" : "node_50",
+ "next_tables" : {
+ "act_11" : "node_50"
+ },
+ "default_entry" : {
+ "action_id" : 84,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_12",
+ "id" : 27,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [85],
+ "actions" : ["act_12"],
+ "base_default_next" : "node_50",
+ "next_tables" : {
+ "act_12" : "node_50"
+ },
+ "default_entry" : {
+ "action_id" : 85,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_egress_next_push_vlan",
+ "id" : 28,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 358,
+ "column" : 20,
+ "source_fragment" : "push_vlan()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [79],
+ "actions" : ["FabricEgress.egress_next.push_vlan"],
+ "base_default_next" : "node_53",
+ "next_tables" : {
+ "FabricEgress.egress_next.push_vlan" : "node_53"
+ },
+ "default_entry" : {
+ "action_id" : 79,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_13",
+ "id" : 29,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 367,
+ "column" : 25,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [87],
+ "actions" : ["act_14"],
+ "base_default_next" : "node_55",
+ "next_tables" : {
+ "act_14" : "node_55"
+ },
+ "default_entry" : {
+ "action_id" : 87,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_14",
+ "id" : 30,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 368,
+ "column" : 35,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [86],
+ "actions" : ["act_13"],
+ "base_default_next" : "node_61",
+ "next_tables" : {
+ "act_13" : "node_61"
+ },
+ "default_entry" : {
+ "action_id" : 86,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_15",
+ "id" : 31,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 371,
+ "column" : 29,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [89],
+ "actions" : ["act_16"],
+ "base_default_next" : "node_59",
+ "next_tables" : {
+ "act_16" : "node_59"
+ },
+ "default_entry" : {
+ "action_id" : 89,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_16",
+ "id" : 32,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 372,
+ "column" : 39,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [88],
+ "actions" : ["act_15"],
+ "base_default_next" : "node_61",
+ "next_tables" : {
+ "act_15" : "node_61"
+ },
+ "default_entry" : {
+ "action_id" : 88,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_source.tb_int_source",
+ "id" : 33,
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 66,
+ "column" : 10,
+ "source_fragment" : "tb_int_source"
+ },
+ "key" : [
+ {
+ "match_type" : "ternary",
+ "name" : "ipv4_src",
+ "target" : ["ipv4", "src_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ipv4_dst",
+ "target" : ["ipv4", "dst_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "l4_sport",
+ "target" : ["scalars", "fabric_metadata_t._l4_sport17"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "l4_dport",
+ "target" : ["scalars", "fabric_metadata_t._l4_dport18"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [43, 38],
+ "actions" : ["FabricEgress.process_int_main.process_int_source.int_source_dscp", "nop"],
+ "base_default_next" : "node_64",
+ "next_tables" : {
+ "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_64",
+ "nop" : "node_64"
+ },
+ "default_entry" : {
+ "action_id" : 38,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_17",
+ "id" : 34,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [90],
+ "actions" : ["act_17"],
+ "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert",
+ "next_tables" : {
+ "act_17" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert"
+ },
+ "default_entry" : {
+ "action_id" : 90,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert",
+ "id" : 35,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 315,
+ "column" : 10,
+ "source_fragment" : "tb_int_insert"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "int_is_valid",
+ "target" : ["int_header", "$valid$"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [44, 39],
+ "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "nop"],
+ "base_default_next" : "node_67",
+ "next_tables" : {
+ "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_67",
+ "nop" : "node_67"
+ },
+ "default_entry" : {
+ "action_id" : 39,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_18",
+ "id" : 36,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 420,
+ "column" : 12,
+ "source_fragment" : "return"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [91],
+ "actions" : ["act_18"],
+ "base_default_next" : "node_69",
+ "next_tables" : {
+ "act_18" : "node_69"
+ },
+ "default_entry" : {
+ "action_id" : 91,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003",
+ "id" : 37,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 331,
+ "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" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 41],
+ "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" : 41,
+ "action_const" : false,
+ "action_data" : [],
+ "action_entry_const" : false
+ },
+ "entries" : [
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 354,
+ "column" : 12,
+ "source_fragment" : "(0x0) : int_set_header_0003_i0()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x00"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 45,
+ "action_data" : []
+ },
+ "priority" : 1
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 355,
+ "column" : 12,
+ "source_fragment" : "(0x1) : int_set_header_0003_i1()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x01"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 46,
+ "action_data" : []
+ },
+ "priority" : 2
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 356,
+ "column" : 12,
+ "source_fragment" : "(0x2) : int_set_header_0003_i2()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x02"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 47,
+ "action_data" : []
+ },
+ "priority" : 3
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 357,
+ "column" : 12,
+ "source_fragment" : "(0x3) : int_set_header_0003_i3()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x03"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 48,
+ "action_data" : []
+ },
+ "priority" : 4
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 358,
+ "column" : 12,
+ "source_fragment" : "(0x4) : int_set_header_0003_i4()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x04"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 49,
+ "action_data" : []
+ },
+ "priority" : 5
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 359,
+ "column" : 12,
+ "source_fragment" : "(0x5) : int_set_header_0003_i5()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x05"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 50,
+ "action_data" : []
+ },
+ "priority" : 6
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 360,
+ "column" : 12,
+ "source_fragment" : "(0x6) : int_set_header_0003_i6()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x06"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 51,
+ "action_data" : []
+ },
+ "priority" : 7
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 361,
+ "column" : 12,
+ "source_fragment" : "(0x7) : int_set_header_0003_i7()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x07"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 52,
+ "action_data" : []
+ },
+ "priority" : 8
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 362,
+ "column" : 12,
+ "source_fragment" : "(0x8) : int_set_header_0003_i8()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x08"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 53,
+ "action_data" : []
+ },
+ "priority" : 9
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 363,
+ "column" : 12,
+ "source_fragment" : "(0x9) : int_set_header_0003_i9()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x09"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 54,
+ "action_data" : []
+ },
+ "priority" : 10
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 364,
+ "column" : 12,
+ "source_fragment" : "(0xA) : int_set_header_0003_i10()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0a"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 55,
+ "action_data" : []
+ },
+ "priority" : 11
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 365,
+ "column" : 12,
+ "source_fragment" : "(0xB) : int_set_header_0003_i11()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0b"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 56,
+ "action_data" : []
+ },
+ "priority" : 12
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 366,
+ "column" : 12,
+ "source_fragment" : "(0xC) : int_set_header_0003_i12()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0c"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 57,
+ "action_data" : []
+ },
+ "priority" : 13
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 367,
+ "column" : 12,
+ "source_fragment" : "(0xD) : int_set_header_0003_i13()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0d"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 58,
+ "action_data" : []
+ },
+ "priority" : 14
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 368,
+ "column" : 12,
+ "source_fragment" : "(0xE) : int_set_header_0003_i14()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0e"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 59,
+ "action_data" : []
+ },
+ "priority" : 15
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 369,
+ "column" : 12,
+ "source_fragment" : "(0xF) : int_set_header_0003_i15()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0f"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 60,
+ "action_data" : []
+ },
+ "priority" : 16
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407",
+ "id" : 38,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 375,
+ "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" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 42],
+ "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_19",
+ "next_tables" : {
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0" : "tbl_act_19",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1" : "tbl_act_19",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2" : "tbl_act_19",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3" : "tbl_act_19",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4" : "tbl_act_19",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5" : "tbl_act_19",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6" : "tbl_act_19",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7" : "tbl_act_19",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8" : "tbl_act_19",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9" : "tbl_act_19",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10" : "tbl_act_19",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11" : "tbl_act_19",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12" : "tbl_act_19",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13" : "tbl_act_19",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14" : "tbl_act_19",
+ "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15" : "tbl_act_19",
+ "NoAction" : "tbl_act_19"
+ },
+ "default_entry" : {
+ "action_id" : 42,
+ "action_const" : false,
+ "action_data" : [],
+ "action_entry_const" : false
+ },
+ "entries" : [
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 398,
+ "column" : 12,
+ "source_fragment" : "(0x0) : int_set_header_0407_i0()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x00"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 61,
+ "action_data" : []
+ },
+ "priority" : 1
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 399,
+ "column" : 12,
+ "source_fragment" : "(0x1) : int_set_header_0407_i1()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x01"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 62,
+ "action_data" : []
+ },
+ "priority" : 2
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 400,
+ "column" : 12,
+ "source_fragment" : "(0x2) : int_set_header_0407_i2()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x02"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 63,
+ "action_data" : []
+ },
+ "priority" : 3
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 401,
+ "column" : 12,
+ "source_fragment" : "(0x3) : int_set_header_0407_i3()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x03"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 64,
+ "action_data" : []
+ },
+ "priority" : 4
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 402,
+ "column" : 12,
+ "source_fragment" : "(0x4) : int_set_header_0407_i4()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x04"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 65,
+ "action_data" : []
+ },
+ "priority" : 5
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 403,
+ "column" : 12,
+ "source_fragment" : "(0x5) : int_set_header_0407_i5()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x05"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 66,
+ "action_data" : []
+ },
+ "priority" : 6
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 404,
+ "column" : 12,
+ "source_fragment" : "(0x6) : int_set_header_0407_i6()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x06"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 67,
+ "action_data" : []
+ },
+ "priority" : 7
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 405,
+ "column" : 12,
+ "source_fragment" : "(0x7) : int_set_header_0407_i7()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x07"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 68,
+ "action_data" : []
+ },
+ "priority" : 8
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 406,
+ "column" : 12,
+ "source_fragment" : "(0x8) : int_set_header_0407_i8()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x08"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 69,
+ "action_data" : []
+ },
+ "priority" : 9
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 407,
+ "column" : 12,
+ "source_fragment" : "(0x9) : int_set_header_0407_i9()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x09"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 70,
+ "action_data" : []
+ },
+ "priority" : 10
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 408,
+ "column" : 12,
+ "source_fragment" : "(0xA) : int_set_header_0407_i10()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0a"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 71,
+ "action_data" : []
+ },
+ "priority" : 11
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 409,
+ "column" : 12,
+ "source_fragment" : "(0xB) : int_set_header_0407_i11()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0b"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 72,
+ "action_data" : []
+ },
+ "priority" : 12
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 410,
+ "column" : 12,
+ "source_fragment" : "(0xC) : int_set_header_0407_i12()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0c"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 73,
+ "action_data" : []
+ },
+ "priority" : 13
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 411,
+ "column" : 12,
+ "source_fragment" : "(0xD) : int_set_header_0407_i13()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0d"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 74,
+ "action_data" : []
+ },
+ "priority" : 14
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 412,
+ "column" : 12,
+ "source_fragment" : "(0xE) : int_set_header_0407_i14()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0e"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 75,
+ "action_data" : []
+ },
+ "priority" : 15
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 413,
+ "column" : 12,
+ "source_fragment" : "(0xF) : int_set_header_0407_i15()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0f"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 76,
+ "action_data" : []
+ },
+ "priority" : 16
+ }
+ ]
+ },
+ {
+ "name" : "tbl_act_19",
+ "id" : 39,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 425,
+ "column" : 37,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [93],
+ "actions" : ["act_20"],
+ "base_default_next" : "node_73",
+ "next_tables" : {
+ "act_20" : "node_73"
+ },
+ "default_entry" : {
+ "action_id" : 93,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_20",
+ "id" : 40,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 428,
+ "column" : 31,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [92],
+ "actions" : ["act_19"],
+ "base_default_next" : "node_75",
+ "next_tables" : {
+ "act_19" : "node_75"
+ },
+ "default_entry" : {
+ "action_id" : 92,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_21",
+ "id" : 41,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 431,
+ "column" : 24,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [94],
+ "actions" : ["act_21"],
+ "base_default_next" : "node_77",
+ "next_tables" : {
+ "act_21" : "node_77"
+ },
+ "default_entry" : {
+ "action_id" : 94,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_22",
+ "id" : 42,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 434,
+ "column" : 37,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [95],
+ "actions" : ["act_22"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "act_22" : null
+ },
+ "default_entry" : {
+ "action_id" : 95,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ }
+ ],
+ "action_profiles" : [],
+ "conditionals" : [
+ {
+ "name" : "node_37",
+ "id" : 13,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 39,
+ "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_out15"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ },
+ "true_next" : "tbl_act_8",
+ "false_next" : "node_39"
+ },
+ {
+ "name" : "node_39",
+ "id" : 14,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 43,
+ "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" : "tbl_act_9",
+ "false_next" : "node_41"
+ },
+ {
+ "name" : "node_41",
+ "id" : 15,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 333,
+ "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_multicast14"]
+ }
+ }
+ },
+ "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_act_10",
+ "false_next" : "node_43"
+ },
+ {
+ "name" : "node_43",
+ "id" : 16,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 338,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.mpls_label == 0"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_label8"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ }
+ },
+ "true_next" : "node_44",
+ "false_next" : "tbl_egress_next_set_mpls"
+ },
+ {
+ "name" : "node_44",
+ "id" : 17,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 339,
+ "column" : 16,
+ "source_fragment" : "hdr.mpls.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["mpls", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_egress_next_pop_mpls_if_present",
+ "false_next" : "FabricEgress.egress_next.egress_vlan"
+ },
+ {
+ "name" : "node_50",
+ "id" : 18,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 355,
+ "column" : 16,
+ "source_fragment" : "!egress_vlan.apply().hit"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "not",
+ "left" : null,
+ "right" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "egress_next_tmp"]
+ }
+ }
+ }
+ }
+ },
+ "true_next" : "node_51",
+ "false_next" : "node_53"
+ },
+ {
+ "name" : "node_51",
+ "id" : 19,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 357,
+ "column" : 20,
+ "source_fragment" : "fabric_metadata.vlan_id != DEFAULT_VLAN_ID"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "!=",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0ffe"
+ }
+ }
+ },
+ "true_next" : "tbl_egress_next_push_vlan",
+ "false_next" : "node_53"
+ },
+ {
+ "name" : "node_53",
+ "id" : 20,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 366,
+ "column" : 12,
+ "source_fragment" : "hdr.mpls.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["mpls", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_13",
+ "false_next" : "node_57"
+ },
+ {
+ "name" : "node_55",
+ "id" : 21,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 368,
+ "column" : 16,
+ "source_fragment" : "hdr.mpls.ttl == 0"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ }
+ },
+ "true_next" : "tbl_act_14",
+ "false_next" : "node_61"
+ },
+ {
+ "name" : "node_57",
+ "id" : 22,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 370,
+ "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_15",
+ "false_next" : "node_61"
+ },
+ {
+ "name" : "node_59",
+ "id" : 23,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 372,
+ "column" : 20,
+ "source_fragment" : "hdr.ipv4.ttl == 0"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["ipv4", "ttl"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ }
+ },
+ "true_next" : "tbl_act_16",
+ "false_next" : "node_61"
+ },
+ {
+ "name" : "node_61",
+ "id" : 24,
+ "source_info" : {
+ "filename" : "include/int/int_main.p4",
+ "line" : 102,
+ "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_62"
+ },
+ {
+ "name" : "node_62",
+ "id" : 25,
+ "source_info" : {
+ "filename" : "include/int/int_main.p4",
+ "line" : 106,
+ "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" : ["scalars", "fabric_metadata_t._int_meta_source19"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ },
+ "true_next" : "FabricEgress.process_int_main.process_int_source.tb_int_source",
+ "false_next" : "node_64"
+ },
+ {
+ "name" : "node_64",
+ "id" : 26,
+ "source_info" : {
+ "filename" : "include/int/int_main.p4",
+ "line" : 110,
+ "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_17"
+ },
+ {
+ "name" : "node_67",
+ "id" : 27,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 419,
+ "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" : ["scalars", "fabric_metadata_t._int_meta_transit20"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ },
+ "true_next" : "tbl_act_18",
+ "false_next" : "node_69"
+ },
+ {
+ "name" : "node_69",
+ "id" : 28,
+ "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"]
+ }
+ }
+ }
+ }
+ },
+ "false_next" : null,
+ "true_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003"
+ },
+ {
+ "name" : "node_73",
+ "id" : 29,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 427,
+ "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_20",
+ "false_next" : "node_75"
+ },
+ {
+ "name" : "node_75",
+ "id" : 30,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 430,
+ "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_21",
+ "false_next" : "node_77"
+ },
+ {
+ "name" : "node_77",
+ "id" : 31,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 433,
+ "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_22"
+ }
+ ]
+ }
+ ],
+ "checksums" : [
+ {
+ "name" : "cksum",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "include/checksum.p4",
+ "line" : 28,
+ "column" : 8,
+ "source_fragment" : "update_checksum(hdr.ipv4.isValid(), ..."
+ },
+ "target" : ["ipv4", "hdr_checksum"],
+ "type" : "generic",
+ "calculation" : "calc",
+ "verify" : false,
+ "update" : true,
+ "if_cond" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["ipv4", "$valid$"]
+ }
+ }
+ }
+ },
+ {
+ "name" : "cksum_0",
+ "id" : 1,
+ "source_info" : {
+ "filename" : "include/checksum.p4",
+ "line" : 57,
+ "column" : 8,
+ "source_fragment" : "verify_checksum(hdr.ipv4.isValid(), ..."
+ },
+ "target" : ["ipv4", "hdr_checksum"],
+ "type" : "generic",
+ "calculation" : "calc_0",
+ "verify" : true,
+ "update" : false,
+ "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"]
+ ],
+ [
+ "intrinsic_metadata.priority",
+ ["standard_metadata", "priority"]
+ ]
+ ],
+ "program" : "fabric.p4",
+ "__meta__" : {
+ "version" : [2, 18],
+ "compiler" : "https://github.com/p4lang/p4c"
+ }
+}
\ No newline at end of file
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/cpu_port.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/cpu_port.txt
new file mode 100644
index 0000000..ace9d03
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/cpu_port.txt
@@ -0,0 +1 @@
+255
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt
new file mode 100644
index 0000000..9a5f7e1
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt
@@ -0,0 +1,1014 @@
+pkg_info {
+ arch: "v1model"
+}
+tables {
+ preamble {
+ id: 33581620
+ name: "FabricIngress.process_set_source_sink.tb_set_source"
+ alias: "tb_set_source"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16778827
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318787614
+ size: 511
+}
+tables {
+ preamble {
+ id: 33611649
+ name: "FabricIngress.filtering.ingress_port_vlan"
+ alias: "ingress_port_vlan"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "vlan_is_valid"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ match_fields {
+ id: 3
+ name: "vlan_id"
+ bitwidth: 12
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 4
+ name: "inner_vlan_id"
+ bitwidth: 12
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16836487
+ }
+ action_refs {
+ id: 16818236
+ }
+ action_refs {
+ id: 16794911
+ }
+ const_default_action_id: 16836487
+ direct_resource_ids: 318815501
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33596298
+ name: "FabricIngress.filtering.fwd_classifier"
+ alias: "fwd_classifier"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "eth_dst"
+ bitwidth: 48
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 3
+ name: "is_ipv4"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ match_fields {
+ id: 4
+ name: "is_ipv6"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ match_fields {
+ id: 5
+ name: "is_mpls"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16840921
+ }
+ const_default_action_id: 16840921
+ direct_resource_ids: 318827326
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33596749
+ name: "FabricIngress.forwarding.bridging"
+ alias: "bridging"
+ }
+ match_fields {
+ id: 1
+ name: "vlan_id"
+ bitwidth: 12
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "eth_dst"
+ bitwidth: 48
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16811012
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318770289
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33574274
+ name: "FabricIngress.forwarding.mpls"
+ alias: "mpls"
+ }
+ match_fields {
+ id: 1
+ name: "mpls_label"
+ bitwidth: 20
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16827758
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318830507
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33562650
+ name: "FabricIngress.forwarding.routing_v4"
+ alias: "routing_v4"
+ }
+ match_fields {
+ id: 1
+ name: "ipv4_dst"
+ bitwidth: 32
+ match_type: LPM
+ }
+ action_refs {
+ id: 16777434
+ }
+ action_refs {
+ id: 16804187
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318811107
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33618978
+ name: "FabricIngress.acl.acl"
+ alias: "acl"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 2
+ name: "ip_proto"
+ bitwidth: 8
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 3
+ name: "l4_sport"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 4
+ name: "l4_dport"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 5
+ name: "eth_src"
+ bitwidth: 48
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 6
+ name: "eth_dst"
+ bitwidth: 48
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 7
+ name: "vlan_id"
+ bitwidth: 12
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 8
+ name: "eth_type"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 9
+ name: "ipv4_src"
+ bitwidth: 32
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 10
+ name: "ipv4_dst"
+ bitwidth: 32
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 11
+ name: "icmp_type"
+ bitwidth: 8
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 12
+ name: "icmp_code"
+ bitwidth: 8
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16807382
+ }
+ action_refs {
+ id: 16829684
+ }
+ action_refs {
+ id: 16781601
+ }
+ action_refs {
+ id: 16820765
+ }
+ action_refs {
+ id: 16827694
+ }
+ const_default_action_id: 16827694
+ direct_resource_ids: 318801025
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33599709
+ name: "FabricIngress.next.next_vlan"
+ alias: "next_vlan"
+ }
+ match_fields {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16790685
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318768144
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33596977
+ name: "FabricIngress.next.xconnect"
+ alias: "xconnect"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "next_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16842190
+ }
+ action_refs {
+ id: 16837052
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318778156
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33608588
+ name: "FabricIngress.next.hashed"
+ alias: "hashed"
+ }
+ match_fields {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16815357
+ }
+ action_refs {
+ id: 16791402
+ }
+ action_refs {
+ id: 16779255
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ implementation_id: 285217164
+ direct_resource_ids: 318800532
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33606828
+ name: "FabricIngress.next.multicast"
+ alias: "multicast"
+ }
+ match_fields {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16779917
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318801752
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33612258
+ name: "FabricEgress.process_int_main.process_int_source.tb_int_source"
+ alias: "tb_int_source"
+ }
+ match_fields {
+ id: 1
+ name: "ipv4_src"
+ bitwidth: 32
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 2
+ name: "ipv4_dst"
+ bitwidth: 32
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 3
+ name: "l4_sport"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 4
+ name: "l4_dport"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16785857
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318800047
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33599867
+ name: "FabricEgress.process_int_main.process_int_transit.tb_int_insert"
+ alias: "tb_int_insert"
+ }
+ match_fields {
+ id: 1
+ name: "int_is_valid"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16780783
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ size: 1
+}
+tables {
+ preamble {
+ id: 33599342
+ name: "FabricEgress.egress_next.egress_vlan"
+ alias: "egress_vlan"
+ }
+ match_fields {
+ id: 1
+ name: "vlan_id"
+ bitwidth: 12
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "eg_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16790030
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318827144
+ size: 1024
+}
+actions {
+ preamble {
+ id: 16819938
+ name: "nop"
+ alias: "nop"
+ }
+}
+actions {
+ preamble {
+ id: 16778827
+ name: "FabricIngress.process_set_source_sink.int_set_source"
+ alias: "int_set_source"
+ }
+}
+actions {
+ preamble {
+ id: 16836487
+ name: "FabricIngress.filtering.deny"
+ alias: "deny"
+ }
+}
+actions {
+ preamble {
+ id: 16818236
+ name: "FabricIngress.filtering.permit"
+ alias: "permit"
+ }
+}
+actions {
+ preamble {
+ id: 16794911
+ name: "FabricIngress.filtering.permit_with_internal_vlan"
+ alias: "permit_with_internal_vlan"
+ }
+ params {
+ id: 1
+ name: "vlan_id"
+ bitwidth: 12
+ }
+}
+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: 16807382
+ name: "FabricIngress.acl.set_next_id_acl"
+ alias: "set_next_id_acl"
+ }
+ params {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ }
+}
+actions {
+ preamble {
+ id: 16829684
+ name: "FabricIngress.acl.punt_to_cpu"
+ alias: "punt_to_cpu"
+ }
+}
+actions {
+ preamble {
+ id: 16781601
+ name: "FabricIngress.acl.set_clone_session_id"
+ alias: "set_clone_session_id"
+ }
+ params {
+ id: 1
+ name: "clone_id"
+ bitwidth: 32
+ }
+}
+actions {
+ preamble {
+ id: 16820765
+ name: "FabricIngress.acl.drop"
+ alias: "drop"
+ }
+}
+actions {
+ preamble {
+ id: 16827694
+ name: "FabricIngress.acl.nop_acl"
+ alias: "nop_acl"
+ }
+}
+actions {
+ preamble {
+ id: 16790685
+ name: "FabricIngress.next.set_vlan"
+ alias: "set_vlan"
+ }
+ params {
+ id: 1
+ name: "vlan_id"
+ bitwidth: 12
+ }
+}
+actions {
+ preamble {
+ id: 16842190
+ name: "FabricIngress.next.output_xconnect"
+ alias: "output_xconnect"
+ }
+ params {
+ id: 1
+ name: "port_num"
+ bitwidth: 9
+ }
+}
+actions {
+ preamble {
+ id: 16837052
+ name: "FabricIngress.next.set_next_id_xconnect"
+ alias: "set_next_id_xconnect"
+ }
+ params {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ }
+}
+actions {
+ preamble {
+ id: 16815357
+ name: "FabricIngress.next.output_hashed"
+ alias: "output_hashed"
+ }
+ params {
+ id: 1
+ name: "port_num"
+ bitwidth: 9
+ }
+}
+actions {
+ preamble {
+ id: 16791402
+ name: "FabricIngress.next.routing_hashed"
+ alias: "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: 16779255
+ name: "FabricIngress.next.mpls_routing_hashed"
+ alias: "mpls_routing_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: 16779917
+ name: "FabricIngress.next.set_mcast_group_id"
+ alias: "set_mcast_group_id"
+ }
+ params {
+ id: 1
+ name: "group_id"
+ bitwidth: 16
+ }
+}
+actions {
+ preamble {
+ id: 16800567
+ name: "NoAction"
+ alias: "NoAction"
+ }
+}
+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: 16790030
+ name: "FabricEgress.egress_next.pop_vlan"
+ alias: "pop_vlan"
+ }
+}
+action_profiles {
+ preamble {
+ id: 285217164
+ name: "FabricIngress.next.hashed_selector"
+ alias: "hashed_selector"
+ }
+ table_ids: 33608588
+ with_selector: true
+ size: 1024
+ max_group_size: 16
+}
+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: 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: 318801025
+ name: "FabricIngress.acl.acl_counter"
+ alias: "acl_counter"
+ }
+ spec {
+ unit: BOTH
+ }
+ direct_table_id: 33618978
+}
+direct_counters {
+ preamble {
+ id: 318768144
+ name: "FabricIngress.next.next_vlan_counter"
+ alias: "next_vlan_counter"
+ }
+ spec {
+ unit: BOTH
+ }
+ direct_table_id: 33599709
+}
+direct_counters {
+ preamble {
+ id: 318778156
+ name: "FabricIngress.next.xconnect_counter"
+ alias: "xconnect_counter"
+ }
+ spec {
+ unit: BOTH
+ }
+ direct_table_id: 33596977
+}
+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"
+ alias: "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"
+ alias: "packet_out"
+ annotations: "@controller_header(\"packet_out\")"
+ }
+ metadata {
+ id: 1
+ name: "egress_port"
+ bitwidth: 9
+ }
+ metadata {
+ id: 2
+ name: "_pad"
+ bitwidth: 7
+ }
+}
+type_info {
+}
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-mlnx/spectrum/default/README.md b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-mlnx/spectrum/default/README.md
new file mode 100644
index 0000000..b3611d3
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-mlnx/spectrum/default/README.md
@@ -0,0 +1,18 @@
+# Running ONOS with Mellanox Spectrum/Spectrum2 Switches
+
+## Spectrum and Fabric.p4
+The Spectrum architecture supports the fabric.p4 pipeline, but using the spectrum_model.p4 instead of the v1model.p4.
+The folder location p4c-out/fabric-mlnx/spectrum/default is where the P4 compiler artifacts should be placed for
+ONOS to properly load and configure the pipeline for the Spectrum switch.
+These files include:
+
+* cpu_port.txt: defines the SDN port number to be used when sending a packet to the controller
+* p4info.txt: the P4Runtime output file, in protobuf text format, when compiling fabric.p4
+* spectrum.bin: The "binary blob" P4 compiler output, which contains all the data necessary to reconfigure the
+ switch pipeline (P4 device config, as described in the P4Runtime specification)
+
+Since at this time the Mellanox P4 compiler backend is under active development and is not currently open sourced,
+please contact your Mellanox representative for access to the compiler and/or the compiler artifacts described above.
+
+For the latest details, please take a look at the wiki page instructions:
+https://wiki.onosproject.org/display/ONOS/Controlling+P4Runtime-enabled+Mellanox+Spectrum+switch+with+ONOS
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json
new file mode 100644
index 0000000..a4997b3
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json
@@ -0,0 +1,15649 @@
+{
+ "header_types" : [
+ {
+ "name" : "scalars_0",
+ "id" : 0,
+ "fields" : [
+ ["last_ipv4_dscp_0", 6, false],
+ ["tmp_0", 4, false],
+ ["tmp", 8, false],
+ ["tmp_1", 32, false],
+ ["tmp_2", 32, false],
+ ["spgw_ingress_tmp", 1, false],
+ ["spgw_ingress_tmp_0", 1, false],
+ ["spgw_normalizer_hasReturned", 1, false],
+ ["spgw_ingress_hasReturned", 1, false],
+ ["egress_next_tmp", 1, false],
+ ["process_int_main_process_int_transit_hasReturned", 1, false],
+ ["fabric_metadata_t._last_eth_type0", 16, false],
+ ["fabric_metadata_t._is_ipv41", 1, false],
+ ["fabric_metadata_t._is_ipv62", 1, false],
+ ["fabric_metadata_t._is_mpls3", 1, false],
+ ["fabric_metadata_t._ip_eth_type4", 16, false],
+ ["fabric_metadata_t._vlan_id5", 12, false],
+ ["fabric_metadata_t._vlan_pri6", 3, false],
+ ["fabric_metadata_t._vlan_cfi7", 1, false],
+ ["fabric_metadata_t._mpls_label8", 20, false],
+ ["fabric_metadata_t._mpls_ttl9", 8, false],
+ ["fabric_metadata_t._skip_forwarding10", 1, false],
+ ["fabric_metadata_t._skip_next11", 1, false],
+ ["fabric_metadata_t._fwd_type12", 3, false],
+ ["fabric_metadata_t._next_id13", 32, false],
+ ["fabric_metadata_t._is_multicast14", 1, false],
+ ["fabric_metadata_t._is_controller_packet_out15", 1, false],
+ ["fabric_metadata_t._ip_proto16", 8, false],
+ ["fabric_metadata_t._l4_sport17", 16, false],
+ ["fabric_metadata_t._l4_dport18", 16, false],
+ ["fabric_metadata_t._spgw_direction19", 2, false],
+ ["fabric_metadata_t._spgw_ipv4_len20", 16, false],
+ ["fabric_metadata_t._spgw_teid21", 32, false],
+ ["fabric_metadata_t._spgw_s1u_enb_addr22", 32, false],
+ ["fabric_metadata_t._spgw_s1u_sgw_addr23", 32, false],
+ ["fabric_metadata_t._int_meta_source24", 1, false],
+ ["fabric_metadata_t._int_meta_transit25", 1, false],
+ ["fabric_metadata_t._int_meta_sink26", 1, false],
+ ["fabric_metadata_t._int_meta_switch_id27", 32, false],
+ ["fabric_metadata_t._int_meta_new_words28", 8, false],
+ ["fabric_metadata_t._int_meta_new_bytes29", 16, false],
+ ["fabric_metadata_t._int_meta_ig_tstamp30", 32, false],
+ ["fabric_metadata_t._int_meta_eg_tstamp31", 32, false],
+ ["_padding_0", 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],
+ ["recirculate_flag", 32, false],
+ ["checksum_error", 1, false],
+ ["parser_error", 32, false],
+ ["priority", 3, false],
+ ["_padding", 2, false]
+ ]
+ },
+ {
+ "name" : "ethernet_t",
+ "id" : 2,
+ "fields" : [
+ ["dst_addr", 48, false],
+ ["src_addr", 48, false],
+ ["eth_type", 16, false]
+ ]
+ },
+ {
+ "name" : "vlan_tag_t",
+ "id" : 3,
+ "fields" : [
+ ["pri", 3, false],
+ ["cfi", 1, false],
+ ["vlan_id", 12, false],
+ ["eth_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" : [
+ ["sport", 16, false],
+ ["dport", 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" : "tcp_t",
+ "id" : 8,
+ "fields" : [
+ ["sport", 16, false],
+ ["dport", 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" : 9,
+ "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" : 10,
+ "fields" : [
+ ["egress_port", 9, false],
+ ["_pad", 7, false]
+ ]
+ },
+ {
+ "name" : "packet_in_header_t",
+ "id" : 11,
+ "fields" : [
+ ["ingress_port", 9, false],
+ ["_pad", 7, false]
+ ]
+ },
+ {
+ "name" : "intl4_shim_t",
+ "id" : 12,
+ "fields" : [
+ ["int_type", 8, false],
+ ["rsvd1", 8, false],
+ ["len_words", 8, false],
+ ["rsvd2", 8, false]
+ ]
+ },
+ {
+ "name" : "int_header_t",
+ "id" : 13,
+ "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" : 14,
+ "fields" : [
+ ["switch_id", 32, false]
+ ]
+ },
+ {
+ "name" : "int_port_ids_t",
+ "id" : 15,
+ "fields" : [
+ ["ingress_port_id", 16, false],
+ ["egress_port_id", 16, false]
+ ]
+ },
+ {
+ "name" : "int_hop_latency_t",
+ "id" : 16,
+ "fields" : [
+ ["hop_latency", 32, false]
+ ]
+ },
+ {
+ "name" : "int_q_occupancy_t",
+ "id" : 17,
+ "fields" : [
+ ["q_id", 8, false],
+ ["q_occupancy", 24, false]
+ ]
+ },
+ {
+ "name" : "int_ingress_tstamp_t",
+ "id" : 18,
+ "fields" : [
+ ["ingress_tstamp", 32, false]
+ ]
+ },
+ {
+ "name" : "int_egress_tstamp_t",
+ "id" : 19,
+ "fields" : [
+ ["egress_tstamp", 32, false]
+ ]
+ },
+ {
+ "name" : "int_q_congestion_t",
+ "id" : 20,
+ "fields" : [
+ ["q_id", 8, false],
+ ["q_congestion", 24, false]
+ ]
+ },
+ {
+ "name" : "int_egress_port_tx_util_t",
+ "id" : 21,
+ "fields" : [
+ ["egress_port_tx_util", 32, false]
+ ]
+ },
+ {
+ "name" : "intl4_tail_t",
+ "id" : 22,
+ "fields" : [
+ ["next_proto", 8, false],
+ ["dest_port", 16, false],
+ ["padding", 2, false],
+ ["dscp", 6, 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" : "inner_vlan_tag",
+ "id" : 4,
+ "header_type" : "vlan_tag_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "mpls",
+ "id" : 5,
+ "header_type" : "mpls_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "gtpu_ipv4",
+ "id" : 6,
+ "header_type" : "ipv4_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "gtpu_udp",
+ "id" : 7,
+ "header_type" : "udp_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "gtpu",
+ "id" : 8,
+ "header_type" : "gtpu_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "inner_ipv4",
+ "id" : 9,
+ "header_type" : "ipv4_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "inner_udp",
+ "id" : 10,
+ "header_type" : "udp_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "ipv4",
+ "id" : 11,
+ "header_type" : "ipv4_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" : "intl4_tail",
+ "id" : 27,
+ "header_type" : "intl4_tail_t",
+ "metadata" : false,
+ "pi_omit" : true
+ }
+ ],
+ "header_stacks" : [],
+ "header_union_types" : [],
+ "header_unions" : [],
+ "header_union_stacks" : [],
+ "field_lists" : [
+ {
+ "id" : 1,
+ "name" : "fl",
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 46,
+ "column" : 40,
+ "source_fragment" : "{standard_metadata.ingress_port}"
+ },
+ "elements" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ }
+ ]
+ }
+ ],
+ "errors" : [
+ ["NoError", 1],
+ ["PacketTooShort", 2],
+ ["NoMatch", 3],
+ ["StackOutOfBounds", 4],
+ ["HeaderTooShort", 5],
+ ["ParserTimeout", 6],
+ ["ParserInvalidArgument", 7]
+ ],
+ "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"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0ffe"
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x88a8",
+ "mask" : null,
+ "next_state" : "parse_vlan_tag"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x9100",
+ "mask" : null,
+ "next_state" : "parse_vlan_tag"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100",
+ "mask" : null,
+ "next_state" : "parse_vlan_tag"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847",
+ "mask" : null,
+ "next_state" : "parse_mpls"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0800",
+ "mask" : null,
+ "next_state" : "pre_parse_ipv4"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_vlan_tag",
+ "id" : 3,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "vlan_tag"
+ }
+ ],
+ "op" : "extract"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x0800",
+ "mask" : null,
+ "next_state" : "pre_parse_ipv4"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847",
+ "mask" : null,
+ "next_state" : "parse_mpls"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100",
+ "mask" : null,
+ "next_state" : "parse_inner_vlan_tag"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "eth_type"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_inner_vlan_tag",
+ "id" : 4,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "inner_vlan_tag"
+ }
+ ],
+ "op" : "extract"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x0800",
+ "mask" : null,
+ "next_state" : "pre_parse_ipv4"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847",
+ "mask" : null,
+ "next_state" : "parse_mpls"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "eth_type"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_mpls",
+ "id" : 5,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "mpls"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._is_mpls3"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_label8"]
+ },
+ {
+ "type" : "field",
+ "value" : ["mpls", "label"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_ttl9"]
+ },
+ {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp_0"]
+ },
+ {
+ "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_0"]
+ }
+ ]
+ },
+ {
+ "name" : "pre_parse_ipv4",
+ "id" : 6,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._is_ipv41"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : "parse_ipv4"
+ }
+ ],
+ "transition_key" : []
+ },
+ {
+ "name" : "parse_ipv4",
+ "id" : 7,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "ipv4"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._ip_proto16"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ipv4", "protocol"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._ip_eth_type4"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0800"
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "last_ipv4_dscp_0"]
+ },
+ {
+ "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_tcp",
+ "id" : 8,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "tcp"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_sport17"]
+ },
+ {
+ "type" : "field",
+ "value" : ["tcp", "sport"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_dport18"]
+ },
+ {
+ "type" : "field",
+ "value" : ["tcp", "dport"]
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : "parse_int"
+ }
+ ],
+ "transition_key" : []
+ },
+ {
+ "name" : "parse_udp",
+ "id" : 9,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "udp"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_sport17"]
+ },
+ {
+ "type" : "field",
+ "value" : ["udp", "sport"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_dport18"]
+ },
+ {
+ "type" : "field",
+ "value" : ["udp", "dport"]
+ }
+ ],
+ "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", "dport"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_icmp",
+ "id" : 10,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "icmp"
+ }
+ ],
+ "op" : "extract"
+ }
+ ],
+ "transitions" : [
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : []
+ },
+ {
+ "name" : "parse_gtpu",
+ "id" : 11,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp"]
+ },
+ {
+ "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"]
+ }
+ ]
+ },
+ {
+ "name" : "do_parse_gtpu",
+ "id" : 12,
+ "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_0"]
+ },
+ {
+ "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" : 13,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "inner_udp"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_sport17"]
+ },
+ {
+ "type" : "field",
+ "value" : ["inner_udp", "sport"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_dport18"]
+ },
+ {
+ "type" : "field",
+ "value" : ["inner_udp", "dport"]
+ }
+ ],
+ "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" : "0x01",
+ "next_state" : "parse_intl4_shim"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "last_ipv4_dscp_0"]
+ }
+ ]
+ },
+ {
+ "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" : [],
+ "transitions" : [
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "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" : []
+ }
+ ]
+ }
+ ],
+ "parse_vsets" : [],
+ "deparsers" : [
+ {
+ "name" : "deparser",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "include/parser.p4",
+ "line" : 276,
+ "column" : 8,
+ "source_fragment" : "FabricDeparser"
+ },
+ "order" : ["packet_in", "ethernet", "vlan_tag", "inner_vlan_tag", "mpls", "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", "intl4_tail"]
+ }
+ ],
+ "meter_arrays" : [],
+ "counter_arrays" : [
+ {
+ "name" : "FabricIngress.spgw_ingress.ue_counter",
+ "id" : 0,
+ "is_direct" : true,
+ "binding" : "FabricIngress.spgw_ingress.dl_sess_lookup",
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 52,
+ "column" : 50,
+ "source_fragment" : "ue_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.process_set_source_sink.counter_set_source",
+ "id" : 1,
+ "is_direct" : true,
+ "binding" : "FabricIngress.process_set_source_sink.tb_set_source",
+ "source_info" : {
+ "filename" : "include/int/int_main.p4",
+ "line" : 39,
+ "column" : 50,
+ "source_fragment" : "counter_set_source"
+ }
+ },
+ {
+ "name" : "FabricIngress.filtering.ingress_port_vlan_counter",
+ "id" : 2,
+ "is_direct" : true,
+ "binding" : "FabricIngress.filtering.ingress_port_vlan",
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 31,
+ "column" : 50,
+ "source_fragment" : "ingress_port_vlan_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.filtering.fwd_classifier_counter",
+ "id" : 3,
+ "is_direct" : true,
+ "binding" : "FabricIngress.filtering.fwd_classifier",
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 83,
+ "column" : 50,
+ "source_fragment" : "fwd_classifier_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.bridging_counter",
+ "id" : 4,
+ "is_direct" : true,
+ "binding" : "FabricIngress.forwarding.bridging",
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 36,
+ "column" : 50,
+ "source_fragment" : "bridging_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.mpls_counter",
+ "id" : 5,
+ "is_direct" : true,
+ "binding" : "FabricIngress.forwarding.mpls",
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 63,
+ "column" : 50,
+ "source_fragment" : "mpls_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.routing_v4_counter",
+ "id" : 6,
+ "is_direct" : true,
+ "binding" : "FabricIngress.forwarding.routing_v4",
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 87,
+ "column" : 50,
+ "source_fragment" : "routing_v4_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.acl.acl_counter",
+ "id" : 7,
+ "is_direct" : true,
+ "binding" : "FabricIngress.acl.acl",
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 30,
+ "column" : 50,
+ "source_fragment" : "acl_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.next_vlan_counter",
+ "id" : 8,
+ "is_direct" : true,
+ "binding" : "FabricIngress.next.next_vlan",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 67,
+ "column" : 50,
+ "source_fragment" : "next_vlan_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.xconnect_counter",
+ "id" : 9,
+ "is_direct" : true,
+ "binding" : "FabricIngress.next.xconnect",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 103,
+ "column" : 50,
+ "source_fragment" : "xconnect_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.hashed_counter",
+ "id" : 10,
+ "is_direct" : true,
+ "binding" : "FabricIngress.next.hashed",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 178,
+ "column" : 50,
+ "source_fragment" : "hashed_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.multicast_counter",
+ "id" : 11,
+ "is_direct" : true,
+ "binding" : "FabricIngress.next.multicast",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 222,
+ "column" : 50,
+ "source_fragment" : "multicast_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.port_counters_control.egress_port_counter",
+ "id" : 12,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 26,
+ "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" : 27,
+ "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",
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 27,
+ "column" : 50,
+ "source_fragment" : "counter_int_source"
+ }
+ },
+ {
+ "name" : "FabricEgress.egress_next.egress_vlan_counter",
+ "id" : 15,
+ "is_direct" : true,
+ "binding" : "FabricEgress.egress_next.egress_vlan",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 310,
+ "column" : 50,
+ "source_fragment" : "egress_vlan_counter"
+ }
+ }
+ ],
+ "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" : 243,
+ "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" : "nop",
+ "id" : 0,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 1,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 2,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 3,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 4,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 5,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 6,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 7,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 8,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 9,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.spgw_ingress.gtpu_decap",
+ "id" : 10,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "gtpu_ipv4"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 56,
+ "column" : 8,
+ "source_fragment" : "gtpu_ipv4.setInvalid()"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "gtpu_udp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 57,
+ "column" : 8,
+ "source_fragment" : "gtpu_udp.setInvalid()"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "gtpu"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 58,
+ "column" : 8,
+ "source_fragment" : "gtpu.setInvalid()"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.spgw_ingress.set_dl_sess_info",
+ "id" : 11,
+ "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" : ["scalars", "fabric_metadata_t._spgw_teid21"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 64,
+ "column" : 30,
+ "source_fragment" : "= teid; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_s1u_enb_addr22"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 1
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 65,
+ "column" : 38,
+ "source_fragment" : "= s1u_enb_addr; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_s1u_sgw_addr23"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 2
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 66,
+ "column" : 38,
+ "source_fragment" : "= s1u_sgw_addr; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.process_set_source_sink.int_set_source",
+ "id" : 12,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_source24"]
+ },
+ {
+ "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" : 40,
+ "source_fragment" : "= true; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.filtering.deny",
+ "id" : 13,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_forwarding10"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 36,
+ "column" : 40,
+ "source_fragment" : "= true; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_next11"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 37,
+ "column" : 34,
+ "source_fragment" : "= true; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.filtering.permit",
+ "id" : 14,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.filtering.permit_with_internal_vlan",
+ "id" : 15,
+ "runtime_data" : [
+ {
+ "name" : "vlan_id",
+ "bitwidth" : 12
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 47,
+ "column" : 32,
+ "source_fragment" : "= vlan_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.filtering.set_forwarding_type",
+ "id" : 16,
+ "runtime_data" : [
+ {
+ "name" : "fwd_type",
+ "bitwidth" : 3
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._fwd_type12"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 86,
+ "column" : 33,
+ "source_fragment" : "= fwd_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.forwarding.set_next_id_bridging",
+ "id" : 17,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id13"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 30,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.forwarding.pop_mpls_and_next",
+ "id" : 18,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_label8"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 66,
+ "column" : 35,
+ "source_fragment" : "= 0; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id13"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 30,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.forwarding.set_next_id_routing_v4",
+ "id" : 19,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id13"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 30,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.forwarding.nop_routing_v4",
+ "id" : 20,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.acl.set_next_id_acl",
+ "id" : 21,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id13"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 33,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.punt_to_cpu",
+ "id" : 22,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_spec"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00ff"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 39,
+ "column" : 8,
+ "source_fragment" : "standard_metadata.egress_spec = 255"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_next11"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 40,
+ "column" : 34,
+ "source_fragment" : "= true; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.set_clone_session_id",
+ "id" : 23,
+ "runtime_data" : [
+ {
+ "name" : "clone_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "clone_ingress_pkt_to_egress",
+ "parameters" : [
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x1"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 46,
+ "column" : 8,
+ "source_fragment" : "clone3(CloneType.I2E, clone_id, {standard_metadata.ingress_port})"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.drop",
+ "id" : 24,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 51,
+ "column" : 8,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_next11"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 52,
+ "column" : 34,
+ "source_fragment" : "= true; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.nop_acl",
+ "id" : 25,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.next.set_vlan",
+ "id" : 26,
+ "runtime_data" : [
+ {
+ "name" : "vlan_id",
+ "bitwidth" : 12
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 70,
+ "column" : 32,
+ "source_fragment" : "= vlan_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.output_xconnect",
+ "id" : 27,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 107,
+ "column" : 31,
+ "source_fragment" : "0x8100; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.set_next_id_xconnect",
+ "id" : 28,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id13"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 112,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.output_hashed",
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.routing_hashed",
+ "id" : 30,
+ "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" : 36,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.mpls_routing_hashed",
+ "id" : 31,
+ "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" : ["scalars", "fabric_metadata_t._mpls_label8"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 3
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 46,
+ "column" : 35,
+ "source_fragment" : "= label; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "src_addr"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 1
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 36,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.set_mcast_group_id",
+ "id" : 32,
+ "runtime_data" : [
+ {
+ "name" : "group_id",
+ "bitwidth" : 16
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "mcast_grp"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 225,
+ "column" : 8,
+ "source_fragment" : "standard_metadata.mcast_grp = group_id"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._is_multicast14"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 226,
+ "column" : 37,
+ "source_fragment" : "= true; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act",
+ "id" : 33,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "spgw_normalizer_hasReturned"]
+ },
+ {
+ "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" : 34,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "gtpu_ipv4"
+ }
+ ],
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 62,
+ "column" : 50,
+ "source_fragment" : "hdr.gtpu_ipv4"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "gtpu_udp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 62,
+ "column" : 65,
+ "source_fragment" : "hdr.gtpu_udp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "spgw_normalizer_hasReturned"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_1",
+ "id" : 35,
+ "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" : 36,
+ "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" : 37,
+ "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" : 38,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_spec"]
+ },
+ {
+ "type" : "field",
+ "value" : ["packet_out", "egress_port"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 25,
+ "column" : 12,
+ "source_fragment" : "standard_metadata.egress_spec = hdr.packet_out.egress_port"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "packet_out"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 26,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_out.setInvalid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._is_controller_packet_out15"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 27,
+ "column" : 53,
+ "source_fragment" : "= true; ..."
+ }
+ },
+ {
+ "op" : "exit",
+ "parameters" : [],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 29,
+ "column" : 12,
+ "source_fragment" : "exit"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_5",
+ "id" : 39,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "vlan_id"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 110,
+ "column" : 36,
+ "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_pri6"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "pri"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 111,
+ "column" : 37,
+ "source_fragment" : "= hdr.vlan_tag.pri; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_cfi7"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "cfi"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 112,
+ "column" : 37,
+ "source_fragment" : "= hdr.vlan_tag.cfi; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_6",
+ "id" : 40,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_ttl9"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x41"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 126,
+ "column" : 37,
+ "source_fragment" : "= DEFAULT_MPLS_TTL + 1; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_7",
+ "id" : 41,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 108,
+ "column" : 31,
+ "source_fragment" : "0x8847; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_8",
+ "id" : 42,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "eth_type"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 136,
+ "column" : 50,
+ "source_fragment" : "= hdr.inner_vlan_tag.eth_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_9",
+ "id" : 43,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "eth_type"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 139,
+ "column" : 50,
+ "source_fragment" : "= hdr.vlan_tag.eth_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_10",
+ "id" : 44,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 141,
+ "column" : 46,
+ "source_fragment" : "= hdr.ethernet.eth_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_11",
+ "id" : 45,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "spgw_ingress_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_12",
+ "id" : 46,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "spgw_ingress_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_13",
+ "id" : 47,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 149,
+ "column" : 16,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_14",
+ "id" : 48,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_direction19"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 143,
+ "column" : 36,
+ "source_fragment" : "2w1; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_15",
+ "id" : 49,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "spgw_ingress_tmp_0"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_16",
+ "id" : 50,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "spgw_ingress_tmp_0"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_17",
+ "id" : 51,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_direction19"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 144,
+ "column" : 38,
+ "source_fragment" : "2w2; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_18",
+ "id" : 52,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_direction19"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 142,
+ "column" : 37,
+ "source_fragment" : "2w0; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "spgw_ingress_hasReturned"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 158,
+ "column" : 12,
+ "source_fragment" : "return"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_19",
+ "id" : 53,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "spgw_ingress_hasReturned"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_20",
+ "id" : 54,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len20"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ipv4", "total_len"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 175,
+ "column" : 34,
+ "source_fragment" : "= ipv4.total_len; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_21",
+ "id" : 55,
+ "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" : 31,
+ "column" : 38,
+ "source_fragment" : "(bit<32>)standard_metadata.egress_spec"
+ }
+ },
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricIngress.port_counters_control.egress_port_counter"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp_1"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 31,
+ "column" : 12,
+ "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_22",
+ "id" : 56,
+ "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" : 34,
+ "column" : 39,
+ "source_fragment" : "(bit<32>)standard_metadata.ingress_port"
+ }
+ },
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricIngress.port_counters_control.ingress_port_counter"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp_2"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 34,
+ "column" : 12,
+ "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "nop",
+ "id" : 57,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 58,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 59,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "NoAction",
+ "id" : 60,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "NoAction",
+ "id" : 61,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricEgress.spgw_egress.gtpu_encap",
+ "id" : 62,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "gtpu_ipv4"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 191,
+ "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" : 192,
+ "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" : 125,
+ "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" : 194,
+ "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" : 195,
+ "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" : 196,
+ "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" : 198,
+ "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" : 199,
+ "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" : 200,
+ "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" : 138,
+ "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" : 122,
+ "column" : 25,
+ "source_fragment" : "17; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu_ipv4", "dst_addr"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_s1u_enb_addr22"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 203,
+ "column" : 8,
+ "source_fragment" : "gtpu_ipv4.dst_addr = fabric_meta.spgw.s1u_enb_addr; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu_ipv4", "src_addr"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_s1u_sgw_addr23"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 204,
+ "column" : 8,
+ "source_fragment" : "gtpu_ipv4.src_addr = fabric_meta.spgw.s1u_sgw_addr; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu_ipv4", "hdr_checksum"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 205,
+ "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" : 207,
+ "column" : 8,
+ "source_fragment" : "gtpu_udp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu_udp", "sport"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0868"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 208,
+ "column" : 8,
+ "source_fragment" : "gtpu_udp.sport = 2152"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu_udp", "dport"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0868"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 209,
+ "column" : 8,
+ "source_fragment" : "gtpu_udp.dport = 2152"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu_udp", "len"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len20"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0010"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 210,
+ "column" : 8,
+ "source_fragment" : "gtpu_udp.len = fabric_meta.spgw.ipv4_len ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu_udp", "checksum"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 212,
+ "column" : 8,
+ "source_fragment" : "gtpu_udp.checksum = 0"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "gtpu"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 214,
+ "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" : 215,
+ "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" : 216,
+ "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" : 217,
+ "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" : 218,
+ "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" : 219,
+ "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" : 220,
+ "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" : 221,
+ "column" : 8,
+ "source_fragment" : "gtpu.msgtype = 0xff"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu", "msglen"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len20"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 222,
+ "column" : 8,
+ "source_fragment" : "gtpu.msglen = fabric_meta.spgw.ipv4_len; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu", "teid"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_teid21"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 223,
+ "column" : 8,
+ "source_fragment" : "gtpu.teid = fabric_meta.spgw.teid; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_source.int_source_dscp",
+ "id" : 63,
+ "runtime_data" : [
+ {
+ "name" : "max_hop",
+ "bitwidth" : 8
+ },
+ {
+ "name" : "ins_cnt",
+ "bitwidth" : 5
+ },
+ {
+ "name" : "ins_mask0003",
+ "bitwidth" : 4
+ },
+ {
+ "name" : "ins_mask0407",
+ "bitwidth" : 4
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "intl4_shim"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 32,
+ "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" : 34,
+ "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" : 153,
+ "column" : 36,
+ "source_fragment" : "4; ..."
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_header"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 37,
+ "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" : 38,
+ "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" : 39,
+ "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" : 40,
+ "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" : 41,
+ "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" : 42,
+ "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" : 43,
+ "column" : 8,
+ "source_fragment" : "hdr.int_header.ins_cnt = ins_cnt; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_header", "max_hop_cnt"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 44,
+ "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" : 45,
+ "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" : 46,
+ "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" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_header.instruction_mask_0407 = ins_mask0407; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_header", "instruction_mask_0811"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 48,
+ "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" : 49,
+ "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" : 51,
+ "column" : 8,
+ "source_fragment" : "hdr.intl4_tail.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["intl4_tail", "next_proto"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ipv4", "protocol"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 52,
+ "column" : 8,
+ "source_fragment" : "hdr.intl4_tail.next_proto = hdr.ipv4.protocol"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["intl4_tail", "dest_port"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_dport18"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 53,
+ "column" : 8,
+ "source_fragment" : "hdr.intl4_tail.dest_port = fabric_metadata.l4_dport; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["intl4_tail", "dscp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ipv4", "dscp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.intl4_tail.dscp = hdr.ipv4.dscp"
+ }
+ },
+ {
+ "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" : 56,
+ "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" : 57,
+ "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" : 149,
+ "column" : 24,
+ "source_fragment" : "0x1; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.init_metadata",
+ "id" : 64,
+ "runtime_data" : [
+ {
+ "name" : "switch_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_transit25"]
+ },
+ {
+ "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" : 31,
+ "source_fragment" : "= true; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id27"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 31,
+ "column" : 33,
+ "source_fragment" : "= switch_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0",
+ "id" : 65,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1",
+ "id" : 66,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 60,
+ "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" : 62,
+ "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" : 63,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 97,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0004"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 98,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2",
+ "id" : 67,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_hop_latency"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_hop_latency", "hop_latency"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 55,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 97,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0004"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 98,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3",
+ "id" : 68,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 60,
+ "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" : 62,
+ "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" : 63,
+ "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" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_hop_latency", "hop_latency"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 55,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4",
+ "id" : 69,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_port_ids"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "ingress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "egress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 97,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0004"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 98,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5",
+ "id" : 70,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 60,
+ "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" : 62,
+ "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" : 63,
+ "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" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "ingress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "egress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6",
+ "id" : 71,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_hop_latency"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_hop_latency", "hop_latency"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 55,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_port_ids"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "ingress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "egress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7",
+ "id" : 72,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 60,
+ "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" : 62,
+ "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" : 63,
+ "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" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_hop_latency", "hop_latency"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 55,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_port_ids"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "ingress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "egress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x03"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 109,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 3; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000c"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 110,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8",
+ "id" : 73,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_switch_id"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_switch_id", "switch_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id27"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 97,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0004"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 98,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9",
+ "id" : 74,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 60,
+ "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" : 62,
+ "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" : 63,
+ "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" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_switch_id", "switch_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id27"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10",
+ "id" : 75,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_hop_latency"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_hop_latency", "hop_latency"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 55,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_switch_id"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_switch_id", "switch_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id27"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11",
+ "id" : 76,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 60,
+ "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" : 62,
+ "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" : 63,
+ "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" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_hop_latency", "hop_latency"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 55,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_switch_id"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_switch_id", "switch_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id27"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x03"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 109,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 3; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000c"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 110,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12",
+ "id" : 77,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_port_ids"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "ingress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "egress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_switch_id"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_switch_id", "switch_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id27"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13",
+ "id" : 78,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 60,
+ "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" : 62,
+ "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" : 63,
+ "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" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "ingress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "egress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_switch_id"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_switch_id", "switch_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id27"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x03"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 109,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 3; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000c"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 110,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14",
+ "id" : 79,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_hop_latency"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_hop_latency", "hop_latency"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 55,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_port_ids"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "ingress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "egress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_switch_id"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_switch_id", "switch_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id27"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x03"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 109,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 3; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000c"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 110,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15",
+ "id" : 80,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_occupancy"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 60,
+ "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" : 62,
+ "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" : 63,
+ "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" : 54,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_hop_latency", "hop_latency"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 55,
+ "column" : 8,
+ "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_port_ids"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 47,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "ingress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 48,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_port_ids", "egress_port_id"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 49,
+ "column" : 8,
+ "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_switch_id"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 41,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_switch_id", "switch_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_switch_id27"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 42,
+ "column" : 8,
+ "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x04"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 115,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 4; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0010"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 116,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 16; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0",
+ "id" : 81,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1",
+ "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" : 88,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tx_util", "egress_port_tx_util"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 90,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 97,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0004"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 98,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2",
+ "id" : 83,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_congestion"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 80,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_id"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 82,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_id = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_congestion"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 83,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 97,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0004"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 98,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3",
+ "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" : 88,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tx_util", "egress_port_tx_util"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 90,
+ "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" : 80,
+ "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" : 82,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_id = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_congestion"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 83,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4",
+ "id" : 85,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tstamp", "egress_tstamp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 97,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0004"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 98,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5",
+ "id" : 86,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tx_util"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 88,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tx_util", "egress_port_tx_util"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 90,
+ "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" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tstamp", "egress_tstamp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6",
+ "id" : 87,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_congestion"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 80,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_id"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 82,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_id = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_congestion"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 83,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tstamp", "egress_tstamp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7",
+ "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" : 88,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tx_util", "egress_port_tx_util"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 90,
+ "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" : 80,
+ "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" : 82,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_id = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_congestion"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 83,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tstamp", "egress_tstamp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x03"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 109,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 3; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000c"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 110,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8",
+ "id" : 89,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_ingress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 68,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_ingress_tstamp", "ingress_tstamp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 97,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 1; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0004"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 98,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 4; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9",
+ "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" : 88,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tx_util", "egress_port_tx_util"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 90,
+ "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" : 68,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_ingress_tstamp", "ingress_tstamp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10",
+ "id" : 91,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_congestion"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 80,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_id"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 82,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_id = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_congestion"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 83,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_ingress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 68,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_ingress_tstamp", "ingress_tstamp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11",
+ "id" : 92,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tx_util"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 88,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tx_util", "egress_port_tx_util"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 90,
+ "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" : 80,
+ "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" : 82,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_id = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_congestion"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 83,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_ingress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 68,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_ingress_tstamp", "ingress_tstamp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x03"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 109,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 3; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000c"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 110,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12",
+ "id" : 93,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tstamp", "egress_tstamp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_ingress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 68,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_ingress_tstamp", "ingress_tstamp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 103,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 2; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0008"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 104,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 8; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13",
+ "id" : 94,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tx_util"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 88,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tx_util", "egress_port_tx_util"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 90,
+ "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" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tstamp", "egress_tstamp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_ingress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 68,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_ingress_tstamp", "ingress_tstamp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x03"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 109,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 3; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000c"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 110,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14",
+ "id" : 95,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_q_congestion"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 80,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_id"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 82,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_id = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_congestion"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 83,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tstamp", "egress_tstamp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_ingress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 68,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_ingress_tstamp", "ingress_tstamp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x03"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 109,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 3; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000c"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 110,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 12; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15",
+ "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" : 88,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tx_util.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tx_util", "egress_port_tx_util"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 90,
+ "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" : 80,
+ "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" : 82,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_id = 8w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_q_congestion", "q_congestion"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 83,
+ "column" : 8,
+ "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_egress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 74,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_egress_tstamp", "egress_tstamp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "deq_timedelta"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 75,
+ "column" : 8,
+ "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "int_ingress_tstamp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 68,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["int_ingress_tstamp", "ingress_tstamp"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "enq_timestamp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 69,
+ "column" : 8,
+ "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x04"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 115,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_words + 4; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0010"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 116,
+ "column" : 33,
+ "source_fragment" : "= fmeta.int_meta.new_bytes + 16; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.pop_mpls_if_present",
+ "id" : 97,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "mpls"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 264,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.setInvalid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._ip_eth_type4"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 266,
+ "column" : 38,
+ "source_fragment" : "= fabric_metadata.ip_eth_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.set_mpls",
+ "id" : 98,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "mpls"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 271,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "label"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_label8"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 272,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.label = fabric_metadata.mpls_label; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "tc"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 273,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.tc = 3w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "bos"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 274,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.bos = 1w1"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_ttl9"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 275,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.ttl = fabric_metadata.mpls_ttl; // Decrement after push. ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 108,
+ "column" : 31,
+ "source_fragment" : "0x8847; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.push_vlan",
+ "id" : 99,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "vlan_tag"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 283,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "cfi"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_cfi7"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 284,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "pri"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_pri6"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 285,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "eth_type"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 286,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.eth_type = fabric_metadata.last_eth_type; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "vlan_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 287,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 107,
+ "column" : 31,
+ "source_fragment" : "0x8100; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.pop_vlan",
+ "id" : 100,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 313,
+ "column" : 8,
+ "source_fragment" : "hdr.ethernet.eth_type = fabric_metadata.last_eth_type; ..."
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "vlan_tag"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 314,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.setInvalid()"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_23",
+ "id" : 101,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "exit",
+ "parameters" : [],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 41,
+ "column" : 12,
+ "source_fragment" : "exit"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_24",
+ "id" : 102,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "packet_in"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 44,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_in.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["packet_in", "ingress_port"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 45,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port"
+ }
+ },
+ {
+ "op" : "exit",
+ "parameters" : [],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 47,
+ "column" : 12,
+ "source_fragment" : "exit"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_25",
+ "id" : 103,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 335,
+ "column" : 12,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_26",
+ "id" : 104,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "egress_next_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_27",
+ "id" : 105,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "egress_next_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_28",
+ "id" : 106,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 368,
+ "column" : 35,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_29",
+ "id" : 107,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 367,
+ "column" : 12,
+ "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_30",
+ "id" : 108,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 372,
+ "column" : 39,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_31",
+ "id" : 109,
+ "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" : 371,
+ "column" : 16,
+ "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_32",
+ "id" : 110,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "process_int_main_process_int_transit_hasReturned"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_33",
+ "id" : 111,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "process_int_main_process_int_transit_hasReturned"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 420,
+ "column" : 12,
+ "source_fragment" : "return"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_34",
+ "id" : 112,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ipv4", "total_len"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["ipv4", "total_len"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 428,
+ "column" : 12,
+ "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + fmeta.int_meta.new_bytes"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_35",
+ "id" : 113,
+ "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" : 425,
+ "column" : 8,
+ "source_fragment" : "hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 1"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_36",
+ "id" : 114,
+ "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" : ["scalars", "fabric_metadata_t._int_meta_new_bytes29"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 431,
+ "column" : 12,
+ "source_fragment" : "hdr.udp.len = hdr.udp.len + fmeta.int_meta.new_bytes"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_37",
+ "id" : 115,
+ "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" : ["scalars", "fabric_metadata_t._int_meta_new_words28"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 434,
+ "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" : 46,
+ "column" : 8,
+ "source_fragment" : "FabricIngress"
+ },
+ "init_table" : "tbl_act",
+ "tables" : [
+ {
+ "name" : "tbl_act",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 62,
+ "column" : 50,
+ "source_fragment" : "hdr.gtpu_ipv4, hdr.gtpu_udp"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [34],
+ "actions" : ["act_0"],
+ "base_default_next" : "node_3",
+ "next_tables" : {
+ "act_0" : "node_3"
+ },
+ "default_entry" : {
+ "action_id" : 34,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_0",
+ "id" : 1,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 30,
+ "column" : 32,
+ "source_fragment" : "return"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [33],
+ "actions" : ["act"],
+ "base_default_next" : "node_5",
+ "next_tables" : {
+ "act" : "node_5"
+ },
+ "default_entry" : {
+ "action_id" : 33,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_1",
+ "id" : 2,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 31,
+ "column" : 18,
+ "source_fragment" : "= ipv4; ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [37],
+ "actions" : ["act_3"],
+ "base_default_next" : "node_7",
+ "next_tables" : {
+ "act_3" : "node_7"
+ },
+ "default_entry" : {
+ "action_id" : 37,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_2",
+ "id" : 3,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 35,
+ "column" : 16,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [35],
+ "actions" : ["act_1"],
+ "base_default_next" : "node_10",
+ "next_tables" : {
+ "act_1" : "node_10"
+ },
+ "default_entry" : {
+ "action_id" : 35,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_3",
+ "id" : 4,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 37,
+ "column" : 12,
+ "source_fragment" : "udp.setInvalid()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [36],
+ "actions" : ["act_2"],
+ "base_default_next" : "node_10",
+ "next_tables" : {
+ "act_2" : "node_10"
+ },
+ "default_entry" : {
+ "action_id" : 36,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_4",
+ "id" : 5,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 25,
+ "column" : 42,
+ "source_fragment" : "= hdr.packet_out.egress_port; ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [38],
+ "actions" : ["act_4"],
+ "base_default_next" : "node_12",
+ "next_tables" : {
+ "act_4" : "node_12"
+ },
+ "default_entry" : {
+ "action_id" : 38,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_5",
+ "id" : 6,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 110,
+ "column" : 36,
+ "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [39],
+ "actions" : ["act_5"],
+ "base_default_next" : "node_14",
+ "next_tables" : {
+ "act_5" : "node_14"
+ },
+ "default_entry" : {
+ "action_id" : 39,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_6",
+ "id" : 7,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 126,
+ "column" : 37,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [40],
+ "actions" : ["act_6"],
+ "base_default_next" : "node_16",
+ "next_tables" : {
+ "act_6" : "node_16"
+ },
+ "default_entry" : {
+ "action_id" : 40,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_7",
+ "id" : 8,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 131,
+ "column" : 42,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [41],
+ "actions" : ["act_7"],
+ "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+ "next_tables" : {
+ "act_7" : "FabricIngress.filtering.ingress_port_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 41,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_8",
+ "id" : 9,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 136,
+ "column" : 50,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [42],
+ "actions" : ["act_8"],
+ "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+ "next_tables" : {
+ "act_8" : "FabricIngress.filtering.ingress_port_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 42,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_9",
+ "id" : 10,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 139,
+ "column" : 50,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [43],
+ "actions" : ["act_9"],
+ "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+ "next_tables" : {
+ "act_9" : "FabricIngress.filtering.ingress_port_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 43,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_10",
+ "id" : 11,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 141,
+ "column" : 46,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [44],
+ "actions" : ["act_10"],
+ "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+ "next_tables" : {
+ "act_10" : "FabricIngress.filtering.ingress_port_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 44,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.filtering.ingress_port_vlan",
+ "id" : 12,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 53,
+ "column" : 10,
+ "source_fragment" : "ingress_port_vlan"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "vlan_is_valid",
+ "target" : ["vlan_tag", "$valid$"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "vlan_id",
+ "target" : ["vlan_tag", "vlan_id"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "inner_vlan_id",
+ "target" : ["inner_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" : [13, 14, 15],
+ "actions" : ["FabricIngress.filtering.deny", "FabricIngress.filtering.permit", "FabricIngress.filtering.permit_with_internal_vlan"],
+ "base_default_next" : "FabricIngress.filtering.fwd_classifier",
+ "next_tables" : {
+ "FabricIngress.filtering.deny" : "FabricIngress.filtering.fwd_classifier",
+ "FabricIngress.filtering.permit" : "FabricIngress.filtering.fwd_classifier",
+ "FabricIngress.filtering.permit_with_internal_vlan" : "FabricIngress.filtering.fwd_classifier"
+ },
+ "default_entry" : {
+ "action_id" : 13,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.filtering.fwd_classifier",
+ "id" : 13,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 90,
+ "column" : 10,
+ "source_fragment" : "fwd_classifier"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_dst",
+ "target" : ["ethernet", "dst_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "is_ipv4",
+ "target" : ["scalars", "fabric_metadata_t._is_ipv41"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "is_ipv6",
+ "target" : ["scalars", "fabric_metadata_t._is_ipv62"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "is_mpls",
+ "target" : ["scalars", "fabric_metadata_t._is_mpls3"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [16],
+ "actions" : ["FabricIngress.filtering.set_forwarding_type"],
+ "base_default_next" : "tbl_act_11",
+ "next_tables" : {
+ "FabricIngress.filtering.set_forwarding_type" : "tbl_act_11"
+ },
+ "default_entry" : {
+ "action_id" : 16,
+ "action_const" : true,
+ "action_data" : ["0x0"],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_11",
+ "id" : 14,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [53],
+ "actions" : ["act_19"],
+ "base_default_next" : "node_26",
+ "next_tables" : {
+ "act_19" : "node_26"
+ },
+ "default_entry" : {
+ "action_id" : 53,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.spgw_ingress.s1u_filter_table",
+ "id" : 15,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 83,
+ "column" : 10,
+ "source_fragment" : "s1u_filter_table"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "gtp_ipv4_dst",
+ "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" : ["nop"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "__HIT__" : "tbl_act_12",
+ "__MISS__" : "tbl_act_13"
+ },
+ "default_entry" : {
+ "action_id" : 1,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_12",
+ "id" : 16,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [45],
+ "actions" : ["act_11"],
+ "base_default_next" : "node_30",
+ "next_tables" : {
+ "act_11" : "node_30"
+ },
+ "default_entry" : {
+ "action_id" : 45,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_13",
+ "id" : 17,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [46],
+ "actions" : ["act_12"],
+ "base_default_next" : "node_30",
+ "next_tables" : {
+ "act_12" : "node_30"
+ },
+ "default_entry" : {
+ "action_id" : 46,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_14",
+ "id" : 18,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 149,
+ "column" : 16,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [47],
+ "actions" : ["act_13"],
+ "base_default_next" : "tbl_act_15",
+ "next_tables" : {
+ "act_13" : "tbl_act_15"
+ },
+ "default_entry" : {
+ "action_id" : 47,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_15",
+ "id" : 19,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 151,
+ "column" : 39,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [48],
+ "actions" : ["act_14"],
+ "base_default_next" : "tbl_spgw_ingress_gtpu_decap",
+ "next_tables" : {
+ "act_14" : "tbl_spgw_ingress_gtpu_decap"
+ },
+ "default_entry" : {
+ "action_id" : 48,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_spgw_ingress_gtpu_decap",
+ "id" : 20,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 152,
+ "column" : 12,
+ "source_fragment" : "gtpu_decap()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [10],
+ "actions" : ["FabricIngress.spgw_ingress.gtpu_decap"],
+ "base_default_next" : "node_40",
+ "next_tables" : {
+ "FabricIngress.spgw_ingress.gtpu_decap" : "node_40"
+ },
+ "default_entry" : {
+ "action_id" : 10,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.spgw_ingress.dl_sess_lookup",
+ "id" : 21,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 70,
+ "column" : 10,
+ "source_fragment" : "dl_sess_lookup"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "ipv4_dst",
+ "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" : [11, 0],
+ "actions" : ["FabricIngress.spgw_ingress.set_dl_sess_info", "nop"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "__HIT__" : "tbl_act_16",
+ "__MISS__" : "tbl_act_17"
+ },
+ "default_entry" : {
+ "action_id" : 0,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_16",
+ "id" : 22,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [49],
+ "actions" : ["act_15"],
+ "base_default_next" : "node_37",
+ "next_tables" : {
+ "act_15" : "node_37"
+ },
+ "default_entry" : {
+ "action_id" : 49,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_17",
+ "id" : 23,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [50],
+ "actions" : ["act_16"],
+ "base_default_next" : "node_37",
+ "next_tables" : {
+ "act_16" : "node_37"
+ },
+ "default_entry" : {
+ "action_id" : 50,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_18",
+ "id" : 24,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 154,
+ "column" : 39,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [51],
+ "actions" : ["act_17"],
+ "base_default_next" : "node_40",
+ "next_tables" : {
+ "act_17" : "node_40"
+ },
+ "default_entry" : {
+ "action_id" : 51,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_19",
+ "id" : 25,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 156,
+ "column" : 39,
+ "source_fragment" : "= SPGW_DIR_UNKNOWN; ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [52],
+ "actions" : ["act_18"],
+ "base_default_next" : "node_40",
+ "next_tables" : {
+ "act_18" : "node_40"
+ },
+ "default_entry" : {
+ "action_id" : 52,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_20",
+ "id" : 26,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 175,
+ "column" : 34,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [54],
+ "actions" : ["act_20"],
+ "base_default_next" : "node_42",
+ "next_tables" : {
+ "act_20" : "node_42"
+ },
+ "default_entry" : {
+ "action_id" : 54,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.bridging",
+ "id" : 27,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 46,
+ "column" : 10,
+ "source_fragment" : "bridging"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "vlan_id",
+ "target" : ["scalars", "fabric_metadata_t._vlan_id5"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_dst",
+ "target" : ["ethernet", "dst_addr"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [17, 3],
+ "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"],
+ "base_default_next" : "FabricIngress.acl.acl",
+ "next_tables" : {
+ "FabricIngress.forwarding.set_next_id_bridging" : "FabricIngress.acl.acl",
+ "nop" : "FabricIngress.acl.acl"
+ },
+ "default_entry" : {
+ "action_id" : 3,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.mpls",
+ "id" : 28,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 71,
+ "column" : 10,
+ "source_fragment" : "mpls"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "mpls_label",
+ "target" : ["scalars", "fabric_metadata_t._mpls_label8"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [18, 4],
+ "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"],
+ "base_default_next" : "FabricIngress.acl.acl",
+ "next_tables" : {
+ "FabricIngress.forwarding.pop_mpls_and_next" : "FabricIngress.acl.acl",
+ "nop" : "FabricIngress.acl.acl"
+ },
+ "default_entry" : {
+ "action_id" : 4,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.routing_v4",
+ "id" : 29,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 101,
+ "column" : 10,
+ "source_fragment" : "routing_v4"
+ },
+ "key" : [
+ {
+ "match_type" : "lpm",
+ "name" : "ipv4_dst",
+ "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" : [19, 20, 5],
+ "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"],
+ "base_default_next" : "FabricIngress.acl.acl",
+ "next_tables" : {
+ "FabricIngress.forwarding.set_next_id_routing_v4" : "FabricIngress.acl.acl",
+ "FabricIngress.forwarding.nop_routing_v4" : "FabricIngress.acl.acl",
+ "nop" : "FabricIngress.acl.acl"
+ },
+ "default_entry" : {
+ "action_id" : 5,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.acl.acl",
+ "id" : 30,
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 60,
+ "column" : 10,
+ "source_fragment" : "acl"
+ },
+ "key" : [
+ {
+ "match_type" : "ternary",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ip_proto",
+ "target" : ["scalars", "fabric_metadata_t._ip_proto16"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "l4_sport",
+ "target" : ["scalars", "fabric_metadata_t._l4_sport17"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "l4_dport",
+ "target" : ["scalars", "fabric_metadata_t._l4_dport18"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_src",
+ "target" : ["ethernet", "dst_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_dst",
+ "target" : ["ethernet", "src_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "vlan_id",
+ "target" : ["vlan_tag", "vlan_id"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_type",
+ "target" : ["scalars", "fabric_metadata_t._last_eth_type0"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ipv4_src",
+ "target" : ["ipv4", "src_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ipv4_dst",
+ "target" : ["ipv4", "dst_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "icmp_type",
+ "target" : ["icmp", "icmp_type"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "icmp_code",
+ "target" : ["icmp", "icmp_code"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [21, 22, 23, 24, 25],
+ "actions" : ["FabricIngress.acl.set_next_id_acl", "FabricIngress.acl.punt_to_cpu", "FabricIngress.acl.set_clone_session_id", "FabricIngress.acl.drop", "FabricIngress.acl.nop_acl"],
+ "base_default_next" : "node_50",
+ "next_tables" : {
+ "FabricIngress.acl.set_next_id_acl" : "node_50",
+ "FabricIngress.acl.punt_to_cpu" : "node_50",
+ "FabricIngress.acl.set_clone_session_id" : "node_50",
+ "FabricIngress.acl.drop" : "node_50",
+ "FabricIngress.acl.nop_acl" : "node_50"
+ },
+ "default_entry" : {
+ "action_id" : 25,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.next.xconnect",
+ "id" : 31,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 116,
+ "column" : 10,
+ "source_fragment" : "xconnect"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "next_id",
+ "target" : ["scalars", "fabric_metadata_t._next_id13"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [27, 28, 7],
+ "actions" : ["FabricIngress.next.output_xconnect", "FabricIngress.next.set_next_id_xconnect", "nop"],
+ "base_default_next" : "FabricIngress.next.hashed",
+ "next_tables" : {
+ "FabricIngress.next.output_xconnect" : "FabricIngress.next.hashed",
+ "FabricIngress.next.set_next_id_xconnect" : "FabricIngress.next.hashed",
+ "nop" : "FabricIngress.next.hashed"
+ },
+ "default_entry" : {
+ "action_id" : 7,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.next.hashed",
+ "id" : 32,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 196,
+ "column" : 10,
+ "source_fragment" : "hashed"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "next_id",
+ "target" : ["scalars", "fabric_metadata_t._next_id13"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "indirect_ws",
+ "action_profile" : "FabricIngress.next.hashed_selector",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [29, 30, 31, 8],
+ "actions" : ["FabricIngress.next.output_hashed", "FabricIngress.next.routing_hashed", "FabricIngress.next.mpls_routing_hashed", "nop"],
+ "base_default_next" : "FabricIngress.next.multicast",
+ "next_tables" : {
+ "FabricIngress.next.output_hashed" : "FabricIngress.next.multicast",
+ "FabricIngress.next.routing_hashed" : "FabricIngress.next.multicast",
+ "FabricIngress.next.mpls_routing_hashed" : "FabricIngress.next.multicast",
+ "nop" : "FabricIngress.next.multicast"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.multicast",
+ "id" : 33,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 230,
+ "column" : 10,
+ "source_fragment" : "multicast"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "next_id",
+ "target" : ["scalars", "fabric_metadata_t._next_id13"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [32, 9],
+ "actions" : ["FabricIngress.next.set_mcast_group_id", "nop"],
+ "base_default_next" : "FabricIngress.next.next_vlan",
+ "next_tables" : {
+ "FabricIngress.next.set_mcast_group_id" : "FabricIngress.next.next_vlan",
+ "nop" : "FabricIngress.next.next_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 9,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.next.next_vlan",
+ "id" : 34,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 82,
+ "column" : 10,
+ "source_fragment" : "next_vlan"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "next_id",
+ "target" : ["scalars", "fabric_metadata_t._next_id13"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [26, 6],
+ "actions" : ["FabricIngress.next.set_vlan", "nop"],
+ "base_default_next" : "node_55",
+ "next_tables" : {
+ "FabricIngress.next.set_vlan" : "node_55",
+ "nop" : "node_55"
+ },
+ "default_entry" : {
+ "action_id" : 6,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_21",
+ "id" : 35,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 31,
+ "column" : 12,
+ "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [55],
+ "actions" : ["act_21"],
+ "base_default_next" : "node_57",
+ "next_tables" : {
+ "act_21" : "node_57"
+ },
+ "default_entry" : {
+ "action_id" : 55,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_22",
+ "id" : 36,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 34,
+ "column" : 12,
+ "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [56],
+ "actions" : ["act_22"],
+ "base_default_next" : "FabricIngress.process_set_source_sink.tb_set_source",
+ "next_tables" : {
+ "act_22" : "FabricIngress.process_set_source_sink.tb_set_source"
+ },
+ "default_entry" : {
+ "action_id" : 56,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.process_set_source_sink.tb_set_source",
+ "id" : 37,
+ "source_info" : {
+ "filename" : "include/int/int_main.p4",
+ "line" : 46,
+ "column" : 10,
+ "source_fragment" : "tb_set_source"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 511,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [12, 2],
+ "actions" : ["FabricIngress.process_set_source_sink.int_set_source", "nop"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "FabricIngress.process_set_source_sink.int_set_source" : null,
+ "nop" : null
+ },
+ "default_entry" : {
+ "action_id" : 2,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ }
+ ],
+ "action_profiles" : [
+ {
+ "name" : "FabricIngress.next.hashed_selector",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 177,
+ "column" : 57,
+ "source_fragment" : "hashed_selector"
+ },
+ "max_size" : 1024,
+ "selector" : {
+ "algo" : "crc16",
+ "input" : [
+ {
+ "type" : "field",
+ "value" : ["ipv4", "dst_addr"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ipv4", "src_addr"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._ip_proto16"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_sport17"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_dport18"]
+ }
+ ]
+ }
+ }
+ ],
+ "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"]
+ }
+ }
+ }
+ }
+ },
+ "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" : 24,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_out.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["packet_out", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_4",
+ "false_next" : "node_12"
+ },
+ {
+ "name" : "node_12",
+ "id" : 4,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 109,
+ "column" : 12,
+ "source_fragment" : "hdr.vlan_tag.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["vlan_tag", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_5",
+ "false_next" : "node_14"
+ },
+ {
+ "name" : "node_14",
+ "id" : 5,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 121,
+ "column" : 12,
+ "source_fragment" : "!hdr.mpls.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "not",
+ "left" : null,
+ "right" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["mpls", "$valid$"]
+ }
+ }
+ }
+ }
+ },
+ "true_next" : "tbl_act_6",
+ "false_next" : "node_16"
+ },
+ {
+ "name" : "node_16",
+ "id" : 6,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 130,
+ "column" : 12,
+ "source_fragment" : "hdr.mpls.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["mpls", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_7",
+ "false_next" : "node_18"
+ },
+ {
+ "name" : "node_18",
+ "id" : 7,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 133,
+ "column" : 16,
+ "source_fragment" : "hdr.vlan_tag.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["vlan_tag", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "node_19",
+ "false_next" : "tbl_act_10"
+ },
+ {
+ "name" : "node_19",
+ "id" : 8,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 135,
+ "column" : 19,
+ "source_fragment" : "hdr.inner_vlan_tag.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_8",
+ "false_next" : "tbl_act_9"
+ },
+ {
+ "name" : "node_26",
+ "id" : 9,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 144,
+ "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_30",
+ "id" : 10,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 148,
+ "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"]
+ }
+ }
+ }
+ }
+ },
+ "true_next" : "tbl_act_14",
+ "false_next" : "tbl_act_15"
+ },
+ {
+ "name" : "node_37",
+ "id" : 11,
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "spgw_ingress_tmp_0"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_18",
+ "false_next" : "tbl_act_19"
+ },
+ {
+ "name" : "node_40",
+ "id" : 12,
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "not",
+ "left" : null,
+ "right" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "spgw_ingress_hasReturned"]
+ }
+ }
+ }
+ }
+ },
+ "true_next" : "tbl_act_20",
+ "false_next" : "node_42"
+ },
+ {
+ "name" : "node_42",
+ "id" : 13,
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 71,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.skip_forwarding == false"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_forwarding10"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ },
+ "true_next" : "node_43",
+ "false_next" : "FabricIngress.acl.acl"
+ },
+ {
+ "name" : "node_43",
+ "id" : 14,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 141,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.fwd_type == FWD_BRIDGING"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._fwd_type12"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ }
+ },
+ "true_next" : "FabricIngress.forwarding.bridging",
+ "false_next" : "node_45"
+ },
+ {
+ "name" : "node_45",
+ "id" : 15,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 142,
+ "column" : 17,
+ "source_fragment" : "fabric_metadata.fwd_type == FWD_MPLS"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._fwd_type12"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "true_next" : "FabricIngress.forwarding.mpls",
+ "false_next" : "node_47"
+ },
+ {
+ "name" : "node_47",
+ "id" : 16,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 143,
+ "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_type12"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "true_next" : "FabricIngress.forwarding.routing_v4",
+ "false_next" : "FabricIngress.acl.acl"
+ },
+ {
+ "name" : "node_50",
+ "id" : 17,
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 75,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.skip_next == false"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_next11"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ },
+ "false_next" : null,
+ "true_next" : "FabricIngress.next.xconnect"
+ },
+ {
+ "name" : "node_55",
+ "id" : 18,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 30,
+ "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_21",
+ "false_next" : "node_57"
+ },
+ {
+ "name" : "node_57",
+ "id" : 19,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 33,
+ "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_22",
+ "false_next" : "FabricIngress.process_set_source_sink.tb_set_source"
+ }
+ ]
+ },
+ {
+ "name" : "egress",
+ "id" : 1,
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 93,
+ "column" : 8,
+ "source_fragment" : "FabricEgress"
+ },
+ "init_table" : "node_62",
+ "tables" : [
+ {
+ "name" : "tbl_act_23",
+ "id" : 38,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 41,
+ "column" : 12,
+ "source_fragment" : "exit"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [101],
+ "actions" : ["act_23"],
+ "base_default_next" : "node_64",
+ "next_tables" : {
+ "act_23" : "node_64"
+ },
+ "default_entry" : {
+ "action_id" : 101,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_24",
+ "id" : 39,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 44,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_in.setValid(); ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [102],
+ "actions" : ["act_24"],
+ "base_default_next" : "node_66",
+ "next_tables" : {
+ "act_24" : "node_66"
+ },
+ "default_entry" : {
+ "action_id" : 102,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_25",
+ "id" : 40,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 335,
+ "column" : 12,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [103],
+ "actions" : ["act_25"],
+ "base_default_next" : "node_68",
+ "next_tables" : {
+ "act_25" : "node_68"
+ },
+ "default_entry" : {
+ "action_id" : 103,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_egress_next_pop_mpls_if_present",
+ "id" : 41,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 339,
+ "column" : 36,
+ "source_fragment" : "pop_mpls_if_present()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [97],
+ "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"],
+ "base_default_next" : "FabricEgress.egress_next.egress_vlan",
+ "next_tables" : {
+ "FabricEgress.egress_next.pop_mpls_if_present" : "FabricEgress.egress_next.egress_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 97,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_egress_next_set_mpls",
+ "id" : 42,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 341,
+ "column" : 12,
+ "source_fragment" : "set_mpls()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [98],
+ "actions" : ["FabricEgress.egress_next.set_mpls"],
+ "base_default_next" : "FabricEgress.egress_next.egress_vlan",
+ "next_tables" : {
+ "FabricEgress.egress_next.set_mpls" : "FabricEgress.egress_next.egress_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 98,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricEgress.egress_next.egress_vlan",
+ "id" : 43,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 318,
+ "column" : 10,
+ "source_fragment" : "egress_vlan"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "vlan_id",
+ "target" : ["scalars", "fabric_metadata_t._vlan_id5"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "eg_port",
+ "target" : ["standard_metadata", "egress_port"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [100, 59],
+ "actions" : ["FabricEgress.egress_next.pop_vlan", "nop"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "__HIT__" : "tbl_act_26",
+ "__MISS__" : "tbl_act_27"
+ },
+ "default_entry" : {
+ "action_id" : 59,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_26",
+ "id" : 44,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [104],
+ "actions" : ["act_26"],
+ "base_default_next" : "node_75",
+ "next_tables" : {
+ "act_26" : "node_75"
+ },
+ "default_entry" : {
+ "action_id" : 104,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_27",
+ "id" : 45,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [105],
+ "actions" : ["act_27"],
+ "base_default_next" : "node_75",
+ "next_tables" : {
+ "act_27" : "node_75"
+ },
+ "default_entry" : {
+ "action_id" : 105,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_egress_next_push_vlan",
+ "id" : 46,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 358,
+ "column" : 20,
+ "source_fragment" : "push_vlan()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [99],
+ "actions" : ["FabricEgress.egress_next.push_vlan"],
+ "base_default_next" : "node_78",
+ "next_tables" : {
+ "FabricEgress.egress_next.push_vlan" : "node_78"
+ },
+ "default_entry" : {
+ "action_id" : 99,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_28",
+ "id" : 47,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 367,
+ "column" : 25,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [107],
+ "actions" : ["act_29"],
+ "base_default_next" : "node_80",
+ "next_tables" : {
+ "act_29" : "node_80"
+ },
+ "default_entry" : {
+ "action_id" : 107,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_29",
+ "id" : 48,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 368,
+ "column" : 35,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [106],
+ "actions" : ["act_28"],
+ "base_default_next" : "node_86",
+ "next_tables" : {
+ "act_28" : "node_86"
+ },
+ "default_entry" : {
+ "action_id" : 106,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_30",
+ "id" : 49,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 371,
+ "column" : 29,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [109],
+ "actions" : ["act_31"],
+ "base_default_next" : "node_84",
+ "next_tables" : {
+ "act_31" : "node_84"
+ },
+ "default_entry" : {
+ "action_id" : 109,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_31",
+ "id" : 50,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 372,
+ "column" : 39,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [108],
+ "actions" : ["act_30"],
+ "base_default_next" : "node_86",
+ "next_tables" : {
+ "act_30" : "node_86"
+ },
+ "default_entry" : {
+ "action_id" : 108,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_spgw_egress_gtpu_encap",
+ "id" : 51,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 228,
+ "column" : 12,
+ "source_fragment" : "gtpu_encap()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [62],
+ "actions" : ["FabricEgress.spgw_egress.gtpu_encap"],
+ "base_default_next" : "node_88",
+ "next_tables" : {
+ "FabricEgress.spgw_egress.gtpu_encap" : "node_88"
+ },
+ "default_entry" : {
+ "action_id" : 62,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_source.tb_int_source",
+ "id" : 52,
+ "source_info" : {
+ "filename" : "include/int/int_source.p4",
+ "line" : 66,
+ "column" : 10,
+ "source_fragment" : "tb_int_source"
+ },
+ "key" : [
+ {
+ "match_type" : "ternary",
+ "name" : "ipv4_src",
+ "target" : ["ipv4", "src_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ipv4_dst",
+ "target" : ["ipv4", "dst_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "l4_sport",
+ "target" : ["scalars", "fabric_metadata_t._l4_sport17"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "l4_dport",
+ "target" : ["scalars", "fabric_metadata_t._l4_dport18"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [63, 57],
+ "actions" : ["FabricEgress.process_int_main.process_int_source.int_source_dscp", "nop"],
+ "base_default_next" : "node_91",
+ "next_tables" : {
+ "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_91",
+ "nop" : "node_91"
+ },
+ "default_entry" : {
+ "action_id" : 57,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_32",
+ "id" : 53,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [110],
+ "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" : 110,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert",
+ "id" : 54,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 315,
+ "column" : 10,
+ "source_fragment" : "tb_int_insert"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "int_is_valid",
+ "target" : ["int_header", "$valid$"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [64, 58],
+ "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",
+ "nop" : "node_94"
+ },
+ "default_entry" : {
+ "action_id" : 58,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_33",
+ "id" : 55,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 420,
+ "column" : 12,
+ "source_fragment" : "return"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [111],
+ "actions" : ["act_33"],
+ "base_default_next" : "node_96",
+ "next_tables" : {
+ "act_33" : "node_96"
+ },
+ "default_entry" : {
+ "action_id" : 111,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003",
+ "id" : 56,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 331,
+ "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" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 60],
+ "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" : 60,
+ "action_const" : false,
+ "action_data" : [],
+ "action_entry_const" : false
+ },
+ "entries" : [
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 354,
+ "column" : 12,
+ "source_fragment" : "(0x0) : int_set_header_0003_i0()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x00"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 65,
+ "action_data" : []
+ },
+ "priority" : 1
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 355,
+ "column" : 12,
+ "source_fragment" : "(0x1) : int_set_header_0003_i1()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x01"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 66,
+ "action_data" : []
+ },
+ "priority" : 2
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 356,
+ "column" : 12,
+ "source_fragment" : "(0x2) : int_set_header_0003_i2()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x02"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 67,
+ "action_data" : []
+ },
+ "priority" : 3
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 357,
+ "column" : 12,
+ "source_fragment" : "(0x3) : int_set_header_0003_i3()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x03"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 68,
+ "action_data" : []
+ },
+ "priority" : 4
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 358,
+ "column" : 12,
+ "source_fragment" : "(0x4) : int_set_header_0003_i4()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x04"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 69,
+ "action_data" : []
+ },
+ "priority" : 5
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 359,
+ "column" : 12,
+ "source_fragment" : "(0x5) : int_set_header_0003_i5()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x05"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 70,
+ "action_data" : []
+ },
+ "priority" : 6
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 360,
+ "column" : 12,
+ "source_fragment" : "(0x6) : int_set_header_0003_i6()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x06"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 71,
+ "action_data" : []
+ },
+ "priority" : 7
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 361,
+ "column" : 12,
+ "source_fragment" : "(0x7) : int_set_header_0003_i7()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x07"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 72,
+ "action_data" : []
+ },
+ "priority" : 8
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 362,
+ "column" : 12,
+ "source_fragment" : "(0x8) : int_set_header_0003_i8()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x08"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 73,
+ "action_data" : []
+ },
+ "priority" : 9
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 363,
+ "column" : 12,
+ "source_fragment" : "(0x9) : int_set_header_0003_i9()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x09"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 74,
+ "action_data" : []
+ },
+ "priority" : 10
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 364,
+ "column" : 12,
+ "source_fragment" : "(0xA) : int_set_header_0003_i10()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0a"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 75,
+ "action_data" : []
+ },
+ "priority" : 11
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 365,
+ "column" : 12,
+ "source_fragment" : "(0xB) : int_set_header_0003_i11()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0b"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 76,
+ "action_data" : []
+ },
+ "priority" : 12
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 366,
+ "column" : 12,
+ "source_fragment" : "(0xC) : int_set_header_0003_i12()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0c"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 77,
+ "action_data" : []
+ },
+ "priority" : 13
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 367,
+ "column" : 12,
+ "source_fragment" : "(0xD) : int_set_header_0003_i13()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0d"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 78,
+ "action_data" : []
+ },
+ "priority" : 14
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 368,
+ "column" : 12,
+ "source_fragment" : "(0xE) : int_set_header_0003_i14()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0e"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 79,
+ "action_data" : []
+ },
+ "priority" : 15
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 369,
+ "column" : 12,
+ "source_fragment" : "(0xF) : int_set_header_0003_i15()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0f"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 80,
+ "action_data" : []
+ },
+ "priority" : 16
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407",
+ "id" : 57,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 375,
+ "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" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 61],
+ "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_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" : 61,
+ "action_const" : false,
+ "action_data" : [],
+ "action_entry_const" : false
+ },
+ "entries" : [
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 398,
+ "column" : 12,
+ "source_fragment" : "(0x0) : int_set_header_0407_i0()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x00"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 81,
+ "action_data" : []
+ },
+ "priority" : 1
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 399,
+ "column" : 12,
+ "source_fragment" : "(0x1) : int_set_header_0407_i1()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x01"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 82,
+ "action_data" : []
+ },
+ "priority" : 2
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 400,
+ "column" : 12,
+ "source_fragment" : "(0x2) : int_set_header_0407_i2()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x02"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 83,
+ "action_data" : []
+ },
+ "priority" : 3
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 401,
+ "column" : 12,
+ "source_fragment" : "(0x3) : int_set_header_0407_i3()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x03"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 84,
+ "action_data" : []
+ },
+ "priority" : 4
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 402,
+ "column" : 12,
+ "source_fragment" : "(0x4) : int_set_header_0407_i4()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x04"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 85,
+ "action_data" : []
+ },
+ "priority" : 5
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 403,
+ "column" : 12,
+ "source_fragment" : "(0x5) : int_set_header_0407_i5()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x05"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 86,
+ "action_data" : []
+ },
+ "priority" : 6
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 404,
+ "column" : 12,
+ "source_fragment" : "(0x6) : int_set_header_0407_i6()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x06"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 87,
+ "action_data" : []
+ },
+ "priority" : 7
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 405,
+ "column" : 12,
+ "source_fragment" : "(0x7) : int_set_header_0407_i7()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x07"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 88,
+ "action_data" : []
+ },
+ "priority" : 8
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 406,
+ "column" : 12,
+ "source_fragment" : "(0x8) : int_set_header_0407_i8()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x08"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 89,
+ "action_data" : []
+ },
+ "priority" : 9
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 407,
+ "column" : 12,
+ "source_fragment" : "(0x9) : int_set_header_0407_i9()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x09"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 90,
+ "action_data" : []
+ },
+ "priority" : 10
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 408,
+ "column" : 12,
+ "source_fragment" : "(0xA) : int_set_header_0407_i10()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0a"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 91,
+ "action_data" : []
+ },
+ "priority" : 11
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 409,
+ "column" : 12,
+ "source_fragment" : "(0xB) : int_set_header_0407_i11()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0b"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 92,
+ "action_data" : []
+ },
+ "priority" : 12
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 410,
+ "column" : 12,
+ "source_fragment" : "(0xC) : int_set_header_0407_i12()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0c"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 93,
+ "action_data" : []
+ },
+ "priority" : 13
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 411,
+ "column" : 12,
+ "source_fragment" : "(0xD) : int_set_header_0407_i13()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0d"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 94,
+ "action_data" : []
+ },
+ "priority" : 14
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 412,
+ "column" : 12,
+ "source_fragment" : "(0xE) : int_set_header_0407_i14()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0e"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 95,
+ "action_data" : []
+ },
+ "priority" : 15
+ },
+ {
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 413,
+ "column" : 12,
+ "source_fragment" : "(0xF) : int_set_header_0407_i15()"
+ },
+ "match_key" : [
+ {
+ "match_type" : "exact",
+ "key" : "0x0f"
+ }
+ ],
+ "action_entry" : {
+ "action_id" : 96,
+ "action_data" : []
+ },
+ "priority" : 16
+ }
+ ]
+ },
+ {
+ "name" : "tbl_act_34",
+ "id" : 58,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 425,
+ "column" : 37,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [113],
+ "actions" : ["act_35"],
+ "base_default_next" : "node_100",
+ "next_tables" : {
+ "act_35" : "node_100"
+ },
+ "default_entry" : {
+ "action_id" : 113,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_35",
+ "id" : 59,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 428,
+ "column" : 31,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [112],
+ "actions" : ["act_34"],
+ "base_default_next" : "node_102",
+ "next_tables" : {
+ "act_34" : "node_102"
+ },
+ "default_entry" : {
+ "action_id" : 112,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_36",
+ "id" : 60,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 431,
+ "column" : 24,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [114],
+ "actions" : ["act_36"],
+ "base_default_next" : "node_104",
+ "next_tables" : {
+ "act_36" : "node_104"
+ },
+ "default_entry" : {
+ "action_id" : 114,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_37",
+ "id" : 61,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 434,
+ "column" : 37,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [115],
+ "actions" : ["act_37"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "act_37" : null
+ },
+ "default_entry" : {
+ "action_id" : 115,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ }
+ ],
+ "action_profiles" : [],
+ "conditionals" : [
+ {
+ "name" : "node_62",
+ "id" : 20,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 39,
+ "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_out15"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ },
+ "true_next" : "tbl_act_23",
+ "false_next" : "node_64"
+ },
+ {
+ "name" : "node_64",
+ "id" : 21,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 43,
+ "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" : "tbl_act_24",
+ "false_next" : "node_66"
+ },
+ {
+ "name" : "node_66",
+ "id" : 22,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 333,
+ "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_multicast14"]
+ }
+ }
+ },
+ "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_act_25",
+ "false_next" : "node_68"
+ },
+ {
+ "name" : "node_68",
+ "id" : 23,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 338,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.mpls_label == 0"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_label8"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ }
+ },
+ "true_next" : "node_69",
+ "false_next" : "tbl_egress_next_set_mpls"
+ },
+ {
+ "name" : "node_69",
+ "id" : 24,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 339,
+ "column" : 16,
+ "source_fragment" : "hdr.mpls.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["mpls", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_egress_next_pop_mpls_if_present",
+ "false_next" : "FabricEgress.egress_next.egress_vlan"
+ },
+ {
+ "name" : "node_75",
+ "id" : 25,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 355,
+ "column" : 16,
+ "source_fragment" : "!egress_vlan.apply().hit"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "not",
+ "left" : null,
+ "right" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "egress_next_tmp"]
+ }
+ }
+ }
+ }
+ },
+ "true_next" : "node_76",
+ "false_next" : "node_78"
+ },
+ {
+ "name" : "node_76",
+ "id" : 26,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 357,
+ "column" : 20,
+ "source_fragment" : "fabric_metadata.vlan_id != DEFAULT_VLAN_ID"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "!=",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0ffe"
+ }
+ }
+ },
+ "true_next" : "tbl_egress_next_push_vlan",
+ "false_next" : "node_78"
+ },
+ {
+ "name" : "node_78",
+ "id" : 27,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 366,
+ "column" : 12,
+ "source_fragment" : "hdr.mpls.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["mpls", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_28",
+ "false_next" : "node_82"
+ },
+ {
+ "name" : "node_80",
+ "id" : 28,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 368,
+ "column" : 16,
+ "source_fragment" : "hdr.mpls.ttl == 0"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ }
+ },
+ "true_next" : "tbl_act_29",
+ "false_next" : "node_86"
+ },
+ {
+ "name" : "node_82",
+ "id" : 29,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 370,
+ "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_30",
+ "false_next" : "node_86"
+ },
+ {
+ "name" : "node_84",
+ "id" : 30,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 372,
+ "column" : 20,
+ "source_fragment" : "hdr.ipv4.ttl == 0"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["ipv4", "ttl"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ }
+ },
+ "true_next" : "tbl_act_31",
+ "false_next" : "node_86"
+ },
+ {
+ "name" : "node_86",
+ "id" : 31,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 227,
+ "column" : 12,
+ "source_fragment" : "fabric_meta.spgw.direction == SPGW_DIR_DOWNLINK"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_direction19"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "true_next" : "tbl_spgw_egress_gtpu_encap",
+ "false_next" : "node_88"
+ },
+ {
+ "name" : "node_88",
+ "id" : 32,
+ "source_info" : {
+ "filename" : "include/int/int_main.p4",
+ "line" : 102,
+ "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_89"
+ },
+ {
+ "name" : "node_89",
+ "id" : 33,
+ "source_info" : {
+ "filename" : "include/int/int_main.p4",
+ "line" : 106,
+ "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" : ["scalars", "fabric_metadata_t._int_meta_source24"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ },
+ "true_next" : "FabricEgress.process_int_main.process_int_source.tb_int_source",
+ "false_next" : "node_91"
+ },
+ {
+ "name" : "node_91",
+ "id" : 34,
+ "source_info" : {
+ "filename" : "include/int/int_main.p4",
+ "line" : 110,
+ "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_32"
+ },
+ {
+ "name" : "node_94",
+ "id" : 35,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 419,
+ "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" : ["scalars", "fabric_metadata_t._int_meta_transit25"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ },
+ "true_next" : "tbl_act_33",
+ "false_next" : "node_96"
+ },
+ {
+ "name" : "node_96",
+ "id" : 36,
+ "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"]
+ }
+ }
+ }
+ }
+ },
+ "false_next" : null,
+ "true_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003"
+ },
+ {
+ "name" : "node_100",
+ "id" : 37,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 427,
+ "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_35",
+ "false_next" : "node_102"
+ },
+ {
+ "name" : "node_102",
+ "id" : 38,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 430,
+ "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_36",
+ "false_next" : "node_104"
+ },
+ {
+ "name" : "node_104",
+ "id" : 39,
+ "source_info" : {
+ "filename" : "include/int/int_transit.p4",
+ "line" : 433,
+ "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_37"
+ }
+ ]
+ }
+ ],
+ "checksums" : [
+ {
+ "name" : "cksum",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "include/checksum.p4",
+ "line" : 28,
+ "column" : 8,
+ "source_fragment" : "update_checksum(hdr.ipv4.isValid(), ..."
+ },
+ "target" : ["ipv4", "hdr_checksum"],
+ "type" : "generic",
+ "calculation" : "calc",
+ "verify" : false,
+ "update" : true,
+ "if_cond" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["ipv4", "$valid$"]
+ }
+ }
+ }
+ },
+ {
+ "name" : "cksum_0",
+ "id" : 1,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 243,
+ "column" : 8,
+ "source_fragment" : "update_checksum(gtpu_ipv4.isValid(), ..."
+ },
+ "target" : ["gtpu_ipv4", "hdr_checksum"],
+ "type" : "generic",
+ "calculation" : "calc_0",
+ "verify" : false,
+ "update" : true,
+ "if_cond" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["gtpu_ipv4", "$valid$"]
+ }
+ }
+ }
+ },
+ {
+ "name" : "cksum_1",
+ "id" : 2,
+ "source_info" : {
+ "filename" : "include/checksum.p4",
+ "line" : 57,
+ "column" : 8,
+ "source_fragment" : "verify_checksum(hdr.ipv4.isValid(), ..."
+ },
+ "target" : ["ipv4", "hdr_checksum"],
+ "type" : "generic",
+ "calculation" : "calc_1",
+ "verify" : true,
+ "update" : false,
+ "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"]
+ ],
+ [
+ "intrinsic_metadata.priority",
+ ["standard_metadata", "priority"]
+ ]
+ ],
+ "program" : "fabric.p4",
+ "__meta__" : {
+ "version" : [2, 18],
+ "compiler" : "https://github.com/p4lang/p4c"
+ }
+}
\ No newline at end of file
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/cpu_port.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/cpu_port.txt
new file mode 100644
index 0000000..ace9d03
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/cpu_port.txt
@@ -0,0 +1 @@
+255
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt
new file mode 100644
index 0000000..1a88a4b
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt
@@ -0,0 +1,1089 @@
+pkg_info {
+ arch: "v1model"
+}
+tables {
+ preamble {
+ id: 33582731
+ name: "FabricIngress.spgw_ingress.dl_sess_lookup"
+ alias: "dl_sess_lookup"
+ }
+ match_fields {
+ id: 1
+ name: "ipv4_dst"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16804065
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318781522
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33615906
+ name: "FabricIngress.spgw_ingress.s1u_filter_table"
+ alias: "s1u_filter_table"
+ }
+ match_fields {
+ id: 1
+ name: "gtp_ipv4_dst"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16819938
+ }
+ const_default_action_id: 16819938
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33581620
+ name: "FabricIngress.process_set_source_sink.tb_set_source"
+ alias: "tb_set_source"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16778827
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318787614
+ size: 511
+}
+tables {
+ preamble {
+ id: 33611649
+ name: "FabricIngress.filtering.ingress_port_vlan"
+ alias: "ingress_port_vlan"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "vlan_is_valid"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ match_fields {
+ id: 3
+ name: "vlan_id"
+ bitwidth: 12
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 4
+ name: "inner_vlan_id"
+ bitwidth: 12
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16836487
+ }
+ action_refs {
+ id: 16818236
+ }
+ action_refs {
+ id: 16794911
+ }
+ const_default_action_id: 16836487
+ direct_resource_ids: 318815501
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33596298
+ name: "FabricIngress.filtering.fwd_classifier"
+ alias: "fwd_classifier"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "eth_dst"
+ bitwidth: 48
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 3
+ name: "is_ipv4"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ match_fields {
+ id: 4
+ name: "is_ipv6"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ match_fields {
+ id: 5
+ name: "is_mpls"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16840921
+ }
+ const_default_action_id: 16840921
+ direct_resource_ids: 318827326
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33596749
+ name: "FabricIngress.forwarding.bridging"
+ alias: "bridging"
+ }
+ match_fields {
+ id: 1
+ name: "vlan_id"
+ bitwidth: 12
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "eth_dst"
+ bitwidth: 48
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16811012
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318770289
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33574274
+ name: "FabricIngress.forwarding.mpls"
+ alias: "mpls"
+ }
+ match_fields {
+ id: 1
+ name: "mpls_label"
+ bitwidth: 20
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16827758
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318830507
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33562650
+ name: "FabricIngress.forwarding.routing_v4"
+ alias: "routing_v4"
+ }
+ match_fields {
+ id: 1
+ name: "ipv4_dst"
+ bitwidth: 32
+ match_type: LPM
+ }
+ action_refs {
+ id: 16777434
+ }
+ action_refs {
+ id: 16804187
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318811107
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33618978
+ name: "FabricIngress.acl.acl"
+ alias: "acl"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 2
+ name: "ip_proto"
+ bitwidth: 8
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 3
+ name: "l4_sport"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 4
+ name: "l4_dport"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 5
+ name: "eth_src"
+ bitwidth: 48
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 6
+ name: "eth_dst"
+ bitwidth: 48
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 7
+ name: "vlan_id"
+ bitwidth: 12
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 8
+ name: "eth_type"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 9
+ name: "ipv4_src"
+ bitwidth: 32
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 10
+ name: "ipv4_dst"
+ bitwidth: 32
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 11
+ name: "icmp_type"
+ bitwidth: 8
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 12
+ name: "icmp_code"
+ bitwidth: 8
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16807382
+ }
+ action_refs {
+ id: 16829684
+ }
+ action_refs {
+ id: 16781601
+ }
+ action_refs {
+ id: 16820765
+ }
+ action_refs {
+ id: 16827694
+ }
+ const_default_action_id: 16827694
+ direct_resource_ids: 318801025
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33599709
+ name: "FabricIngress.next.next_vlan"
+ alias: "next_vlan"
+ }
+ match_fields {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16790685
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318768144
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33596977
+ name: "FabricIngress.next.xconnect"
+ alias: "xconnect"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "next_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16842190
+ }
+ action_refs {
+ id: 16837052
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318778156
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33608588
+ name: "FabricIngress.next.hashed"
+ alias: "hashed"
+ }
+ match_fields {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16815357
+ }
+ action_refs {
+ id: 16791402
+ }
+ action_refs {
+ id: 16779255
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ implementation_id: 285217164
+ direct_resource_ids: 318800532
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33606828
+ name: "FabricIngress.next.multicast"
+ alias: "multicast"
+ }
+ match_fields {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16779917
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318801752
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33612258
+ name: "FabricEgress.process_int_main.process_int_source.tb_int_source"
+ alias: "tb_int_source"
+ }
+ match_fields {
+ id: 1
+ name: "ipv4_src"
+ bitwidth: 32
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 2
+ name: "ipv4_dst"
+ bitwidth: 32
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 3
+ name: "l4_sport"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 4
+ name: "l4_dport"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16785857
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318800047
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33599867
+ name: "FabricEgress.process_int_main.process_int_transit.tb_int_insert"
+ alias: "tb_int_insert"
+ }
+ match_fields {
+ id: 1
+ name: "int_is_valid"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16780783
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ size: 1
+}
+tables {
+ preamble {
+ id: 33599342
+ name: "FabricEgress.egress_next.egress_vlan"
+ alias: "egress_vlan"
+ }
+ match_fields {
+ id: 1
+ name: "vlan_id"
+ bitwidth: 12
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "eg_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16790030
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318827144
+ size: 1024
+}
+actions {
+ preamble {
+ id: 16819938
+ name: "nop"
+ alias: "nop"
+ }
+}
+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: 16836487
+ name: "FabricIngress.filtering.deny"
+ alias: "deny"
+ }
+}
+actions {
+ preamble {
+ id: 16818236
+ name: "FabricIngress.filtering.permit"
+ alias: "permit"
+ }
+}
+actions {
+ preamble {
+ id: 16794911
+ name: "FabricIngress.filtering.permit_with_internal_vlan"
+ alias: "permit_with_internal_vlan"
+ }
+ params {
+ id: 1
+ name: "vlan_id"
+ bitwidth: 12
+ }
+}
+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: 16807382
+ name: "FabricIngress.acl.set_next_id_acl"
+ alias: "set_next_id_acl"
+ }
+ params {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ }
+}
+actions {
+ preamble {
+ id: 16829684
+ name: "FabricIngress.acl.punt_to_cpu"
+ alias: "punt_to_cpu"
+ }
+}
+actions {
+ preamble {
+ id: 16781601
+ name: "FabricIngress.acl.set_clone_session_id"
+ alias: "set_clone_session_id"
+ }
+ params {
+ id: 1
+ name: "clone_id"
+ bitwidth: 32
+ }
+}
+actions {
+ preamble {
+ id: 16820765
+ name: "FabricIngress.acl.drop"
+ alias: "drop"
+ }
+}
+actions {
+ preamble {
+ id: 16827694
+ name: "FabricIngress.acl.nop_acl"
+ alias: "nop_acl"
+ }
+}
+actions {
+ preamble {
+ id: 16790685
+ name: "FabricIngress.next.set_vlan"
+ alias: "set_vlan"
+ }
+ params {
+ id: 1
+ name: "vlan_id"
+ bitwidth: 12
+ }
+}
+actions {
+ preamble {
+ id: 16842190
+ name: "FabricIngress.next.output_xconnect"
+ alias: "output_xconnect"
+ }
+ params {
+ id: 1
+ name: "port_num"
+ bitwidth: 9
+ }
+}
+actions {
+ preamble {
+ id: 16837052
+ name: "FabricIngress.next.set_next_id_xconnect"
+ alias: "set_next_id_xconnect"
+ }
+ params {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ }
+}
+actions {
+ preamble {
+ id: 16815357
+ name: "FabricIngress.next.output_hashed"
+ alias: "output_hashed"
+ }
+ params {
+ id: 1
+ name: "port_num"
+ bitwidth: 9
+ }
+}
+actions {
+ preamble {
+ id: 16791402
+ name: "FabricIngress.next.routing_hashed"
+ alias: "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: 16779255
+ name: "FabricIngress.next.mpls_routing_hashed"
+ alias: "mpls_routing_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: 16779917
+ name: "FabricIngress.next.set_mcast_group_id"
+ alias: "set_mcast_group_id"
+ }
+ params {
+ id: 1
+ name: "group_id"
+ bitwidth: 16
+ }
+}
+actions {
+ preamble {
+ id: 16800567
+ name: "NoAction"
+ alias: "NoAction"
+ }
+}
+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: 16790030
+ name: "FabricEgress.egress_next.pop_vlan"
+ alias: "pop_vlan"
+ }
+}
+action_profiles {
+ preamble {
+ id: 285217164
+ name: "FabricIngress.next.hashed_selector"
+ alias: "hashed_selector"
+ }
+ table_ids: 33608588
+ with_selector: true
+ size: 1024
+ max_group_size: 16
+}
+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: 318801025
+ name: "FabricIngress.acl.acl_counter"
+ alias: "acl_counter"
+ }
+ spec {
+ unit: BOTH
+ }
+ direct_table_id: 33618978
+}
+direct_counters {
+ preamble {
+ id: 318768144
+ name: "FabricIngress.next.next_vlan_counter"
+ alias: "next_vlan_counter"
+ }
+ spec {
+ unit: BOTH
+ }
+ direct_table_id: 33599709
+}
+direct_counters {
+ preamble {
+ id: 318778156
+ name: "FabricIngress.next.xconnect_counter"
+ alias: "xconnect_counter"
+ }
+ spec {
+ unit: BOTH
+ }
+ direct_table_id: 33596977
+}
+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"
+ alias: "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"
+ alias: "packet_out"
+ annotations: "@controller_header(\"packet_out\")"
+ }
+ metadata {
+ id: 1
+ name: "egress_port"
+ bitwidth: 9
+ }
+ metadata {
+ id: 2
+ name: "_pad"
+ bitwidth: 7
+ }
+}
+type_info {
+}
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json
new file mode 100644
index 0000000..0f6a839
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json
@@ -0,0 +1,7283 @@
+{
+ "header_types" : [
+ {
+ "name" : "scalars_0",
+ "id" : 0,
+ "fields" : [
+ ["tmp_0", 4, false],
+ ["tmp", 8, false],
+ ["tmp_1", 32, false],
+ ["tmp_2", 32, false],
+ ["spgw_ingress_tmp", 1, false],
+ ["spgw_ingress_tmp_0", 1, false],
+ ["spgw_normalizer_hasReturned", 1, false],
+ ["spgw_ingress_hasReturned", 1, false],
+ ["egress_next_tmp", 1, false],
+ ["fabric_metadata_t._last_eth_type0", 16, false],
+ ["fabric_metadata_t._is_ipv41", 1, false],
+ ["fabric_metadata_t._is_ipv62", 1, false],
+ ["fabric_metadata_t._is_mpls3", 1, false],
+ ["fabric_metadata_t._ip_eth_type4", 16, false],
+ ["fabric_metadata_t._vlan_id5", 12, false],
+ ["fabric_metadata_t._vlan_pri6", 3, false],
+ ["fabric_metadata_t._vlan_cfi7", 1, false],
+ ["fabric_metadata_t._mpls_label8", 20, false],
+ ["fabric_metadata_t._mpls_ttl9", 8, false],
+ ["fabric_metadata_t._skip_forwarding10", 1, false],
+ ["fabric_metadata_t._skip_next11", 1, false],
+ ["fabric_metadata_t._fwd_type12", 3, false],
+ ["fabric_metadata_t._next_id13", 32, false],
+ ["fabric_metadata_t._is_multicast14", 1, false],
+ ["fabric_metadata_t._is_controller_packet_out15", 1, false],
+ ["fabric_metadata_t._ip_proto16", 8, false],
+ ["fabric_metadata_t._l4_sport17", 16, false],
+ ["fabric_metadata_t._l4_dport18", 16, false],
+ ["fabric_metadata_t._spgw_direction19", 2, false],
+ ["fabric_metadata_t._spgw_ipv4_len20", 16, false],
+ ["fabric_metadata_t._spgw_teid21", 32, false],
+ ["fabric_metadata_t._spgw_s1u_enb_addr22", 32, false],
+ ["fabric_metadata_t._spgw_s1u_sgw_addr23", 32, false],
+ ["_padding_0", 7, 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],
+ ["recirculate_flag", 32, false],
+ ["checksum_error", 1, false],
+ ["parser_error", 32, false],
+ ["priority", 3, false],
+ ["_padding", 2, false]
+ ]
+ },
+ {
+ "name" : "ethernet_t",
+ "id" : 2,
+ "fields" : [
+ ["dst_addr", 48, false],
+ ["src_addr", 48, false],
+ ["eth_type", 16, false]
+ ]
+ },
+ {
+ "name" : "vlan_tag_t",
+ "id" : 3,
+ "fields" : [
+ ["pri", 3, false],
+ ["cfi", 1, false],
+ ["vlan_id", 12, false],
+ ["eth_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" : [
+ ["sport", 16, false],
+ ["dport", 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" : "tcp_t",
+ "id" : 8,
+ "fields" : [
+ ["sport", 16, false],
+ ["dport", 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" : 9,
+ "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" : 10,
+ "fields" : [
+ ["egress_port", 9, false],
+ ["_pad", 7, false]
+ ]
+ },
+ {
+ "name" : "packet_in_header_t",
+ "id" : 11,
+ "fields" : [
+ ["ingress_port", 9, false],
+ ["_pad", 7, 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" : "inner_vlan_tag",
+ "id" : 4,
+ "header_type" : "vlan_tag_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "mpls",
+ "id" : 5,
+ "header_type" : "mpls_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "gtpu_ipv4",
+ "id" : 6,
+ "header_type" : "ipv4_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "gtpu_udp",
+ "id" : 7,
+ "header_type" : "udp_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "gtpu",
+ "id" : 8,
+ "header_type" : "gtpu_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "inner_ipv4",
+ "id" : 9,
+ "header_type" : "ipv4_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "inner_udp",
+ "id" : 10,
+ "header_type" : "udp_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "ipv4",
+ "id" : 11,
+ "header_type" : "ipv4_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
+ }
+ ],
+ "header_stacks" : [],
+ "header_union_types" : [],
+ "header_unions" : [],
+ "header_union_stacks" : [],
+ "field_lists" : [
+ {
+ "id" : 1,
+ "name" : "fl",
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 46,
+ "column" : 40,
+ "source_fragment" : "{standard_metadata.ingress_port}"
+ },
+ "elements" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ }
+ ]
+ }
+ ],
+ "errors" : [
+ ["NoError", 1],
+ ["PacketTooShort", 2],
+ ["NoMatch", 3],
+ ["StackOutOfBounds", 4],
+ ["HeaderTooShort", 5],
+ ["ParserTimeout", 6],
+ ["ParserInvalidArgument", 7]
+ ],
+ "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"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0ffe"
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x88a8",
+ "mask" : null,
+ "next_state" : "parse_vlan_tag"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x9100",
+ "mask" : null,
+ "next_state" : "parse_vlan_tag"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100",
+ "mask" : null,
+ "next_state" : "parse_vlan_tag"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847",
+ "mask" : null,
+ "next_state" : "parse_mpls"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0800",
+ "mask" : null,
+ "next_state" : "pre_parse_ipv4"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_vlan_tag",
+ "id" : 3,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "vlan_tag"
+ }
+ ],
+ "op" : "extract"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x0800",
+ "mask" : null,
+ "next_state" : "pre_parse_ipv4"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847",
+ "mask" : null,
+ "next_state" : "parse_mpls"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100",
+ "mask" : null,
+ "next_state" : "parse_inner_vlan_tag"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "eth_type"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_inner_vlan_tag",
+ "id" : 4,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "inner_vlan_tag"
+ }
+ ],
+ "op" : "extract"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x0800",
+ "mask" : null,
+ "next_state" : "pre_parse_ipv4"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847",
+ "mask" : null,
+ "next_state" : "parse_mpls"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "eth_type"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_mpls",
+ "id" : 5,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "mpls"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._is_mpls3"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_label8"]
+ },
+ {
+ "type" : "field",
+ "value" : ["mpls", "label"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_ttl9"]
+ },
+ {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp_0"]
+ },
+ {
+ "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_0"]
+ }
+ ]
+ },
+ {
+ "name" : "pre_parse_ipv4",
+ "id" : 6,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._is_ipv41"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : "parse_ipv4"
+ }
+ ],
+ "transition_key" : []
+ },
+ {
+ "name" : "parse_ipv4",
+ "id" : 7,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "ipv4"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._ip_proto16"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ipv4", "protocol"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._ip_eth_type4"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0800"
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x06",
+ "mask" : null,
+ "next_state" : "parse_tcp"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x11",
+ "mask" : null,
+ "next_state" : "parse_udp"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x01",
+ "mask" : null,
+ "next_state" : "parse_icmp"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["ipv4", "protocol"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_tcp",
+ "id" : 8,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "tcp"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_sport17"]
+ },
+ {
+ "type" : "field",
+ "value" : ["tcp", "sport"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_dport18"]
+ },
+ {
+ "type" : "field",
+ "value" : ["tcp", "dport"]
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : []
+ },
+ {
+ "name" : "parse_udp",
+ "id" : 9,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "udp"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_sport17"]
+ },
+ {
+ "type" : "field",
+ "value" : ["udp", "sport"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_dport18"]
+ },
+ {
+ "type" : "field",
+ "value" : ["udp", "dport"]
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x0868",
+ "mask" : null,
+ "next_state" : "parse_gtpu"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["udp", "dport"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_icmp",
+ "id" : 10,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "icmp"
+ }
+ ],
+ "op" : "extract"
+ }
+ ],
+ "transitions" : [
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : []
+ },
+ {
+ "name" : "parse_gtpu",
+ "id" : 11,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp"]
+ },
+ {
+ "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"]
+ }
+ ]
+ },
+ {
+ "name" : "do_parse_gtpu",
+ "id" : 12,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "gtpu"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "inner_ipv4"
+ }
+ ],
+ "op" : "extract"
+ }
+ ],
+ "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" : 13,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "inner_udp"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_sport17"]
+ },
+ {
+ "type" : "field",
+ "value" : ["inner_udp", "sport"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_dport18"]
+ },
+ {
+ "type" : "field",
+ "value" : ["inner_udp", "dport"]
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : []
+ }
+ ]
+ }
+ ],
+ "parse_vsets" : [],
+ "deparsers" : [
+ {
+ "name" : "deparser",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "include/parser.p4",
+ "line" : 276,
+ "column" : 8,
+ "source_fragment" : "FabricDeparser"
+ },
+ "order" : ["packet_in", "ethernet", "vlan_tag", "inner_vlan_tag", "mpls", "gtpu_ipv4", "gtpu_udp", "gtpu", "ipv4", "tcp", "udp", "icmp"]
+ }
+ ],
+ "meter_arrays" : [],
+ "counter_arrays" : [
+ {
+ "name" : "FabricIngress.spgw_ingress.ue_counter",
+ "id" : 0,
+ "is_direct" : true,
+ "binding" : "FabricIngress.spgw_ingress.dl_sess_lookup",
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 52,
+ "column" : 50,
+ "source_fragment" : "ue_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.filtering.ingress_port_vlan_counter",
+ "id" : 1,
+ "is_direct" : true,
+ "binding" : "FabricIngress.filtering.ingress_port_vlan",
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 31,
+ "column" : 50,
+ "source_fragment" : "ingress_port_vlan_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.filtering.fwd_classifier_counter",
+ "id" : 2,
+ "is_direct" : true,
+ "binding" : "FabricIngress.filtering.fwd_classifier",
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 83,
+ "column" : 50,
+ "source_fragment" : "fwd_classifier_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.bridging_counter",
+ "id" : 3,
+ "is_direct" : true,
+ "binding" : "FabricIngress.forwarding.bridging",
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 36,
+ "column" : 50,
+ "source_fragment" : "bridging_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.mpls_counter",
+ "id" : 4,
+ "is_direct" : true,
+ "binding" : "FabricIngress.forwarding.mpls",
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 63,
+ "column" : 50,
+ "source_fragment" : "mpls_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.routing_v4_counter",
+ "id" : 5,
+ "is_direct" : true,
+ "binding" : "FabricIngress.forwarding.routing_v4",
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 87,
+ "column" : 50,
+ "source_fragment" : "routing_v4_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.acl.acl_counter",
+ "id" : 6,
+ "is_direct" : true,
+ "binding" : "FabricIngress.acl.acl",
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 30,
+ "column" : 50,
+ "source_fragment" : "acl_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.next_vlan_counter",
+ "id" : 7,
+ "is_direct" : true,
+ "binding" : "FabricIngress.next.next_vlan",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 67,
+ "column" : 50,
+ "source_fragment" : "next_vlan_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.xconnect_counter",
+ "id" : 8,
+ "is_direct" : true,
+ "binding" : "FabricIngress.next.xconnect",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 103,
+ "column" : 50,
+ "source_fragment" : "xconnect_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.hashed_counter",
+ "id" : 9,
+ "is_direct" : true,
+ "binding" : "FabricIngress.next.hashed",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 178,
+ "column" : 50,
+ "source_fragment" : "hashed_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.multicast_counter",
+ "id" : 10,
+ "is_direct" : true,
+ "binding" : "FabricIngress.next.multicast",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 222,
+ "column" : 50,
+ "source_fragment" : "multicast_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.port_counters_control.egress_port_counter",
+ "id" : 11,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 26,
+ "column" : 48,
+ "source_fragment" : "egress_port_counter"
+ },
+ "size" : 511,
+ "is_direct" : false
+ },
+ {
+ "name" : "FabricIngress.port_counters_control.ingress_port_counter",
+ "id" : 12,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 27,
+ "column" : 48,
+ "source_fragment" : "ingress_port_counter"
+ },
+ "size" : 511,
+ "is_direct" : false
+ },
+ {
+ "name" : "FabricEgress.egress_next.egress_vlan_counter",
+ "id" : 13,
+ "is_direct" : true,
+ "binding" : "FabricEgress.egress_next.egress_vlan",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 310,
+ "column" : 50,
+ "source_fragment" : "egress_vlan_counter"
+ }
+ }
+ ],
+ "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" : 243,
+ "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" : "nop",
+ "id" : 0,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 1,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 2,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 3,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 4,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 5,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 6,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 7,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 8,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.spgw_ingress.gtpu_decap",
+ "id" : 9,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "gtpu_ipv4"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 56,
+ "column" : 8,
+ "source_fragment" : "gtpu_ipv4.setInvalid()"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "gtpu_udp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 57,
+ "column" : 8,
+ "source_fragment" : "gtpu_udp.setInvalid()"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "gtpu"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 58,
+ "column" : 8,
+ "source_fragment" : "gtpu.setInvalid()"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.spgw_ingress.set_dl_sess_info",
+ "id" : 10,
+ "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" : ["scalars", "fabric_metadata_t._spgw_teid21"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 64,
+ "column" : 30,
+ "source_fragment" : "= teid; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_s1u_enb_addr22"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 1
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 65,
+ "column" : 38,
+ "source_fragment" : "= s1u_enb_addr; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_s1u_sgw_addr23"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 2
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 66,
+ "column" : 38,
+ "source_fragment" : "= s1u_sgw_addr; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.filtering.deny",
+ "id" : 11,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_forwarding10"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 36,
+ "column" : 40,
+ "source_fragment" : "= true; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_next11"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 37,
+ "column" : 34,
+ "source_fragment" : "= true; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.filtering.permit",
+ "id" : 12,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.filtering.permit_with_internal_vlan",
+ "id" : 13,
+ "runtime_data" : [
+ {
+ "name" : "vlan_id",
+ "bitwidth" : 12
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 47,
+ "column" : 32,
+ "source_fragment" : "= vlan_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.filtering.set_forwarding_type",
+ "id" : 14,
+ "runtime_data" : [
+ {
+ "name" : "fwd_type",
+ "bitwidth" : 3
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._fwd_type12"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 86,
+ "column" : 33,
+ "source_fragment" : "= fwd_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.forwarding.set_next_id_bridging",
+ "id" : 15,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id13"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 30,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.forwarding.pop_mpls_and_next",
+ "id" : 16,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_label8"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 66,
+ "column" : 35,
+ "source_fragment" : "= 0; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id13"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 30,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.forwarding.set_next_id_routing_v4",
+ "id" : 17,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id13"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 30,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.forwarding.nop_routing_v4",
+ "id" : 18,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.acl.set_next_id_acl",
+ "id" : 19,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id13"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 33,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.punt_to_cpu",
+ "id" : 20,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_spec"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00ff"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 39,
+ "column" : 8,
+ "source_fragment" : "standard_metadata.egress_spec = 255"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_next11"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 40,
+ "column" : 34,
+ "source_fragment" : "= true; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.set_clone_session_id",
+ "id" : 21,
+ "runtime_data" : [
+ {
+ "name" : "clone_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "clone_ingress_pkt_to_egress",
+ "parameters" : [
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x1"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 46,
+ "column" : 8,
+ "source_fragment" : "clone3(CloneType.I2E, clone_id, {standard_metadata.ingress_port})"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.drop",
+ "id" : 22,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 51,
+ "column" : 8,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_next11"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 52,
+ "column" : 34,
+ "source_fragment" : "= true; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.nop_acl",
+ "id" : 23,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.next.set_vlan",
+ "id" : 24,
+ "runtime_data" : [
+ {
+ "name" : "vlan_id",
+ "bitwidth" : 12
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 70,
+ "column" : 32,
+ "source_fragment" : "= vlan_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.output_xconnect",
+ "id" : 25,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 107,
+ "column" : 31,
+ "source_fragment" : "0x8100; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.set_next_id_xconnect",
+ "id" : 26,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._next_id13"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 112,
+ "column" : 32,
+ "source_fragment" : "= next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.output_hashed",
+ "id" : 27,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.routing_hashed",
+ "id" : 28,
+ "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" : 36,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.mpls_routing_hashed",
+ "id" : 29,
+ "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" : ["scalars", "fabric_metadata_t._mpls_label8"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 3
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 46,
+ "column" : 35,
+ "source_fragment" : "= label; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "src_addr"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 1
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 36,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.set_mcast_group_id",
+ "id" : 30,
+ "runtime_data" : [
+ {
+ "name" : "group_id",
+ "bitwidth" : 16
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "mcast_grp"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 225,
+ "column" : 8,
+ "source_fragment" : "standard_metadata.mcast_grp = group_id"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._is_multicast14"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 226,
+ "column" : 37,
+ "source_fragment" : "= true; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act",
+ "id" : 31,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "spgw_normalizer_hasReturned"]
+ },
+ {
+ "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" : 32,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "gtpu_ipv4"
+ }
+ ],
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 62,
+ "column" : 50,
+ "source_fragment" : "hdr.gtpu_ipv4"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "gtpu_udp"
+ }
+ ],
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 62,
+ "column" : 65,
+ "source_fragment" : "hdr.gtpu_udp"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "spgw_normalizer_hasReturned"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_1",
+ "id" : 33,
+ "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" : 34,
+ "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" : 35,
+ "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" : 36,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_spec"]
+ },
+ {
+ "type" : "field",
+ "value" : ["packet_out", "egress_port"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 25,
+ "column" : 12,
+ "source_fragment" : "standard_metadata.egress_spec = hdr.packet_out.egress_port"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "packet_out"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 26,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_out.setInvalid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._is_controller_packet_out15"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 27,
+ "column" : 53,
+ "source_fragment" : "= true; ..."
+ }
+ },
+ {
+ "op" : "exit",
+ "parameters" : [],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 29,
+ "column" : 12,
+ "source_fragment" : "exit"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_5",
+ "id" : 37,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "vlan_id"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 110,
+ "column" : 36,
+ "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_pri6"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "pri"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 111,
+ "column" : 37,
+ "source_fragment" : "= hdr.vlan_tag.pri; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_cfi7"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "cfi"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 112,
+ "column" : 37,
+ "source_fragment" : "= hdr.vlan_tag.cfi; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_6",
+ "id" : 38,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_ttl9"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x41"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 126,
+ "column" : 37,
+ "source_fragment" : "= DEFAULT_MPLS_TTL + 1; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_7",
+ "id" : 39,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 108,
+ "column" : 31,
+ "source_fragment" : "0x8847; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_8",
+ "id" : 40,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "eth_type"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 136,
+ "column" : 50,
+ "source_fragment" : "= hdr.inner_vlan_tag.eth_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_9",
+ "id" : 41,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "eth_type"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 139,
+ "column" : 50,
+ "source_fragment" : "= hdr.vlan_tag.eth_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_10",
+ "id" : 42,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 141,
+ "column" : 46,
+ "source_fragment" : "= hdr.ethernet.eth_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_11",
+ "id" : 43,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "spgw_ingress_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_12",
+ "id" : 44,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "spgw_ingress_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_13",
+ "id" : 45,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 149,
+ "column" : 16,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_14",
+ "id" : 46,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_direction19"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 143,
+ "column" : 36,
+ "source_fragment" : "2w1; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_15",
+ "id" : 47,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "spgw_ingress_tmp_0"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_16",
+ "id" : 48,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "spgw_ingress_tmp_0"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_17",
+ "id" : 49,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_direction19"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 144,
+ "column" : 38,
+ "source_fragment" : "2w2; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_18",
+ "id" : 50,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_direction19"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 142,
+ "column" : 37,
+ "source_fragment" : "2w0; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "spgw_ingress_hasReturned"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 158,
+ "column" : 12,
+ "source_fragment" : "return"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_19",
+ "id" : 51,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "spgw_ingress_hasReturned"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_20",
+ "id" : 52,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len20"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ipv4", "total_len"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 175,
+ "column" : 34,
+ "source_fragment" : "= ipv4.total_len; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_21",
+ "id" : 53,
+ "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" : 31,
+ "column" : 38,
+ "source_fragment" : "(bit<32>)standard_metadata.egress_spec"
+ }
+ },
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricIngress.port_counters_control.egress_port_counter"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp_1"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 31,
+ "column" : 12,
+ "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_22",
+ "id" : 54,
+ "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" : 34,
+ "column" : 39,
+ "source_fragment" : "(bit<32>)standard_metadata.ingress_port"
+ }
+ },
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricIngress.port_counters_control.ingress_port_counter"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp_2"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 34,
+ "column" : 12,
+ "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "nop",
+ "id" : 55,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricEgress.spgw_egress.gtpu_encap",
+ "id" : 56,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "gtpu_ipv4"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 191,
+ "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" : 192,
+ "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" : 125,
+ "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" : 194,
+ "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" : 195,
+ "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" : 196,
+ "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" : 198,
+ "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" : 199,
+ "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" : 200,
+ "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" : 138,
+ "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" : 122,
+ "column" : 25,
+ "source_fragment" : "17; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu_ipv4", "dst_addr"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_s1u_enb_addr22"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 203,
+ "column" : 8,
+ "source_fragment" : "gtpu_ipv4.dst_addr = fabric_meta.spgw.s1u_enb_addr; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu_ipv4", "src_addr"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_s1u_sgw_addr23"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 204,
+ "column" : 8,
+ "source_fragment" : "gtpu_ipv4.src_addr = fabric_meta.spgw.s1u_sgw_addr; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu_ipv4", "hdr_checksum"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 205,
+ "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" : 207,
+ "column" : 8,
+ "source_fragment" : "gtpu_udp.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu_udp", "sport"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0868"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 208,
+ "column" : 8,
+ "source_fragment" : "gtpu_udp.sport = 2152"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu_udp", "dport"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0868"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 209,
+ "column" : 8,
+ "source_fragment" : "gtpu_udp.dport = 2152"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu_udp", "len"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len20"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0010"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 210,
+ "column" : 8,
+ "source_fragment" : "gtpu_udp.len = fabric_meta.spgw.ipv4_len ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu_udp", "checksum"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 212,
+ "column" : 8,
+ "source_fragment" : "gtpu_udp.checksum = 0"
+ }
+ },
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "gtpu"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 214,
+ "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" : 215,
+ "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" : 216,
+ "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" : 217,
+ "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" : 218,
+ "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" : 219,
+ "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" : 220,
+ "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" : 221,
+ "column" : 8,
+ "source_fragment" : "gtpu.msgtype = 0xff"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu", "msglen"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_ipv4_len20"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 222,
+ "column" : 8,
+ "source_fragment" : "gtpu.msglen = fabric_meta.spgw.ipv4_len; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["gtpu", "teid"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_teid21"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 223,
+ "column" : 8,
+ "source_fragment" : "gtpu.teid = fabric_meta.spgw.teid; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.pop_mpls_if_present",
+ "id" : 57,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "mpls"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 264,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.setInvalid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._ip_eth_type4"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 266,
+ "column" : 38,
+ "source_fragment" : "= fabric_metadata.ip_eth_type; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.set_mpls",
+ "id" : 58,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "mpls"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 271,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "label"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_label8"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 272,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.label = fabric_metadata.mpls_label; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "tc"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 273,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.tc = 3w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "bos"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 274,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.bos = 1w1"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_ttl9"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 275,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.ttl = fabric_metadata.mpls_ttl; // Decrement after push. ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 108,
+ "column" : 31,
+ "source_fragment" : "0x8847; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.push_vlan",
+ "id" : 59,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "vlan_tag"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 283,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "cfi"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_cfi7"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 284,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "pri"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_pri6"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 285,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "eth_type"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 286,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.eth_type = fabric_metadata.last_eth_type; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "vlan_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 287,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 107,
+ "column" : 31,
+ "source_fragment" : "0x8100; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.pop_vlan",
+ "id" : 60,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._last_eth_type0"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 313,
+ "column" : 8,
+ "source_fragment" : "hdr.ethernet.eth_type = fabric_metadata.last_eth_type; ..."
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "vlan_tag"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 314,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.setInvalid()"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_23",
+ "id" : 61,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "exit",
+ "parameters" : [],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 41,
+ "column" : 12,
+ "source_fragment" : "exit"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_24",
+ "id" : 62,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "packet_in"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 44,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_in.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["packet_in", "ingress_port"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 45,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port"
+ }
+ },
+ {
+ "op" : "exit",
+ "parameters" : [],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 47,
+ "column" : 12,
+ "source_fragment" : "exit"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_25",
+ "id" : 63,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 335,
+ "column" : 12,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_26",
+ "id" : 64,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "egress_next_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_27",
+ "id" : 65,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "egress_next_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_28",
+ "id" : 66,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 368,
+ "column" : 35,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_29",
+ "id" : 67,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 367,
+ "column" : 12,
+ "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_30",
+ "id" : 68,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 372,
+ "column" : 39,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_31",
+ "id" : 69,
+ "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" : 371,
+ "column" : 16,
+ "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1"
+ }
+ }
+ ]
+ }
+ ],
+ "pipelines" : [
+ {
+ "name" : "ingress",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 46,
+ "column" : 8,
+ "source_fragment" : "FabricIngress"
+ },
+ "init_table" : "tbl_act",
+ "tables" : [
+ {
+ "name" : "tbl_act",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 62,
+ "column" : 50,
+ "source_fragment" : "hdr.gtpu_ipv4, hdr.gtpu_udp"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [32],
+ "actions" : ["act_0"],
+ "base_default_next" : "node_3",
+ "next_tables" : {
+ "act_0" : "node_3"
+ },
+ "default_entry" : {
+ "action_id" : 32,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_0",
+ "id" : 1,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 30,
+ "column" : 32,
+ "source_fragment" : "return"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [31],
+ "actions" : ["act"],
+ "base_default_next" : "node_5",
+ "next_tables" : {
+ "act" : "node_5"
+ },
+ "default_entry" : {
+ "action_id" : 31,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_1",
+ "id" : 2,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 31,
+ "column" : 18,
+ "source_fragment" : "= ipv4; ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [35],
+ "actions" : ["act_3"],
+ "base_default_next" : "node_7",
+ "next_tables" : {
+ "act_3" : "node_7"
+ },
+ "default_entry" : {
+ "action_id" : 35,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_2",
+ "id" : 3,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 35,
+ "column" : 16,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [33],
+ "actions" : ["act_1"],
+ "base_default_next" : "node_10",
+ "next_tables" : {
+ "act_1" : "node_10"
+ },
+ "default_entry" : {
+ "action_id" : 33,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_3",
+ "id" : 4,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 37,
+ "column" : 12,
+ "source_fragment" : "udp.setInvalid()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [34],
+ "actions" : ["act_2"],
+ "base_default_next" : "node_10",
+ "next_tables" : {
+ "act_2" : "node_10"
+ },
+ "default_entry" : {
+ "action_id" : 34,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_4",
+ "id" : 5,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 25,
+ "column" : 42,
+ "source_fragment" : "= hdr.packet_out.egress_port; ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [36],
+ "actions" : ["act_4"],
+ "base_default_next" : "node_12",
+ "next_tables" : {
+ "act_4" : "node_12"
+ },
+ "default_entry" : {
+ "action_id" : 36,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_5",
+ "id" : 6,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 110,
+ "column" : 36,
+ "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [37],
+ "actions" : ["act_5"],
+ "base_default_next" : "node_14",
+ "next_tables" : {
+ "act_5" : "node_14"
+ },
+ "default_entry" : {
+ "action_id" : 37,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_6",
+ "id" : 7,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 126,
+ "column" : 37,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [38],
+ "actions" : ["act_6"],
+ "base_default_next" : "node_16",
+ "next_tables" : {
+ "act_6" : "node_16"
+ },
+ "default_entry" : {
+ "action_id" : 38,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_7",
+ "id" : 8,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 131,
+ "column" : 42,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [39],
+ "actions" : ["act_7"],
+ "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+ "next_tables" : {
+ "act_7" : "FabricIngress.filtering.ingress_port_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 39,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_8",
+ "id" : 9,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 136,
+ "column" : 50,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [40],
+ "actions" : ["act_8"],
+ "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+ "next_tables" : {
+ "act_8" : "FabricIngress.filtering.ingress_port_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 40,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_9",
+ "id" : 10,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 139,
+ "column" : 50,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [41],
+ "actions" : ["act_9"],
+ "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+ "next_tables" : {
+ "act_9" : "FabricIngress.filtering.ingress_port_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 41,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_10",
+ "id" : 11,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 141,
+ "column" : 46,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [42],
+ "actions" : ["act_10"],
+ "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+ "next_tables" : {
+ "act_10" : "FabricIngress.filtering.ingress_port_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 42,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.filtering.ingress_port_vlan",
+ "id" : 12,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 53,
+ "column" : 10,
+ "source_fragment" : "ingress_port_vlan"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "vlan_is_valid",
+ "target" : ["vlan_tag", "$valid$"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "vlan_id",
+ "target" : ["vlan_tag", "vlan_id"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "inner_vlan_id",
+ "target" : ["inner_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" : [11, 12, 13],
+ "actions" : ["FabricIngress.filtering.deny", "FabricIngress.filtering.permit", "FabricIngress.filtering.permit_with_internal_vlan"],
+ "base_default_next" : "FabricIngress.filtering.fwd_classifier",
+ "next_tables" : {
+ "FabricIngress.filtering.deny" : "FabricIngress.filtering.fwd_classifier",
+ "FabricIngress.filtering.permit" : "FabricIngress.filtering.fwd_classifier",
+ "FabricIngress.filtering.permit_with_internal_vlan" : "FabricIngress.filtering.fwd_classifier"
+ },
+ "default_entry" : {
+ "action_id" : 11,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.filtering.fwd_classifier",
+ "id" : 13,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 90,
+ "column" : 10,
+ "source_fragment" : "fwd_classifier"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_dst",
+ "target" : ["ethernet", "dst_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "is_ipv4",
+ "target" : ["scalars", "fabric_metadata_t._is_ipv41"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "is_ipv6",
+ "target" : ["scalars", "fabric_metadata_t._is_ipv62"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "is_mpls",
+ "target" : ["scalars", "fabric_metadata_t._is_mpls3"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [14],
+ "actions" : ["FabricIngress.filtering.set_forwarding_type"],
+ "base_default_next" : "tbl_act_11",
+ "next_tables" : {
+ "FabricIngress.filtering.set_forwarding_type" : "tbl_act_11"
+ },
+ "default_entry" : {
+ "action_id" : 14,
+ "action_const" : true,
+ "action_data" : ["0x0"],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_11",
+ "id" : 14,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [51],
+ "actions" : ["act_19"],
+ "base_default_next" : "node_26",
+ "next_tables" : {
+ "act_19" : "node_26"
+ },
+ "default_entry" : {
+ "action_id" : 51,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.spgw_ingress.s1u_filter_table",
+ "id" : 15,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 83,
+ "column" : 10,
+ "source_fragment" : "s1u_filter_table"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "gtp_ipv4_dst",
+ "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" : ["nop"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "__HIT__" : "tbl_act_12",
+ "__MISS__" : "tbl_act_13"
+ },
+ "default_entry" : {
+ "action_id" : 1,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_12",
+ "id" : 16,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [43],
+ "actions" : ["act_11"],
+ "base_default_next" : "node_30",
+ "next_tables" : {
+ "act_11" : "node_30"
+ },
+ "default_entry" : {
+ "action_id" : 43,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_13",
+ "id" : 17,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [44],
+ "actions" : ["act_12"],
+ "base_default_next" : "node_30",
+ "next_tables" : {
+ "act_12" : "node_30"
+ },
+ "default_entry" : {
+ "action_id" : 44,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_14",
+ "id" : 18,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 149,
+ "column" : 16,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [45],
+ "actions" : ["act_13"],
+ "base_default_next" : "tbl_act_15",
+ "next_tables" : {
+ "act_13" : "tbl_act_15"
+ },
+ "default_entry" : {
+ "action_id" : 45,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_15",
+ "id" : 19,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 151,
+ "column" : 39,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [46],
+ "actions" : ["act_14"],
+ "base_default_next" : "tbl_spgw_ingress_gtpu_decap",
+ "next_tables" : {
+ "act_14" : "tbl_spgw_ingress_gtpu_decap"
+ },
+ "default_entry" : {
+ "action_id" : 46,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_spgw_ingress_gtpu_decap",
+ "id" : 20,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 152,
+ "column" : 12,
+ "source_fragment" : "gtpu_decap()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [9],
+ "actions" : ["FabricIngress.spgw_ingress.gtpu_decap"],
+ "base_default_next" : "node_40",
+ "next_tables" : {
+ "FabricIngress.spgw_ingress.gtpu_decap" : "node_40"
+ },
+ "default_entry" : {
+ "action_id" : 9,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.spgw_ingress.dl_sess_lookup",
+ "id" : 21,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 70,
+ "column" : 10,
+ "source_fragment" : "dl_sess_lookup"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "ipv4_dst",
+ "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" : [10, 0],
+ "actions" : ["FabricIngress.spgw_ingress.set_dl_sess_info", "nop"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "__HIT__" : "tbl_act_16",
+ "__MISS__" : "tbl_act_17"
+ },
+ "default_entry" : {
+ "action_id" : 0,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_16",
+ "id" : 22,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [47],
+ "actions" : ["act_15"],
+ "base_default_next" : "node_37",
+ "next_tables" : {
+ "act_15" : "node_37"
+ },
+ "default_entry" : {
+ "action_id" : 47,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_17",
+ "id" : 23,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [48],
+ "actions" : ["act_16"],
+ "base_default_next" : "node_37",
+ "next_tables" : {
+ "act_16" : "node_37"
+ },
+ "default_entry" : {
+ "action_id" : 48,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_18",
+ "id" : 24,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 154,
+ "column" : 39,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [49],
+ "actions" : ["act_17"],
+ "base_default_next" : "node_40",
+ "next_tables" : {
+ "act_17" : "node_40"
+ },
+ "default_entry" : {
+ "action_id" : 49,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_19",
+ "id" : 25,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 156,
+ "column" : 39,
+ "source_fragment" : "= SPGW_DIR_UNKNOWN; ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [50],
+ "actions" : ["act_18"],
+ "base_default_next" : "node_40",
+ "next_tables" : {
+ "act_18" : "node_40"
+ },
+ "default_entry" : {
+ "action_id" : 50,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_20",
+ "id" : 26,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 175,
+ "column" : 34,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [52],
+ "actions" : ["act_20"],
+ "base_default_next" : "node_42",
+ "next_tables" : {
+ "act_20" : "node_42"
+ },
+ "default_entry" : {
+ "action_id" : 52,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.bridging",
+ "id" : 27,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 46,
+ "column" : 10,
+ "source_fragment" : "bridging"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "vlan_id",
+ "target" : ["scalars", "fabric_metadata_t._vlan_id5"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_dst",
+ "target" : ["ethernet", "dst_addr"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [15, 2],
+ "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"],
+ "base_default_next" : "FabricIngress.acl.acl",
+ "next_tables" : {
+ "FabricIngress.forwarding.set_next_id_bridging" : "FabricIngress.acl.acl",
+ "nop" : "FabricIngress.acl.acl"
+ },
+ "default_entry" : {
+ "action_id" : 2,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.mpls",
+ "id" : 28,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 71,
+ "column" : 10,
+ "source_fragment" : "mpls"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "mpls_label",
+ "target" : ["scalars", "fabric_metadata_t._mpls_label8"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [16, 3],
+ "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"],
+ "base_default_next" : "FabricIngress.acl.acl",
+ "next_tables" : {
+ "FabricIngress.forwarding.pop_mpls_and_next" : "FabricIngress.acl.acl",
+ "nop" : "FabricIngress.acl.acl"
+ },
+ "default_entry" : {
+ "action_id" : 3,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.routing_v4",
+ "id" : 29,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 101,
+ "column" : 10,
+ "source_fragment" : "routing_v4"
+ },
+ "key" : [
+ {
+ "match_type" : "lpm",
+ "name" : "ipv4_dst",
+ "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" : [17, 18, 4],
+ "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"],
+ "base_default_next" : "FabricIngress.acl.acl",
+ "next_tables" : {
+ "FabricIngress.forwarding.set_next_id_routing_v4" : "FabricIngress.acl.acl",
+ "FabricIngress.forwarding.nop_routing_v4" : "FabricIngress.acl.acl",
+ "nop" : "FabricIngress.acl.acl"
+ },
+ "default_entry" : {
+ "action_id" : 4,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.acl.acl",
+ "id" : 30,
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 60,
+ "column" : 10,
+ "source_fragment" : "acl"
+ },
+ "key" : [
+ {
+ "match_type" : "ternary",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ip_proto",
+ "target" : ["scalars", "fabric_metadata_t._ip_proto16"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "l4_sport",
+ "target" : ["scalars", "fabric_metadata_t._l4_sport17"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "l4_dport",
+ "target" : ["scalars", "fabric_metadata_t._l4_dport18"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_src",
+ "target" : ["ethernet", "dst_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_dst",
+ "target" : ["ethernet", "src_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "vlan_id",
+ "target" : ["vlan_tag", "vlan_id"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_type",
+ "target" : ["scalars", "fabric_metadata_t._last_eth_type0"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ipv4_src",
+ "target" : ["ipv4", "src_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ipv4_dst",
+ "target" : ["ipv4", "dst_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "icmp_type",
+ "target" : ["icmp", "icmp_type"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "icmp_code",
+ "target" : ["icmp", "icmp_code"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [19, 20, 21, 22, 23],
+ "actions" : ["FabricIngress.acl.set_next_id_acl", "FabricIngress.acl.punt_to_cpu", "FabricIngress.acl.set_clone_session_id", "FabricIngress.acl.drop", "FabricIngress.acl.nop_acl"],
+ "base_default_next" : "node_50",
+ "next_tables" : {
+ "FabricIngress.acl.set_next_id_acl" : "node_50",
+ "FabricIngress.acl.punt_to_cpu" : "node_50",
+ "FabricIngress.acl.set_clone_session_id" : "node_50",
+ "FabricIngress.acl.drop" : "node_50",
+ "FabricIngress.acl.nop_acl" : "node_50"
+ },
+ "default_entry" : {
+ "action_id" : 23,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.next.xconnect",
+ "id" : 31,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 116,
+ "column" : 10,
+ "source_fragment" : "xconnect"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "next_id",
+ "target" : ["scalars", "fabric_metadata_t._next_id13"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [25, 26, 6],
+ "actions" : ["FabricIngress.next.output_xconnect", "FabricIngress.next.set_next_id_xconnect", "nop"],
+ "base_default_next" : "FabricIngress.next.hashed",
+ "next_tables" : {
+ "FabricIngress.next.output_xconnect" : "FabricIngress.next.hashed",
+ "FabricIngress.next.set_next_id_xconnect" : "FabricIngress.next.hashed",
+ "nop" : "FabricIngress.next.hashed"
+ },
+ "default_entry" : {
+ "action_id" : 6,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.next.hashed",
+ "id" : 32,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 196,
+ "column" : 10,
+ "source_fragment" : "hashed"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "next_id",
+ "target" : ["scalars", "fabric_metadata_t._next_id13"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "indirect_ws",
+ "action_profile" : "FabricIngress.next.hashed_selector",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [27, 28, 29, 7],
+ "actions" : ["FabricIngress.next.output_hashed", "FabricIngress.next.routing_hashed", "FabricIngress.next.mpls_routing_hashed", "nop"],
+ "base_default_next" : "FabricIngress.next.multicast",
+ "next_tables" : {
+ "FabricIngress.next.output_hashed" : "FabricIngress.next.multicast",
+ "FabricIngress.next.routing_hashed" : "FabricIngress.next.multicast",
+ "FabricIngress.next.mpls_routing_hashed" : "FabricIngress.next.multicast",
+ "nop" : "FabricIngress.next.multicast"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.multicast",
+ "id" : 33,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 230,
+ "column" : 10,
+ "source_fragment" : "multicast"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "next_id",
+ "target" : ["scalars", "fabric_metadata_t._next_id13"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [30, 8],
+ "actions" : ["FabricIngress.next.set_mcast_group_id", "nop"],
+ "base_default_next" : "FabricIngress.next.next_vlan",
+ "next_tables" : {
+ "FabricIngress.next.set_mcast_group_id" : "FabricIngress.next.next_vlan",
+ "nop" : "FabricIngress.next.next_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 8,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.next.next_vlan",
+ "id" : 34,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 82,
+ "column" : 10,
+ "source_fragment" : "next_vlan"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "next_id",
+ "target" : ["scalars", "fabric_metadata_t._next_id13"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [24, 5],
+ "actions" : ["FabricIngress.next.set_vlan", "nop"],
+ "base_default_next" : "node_55",
+ "next_tables" : {
+ "FabricIngress.next.set_vlan" : "node_55",
+ "nop" : "node_55"
+ },
+ "default_entry" : {
+ "action_id" : 5,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_21",
+ "id" : 35,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 31,
+ "column" : 12,
+ "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [53],
+ "actions" : ["act_21"],
+ "base_default_next" : "node_57",
+ "next_tables" : {
+ "act_21" : "node_57"
+ },
+ "default_entry" : {
+ "action_id" : 53,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_22",
+ "id" : 36,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 34,
+ "column" : 12,
+ "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [54],
+ "actions" : ["act_22"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "act_22" : null
+ },
+ "default_entry" : {
+ "action_id" : 54,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ }
+ ],
+ "action_profiles" : [
+ {
+ "name" : "FabricIngress.next.hashed_selector",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 177,
+ "column" : 57,
+ "source_fragment" : "hashed_selector"
+ },
+ "max_size" : 1024,
+ "selector" : {
+ "algo" : "crc16",
+ "input" : [
+ {
+ "type" : "field",
+ "value" : ["ipv4", "dst_addr"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ipv4", "src_addr"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._ip_proto16"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_sport17"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._l4_dport18"]
+ }
+ ]
+ }
+ }
+ ],
+ "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"]
+ }
+ }
+ }
+ }
+ },
+ "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" : 24,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_out.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["packet_out", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_4",
+ "false_next" : "node_12"
+ },
+ {
+ "name" : "node_12",
+ "id" : 4,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 109,
+ "column" : 12,
+ "source_fragment" : "hdr.vlan_tag.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["vlan_tag", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_5",
+ "false_next" : "node_14"
+ },
+ {
+ "name" : "node_14",
+ "id" : 5,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 121,
+ "column" : 12,
+ "source_fragment" : "!hdr.mpls.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "not",
+ "left" : null,
+ "right" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["mpls", "$valid$"]
+ }
+ }
+ }
+ }
+ },
+ "true_next" : "tbl_act_6",
+ "false_next" : "node_16"
+ },
+ {
+ "name" : "node_16",
+ "id" : 6,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 130,
+ "column" : 12,
+ "source_fragment" : "hdr.mpls.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["mpls", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_7",
+ "false_next" : "node_18"
+ },
+ {
+ "name" : "node_18",
+ "id" : 7,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 133,
+ "column" : 16,
+ "source_fragment" : "hdr.vlan_tag.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["vlan_tag", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "node_19",
+ "false_next" : "tbl_act_10"
+ },
+ {
+ "name" : "node_19",
+ "id" : 8,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 135,
+ "column" : 19,
+ "source_fragment" : "hdr.inner_vlan_tag.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_8",
+ "false_next" : "tbl_act_9"
+ },
+ {
+ "name" : "node_26",
+ "id" : 9,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 144,
+ "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_30",
+ "id" : 10,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 148,
+ "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"]
+ }
+ }
+ }
+ }
+ },
+ "true_next" : "tbl_act_14",
+ "false_next" : "tbl_act_15"
+ },
+ {
+ "name" : "node_37",
+ "id" : 11,
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "spgw_ingress_tmp_0"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_18",
+ "false_next" : "tbl_act_19"
+ },
+ {
+ "name" : "node_40",
+ "id" : 12,
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "not",
+ "left" : null,
+ "right" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "spgw_ingress_hasReturned"]
+ }
+ }
+ }
+ }
+ },
+ "true_next" : "tbl_act_20",
+ "false_next" : "node_42"
+ },
+ {
+ "name" : "node_42",
+ "id" : 13,
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 71,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.skip_forwarding == false"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_forwarding10"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ },
+ "true_next" : "node_43",
+ "false_next" : "FabricIngress.acl.acl"
+ },
+ {
+ "name" : "node_43",
+ "id" : 14,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 141,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.fwd_type == FWD_BRIDGING"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._fwd_type12"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ }
+ },
+ "true_next" : "FabricIngress.forwarding.bridging",
+ "false_next" : "node_45"
+ },
+ {
+ "name" : "node_45",
+ "id" : 15,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 142,
+ "column" : 17,
+ "source_fragment" : "fabric_metadata.fwd_type == FWD_MPLS"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._fwd_type12"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ }
+ },
+ "true_next" : "FabricIngress.forwarding.mpls",
+ "false_next" : "node_47"
+ },
+ {
+ "name" : "node_47",
+ "id" : 16,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 143,
+ "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_type12"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "true_next" : "FabricIngress.forwarding.routing_v4",
+ "false_next" : "FabricIngress.acl.acl"
+ },
+ {
+ "name" : "node_50",
+ "id" : 17,
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 75,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.skip_next == false"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._skip_next11"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ },
+ "false_next" : null,
+ "true_next" : "FabricIngress.next.xconnect"
+ },
+ {
+ "name" : "node_55",
+ "id" : 18,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 30,
+ "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_21",
+ "false_next" : "node_57"
+ },
+ {
+ "name" : "node_57",
+ "id" : 19,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 33,
+ "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"
+ }
+ }
+ },
+ "false_next" : null,
+ "true_next" : "tbl_act_22"
+ }
+ ]
+ },
+ {
+ "name" : "egress",
+ "id" : 1,
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 93,
+ "column" : 8,
+ "source_fragment" : "FabricEgress"
+ },
+ "init_table" : "node_61",
+ "tables" : [
+ {
+ "name" : "tbl_act_23",
+ "id" : 37,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 41,
+ "column" : 12,
+ "source_fragment" : "exit"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [61],
+ "actions" : ["act_23"],
+ "base_default_next" : "node_63",
+ "next_tables" : {
+ "act_23" : "node_63"
+ },
+ "default_entry" : {
+ "action_id" : 61,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_24",
+ "id" : 38,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 44,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_in.setValid(); ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [62],
+ "actions" : ["act_24"],
+ "base_default_next" : "node_65",
+ "next_tables" : {
+ "act_24" : "node_65"
+ },
+ "default_entry" : {
+ "action_id" : 62,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_25",
+ "id" : 39,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 335,
+ "column" : 12,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [63],
+ "actions" : ["act_25"],
+ "base_default_next" : "node_67",
+ "next_tables" : {
+ "act_25" : "node_67"
+ },
+ "default_entry" : {
+ "action_id" : 63,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_egress_next_pop_mpls_if_present",
+ "id" : 40,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 339,
+ "column" : 36,
+ "source_fragment" : "pop_mpls_if_present()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [57],
+ "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"],
+ "base_default_next" : "FabricEgress.egress_next.egress_vlan",
+ "next_tables" : {
+ "FabricEgress.egress_next.pop_mpls_if_present" : "FabricEgress.egress_next.egress_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 57,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_egress_next_set_mpls",
+ "id" : 41,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 341,
+ "column" : 12,
+ "source_fragment" : "set_mpls()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [58],
+ "actions" : ["FabricEgress.egress_next.set_mpls"],
+ "base_default_next" : "FabricEgress.egress_next.egress_vlan",
+ "next_tables" : {
+ "FabricEgress.egress_next.set_mpls" : "FabricEgress.egress_next.egress_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 58,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricEgress.egress_next.egress_vlan",
+ "id" : 42,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 318,
+ "column" : 10,
+ "source_fragment" : "egress_vlan"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "vlan_id",
+ "target" : ["scalars", "fabric_metadata_t._vlan_id5"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "eg_port",
+ "target" : ["standard_metadata", "egress_port"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [60, 55],
+ "actions" : ["FabricEgress.egress_next.pop_vlan", "nop"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "__HIT__" : "tbl_act_26",
+ "__MISS__" : "tbl_act_27"
+ },
+ "default_entry" : {
+ "action_id" : 55,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_26",
+ "id" : 43,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [64],
+ "actions" : ["act_26"],
+ "base_default_next" : "node_74",
+ "next_tables" : {
+ "act_26" : "node_74"
+ },
+ "default_entry" : {
+ "action_id" : 64,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_27",
+ "id" : 44,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [65],
+ "actions" : ["act_27"],
+ "base_default_next" : "node_74",
+ "next_tables" : {
+ "act_27" : "node_74"
+ },
+ "default_entry" : {
+ "action_id" : 65,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_egress_next_push_vlan",
+ "id" : 45,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 358,
+ "column" : 20,
+ "source_fragment" : "push_vlan()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [59],
+ "actions" : ["FabricEgress.egress_next.push_vlan"],
+ "base_default_next" : "node_77",
+ "next_tables" : {
+ "FabricEgress.egress_next.push_vlan" : "node_77"
+ },
+ "default_entry" : {
+ "action_id" : 59,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_28",
+ "id" : 46,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 367,
+ "column" : 25,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [67],
+ "actions" : ["act_29"],
+ "base_default_next" : "node_79",
+ "next_tables" : {
+ "act_29" : "node_79"
+ },
+ "default_entry" : {
+ "action_id" : 67,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_29",
+ "id" : 47,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 368,
+ "column" : 35,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [66],
+ "actions" : ["act_28"],
+ "base_default_next" : "node_85",
+ "next_tables" : {
+ "act_28" : "node_85"
+ },
+ "default_entry" : {
+ "action_id" : 66,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_30",
+ "id" : 48,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 371,
+ "column" : 29,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [69],
+ "actions" : ["act_31"],
+ "base_default_next" : "node_83",
+ "next_tables" : {
+ "act_31" : "node_83"
+ },
+ "default_entry" : {
+ "action_id" : 69,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_31",
+ "id" : 49,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 372,
+ "column" : 39,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [68],
+ "actions" : ["act_30"],
+ "base_default_next" : "node_85",
+ "next_tables" : {
+ "act_30" : "node_85"
+ },
+ "default_entry" : {
+ "action_id" : 68,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_spgw_egress_gtpu_encap",
+ "id" : 50,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 228,
+ "column" : 12,
+ "source_fragment" : "gtpu_encap()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [56],
+ "actions" : ["FabricEgress.spgw_egress.gtpu_encap"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "FabricEgress.spgw_egress.gtpu_encap" : null
+ },
+ "default_entry" : {
+ "action_id" : 56,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ }
+ ],
+ "action_profiles" : [],
+ "conditionals" : [
+ {
+ "name" : "node_61",
+ "id" : 20,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 39,
+ "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_out15"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ },
+ "true_next" : "tbl_act_23",
+ "false_next" : "node_63"
+ },
+ {
+ "name" : "node_63",
+ "id" : 21,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 43,
+ "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" : "tbl_act_24",
+ "false_next" : "node_65"
+ },
+ {
+ "name" : "node_65",
+ "id" : 22,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 333,
+ "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_multicast14"]
+ }
+ }
+ },
+ "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_act_25",
+ "false_next" : "node_67"
+ },
+ {
+ "name" : "node_67",
+ "id" : 23,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 338,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.mpls_label == 0"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._mpls_label8"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ }
+ },
+ "true_next" : "node_68",
+ "false_next" : "tbl_egress_next_set_mpls"
+ },
+ {
+ "name" : "node_68",
+ "id" : 24,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 339,
+ "column" : 16,
+ "source_fragment" : "hdr.mpls.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["mpls", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_egress_next_pop_mpls_if_present",
+ "false_next" : "FabricEgress.egress_next.egress_vlan"
+ },
+ {
+ "name" : "node_74",
+ "id" : 25,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 355,
+ "column" : 16,
+ "source_fragment" : "!egress_vlan.apply().hit"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "not",
+ "left" : null,
+ "right" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "egress_next_tmp"]
+ }
+ }
+ }
+ }
+ },
+ "true_next" : "node_75",
+ "false_next" : "node_77"
+ },
+ {
+ "name" : "node_75",
+ "id" : 26,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 357,
+ "column" : 20,
+ "source_fragment" : "fabric_metadata.vlan_id != DEFAULT_VLAN_ID"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "!=",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._vlan_id5"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0ffe"
+ }
+ }
+ },
+ "true_next" : "tbl_egress_next_push_vlan",
+ "false_next" : "node_77"
+ },
+ {
+ "name" : "node_77",
+ "id" : 27,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 366,
+ "column" : 12,
+ "source_fragment" : "hdr.mpls.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["mpls", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_28",
+ "false_next" : "node_81"
+ },
+ {
+ "name" : "node_79",
+ "id" : 28,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 368,
+ "column" : 16,
+ "source_fragment" : "hdr.mpls.ttl == 0"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ }
+ },
+ "true_next" : "tbl_act_29",
+ "false_next" : "node_85"
+ },
+ {
+ "name" : "node_81",
+ "id" : 29,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 370,
+ "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_30",
+ "false_next" : "node_85"
+ },
+ {
+ "name" : "node_83",
+ "id" : 30,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 372,
+ "column" : 20,
+ "source_fragment" : "hdr.ipv4.ttl == 0"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["ipv4", "ttl"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ }
+ },
+ "true_next" : "tbl_act_31",
+ "false_next" : "node_85"
+ },
+ {
+ "name" : "node_85",
+ "id" : 31,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 227,
+ "column" : 12,
+ "source_fragment" : "fabric_meta.spgw.direction == SPGW_DIR_DOWNLINK"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t._spgw_direction19"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x02"
+ }
+ }
+ },
+ "false_next" : null,
+ "true_next" : "tbl_spgw_egress_gtpu_encap"
+ }
+ ]
+ }
+ ],
+ "checksums" : [
+ {
+ "name" : "cksum",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "include/checksum.p4",
+ "line" : 28,
+ "column" : 8,
+ "source_fragment" : "update_checksum(hdr.ipv4.isValid(), ..."
+ },
+ "target" : ["ipv4", "hdr_checksum"],
+ "type" : "generic",
+ "calculation" : "calc",
+ "verify" : false,
+ "update" : true,
+ "if_cond" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["ipv4", "$valid$"]
+ }
+ }
+ }
+ },
+ {
+ "name" : "cksum_0",
+ "id" : 1,
+ "source_info" : {
+ "filename" : "include/spgw.p4",
+ "line" : 243,
+ "column" : 8,
+ "source_fragment" : "update_checksum(gtpu_ipv4.isValid(), ..."
+ },
+ "target" : ["gtpu_ipv4", "hdr_checksum"],
+ "type" : "generic",
+ "calculation" : "calc_0",
+ "verify" : false,
+ "update" : true,
+ "if_cond" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["gtpu_ipv4", "$valid$"]
+ }
+ }
+ }
+ },
+ {
+ "name" : "cksum_1",
+ "id" : 2,
+ "source_info" : {
+ "filename" : "include/checksum.p4",
+ "line" : 57,
+ "column" : 8,
+ "source_fragment" : "verify_checksum(hdr.ipv4.isValid(), ..."
+ },
+ "target" : ["ipv4", "hdr_checksum"],
+ "type" : "generic",
+ "calculation" : "calc_1",
+ "verify" : true,
+ "update" : false,
+ "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"]
+ ],
+ [
+ "intrinsic_metadata.priority",
+ ["standard_metadata", "priority"]
+ ]
+ ],
+ "program" : "fabric.p4",
+ "__meta__" : {
+ "version" : [2, 18],
+ "compiler" : "https://github.com/p4lang/p4c"
+ }
+}
\ No newline at end of file
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/cpu_port.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/cpu_port.txt
new file mode 100644
index 0000000..ace9d03
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/cpu_port.txt
@@ -0,0 +1 @@
+255
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt
new file mode 100644
index 0000000..2fca1c0
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric-spgw/bmv2/default/p4info.txt
@@ -0,0 +1,925 @@
+pkg_info {
+ arch: "v1model"
+}
+tables {
+ preamble {
+ id: 33582731
+ name: "FabricIngress.spgw_ingress.dl_sess_lookup"
+ alias: "dl_sess_lookup"
+ }
+ match_fields {
+ id: 1
+ name: "ipv4_dst"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16804065
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318781522
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33615906
+ name: "FabricIngress.spgw_ingress.s1u_filter_table"
+ alias: "s1u_filter_table"
+ }
+ match_fields {
+ id: 1
+ name: "gtp_ipv4_dst"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16819938
+ }
+ const_default_action_id: 16819938
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33611649
+ name: "FabricIngress.filtering.ingress_port_vlan"
+ alias: "ingress_port_vlan"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "vlan_is_valid"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ match_fields {
+ id: 3
+ name: "vlan_id"
+ bitwidth: 12
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 4
+ name: "inner_vlan_id"
+ bitwidth: 12
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16836487
+ }
+ action_refs {
+ id: 16818236
+ }
+ action_refs {
+ id: 16794911
+ }
+ const_default_action_id: 16836487
+ direct_resource_ids: 318815501
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33596298
+ name: "FabricIngress.filtering.fwd_classifier"
+ alias: "fwd_classifier"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "eth_dst"
+ bitwidth: 48
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 3
+ name: "is_ipv4"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ match_fields {
+ id: 4
+ name: "is_ipv6"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ match_fields {
+ id: 5
+ name: "is_mpls"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16840921
+ }
+ const_default_action_id: 16840921
+ direct_resource_ids: 318827326
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33596749
+ name: "FabricIngress.forwarding.bridging"
+ alias: "bridging"
+ }
+ match_fields {
+ id: 1
+ name: "vlan_id"
+ bitwidth: 12
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "eth_dst"
+ bitwidth: 48
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16811012
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318770289
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33574274
+ name: "FabricIngress.forwarding.mpls"
+ alias: "mpls"
+ }
+ match_fields {
+ id: 1
+ name: "mpls_label"
+ bitwidth: 20
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16827758
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318830507
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33562650
+ name: "FabricIngress.forwarding.routing_v4"
+ alias: "routing_v4"
+ }
+ match_fields {
+ id: 1
+ name: "ipv4_dst"
+ bitwidth: 32
+ match_type: LPM
+ }
+ action_refs {
+ id: 16777434
+ }
+ action_refs {
+ id: 16804187
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318811107
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33618978
+ name: "FabricIngress.acl.acl"
+ alias: "acl"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 2
+ name: "ip_proto"
+ bitwidth: 8
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 3
+ name: "l4_sport"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 4
+ name: "l4_dport"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 5
+ name: "eth_src"
+ bitwidth: 48
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 6
+ name: "eth_dst"
+ bitwidth: 48
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 7
+ name: "vlan_id"
+ bitwidth: 12
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 8
+ name: "eth_type"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 9
+ name: "ipv4_src"
+ bitwidth: 32
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 10
+ name: "ipv4_dst"
+ bitwidth: 32
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 11
+ name: "icmp_type"
+ bitwidth: 8
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 12
+ name: "icmp_code"
+ bitwidth: 8
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16807382
+ }
+ action_refs {
+ id: 16829684
+ }
+ action_refs {
+ id: 16781601
+ }
+ action_refs {
+ id: 16820765
+ }
+ action_refs {
+ id: 16827694
+ }
+ const_default_action_id: 16827694
+ direct_resource_ids: 318801025
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33599709
+ name: "FabricIngress.next.next_vlan"
+ alias: "next_vlan"
+ }
+ match_fields {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16790685
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318768144
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33596977
+ name: "FabricIngress.next.xconnect"
+ alias: "xconnect"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "next_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16842190
+ }
+ action_refs {
+ id: 16837052
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318778156
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33608588
+ name: "FabricIngress.next.hashed"
+ alias: "hashed"
+ }
+ match_fields {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16815357
+ }
+ action_refs {
+ id: 16791402
+ }
+ action_refs {
+ id: 16779255
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ implementation_id: 285217164
+ direct_resource_ids: 318800532
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33606828
+ name: "FabricIngress.next.multicast"
+ alias: "multicast"
+ }
+ match_fields {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16779917
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318801752
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33599342
+ name: "FabricEgress.egress_next.egress_vlan"
+ alias: "egress_vlan"
+ }
+ match_fields {
+ id: 1
+ name: "vlan_id"
+ bitwidth: 12
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "eg_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16790030
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318827144
+ size: 1024
+}
+actions {
+ preamble {
+ id: 16819938
+ name: "nop"
+ alias: "nop"
+ }
+}
+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: 16836487
+ name: "FabricIngress.filtering.deny"
+ alias: "deny"
+ }
+}
+actions {
+ preamble {
+ id: 16818236
+ name: "FabricIngress.filtering.permit"
+ alias: "permit"
+ }
+}
+actions {
+ preamble {
+ id: 16794911
+ name: "FabricIngress.filtering.permit_with_internal_vlan"
+ alias: "permit_with_internal_vlan"
+ }
+ params {
+ id: 1
+ name: "vlan_id"
+ bitwidth: 12
+ }
+}
+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: 16807382
+ name: "FabricIngress.acl.set_next_id_acl"
+ alias: "set_next_id_acl"
+ }
+ params {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ }
+}
+actions {
+ preamble {
+ id: 16829684
+ name: "FabricIngress.acl.punt_to_cpu"
+ alias: "punt_to_cpu"
+ }
+}
+actions {
+ preamble {
+ id: 16781601
+ name: "FabricIngress.acl.set_clone_session_id"
+ alias: "set_clone_session_id"
+ }
+ params {
+ id: 1
+ name: "clone_id"
+ bitwidth: 32
+ }
+}
+actions {
+ preamble {
+ id: 16820765
+ name: "FabricIngress.acl.drop"
+ alias: "drop"
+ }
+}
+actions {
+ preamble {
+ id: 16827694
+ name: "FabricIngress.acl.nop_acl"
+ alias: "nop_acl"
+ }
+}
+actions {
+ preamble {
+ id: 16790685
+ name: "FabricIngress.next.set_vlan"
+ alias: "set_vlan"
+ }
+ params {
+ id: 1
+ name: "vlan_id"
+ bitwidth: 12
+ }
+}
+actions {
+ preamble {
+ id: 16842190
+ name: "FabricIngress.next.output_xconnect"
+ alias: "output_xconnect"
+ }
+ params {
+ id: 1
+ name: "port_num"
+ bitwidth: 9
+ }
+}
+actions {
+ preamble {
+ id: 16837052
+ name: "FabricIngress.next.set_next_id_xconnect"
+ alias: "set_next_id_xconnect"
+ }
+ params {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ }
+}
+actions {
+ preamble {
+ id: 16815357
+ name: "FabricIngress.next.output_hashed"
+ alias: "output_hashed"
+ }
+ params {
+ id: 1
+ name: "port_num"
+ bitwidth: 9
+ }
+}
+actions {
+ preamble {
+ id: 16791402
+ name: "FabricIngress.next.routing_hashed"
+ alias: "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: 16779255
+ name: "FabricIngress.next.mpls_routing_hashed"
+ alias: "mpls_routing_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: 16779917
+ name: "FabricIngress.next.set_mcast_group_id"
+ alias: "set_mcast_group_id"
+ }
+ params {
+ id: 1
+ name: "group_id"
+ bitwidth: 16
+ }
+}
+actions {
+ preamble {
+ id: 16790030
+ name: "FabricEgress.egress_next.pop_vlan"
+ alias: "pop_vlan"
+ }
+}
+action_profiles {
+ preamble {
+ id: 285217164
+ name: "FabricIngress.next.hashed_selector"
+ alias: "hashed_selector"
+ }
+ table_ids: 33608588
+ with_selector: true
+ size: 1024
+ max_group_size: 16
+}
+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: 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: 318801025
+ name: "FabricIngress.acl.acl_counter"
+ alias: "acl_counter"
+ }
+ spec {
+ unit: BOTH
+ }
+ direct_table_id: 33618978
+}
+direct_counters {
+ preamble {
+ id: 318768144
+ name: "FabricIngress.next.next_vlan_counter"
+ alias: "next_vlan_counter"
+ }
+ spec {
+ unit: BOTH
+ }
+ direct_table_id: 33599709
+}
+direct_counters {
+ preamble {
+ id: 318778156
+ name: "FabricIngress.next.xconnect_counter"
+ alias: "xconnect_counter"
+ }
+ spec {
+ unit: BOTH
+ }
+ direct_table_id: 33596977
+}
+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: 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"
+ alias: "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"
+ alias: "packet_out"
+ annotations: "@controller_header(\"packet_out\")"
+ }
+ metadata {
+ id: 1
+ name: "egress_port"
+ bitwidth: 9
+ }
+ metadata {
+ id: 2
+ name: "_pad"
+ bitwidth: 7
+ }
+}
+type_info {
+}
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json
new file mode 100644
index 0000000..a51ce3a
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json
@@ -0,0 +1,4963 @@
+{
+ "header_types" : [
+ {
+ "name" : "scalars_0",
+ "id" : 0,
+ "fields" : [
+ ["tmp_0", 4, false],
+ ["tmp", 32, false],
+ ["tmp_1", 32, false],
+ ["egress_next_tmp", 1, false],
+ ["fabric_metadata_t.last_eth_type", 16, false],
+ ["fabric_metadata_t.is_ipv4", 1, false],
+ ["fabric_metadata_t.is_ipv6", 1, false],
+ ["fabric_metadata_t.is_mpls", 1, false],
+ ["fabric_metadata_t.ip_eth_type", 16, false],
+ ["fabric_metadata_t.vlan_id", 12, false],
+ ["fabric_metadata_t.vlan_pri", 3, false],
+ ["fabric_metadata_t.vlan_cfi", 1, false],
+ ["fabric_metadata_t.mpls_label", 20, false],
+ ["fabric_metadata_t.mpls_ttl", 8, false],
+ ["fabric_metadata_t.skip_forwarding", 1, false],
+ ["fabric_metadata_t.skip_next", 1, false],
+ ["fabric_metadata_t.fwd_type", 3, false],
+ ["fabric_metadata_t.next_id", 32, false],
+ ["fabric_metadata_t.is_multicast", 1, false],
+ ["fabric_metadata_t.is_controller_packet_out", 1, false],
+ ["fabric_metadata_t.ip_proto", 8, false],
+ ["fabric_metadata_t.l4_sport", 16, false],
+ ["fabric_metadata_t.l4_dport", 16, false],
+ ["_padding_0", 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],
+ ["recirculate_flag", 32, false],
+ ["checksum_error", 1, false],
+ ["parser_error", 32, false],
+ ["priority", 3, false],
+ ["_padding", 2, false]
+ ]
+ },
+ {
+ "name" : "ethernet_t",
+ "id" : 2,
+ "fields" : [
+ ["dst_addr", 48, false],
+ ["src_addr", 48, false],
+ ["eth_type", 16, false]
+ ]
+ },
+ {
+ "name" : "vlan_tag_t",
+ "id" : 3,
+ "fields" : [
+ ["pri", 3, false],
+ ["cfi", 1, false],
+ ["vlan_id", 12, false],
+ ["eth_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" : "tcp_t",
+ "id" : 6,
+ "fields" : [
+ ["sport", 16, false],
+ ["dport", 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" : "udp_t",
+ "id" : 7,
+ "fields" : [
+ ["sport", 16, false],
+ ["dport", 16, false],
+ ["len", 16, false],
+ ["checksum", 16, false]
+ ]
+ },
+ {
+ "name" : "icmp_t",
+ "id" : 8,
+ "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" : 9,
+ "fields" : [
+ ["egress_port", 9, false],
+ ["_pad", 7, false]
+ ]
+ },
+ {
+ "name" : "packet_in_header_t",
+ "id" : 10,
+ "fields" : [
+ ["ingress_port", 9, false],
+ ["_pad", 7, 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" : "inner_vlan_tag",
+ "id" : 4,
+ "header_type" : "vlan_tag_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "mpls",
+ "id" : 5,
+ "header_type" : "mpls_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "ipv4",
+ "id" : 6,
+ "header_type" : "ipv4_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "tcp",
+ "id" : 7,
+ "header_type" : "tcp_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "udp",
+ "id" : 8,
+ "header_type" : "udp_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "icmp",
+ "id" : 9,
+ "header_type" : "icmp_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "packet_out",
+ "id" : 10,
+ "header_type" : "packet_out_header_t",
+ "metadata" : false,
+ "pi_omit" : true
+ },
+ {
+ "name" : "packet_in",
+ "id" : 11,
+ "header_type" : "packet_in_header_t",
+ "metadata" : false,
+ "pi_omit" : true
+ }
+ ],
+ "header_stacks" : [],
+ "header_union_types" : [],
+ "header_unions" : [],
+ "header_union_stacks" : [],
+ "field_lists" : [
+ {
+ "id" : 1,
+ "name" : "fl",
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 46,
+ "column" : 40,
+ "source_fragment" : "{standard_metadata.ingress_port}"
+ },
+ "elements" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ }
+ ]
+ }
+ ],
+ "errors" : [
+ ["NoError", 1],
+ ["PacketTooShort", 2],
+ ["NoMatch", 3],
+ ["StackOutOfBounds", 4],
+ ["HeaderTooShort", 5],
+ ["ParserTimeout", 6],
+ ["ParserInvalidArgument", 7]
+ ],
+ "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"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.last_eth_type"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.vlan_id"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0ffe"
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x88a8",
+ "mask" : null,
+ "next_state" : "parse_vlan_tag"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x9100",
+ "mask" : null,
+ "next_state" : "parse_vlan_tag"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100",
+ "mask" : null,
+ "next_state" : "parse_vlan_tag"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847",
+ "mask" : null,
+ "next_state" : "parse_mpls"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0800",
+ "mask" : null,
+ "next_state" : "pre_parse_ipv4"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_vlan_tag",
+ "id" : 3,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "vlan_tag"
+ }
+ ],
+ "op" : "extract"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x0800",
+ "mask" : null,
+ "next_state" : "pre_parse_ipv4"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847",
+ "mask" : null,
+ "next_state" : "parse_mpls"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100",
+ "mask" : null,
+ "next_state" : "parse_inner_vlan_tag"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "eth_type"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_inner_vlan_tag",
+ "id" : 4,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "inner_vlan_tag"
+ }
+ ],
+ "op" : "extract"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x0800",
+ "mask" : null,
+ "next_state" : "pre_parse_ipv4"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847",
+ "mask" : null,
+ "next_state" : "parse_mpls"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "eth_type"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_mpls",
+ "id" : 5,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "mpls"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.is_mpls"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.mpls_label"]
+ },
+ {
+ "type" : "field",
+ "value" : ["mpls", "label"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.mpls_ttl"]
+ },
+ {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp_0"]
+ },
+ {
+ "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_0"]
+ }
+ ]
+ },
+ {
+ "name" : "pre_parse_ipv4",
+ "id" : 6,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.is_ipv4"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : "parse_ipv4"
+ }
+ ],
+ "transition_key" : []
+ },
+ {
+ "name" : "parse_ipv4",
+ "id" : 7,
+ "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", "fabric_metadata_t.ip_eth_type"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x0800"
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "type" : "hexstr",
+ "value" : "0x06",
+ "mask" : null,
+ "next_state" : "parse_tcp"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x11",
+ "mask" : null,
+ "next_state" : "parse_udp"
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x01",
+ "mask" : null,
+ "next_state" : "parse_icmp"
+ },
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["ipv4", "protocol"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_tcp",
+ "id" : 8,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "tcp"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.l4_sport"]
+ },
+ {
+ "type" : "field",
+ "value" : ["tcp", "sport"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.l4_dport"]
+ },
+ {
+ "type" : "field",
+ "value" : ["tcp", "dport"]
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : []
+ },
+ {
+ "name" : "parse_udp",
+ "id" : 9,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "udp"
+ }
+ ],
+ "op" : "extract"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.l4_sport"]
+ },
+ {
+ "type" : "field",
+ "value" : ["udp", "sport"]
+ }
+ ],
+ "op" : "set"
+ },
+ {
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.l4_dport"]
+ },
+ {
+ "type" : "field",
+ "value" : ["udp", "dport"]
+ }
+ ],
+ "op" : "set"
+ }
+ ],
+ "transitions" : [
+ {
+ "value" : "default",
+ "mask" : null,
+ "next_state" : null
+ }
+ ],
+ "transition_key" : [
+ {
+ "type" : "field",
+ "value" : ["udp", "dport"]
+ }
+ ]
+ },
+ {
+ "name" : "parse_icmp",
+ "id" : 10,
+ "parser_ops" : [
+ {
+ "parameters" : [
+ {
+ "type" : "regular",
+ "value" : "icmp"
+ }
+ ],
+ "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" : 276,
+ "column" : 8,
+ "source_fragment" : "FabricDeparser"
+ },
+ "order" : ["packet_in", "ethernet", "vlan_tag", "inner_vlan_tag", "mpls", "ipv4", "tcp", "udp", "icmp"]
+ }
+ ],
+ "meter_arrays" : [],
+ "counter_arrays" : [
+ {
+ "name" : "FabricIngress.filtering.ingress_port_vlan_counter",
+ "id" : 0,
+ "is_direct" : true,
+ "binding" : "FabricIngress.filtering.ingress_port_vlan",
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 31,
+ "column" : 50,
+ "source_fragment" : "ingress_port_vlan_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.filtering.fwd_classifier_counter",
+ "id" : 1,
+ "is_direct" : true,
+ "binding" : "FabricIngress.filtering.fwd_classifier",
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 83,
+ "column" : 50,
+ "source_fragment" : "fwd_classifier_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.bridging_counter",
+ "id" : 2,
+ "is_direct" : true,
+ "binding" : "FabricIngress.forwarding.bridging",
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 36,
+ "column" : 50,
+ "source_fragment" : "bridging_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.mpls_counter",
+ "id" : 3,
+ "is_direct" : true,
+ "binding" : "FabricIngress.forwarding.mpls",
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 63,
+ "column" : 50,
+ "source_fragment" : "mpls_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.routing_v4_counter",
+ "id" : 4,
+ "is_direct" : true,
+ "binding" : "FabricIngress.forwarding.routing_v4",
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 87,
+ "column" : 50,
+ "source_fragment" : "routing_v4_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.acl.acl_counter",
+ "id" : 5,
+ "is_direct" : true,
+ "binding" : "FabricIngress.acl.acl",
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 30,
+ "column" : 50,
+ "source_fragment" : "acl_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.next_vlan_counter",
+ "id" : 6,
+ "is_direct" : true,
+ "binding" : "FabricIngress.next.next_vlan",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 67,
+ "column" : 50,
+ "source_fragment" : "next_vlan_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.xconnect_counter",
+ "id" : 7,
+ "is_direct" : true,
+ "binding" : "FabricIngress.next.xconnect",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 103,
+ "column" : 50,
+ "source_fragment" : "xconnect_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.hashed_counter",
+ "id" : 8,
+ "is_direct" : true,
+ "binding" : "FabricIngress.next.hashed",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 178,
+ "column" : 50,
+ "source_fragment" : "hashed_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.multicast_counter",
+ "id" : 9,
+ "is_direct" : true,
+ "binding" : "FabricIngress.next.multicast",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 222,
+ "column" : 50,
+ "source_fragment" : "multicast_counter"
+ }
+ },
+ {
+ "name" : "FabricIngress.port_counters_control.egress_port_counter",
+ "id" : 10,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 26,
+ "column" : 48,
+ "source_fragment" : "egress_port_counter"
+ },
+ "size" : 511,
+ "is_direct" : false
+ },
+ {
+ "name" : "FabricIngress.port_counters_control.ingress_port_counter",
+ "id" : 11,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 27,
+ "column" : 48,
+ "source_fragment" : "ingress_port_counter"
+ },
+ "size" : 511,
+ "is_direct" : false
+ },
+ {
+ "name" : "FabricEgress.egress_next.egress_vlan_counter",
+ "id" : 12,
+ "is_direct" : true,
+ "binding" : "FabricEgress.egress_next.egress_vlan",
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 310,
+ "column" : 50,
+ "source_fragment" : "egress_vlan_counter"
+ }
+ }
+ ],
+ "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/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" : "nop",
+ "id" : 0,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 1,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 2,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 3,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 4,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 5,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "nop",
+ "id" : 6,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.filtering.deny",
+ "id" : 7,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.skip_forwarding"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 36,
+ "column" : 8,
+ "source_fragment" : "fabric_metadata.skip_forwarding = true"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.skip_next"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 37,
+ "column" : 8,
+ "source_fragment" : "fabric_metadata.skip_next = true"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.filtering.permit",
+ "id" : 8,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.filtering.permit_with_internal_vlan",
+ "id" : 9,
+ "runtime_data" : [
+ {
+ "name" : "vlan_id",
+ "bitwidth" : 12
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.vlan_id"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 47,
+ "column" : 8,
+ "source_fragment" : "fabric_metadata.vlan_id = vlan_id"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.filtering.set_forwarding_type",
+ "id" : 10,
+ "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" : 86,
+ "column" : 8,
+ "source_fragment" : "fabric_metadata.fwd_type = fwd_type"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.forwarding.set_next_id_bridging",
+ "id" : 11,
+ "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" : 30,
+ "column" : 8,
+ "source_fragment" : "fabric_metadata.next_id = next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.forwarding.pop_mpls_and_next",
+ "id" : 12,
+ "runtime_data" : [
+ {
+ "name" : "next_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.mpls_label"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 66,
+ "column" : 8,
+ "source_fragment" : "fabric_metadata.mpls_label = 0"
+ }
+ },
+ {
+ "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" : 30,
+ "column" : 8,
+ "source_fragment" : "fabric_metadata.next_id = next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.forwarding.set_next_id_routing_v4",
+ "id" : 13,
+ "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" : 30,
+ "column" : 8,
+ "source_fragment" : "fabric_metadata.next_id = next_id; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.forwarding.nop_routing_v4",
+ "id" : 14,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.acl.set_next_id_acl",
+ "id" : 15,
+ "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/acl.p4",
+ "line" : 33,
+ "column" : 8,
+ "source_fragment" : "fabric_metadata.next_id = next_id"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.punt_to_cpu",
+ "id" : 16,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_spec"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00ff"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 39,
+ "column" : 8,
+ "source_fragment" : "standard_metadata.egress_spec = 255"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.skip_next"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 40,
+ "column" : 8,
+ "source_fragment" : "fabric_metadata.skip_next = true"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.set_clone_session_id",
+ "id" : 17,
+ "runtime_data" : [
+ {
+ "name" : "clone_id",
+ "bitwidth" : 32
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "clone_ingress_pkt_to_egress",
+ "parameters" : [
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x1"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 46,
+ "column" : 8,
+ "source_fragment" : "clone3(CloneType.I2E, clone_id, {standard_metadata.ingress_port})"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.drop",
+ "id" : 18,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 51,
+ "column" : 8,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.skip_next"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 52,
+ "column" : 8,
+ "source_fragment" : "fabric_metadata.skip_next = true"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.acl.nop_acl",
+ "id" : 19,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricIngress.next.set_vlan",
+ "id" : 20,
+ "runtime_data" : [
+ {
+ "name" : "vlan_id",
+ "bitwidth" : 12
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.vlan_id"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 70,
+ "column" : 8,
+ "source_fragment" : "fabric_metadata.vlan_id = vlan_id"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.output_xconnect",
+ "id" : 21,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.last_eth_type"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 107,
+ "column" : 31,
+ "source_fragment" : "0x8100; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.set_next_id_xconnect",
+ "id" : 22,
+ "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/next.p4",
+ "line" : 112,
+ "column" : 8,
+ "source_fragment" : "fabric_metadata.next_id = next_id"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.output_hashed",
+ "id" : 23,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.routing_hashed",
+ "id" : 24,
+ "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" : 36,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.mpls_routing_hashed",
+ "id" : 25,
+ "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" : ["scalars", "fabric_metadata_t.mpls_label"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 3
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 46,
+ "column" : 8,
+ "source_fragment" : "fabric_metadata.mpls_label = label; ..."
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "src_addr"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 1
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 36,
+ "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" : 31,
+ "column" : 5,
+ "source_fragment" : "standard_metadata.egress_spec = port_num; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricIngress.next.set_mcast_group_id",
+ "id" : 26,
+ "runtime_data" : [
+ {
+ "name" : "group_id",
+ "bitwidth" : 16
+ }
+ ],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "mcast_grp"]
+ },
+ {
+ "type" : "runtime_data",
+ "value" : 0
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 225,
+ "column" : 8,
+ "source_fragment" : "standard_metadata.mcast_grp = group_id"
+ }
+ },
+ {
+ "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" : 226,
+ "column" : 8,
+ "source_fragment" : "fabric_metadata.is_multicast = true"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act",
+ "id" : 27,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_spec"]
+ },
+ {
+ "type" : "field",
+ "value" : ["packet_out", "egress_port"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 25,
+ "column" : 12,
+ "source_fragment" : "standard_metadata.egress_spec = hdr.packet_out.egress_port"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "packet_out"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 26,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_out.setInvalid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "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" : 27,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.is_controller_packet_out = true"
+ }
+ },
+ {
+ "op" : "exit",
+ "parameters" : [],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 29,
+ "column" : 12,
+ "source_fragment" : "exit"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_0",
+ "id" : 28,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.vlan_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "vlan_id"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 110,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.vlan_id = hdr.vlan_tag.vlan_id"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.vlan_pri"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "pri"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 111,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.vlan_pri = hdr.vlan_tag.pri"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.vlan_cfi"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "cfi"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 112,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.vlan_cfi = hdr.vlan_tag.cfi"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_1",
+ "id" : 29,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.mpls_ttl"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x41"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 126,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.mpls_ttl = DEFAULT_MPLS_TTL + 1"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_2",
+ "id" : 30,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.last_eth_type"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 108,
+ "column" : 31,
+ "source_fragment" : "0x8847; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_3",
+ "id" : 31,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.last_eth_type"]
+ },
+ {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "eth_type"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 136,
+ "column" : 20,
+ "source_fragment" : "fabric_metadata.last_eth_type = hdr.inner_vlan_tag.eth_type"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_4",
+ "id" : 32,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.last_eth_type"]
+ },
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "eth_type"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 139,
+ "column" : 20,
+ "source_fragment" : "fabric_metadata.last_eth_type = hdr.vlan_tag.eth_type"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_5",
+ "id" : 33,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.last_eth_type"]
+ },
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 141,
+ "column" : 16,
+ "source_fragment" : "fabric_metadata.last_eth_type = hdr.ethernet.eth_type"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_6",
+ "id" : 34,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_spec"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 31,
+ "column" : 38,
+ "source_fragment" : "(bit<32>)standard_metadata.egress_spec"
+ }
+ },
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricIngress.port_counters_control.egress_port_counter"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 31,
+ "column" : 12,
+ "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_7",
+ "id" : 35,
+ "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", "ingress_port"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xffffffff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 34,
+ "column" : 39,
+ "source_fragment" : "(bit<32>)standard_metadata.ingress_port"
+ }
+ },
+ {
+ "op" : "count",
+ "parameters" : [
+ {
+ "type" : "counter_array",
+ "value" : "FabricIngress.port_counters_control.ingress_port_counter"
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "tmp_1"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 34,
+ "column" : 12,
+ "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "nop",
+ "id" : 36,
+ "runtime_data" : [],
+ "primitives" : []
+ },
+ {
+ "name" : "FabricEgress.egress_next.pop_mpls_if_present",
+ "id" : 37,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "mpls"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 264,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.setInvalid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.last_eth_type"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.ip_eth_type"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 266,
+ "column" : 8,
+ "source_fragment" : "fabric_metadata.last_eth_type = fabric_metadata.ip_eth_type"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.set_mpls",
+ "id" : 38,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "mpls"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 271,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "label"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.mpls_label"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 272,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.label = fabric_metadata.mpls_label"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "tc"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 273,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.tc = 3w0"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "bos"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x01"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 274,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.bos = 1w1"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.mpls_ttl"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 275,
+ "column" : 8,
+ "source_fragment" : "hdr.mpls.ttl = fabric_metadata.mpls_ttl"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.last_eth_type"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8847"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 108,
+ "column" : 31,
+ "source_fragment" : "0x8847; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.push_vlan",
+ "id" : 39,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "vlan_tag"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 283,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "cfi"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.vlan_cfi"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 284,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.cfi = fabric_metadata.vlan_cfi"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "pri"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.vlan_pri"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 285,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.pri = fabric_metadata.vlan_pri"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "eth_type"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.last_eth_type"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 286,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.eth_type = fabric_metadata.last_eth_type"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["vlan_tag", "vlan_id"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.vlan_id"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 287,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_metadata.vlan_id"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ },
+ {
+ "type" : "hexstr",
+ "value" : "0x8100"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/../define.p4",
+ "line" : 107,
+ "column" : 31,
+ "source_fragment" : "0x8100; ..."
+ }
+ }
+ ]
+ },
+ {
+ "name" : "FabricEgress.egress_next.pop_vlan",
+ "id" : 40,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["ethernet", "eth_type"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.last_eth_type"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 313,
+ "column" : 8,
+ "source_fragment" : "hdr.ethernet.eth_type = fabric_metadata.last_eth_type"
+ }
+ },
+ {
+ "op" : "remove_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "vlan_tag"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 314,
+ "column" : 8,
+ "source_fragment" : "hdr.vlan_tag.setInvalid()"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_8",
+ "id" : 41,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "exit",
+ "parameters" : [],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 41,
+ "column" : 12,
+ "source_fragment" : "exit"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_9",
+ "id" : 42,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "add_header",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "packet_in"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 44,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_in.setValid()"
+ }
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["packet_in", "ingress_port"]
+ },
+ {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 45,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port"
+ }
+ },
+ {
+ "op" : "exit",
+ "parameters" : [],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 47,
+ "column" : 12,
+ "source_fragment" : "exit"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_10",
+ "id" : 43,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 335,
+ "column" : 12,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_11",
+ "id" : 44,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "egress_next_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_12",
+ "id" : 45,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "egress_next_tmp"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name" : "act_13",
+ "id" : 46,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 368,
+ "column" : 35,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_14",
+ "id" : 47,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "&",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "+",
+ "left" : {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0xff"
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 367,
+ "column" : 12,
+ "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_15",
+ "id" : 48,
+ "runtime_data" : [],
+ "primitives" : [
+ {
+ "op" : "mark_to_drop",
+ "parameters" : [
+ {
+ "type" : "header",
+ "value" : "standard_metadata"
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 372,
+ "column" : 39,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ }
+ }
+ ]
+ },
+ {
+ "name" : "act_16",
+ "id" : 49,
+ "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" : 371,
+ "column" : 16,
+ "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1"
+ }
+ }
+ ]
+ }
+ ],
+ "pipelines" : [
+ {
+ "name" : "ingress",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 46,
+ "column" : 8,
+ "source_fragment" : "FabricIngress"
+ },
+ "init_table" : "node_2",
+ "tables" : [
+ {
+ "name" : "tbl_act",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 25,
+ "column" : 42,
+ "source_fragment" : "= hdr.packet_out.egress_port; ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [27],
+ "actions" : ["act"],
+ "base_default_next" : "node_4",
+ "next_tables" : {
+ "act" : "node_4"
+ },
+ "default_entry" : {
+ "action_id" : 27,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_0",
+ "id" : 1,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 110,
+ "column" : 36,
+ "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [28],
+ "actions" : ["act_0"],
+ "base_default_next" : "node_6",
+ "next_tables" : {
+ "act_0" : "node_6"
+ },
+ "default_entry" : {
+ "action_id" : 28,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_1",
+ "id" : 2,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 126,
+ "column" : 37,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [29],
+ "actions" : ["act_1"],
+ "base_default_next" : "node_8",
+ "next_tables" : {
+ "act_1" : "node_8"
+ },
+ "default_entry" : {
+ "action_id" : 29,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_2",
+ "id" : 3,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 131,
+ "column" : 42,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [30],
+ "actions" : ["act_2"],
+ "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+ "next_tables" : {
+ "act_2" : "FabricIngress.filtering.ingress_port_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 30,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_3",
+ "id" : 4,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 136,
+ "column" : 50,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [31],
+ "actions" : ["act_3"],
+ "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+ "next_tables" : {
+ "act_3" : "FabricIngress.filtering.ingress_port_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 31,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_4",
+ "id" : 5,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 139,
+ "column" : 50,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [32],
+ "actions" : ["act_4"],
+ "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+ "next_tables" : {
+ "act_4" : "FabricIngress.filtering.ingress_port_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 32,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_5",
+ "id" : 6,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 141,
+ "column" : 46,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [33],
+ "actions" : ["act_5"],
+ "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+ "next_tables" : {
+ "act_5" : "FabricIngress.filtering.ingress_port_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 33,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.filtering.ingress_port_vlan",
+ "id" : 7,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 53,
+ "column" : 10,
+ "source_fragment" : "ingress_port_vlan"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "vlan_is_valid",
+ "target" : ["vlan_tag", "$valid$"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "vlan_id",
+ "target" : ["vlan_tag", "vlan_id"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "inner_vlan_id",
+ "target" : ["inner_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" : [7, 8, 9],
+ "actions" : ["FabricIngress.filtering.deny", "FabricIngress.filtering.permit", "FabricIngress.filtering.permit_with_internal_vlan"],
+ "base_default_next" : "FabricIngress.filtering.fwd_classifier",
+ "next_tables" : {
+ "FabricIngress.filtering.deny" : "FabricIngress.filtering.fwd_classifier",
+ "FabricIngress.filtering.permit" : "FabricIngress.filtering.fwd_classifier",
+ "FabricIngress.filtering.permit_with_internal_vlan" : "FabricIngress.filtering.fwd_classifier"
+ },
+ "default_entry" : {
+ "action_id" : 7,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.filtering.fwd_classifier",
+ "id" : 8,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 90,
+ "column" : 10,
+ "source_fragment" : "fwd_classifier"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_dst",
+ "target" : ["ethernet", "dst_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "is_ipv4",
+ "target" : ["scalars", "fabric_metadata_t.is_ipv4"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "is_ipv6",
+ "target" : ["scalars", "fabric_metadata_t.is_ipv6"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "is_mpls",
+ "target" : ["scalars", "fabric_metadata_t.is_mpls"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [10],
+ "actions" : ["FabricIngress.filtering.set_forwarding_type"],
+ "base_default_next" : "node_17",
+ "next_tables" : {
+ "FabricIngress.filtering.set_forwarding_type" : "node_17"
+ },
+ "default_entry" : {
+ "action_id" : 10,
+ "action_const" : true,
+ "action_data" : ["0x0"],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.bridging",
+ "id" : 9,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 46,
+ "column" : 10,
+ "source_fragment" : "bridging"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "vlan_id",
+ "target" : ["scalars", "fabric_metadata_t.vlan_id"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_dst",
+ "target" : ["ethernet", "dst_addr"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [11, 0],
+ "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "nop"],
+ "base_default_next" : "FabricIngress.acl.acl",
+ "next_tables" : {
+ "FabricIngress.forwarding.set_next_id_bridging" : "FabricIngress.acl.acl",
+ "nop" : "FabricIngress.acl.acl"
+ },
+ "default_entry" : {
+ "action_id" : 0,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.mpls",
+ "id" : 10,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 71,
+ "column" : 10,
+ "source_fragment" : "mpls"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "mpls_label",
+ "target" : ["scalars", "fabric_metadata_t.mpls_label"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [12, 1],
+ "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "nop"],
+ "base_default_next" : "FabricIngress.acl.acl",
+ "next_tables" : {
+ "FabricIngress.forwarding.pop_mpls_and_next" : "FabricIngress.acl.acl",
+ "nop" : "FabricIngress.acl.acl"
+ },
+ "default_entry" : {
+ "action_id" : 1,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.forwarding.routing_v4",
+ "id" : 11,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 101,
+ "column" : 10,
+ "source_fragment" : "routing_v4"
+ },
+ "key" : [
+ {
+ "match_type" : "lpm",
+ "name" : "ipv4_dst",
+ "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" : [13, 14, 2],
+ "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "nop"],
+ "base_default_next" : "FabricIngress.acl.acl",
+ "next_tables" : {
+ "FabricIngress.forwarding.set_next_id_routing_v4" : "FabricIngress.acl.acl",
+ "FabricIngress.forwarding.nop_routing_v4" : "FabricIngress.acl.acl",
+ "nop" : "FabricIngress.acl.acl"
+ },
+ "default_entry" : {
+ "action_id" : 2,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.acl.acl",
+ "id" : 12,
+ "source_info" : {
+ "filename" : "include/control/acl.p4",
+ "line" : 60,
+ "column" : 10,
+ "source_fragment" : "acl"
+ },
+ "key" : [
+ {
+ "match_type" : "ternary",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ip_proto",
+ "target" : ["scalars", "fabric_metadata_t.ip_proto"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "l4_sport",
+ "target" : ["scalars", "fabric_metadata_t.l4_sport"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "l4_dport",
+ "target" : ["scalars", "fabric_metadata_t.l4_dport"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_src",
+ "target" : ["ethernet", "dst_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_dst",
+ "target" : ["ethernet", "src_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "vlan_id",
+ "target" : ["vlan_tag", "vlan_id"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "eth_type",
+ "target" : ["scalars", "fabric_metadata_t.last_eth_type"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ipv4_src",
+ "target" : ["ipv4", "src_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "ipv4_dst",
+ "target" : ["ipv4", "dst_addr"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "icmp_type",
+ "target" : ["icmp", "icmp_type"],
+ "mask" : null
+ },
+ {
+ "match_type" : "ternary",
+ "name" : "icmp_code",
+ "target" : ["icmp", "icmp_code"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "ternary",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [15, 16, 17, 18, 19],
+ "actions" : ["FabricIngress.acl.set_next_id_acl", "FabricIngress.acl.punt_to_cpu", "FabricIngress.acl.set_clone_session_id", "FabricIngress.acl.drop", "FabricIngress.acl.nop_acl"],
+ "base_default_next" : "node_25",
+ "next_tables" : {
+ "FabricIngress.acl.set_next_id_acl" : "node_25",
+ "FabricIngress.acl.punt_to_cpu" : "node_25",
+ "FabricIngress.acl.set_clone_session_id" : "node_25",
+ "FabricIngress.acl.drop" : "node_25",
+ "FabricIngress.acl.nop_acl" : "node_25"
+ },
+ "default_entry" : {
+ "action_id" : 19,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.next.xconnect",
+ "id" : 13,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 116,
+ "column" : 10,
+ "source_fragment" : "xconnect"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "ig_port",
+ "target" : ["standard_metadata", "ingress_port"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "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" : [21, 22, 4],
+ "actions" : ["FabricIngress.next.output_xconnect", "FabricIngress.next.set_next_id_xconnect", "nop"],
+ "base_default_next" : "FabricIngress.next.hashed",
+ "next_tables" : {
+ "FabricIngress.next.output_xconnect" : "FabricIngress.next.hashed",
+ "FabricIngress.next.set_next_id_xconnect" : "FabricIngress.next.hashed",
+ "nop" : "FabricIngress.next.hashed"
+ },
+ "default_entry" : {
+ "action_id" : 4,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.next.hashed",
+ "id" : 14,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 196,
+ "column" : 10,
+ "source_fragment" : "hashed"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "next_id",
+ "target" : ["scalars", "fabric_metadata_t.next_id"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "indirect_ws",
+ "action_profile" : "FabricIngress.next.hashed_selector",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [23, 24, 25, 5],
+ "actions" : ["FabricIngress.next.output_hashed", "FabricIngress.next.routing_hashed", "FabricIngress.next.mpls_routing_hashed", "nop"],
+ "base_default_next" : "FabricIngress.next.multicast",
+ "next_tables" : {
+ "FabricIngress.next.output_hashed" : "FabricIngress.next.multicast",
+ "FabricIngress.next.routing_hashed" : "FabricIngress.next.multicast",
+ "FabricIngress.next.mpls_routing_hashed" : "FabricIngress.next.multicast",
+ "nop" : "FabricIngress.next.multicast"
+ }
+ },
+ {
+ "name" : "FabricIngress.next.multicast",
+ "id" : 15,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 230,
+ "column" : 10,
+ "source_fragment" : "multicast"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "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" : [26, 6],
+ "actions" : ["FabricIngress.next.set_mcast_group_id", "nop"],
+ "base_default_next" : "FabricIngress.next.next_vlan",
+ "next_tables" : {
+ "FabricIngress.next.set_mcast_group_id" : "FabricIngress.next.next_vlan",
+ "nop" : "FabricIngress.next.next_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 6,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricIngress.next.next_vlan",
+ "id" : 16,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 82,
+ "column" : 10,
+ "source_fragment" : "next_vlan"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "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" : [20, 3],
+ "actions" : ["FabricIngress.next.set_vlan", "nop"],
+ "base_default_next" : "node_30",
+ "next_tables" : {
+ "FabricIngress.next.set_vlan" : "node_30",
+ "nop" : "node_30"
+ },
+ "default_entry" : {
+ "action_id" : 3,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_6",
+ "id" : 17,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 31,
+ "column" : 12,
+ "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [34],
+ "actions" : ["act_6"],
+ "base_default_next" : "node_32",
+ "next_tables" : {
+ "act_6" : "node_32"
+ },
+ "default_entry" : {
+ "action_id" : 34,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_7",
+ "id" : 18,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 34,
+ "column" : 12,
+ "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [35],
+ "actions" : ["act_7"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "act_7" : null
+ },
+ "default_entry" : {
+ "action_id" : 35,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ }
+ ],
+ "action_profiles" : [
+ {
+ "name" : "FabricIngress.next.hashed_selector",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 177,
+ "column" : 57,
+ "source_fragment" : "hashed_selector"
+ },
+ "max_size" : 1024,
+ "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_sport"]
+ },
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.l4_dport"]
+ }
+ ]
+ }
+ }
+ ],
+ "conditionals" : [
+ {
+ "name" : "node_2",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 24,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_out.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["packet_out", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act",
+ "false_next" : "node_4"
+ },
+ {
+ "name" : "node_4",
+ "id" : 1,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 109,
+ "column" : 12,
+ "source_fragment" : "hdr.vlan_tag.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["vlan_tag", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_0",
+ "false_next" : "node_6"
+ },
+ {
+ "name" : "node_6",
+ "id" : 2,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 121,
+ "column" : 12,
+ "source_fragment" : "!hdr.mpls.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "not",
+ "left" : null,
+ "right" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["mpls", "$valid$"]
+ }
+ }
+ }
+ }
+ },
+ "true_next" : "tbl_act_1",
+ "false_next" : "node_8"
+ },
+ {
+ "name" : "node_8",
+ "id" : 3,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 130,
+ "column" : 12,
+ "source_fragment" : "hdr.mpls.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["mpls", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_2",
+ "false_next" : "node_10"
+ },
+ {
+ "name" : "node_10",
+ "id" : 4,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 133,
+ "column" : 16,
+ "source_fragment" : "hdr.vlan_tag.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["vlan_tag", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "node_11",
+ "false_next" : "tbl_act_5"
+ },
+ {
+ "name" : "node_11",
+ "id" : 5,
+ "source_info" : {
+ "filename" : "include/control/filtering.p4",
+ "line" : 135,
+ "column" : 19,
+ "source_fragment" : "hdr.inner_vlan_tag.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["inner_vlan_tag", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_3",
+ "false_next" : "tbl_act_4"
+ },
+ {
+ "name" : "node_17",
+ "id" : 6,
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 71,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.skip_forwarding == false"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.skip_forwarding"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ },
+ "true_next" : "node_18",
+ "false_next" : "FabricIngress.acl.acl"
+ },
+ {
+ "name" : "node_18",
+ "id" : 7,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 141,
+ "column" : 12,
+ "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_20"
+ },
+ {
+ "name" : "node_20",
+ "id" : 8,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 142,
+ "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_22"
+ },
+ {
+ "name" : "node_22",
+ "id" : 9,
+ "source_info" : {
+ "filename" : "include/control/forwarding.p4",
+ "line" : 143,
+ "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.acl.acl"
+ },
+ {
+ "name" : "node_25",
+ "id" : 10,
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 75,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.skip_next == false"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.skip_next"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : false
+ }
+ }
+ },
+ "false_next" : null,
+ "true_next" : "FabricIngress.next.xconnect"
+ },
+ {
+ "name" : "node_30",
+ "id" : 11,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 30,
+ "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_6",
+ "false_next" : "node_32"
+ },
+ {
+ "name" : "node_32",
+ "id" : 12,
+ "source_info" : {
+ "filename" : "include/control/port_counter.p4",
+ "line" : 33,
+ "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"
+ }
+ }
+ },
+ "false_next" : null,
+ "true_next" : "tbl_act_7"
+ }
+ ]
+ },
+ {
+ "name" : "egress",
+ "id" : 1,
+ "source_info" : {
+ "filename" : "fabric.p4",
+ "line" : 93,
+ "column" : 8,
+ "source_fragment" : "FabricEgress"
+ },
+ "init_table" : "node_36",
+ "tables" : [
+ {
+ "name" : "tbl_act_8",
+ "id" : 19,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 41,
+ "column" : 12,
+ "source_fragment" : "exit"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [41],
+ "actions" : ["act_8"],
+ "base_default_next" : "node_38",
+ "next_tables" : {
+ "act_8" : "node_38"
+ },
+ "default_entry" : {
+ "action_id" : 41,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_9",
+ "id" : 20,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 44,
+ "column" : 12,
+ "source_fragment" : "hdr.packet_in.setValid(); ..."
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [42],
+ "actions" : ["act_9"],
+ "base_default_next" : "node_40",
+ "next_tables" : {
+ "act_9" : "node_40"
+ },
+ "default_entry" : {
+ "action_id" : 42,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_10",
+ "id" : 21,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 335,
+ "column" : 12,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [43],
+ "actions" : ["act_10"],
+ "base_default_next" : "node_42",
+ "next_tables" : {
+ "act_10" : "node_42"
+ },
+ "default_entry" : {
+ "action_id" : 43,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_egress_next_pop_mpls_if_present",
+ "id" : 22,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 339,
+ "column" : 36,
+ "source_fragment" : "pop_mpls_if_present()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [37],
+ "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"],
+ "base_default_next" : "FabricEgress.egress_next.egress_vlan",
+ "next_tables" : {
+ "FabricEgress.egress_next.pop_mpls_if_present" : "FabricEgress.egress_next.egress_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 37,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_egress_next_set_mpls",
+ "id" : 23,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 341,
+ "column" : 12,
+ "source_fragment" : "set_mpls()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [38],
+ "actions" : ["FabricEgress.egress_next.set_mpls"],
+ "base_default_next" : "FabricEgress.egress_next.egress_vlan",
+ "next_tables" : {
+ "FabricEgress.egress_next.set_mpls" : "FabricEgress.egress_next.egress_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 38,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "FabricEgress.egress_next.egress_vlan",
+ "id" : 24,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 318,
+ "column" : 10,
+ "source_fragment" : "egress_vlan"
+ },
+ "key" : [
+ {
+ "match_type" : "exact",
+ "name" : "vlan_id",
+ "target" : ["scalars", "fabric_metadata_t.vlan_id"],
+ "mask" : null
+ },
+ {
+ "match_type" : "exact",
+ "name" : "eg_port",
+ "target" : ["standard_metadata", "egress_port"],
+ "mask" : null
+ }
+ ],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : true,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [40, 36],
+ "actions" : ["FabricEgress.egress_next.pop_vlan", "nop"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "__HIT__" : "tbl_act_11",
+ "__MISS__" : "tbl_act_12"
+ },
+ "default_entry" : {
+ "action_id" : 36,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_11",
+ "id" : 25,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [44],
+ "actions" : ["act_11"],
+ "base_default_next" : "node_49",
+ "next_tables" : {
+ "act_11" : "node_49"
+ },
+ "default_entry" : {
+ "action_id" : 44,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_12",
+ "id" : 26,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [45],
+ "actions" : ["act_12"],
+ "base_default_next" : "node_49",
+ "next_tables" : {
+ "act_12" : "node_49"
+ },
+ "default_entry" : {
+ "action_id" : 45,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_egress_next_push_vlan",
+ "id" : 27,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 358,
+ "column" : 20,
+ "source_fragment" : "push_vlan()"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [39],
+ "actions" : ["FabricEgress.egress_next.push_vlan"],
+ "base_default_next" : "node_52",
+ "next_tables" : {
+ "FabricEgress.egress_next.push_vlan" : "node_52"
+ },
+ "default_entry" : {
+ "action_id" : 39,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_13",
+ "id" : 28,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 367,
+ "column" : 25,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [47],
+ "actions" : ["act_14"],
+ "base_default_next" : "node_54",
+ "next_tables" : {
+ "act_14" : "node_54"
+ },
+ "default_entry" : {
+ "action_id" : 47,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_14",
+ "id" : 29,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 368,
+ "column" : 35,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [46],
+ "actions" : ["act_13"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "act_13" : null
+ },
+ "default_entry" : {
+ "action_id" : 46,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_15",
+ "id" : 30,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 371,
+ "column" : 29,
+ "source_fragment" : "="
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [49],
+ "actions" : ["act_16"],
+ "base_default_next" : "node_58",
+ "next_tables" : {
+ "act_16" : "node_58"
+ },
+ "default_entry" : {
+ "action_id" : 49,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_act_16",
+ "id" : 31,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 372,
+ "column" : 39,
+ "source_fragment" : "mark_to_drop(standard_metadata)"
+ },
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [48],
+ "actions" : ["act_15"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "act_15" : null
+ },
+ "default_entry" : {
+ "action_id" : 48,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ }
+ ],
+ "action_profiles" : [],
+ "conditionals" : [
+ {
+ "name" : "node_36",
+ "id" : 13,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 39,
+ "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" : "tbl_act_8",
+ "false_next" : "node_38"
+ },
+ {
+ "name" : "node_38",
+ "id" : 14,
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 43,
+ "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" : "tbl_act_9",
+ "false_next" : "node_40"
+ },
+ {
+ "name" : "node_40",
+ "id" : 15,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 333,
+ "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_act_10",
+ "false_next" : "node_42"
+ },
+ {
+ "name" : "node_42",
+ "id" : 16,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 338,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.mpls_label == 0"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.mpls_label"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x000000"
+ }
+ }
+ },
+ "true_next" : "node_43",
+ "false_next" : "tbl_egress_next_set_mpls"
+ },
+ {
+ "name" : "node_43",
+ "id" : 17,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 339,
+ "column" : 16,
+ "source_fragment" : "hdr.mpls.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["mpls", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_egress_next_pop_mpls_if_present",
+ "false_next" : "FabricEgress.egress_next.egress_vlan"
+ },
+ {
+ "name" : "node_49",
+ "id" : 18,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 355,
+ "column" : 16,
+ "source_fragment" : "!egress_vlan.apply().hit"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "not",
+ "left" : null,
+ "right" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "egress_next_tmp"]
+ }
+ }
+ }
+ }
+ },
+ "true_next" : "node_50",
+ "false_next" : "node_52"
+ },
+ {
+ "name" : "node_50",
+ "id" : 19,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 357,
+ "column" : 20,
+ "source_fragment" : "fabric_metadata.vlan_id != DEFAULT_VLAN_ID"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "!=",
+ "left" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.vlan_id"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x0ffe"
+ }
+ }
+ },
+ "true_next" : "tbl_egress_next_push_vlan",
+ "false_next" : "node_52"
+ },
+ {
+ "name" : "node_52",
+ "id" : 20,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 366,
+ "column" : 12,
+ "source_fragment" : "hdr.mpls.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["mpls", "$valid$"]
+ }
+ }
+ },
+ "true_next" : "tbl_act_13",
+ "false_next" : "node_56"
+ },
+ {
+ "name" : "node_54",
+ "id" : 21,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 368,
+ "column" : 16,
+ "source_fragment" : "hdr.mpls.ttl == 0"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["mpls", "ttl"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ }
+ },
+ "false_next" : null,
+ "true_next" : "tbl_act_14"
+ },
+ {
+ "name" : "node_56",
+ "id" : 22,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 370,
+ "column" : 15,
+ "source_fragment" : "hdr.ipv4.isValid()"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["ipv4", "$valid$"]
+ }
+ }
+ },
+ "false_next" : null,
+ "true_next" : "tbl_act_15"
+ },
+ {
+ "name" : "node_58",
+ "id" : 23,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 372,
+ "column" : 20,
+ "source_fragment" : "hdr.ipv4.ttl == 0"
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["ipv4", "ttl"]
+ },
+ "right" : {
+ "type" : "hexstr",
+ "value" : "0x00"
+ }
+ }
+ },
+ "false_next" : null,
+ "true_next" : "tbl_act_16"
+ }
+ ]
+ }
+ ],
+ "checksums" : [
+ {
+ "name" : "cksum",
+ "id" : 0,
+ "source_info" : {
+ "filename" : "include/checksum.p4",
+ "line" : 28,
+ "column" : 8,
+ "source_fragment" : "update_checksum(hdr.ipv4.isValid(), ..."
+ },
+ "target" : ["ipv4", "hdr_checksum"],
+ "type" : "generic",
+ "calculation" : "calc",
+ "verify" : false,
+ "update" : true,
+ "if_cond" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["ipv4", "$valid$"]
+ }
+ }
+ }
+ },
+ {
+ "name" : "cksum_0",
+ "id" : 1,
+ "source_info" : {
+ "filename" : "include/checksum.p4",
+ "line" : 57,
+ "column" : 8,
+ "source_fragment" : "verify_checksum(hdr.ipv4.isValid(), ..."
+ },
+ "target" : ["ipv4", "hdr_checksum"],
+ "type" : "generic",
+ "calculation" : "calc_0",
+ "verify" : true,
+ "update" : false,
+ "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"]
+ ],
+ [
+ "intrinsic_metadata.priority",
+ ["standard_metadata", "priority"]
+ ]
+ ],
+ "program" : "fabric.p4",
+ "__meta__" : {
+ "version" : [2, 18],
+ "compiler" : "https://github.com/p4lang/p4c"
+ }
+}
\ No newline at end of file
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/cpu_port.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/cpu_port.txt
new file mode 100644
index 0000000..ace9d03
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/cpu_port.txt
@@ -0,0 +1 @@
+255
diff --git a/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/p4info.txt b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/p4info.txt
new file mode 100644
index 0000000..8d074ae
--- /dev/null
+++ b/pipelines/fabric/impl/src/main/resources/p4c-out/fabric/bmv2/default/p4info.txt
@@ -0,0 +1,850 @@
+pkg_info {
+ arch: "v1model"
+}
+tables {
+ preamble {
+ id: 33611649
+ name: "FabricIngress.filtering.ingress_port_vlan"
+ alias: "ingress_port_vlan"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "vlan_is_valid"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ match_fields {
+ id: 3
+ name: "vlan_id"
+ bitwidth: 12
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 4
+ name: "inner_vlan_id"
+ bitwidth: 12
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16836487
+ }
+ action_refs {
+ id: 16818236
+ }
+ action_refs {
+ id: 16794911
+ }
+ const_default_action_id: 16836487
+ direct_resource_ids: 318815501
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33596298
+ name: "FabricIngress.filtering.fwd_classifier"
+ alias: "fwd_classifier"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "eth_dst"
+ bitwidth: 48
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 3
+ name: "is_ipv4"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ match_fields {
+ id: 4
+ name: "is_ipv6"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ match_fields {
+ id: 5
+ name: "is_mpls"
+ bitwidth: 1
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16840921
+ }
+ const_default_action_id: 16840921
+ direct_resource_ids: 318827326
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33596749
+ name: "FabricIngress.forwarding.bridging"
+ alias: "bridging"
+ }
+ match_fields {
+ id: 1
+ name: "vlan_id"
+ bitwidth: 12
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "eth_dst"
+ bitwidth: 48
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16811012
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318770289
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33574274
+ name: "FabricIngress.forwarding.mpls"
+ alias: "mpls"
+ }
+ match_fields {
+ id: 1
+ name: "mpls_label"
+ bitwidth: 20
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16827758
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318830507
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33562650
+ name: "FabricIngress.forwarding.routing_v4"
+ alias: "routing_v4"
+ }
+ match_fields {
+ id: 1
+ name: "ipv4_dst"
+ bitwidth: 32
+ match_type: LPM
+ }
+ action_refs {
+ id: 16777434
+ }
+ action_refs {
+ id: 16804187
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318811107
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33618978
+ name: "FabricIngress.acl.acl"
+ alias: "acl"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 2
+ name: "ip_proto"
+ bitwidth: 8
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 3
+ name: "l4_sport"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 4
+ name: "l4_dport"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 5
+ name: "eth_src"
+ bitwidth: 48
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 6
+ name: "eth_dst"
+ bitwidth: 48
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 7
+ name: "vlan_id"
+ bitwidth: 12
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 8
+ name: "eth_type"
+ bitwidth: 16
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 9
+ name: "ipv4_src"
+ bitwidth: 32
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 10
+ name: "ipv4_dst"
+ bitwidth: 32
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 11
+ name: "icmp_type"
+ bitwidth: 8
+ match_type: TERNARY
+ }
+ match_fields {
+ id: 12
+ name: "icmp_code"
+ bitwidth: 8
+ match_type: TERNARY
+ }
+ action_refs {
+ id: 16807382
+ }
+ action_refs {
+ id: 16829684
+ }
+ action_refs {
+ id: 16781601
+ }
+ action_refs {
+ id: 16820765
+ }
+ action_refs {
+ id: 16827694
+ }
+ const_default_action_id: 16827694
+ direct_resource_ids: 318801025
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33599709
+ name: "FabricIngress.next.next_vlan"
+ alias: "next_vlan"
+ }
+ match_fields {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16790685
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318768144
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33596977
+ name: "FabricIngress.next.xconnect"
+ alias: "xconnect"
+ }
+ match_fields {
+ id: 1
+ name: "ig_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "next_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16842190
+ }
+ action_refs {
+ id: 16837052
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318778156
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33608588
+ name: "FabricIngress.next.hashed"
+ alias: "hashed"
+ }
+ match_fields {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16815357
+ }
+ action_refs {
+ id: 16791402
+ }
+ action_refs {
+ id: 16779255
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ implementation_id: 285217164
+ direct_resource_ids: 318800532
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33606828
+ name: "FabricIngress.next.multicast"
+ alias: "multicast"
+ }
+ match_fields {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16779917
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318801752
+ size: 1024
+}
+tables {
+ preamble {
+ id: 33599342
+ name: "FabricEgress.egress_next.egress_vlan"
+ alias: "egress_vlan"
+ }
+ match_fields {
+ id: 1
+ name: "vlan_id"
+ bitwidth: 12
+ match_type: EXACT
+ }
+ match_fields {
+ id: 2
+ name: "eg_port"
+ bitwidth: 9
+ match_type: EXACT
+ }
+ action_refs {
+ id: 16790030
+ }
+ action_refs {
+ id: 16819938
+ annotations: "@defaultonly"
+ scope: DEFAULT_ONLY
+ }
+ const_default_action_id: 16819938
+ direct_resource_ids: 318827144
+ size: 1024
+}
+actions {
+ preamble {
+ id: 16819938
+ name: "nop"
+ alias: "nop"
+ }
+}
+actions {
+ preamble {
+ id: 16836487
+ name: "FabricIngress.filtering.deny"
+ alias: "deny"
+ }
+}
+actions {
+ preamble {
+ id: 16818236
+ name: "FabricIngress.filtering.permit"
+ alias: "permit"
+ }
+}
+actions {
+ preamble {
+ id: 16794911
+ name: "FabricIngress.filtering.permit_with_internal_vlan"
+ alias: "permit_with_internal_vlan"
+ }
+ params {
+ id: 1
+ name: "vlan_id"
+ bitwidth: 12
+ }
+}
+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: 16807382
+ name: "FabricIngress.acl.set_next_id_acl"
+ alias: "set_next_id_acl"
+ }
+ params {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ }
+}
+actions {
+ preamble {
+ id: 16829684
+ name: "FabricIngress.acl.punt_to_cpu"
+ alias: "punt_to_cpu"
+ }
+}
+actions {
+ preamble {
+ id: 16781601
+ name: "FabricIngress.acl.set_clone_session_id"
+ alias: "set_clone_session_id"
+ }
+ params {
+ id: 1
+ name: "clone_id"
+ bitwidth: 32
+ }
+}
+actions {
+ preamble {
+ id: 16820765
+ name: "FabricIngress.acl.drop"
+ alias: "drop"
+ }
+}
+actions {
+ preamble {
+ id: 16827694
+ name: "FabricIngress.acl.nop_acl"
+ alias: "nop_acl"
+ }
+}
+actions {
+ preamble {
+ id: 16790685
+ name: "FabricIngress.next.set_vlan"
+ alias: "set_vlan"
+ }
+ params {
+ id: 1
+ name: "vlan_id"
+ bitwidth: 12
+ }
+}
+actions {
+ preamble {
+ id: 16842190
+ name: "FabricIngress.next.output_xconnect"
+ alias: "output_xconnect"
+ }
+ params {
+ id: 1
+ name: "port_num"
+ bitwidth: 9
+ }
+}
+actions {
+ preamble {
+ id: 16837052
+ name: "FabricIngress.next.set_next_id_xconnect"
+ alias: "set_next_id_xconnect"
+ }
+ params {
+ id: 1
+ name: "next_id"
+ bitwidth: 32
+ }
+}
+actions {
+ preamble {
+ id: 16815357
+ name: "FabricIngress.next.output_hashed"
+ alias: "output_hashed"
+ }
+ params {
+ id: 1
+ name: "port_num"
+ bitwidth: 9
+ }
+}
+actions {
+ preamble {
+ id: 16791402
+ name: "FabricIngress.next.routing_hashed"
+ alias: "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: 16779255
+ name: "FabricIngress.next.mpls_routing_hashed"
+ alias: "mpls_routing_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: 16779917
+ name: "FabricIngress.next.set_mcast_group_id"
+ alias: "set_mcast_group_id"
+ }
+ params {
+ id: 1
+ name: "group_id"
+ bitwidth: 16
+ }
+}
+actions {
+ preamble {
+ id: 16790030
+ name: "FabricEgress.egress_next.pop_vlan"
+ alias: "pop_vlan"
+ }
+}
+action_profiles {
+ preamble {
+ id: 285217164
+ name: "FabricIngress.next.hashed_selector"
+ alias: "hashed_selector"
+ }
+ table_ids: 33608588
+ with_selector: true
+ size: 1024
+ max_group_size: 16
+}
+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: 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: 318801025
+ name: "FabricIngress.acl.acl_counter"
+ alias: "acl_counter"
+ }
+ spec {
+ unit: BOTH
+ }
+ direct_table_id: 33618978
+}
+direct_counters {
+ preamble {
+ id: 318768144
+ name: "FabricIngress.next.next_vlan_counter"
+ alias: "next_vlan_counter"
+ }
+ spec {
+ unit: BOTH
+ }
+ direct_table_id: 33599709
+}
+direct_counters {
+ preamble {
+ id: 318778156
+ name: "FabricIngress.next.xconnect_counter"
+ alias: "xconnect_counter"
+ }
+ spec {
+ unit: BOTH
+ }
+ direct_table_id: 33596977
+}
+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: 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"
+ alias: "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"
+ alias: "packet_out"
+ annotations: "@controller_header(\"packet_out\")"
+ }
+ metadata {
+ id: 1
+ name: "egress_port"
+ bitwidth: 9
+ }
+ metadata {
+ id: 2
+ name: "_pad"
+ bitwidth: 7
+ }
+}
+type_info {
+}
diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreterTest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreterTest.java
new file mode 100644
index 0000000..a0e6194
--- /dev/null
+++ b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricInterpreterTest.java
@@ -0,0 +1,213 @@
+/*
+ * 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.pipelines.fabric.impl.behaviour;
+
+import com.google.common.collect.ImmutableList;
+import org.junit.Before;
+import org.junit.Test;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.MplsLabel;
+import org.onlab.packet.VlanId;
+import org.onlab.util.ImmutableByteSequence;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.flow.DefaultTrafficTreatment;
+import org.onosproject.net.flow.TrafficTreatment;
+import org.onosproject.net.pi.runtime.PiAction;
+import org.onosproject.net.pi.runtime.PiActionParam;
+
+import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Test for fabric interpreter.
+ */
+public class FabricInterpreterTest {
+ private static final VlanId VLAN_100 = VlanId.vlanId("100");
+ private static final PortNumber PORT_1 = PortNumber.portNumber(1);
+ private static final MacAddress SRC_MAC = MacAddress.valueOf("00:00:00:00:00:01");
+ private static final MacAddress DST_MAC = MacAddress.valueOf("00:00:00:00:00:02");
+ private static final MplsLabel MPLS_10 = MplsLabel.mplsLabel(10);
+
+ private FabricInterpreter interpreter;
+
+ FabricCapabilities allCapabilities;
+
+ @Before
+ public void setup() {
+ allCapabilities = createNiceMock(FabricCapabilities.class);
+ expect(allCapabilities.hasHashedTable()).andReturn(true).anyTimes();
+ expect(allCapabilities.supportDoubleVlanTerm()).andReturn(true).anyTimes();
+ replay(allCapabilities);
+ interpreter = new FabricInterpreter(allCapabilities);
+ }
+
+ /* Filtering control block */
+
+ /**
+ * Map treatment to push_internal_vlan action.
+ */
+ @Test
+ public void testFilteringTreatmentPermitWithInternalVlan() throws Exception {
+ TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .pushVlan()
+ .setVlanId(VLAN_100)
+ .build();
+ PiAction mappedAction = interpreter.mapTreatment(treatment,
+ FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
+ PiActionParam param = new PiActionParam(FabricConstants.VLAN_ID,
+ ImmutableByteSequence.copyFrom(VLAN_100.toShort()));
+ PiAction expectedAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_FILTERING_PERMIT_WITH_INTERNAL_VLAN)
+ .withParameter(param)
+ .build();
+
+ assertEquals(expectedAction, mappedAction);
+ }
+
+ /**
+ * Map treatment to permit action.
+ */
+ @Test
+ public void testFilteringTreatmentPermit() throws Exception {
+ TrafficTreatment treatment = DefaultTrafficTreatment.emptyTreatment();
+ PiAction mappedAction = interpreter.mapTreatment(treatment,
+ FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
+ PiAction expectedAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_FILTERING_PERMIT)
+ .build();
+
+ assertEquals(expectedAction, mappedAction);
+ }
+
+ /* Forwarding control block */
+
+ /**
+ * Map empty treatment for routing v4 table.
+ */
+ @Test
+ public void testRoutingV4TreatmentEmpty() throws Exception {
+ TrafficTreatment treatment = DefaultTrafficTreatment.emptyTreatment();
+ PiAction mappedAction = interpreter.mapTreatment(
+ treatment, FabricConstants.FABRIC_INGRESS_FORWARDING_ROUTING_V4);
+ PiAction expectedAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_FORWARDING_NOP_ROUTING_V4)
+ .build();
+ assertEquals(expectedAction, mappedAction);
+ }
+
+ /**
+ * Map empty treatment for ACL table.
+ */
+ @Test
+ public void testAclTreatmentEmpty() throws Exception {
+ TrafficTreatment treatment = DefaultTrafficTreatment.emptyTreatment();
+ PiAction mappedAction = interpreter.mapTreatment(
+ treatment, FabricConstants.FABRIC_INGRESS_ACL_ACL);
+ PiAction expectedAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_ACL_NOP_ACL)
+ .build();
+ assertEquals(expectedAction, mappedAction);
+ }
+
+ /* Next control block */
+
+ /**
+ * Map treatment to output action.
+ */
+ @Test
+ public void testNextTreatmentSimpleOutput() throws Exception {
+ TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .setOutput(PORT_1)
+ .build();
+ PiAction mappedAction = interpreter.mapTreatment(
+ treatment, FabricConstants.FABRIC_INGRESS_NEXT_SIMPLE);
+ PiActionParam param = new PiActionParam(FabricConstants.PORT_NUM, PORT_1.toLong());
+ PiAction expectedAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_NEXT_OUTPUT_SIMPLE)
+ .withParameter(param)
+ .build();
+ assertEquals(expectedAction, mappedAction);
+ }
+
+ /**
+ * Map treatment for hashed table to routing v4 action.
+ */
+ @Test
+ public void testNextTreatmentHashedRoutingV4() throws Exception {
+ TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .setEthSrc(SRC_MAC)
+ .setEthDst(DST_MAC)
+ .setOutput(PORT_1)
+ .build();
+ PiAction mappedAction = interpreter.mapTreatment(
+ treatment, FabricConstants.FABRIC_INGRESS_NEXT_HASHED);
+ PiActionParam ethSrcParam = new PiActionParam(FabricConstants.SMAC, SRC_MAC.toBytes());
+ PiActionParam ethDstParam = new PiActionParam(FabricConstants.DMAC, DST_MAC.toBytes());
+ PiActionParam portParam = new PiActionParam(FabricConstants.PORT_NUM, PORT_1.toLong());
+ PiAction expectedAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_NEXT_ROUTING_HASHED)
+ .withParameters(ImmutableList.of(ethSrcParam, ethDstParam, portParam))
+ .build();
+ assertEquals(expectedAction, mappedAction);
+ }
+
+ /**
+ * Map treatment for hashed table to routing v4 action.
+ */
+ @Test
+ public void testNextTreatmentHashedRoutingMpls() throws Exception {
+ TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .setEthSrc(SRC_MAC)
+ .setEthDst(DST_MAC)
+ .setOutput(PORT_1)
+ .pushMpls()
+ .setMpls(MPLS_10)
+ .build();
+ PiAction mappedAction = interpreter.mapTreatment(
+ treatment, FabricConstants.FABRIC_INGRESS_NEXT_HASHED);
+ PiActionParam ethSrcParam = new PiActionParam(FabricConstants.SMAC, SRC_MAC.toBytes());
+ PiActionParam ethDstParam = new PiActionParam(FabricConstants.DMAC, DST_MAC.toBytes());
+ PiActionParam portParam = new PiActionParam(FabricConstants.PORT_NUM, PORT_1.toLong());
+ PiActionParam mplsParam = new PiActionParam(FabricConstants.LABEL, MPLS_10.toInt());
+ PiAction expectedAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_NEXT_MPLS_ROUTING_HASHED)
+ .withParameters(ImmutableList.of(ethSrcParam, ethDstParam, portParam, mplsParam))
+ .build();
+ assertEquals(expectedAction, mappedAction);
+ }
+
+ /**
+ * Map treatment to set_vlan_output action.
+ */
+ @Test
+ public void testNextTreatment3() throws Exception {
+ TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .setVlanId(VLAN_100)
+ .build();
+ PiAction mappedAction = interpreter.mapTreatment(
+ treatment, FabricConstants.FABRIC_INGRESS_NEXT_NEXT_VLAN);
+ PiActionParam vlanParam = new PiActionParam(
+ FabricConstants.VLAN_ID, VLAN_100.toShort());
+ PiAction expectedAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_NEXT_SET_VLAN)
+ .withParameter(vlanParam)
+ .build();
+ assertEquals(expectedAction, mappedAction);
+ }
+}
diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricFilteringPipelinerTest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricFilteringPipelinerTest.java
new file mode 100644
index 0000000..f40741f
--- /dev/null
+++ b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricFilteringPipelinerTest.java
@@ -0,0 +1,501 @@
+/*
+ * 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.pipelines.fabric.impl.behaviour.pipeliner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.onlab.packet.Ethernet;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
+import org.onlab.util.ImmutableByteSequence;
+import org.onosproject.net.PortNumber;
+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.TableId;
+import org.onosproject.net.flow.TrafficSelector;
+import org.onosproject.net.flow.TrafficTreatment;
+import org.onosproject.net.flow.criteria.Criteria;
+import org.onosproject.net.flow.criteria.PiCriterion;
+import org.onosproject.net.flowobjective.DefaultFilteringObjective;
+import org.onosproject.net.flowobjective.FilteringObjective;
+import org.onosproject.net.flowobjective.ObjectiveError;
+import org.onosproject.net.pi.runtime.PiAction;
+import org.onosproject.net.pi.runtime.PiActionParam;
+import org.onosproject.pipelines.fabric.impl.behaviour.FabricConstants;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Test cases for fabric.p4 pipeline filtering control block.
+ */
+public class FabricFilteringPipelinerTest extends FabricPipelinerTest {
+
+ public static final byte[] ONE = {1};
+ public static final byte[] ZERO = {0};
+ private FilteringObjectiveTranslator translator;
+
+ @Before
+ public void setup() {
+ super.doSetup();
+ translator = new FilteringObjectiveTranslator(DEVICE_ID, capabilitiesHashed);
+ }
+
+ /**
+ * Creates one rule for ingress_port_vlan table and 3 rules for
+ * fwd_classifier table (IPv4, IPv6 and MPLS unicast) when the condition is
+ * VLAN + MAC.
+ */
+ @Test
+ public void testRouterMacAndVlanFilter() throws FabricPipelinerException {
+ FilteringObjective filteringObjective = buildFilteringObjective(ROUTER_MAC);
+ ObjectiveTranslation actualTranslation = translator.translate(filteringObjective);
+
+ // in port vlan flow rule
+ FlowRule inportFlowRuleExpected = buildExpectedVlanInPortRule(
+ PORT_1,
+ VlanId.NONE,
+ VlanId.NONE,
+ VLAN_100,
+ FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
+
+ // forwarding classifier ipv4
+ FlowRule classifierV4FlowRuleExpected = buildExpectedFwdClassifierRule(
+ PORT_1,
+ ROUTER_MAC,
+ null,
+ Ethernet.TYPE_IPV4,
+ FilteringObjectiveTranslator.FWD_IPV4_ROUTING);
+
+ // forwarding classifier ipv6
+ FlowRule classifierV6FlowRuleExpected = buildExpectedFwdClassifierRule(
+ PORT_1,
+ ROUTER_MAC,
+ null,
+ Ethernet.TYPE_IPV6,
+ FilteringObjectiveTranslator.FWD_IPV6_ROUTING);
+
+ // forwarding classifier mpls
+ FlowRule classifierMplsFlowRuleExpected = buildExpectedFwdClassifierRule(
+ PORT_1,
+ ROUTER_MAC,
+ null,
+ Ethernet.MPLS_UNICAST,
+ FilteringObjectiveTranslator.FWD_MPLS);
+
+ ObjectiveTranslation expectedTranslation = ObjectiveTranslation.builder()
+ .addFlowRule(inportFlowRuleExpected)
+ .addFlowRule(classifierV4FlowRuleExpected)
+ .addFlowRule(classifierV6FlowRuleExpected)
+ .addFlowRule(classifierMplsFlowRuleExpected)
+ .build();
+
+ assertEquals(expectedTranslation, actualTranslation);
+ }
+
+ /**
+ * Creates one rule for ingress_port_vlan table and one rule for
+ * fwd_classifier table (IPv4 multicast) when the condition is ipv4
+ * multicast mac address.
+ */
+ @Test
+ public void testIpv4MulticastFwdClass() throws FabricPipelinerException {
+ TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .pushVlan()
+ .setVlanId(VLAN_100)
+ .build();
+ FilteringObjective filteringObjective = DefaultFilteringObjective.builder()
+ .permit()
+ .withPriority(PRIORITY)
+ .withKey(Criteria.matchInPort(PORT_1))
+ .addCondition(Criteria.matchEthDstMasked(MacAddress.IPV4_MULTICAST, MacAddress.IPV4_MULTICAST_MASK))
+ .addCondition(Criteria.matchVlanId(VlanId.NONE))
+ .withMeta(treatment)
+ .fromApp(APP_ID)
+ .makePermanent()
+ .add();
+ ObjectiveTranslation actualTranslation = translator.translate(filteringObjective);
+
+ // in port vlan flow rule
+ FlowRule inportFlowRuleExpected = buildExpectedVlanInPortRule(
+ PORT_1,
+ VlanId.NONE,
+ VlanId.NONE,
+ VLAN_100,
+ FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
+
+ // forwarding classifier
+ FlowRule classifierFlowRuleExpected = buildExpectedFwdClassifierRule(
+ PORT_1,
+ MacAddress.IPV4_MULTICAST,
+ MacAddress.IPV4_MULTICAST_MASK,
+ Ethernet.TYPE_IPV4,
+ FilteringObjectiveTranslator.FWD_IPV4_ROUTING);
+
+ ObjectiveTranslation expectedTranslation = ObjectiveTranslation.builder()
+ .addFlowRule(inportFlowRuleExpected)
+ .addFlowRule(classifierFlowRuleExpected)
+ .build();
+
+ assertEquals(expectedTranslation, actualTranslation);
+ }
+
+ /**
+ * Creates one rule for ingress_port_vlan table and one rule for
+ * fwd_classifier table (IPv6 multicast) when the condition is ipv6
+ * multicast mac address.
+ */
+ @Test
+ public void testIpv6MulticastFwdClass() throws FabricPipelinerException {
+ TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .pushVlan()
+ .setVlanId(VLAN_100)
+ .build();
+ FilteringObjective filteringObjective = DefaultFilteringObjective.builder()
+ .permit()
+ .withPriority(PRIORITY)
+ .withKey(Criteria.matchInPort(PORT_1))
+ .addCondition(Criteria.matchEthDstMasked(MacAddress.IPV6_MULTICAST, MacAddress.IPV6_MULTICAST_MASK))
+ .addCondition(Criteria.matchVlanId(VlanId.NONE))
+ .withMeta(treatment)
+ .fromApp(APP_ID)
+ .makePermanent()
+ .add();
+ ObjectiveTranslation actualTranslation = translator.translate(filteringObjective);
+
+ // in port vlan flow rule
+ FlowRule inportFlowRuleExpected = buildExpectedVlanInPortRule(
+ PORT_1,
+ VlanId.NONE,
+ VlanId.NONE,
+ VLAN_100,
+ FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
+
+ FlowRule classifierFlowRuleExpected = buildExpectedFwdClassifierRule(
+ PORT_1,
+ MacAddress.IPV6_MULTICAST,
+ MacAddress.IPV6_MULTICAST_MASK,
+ Ethernet.TYPE_IPV6,
+ FilteringObjectiveTranslator.FWD_IPV6_ROUTING);
+
+ ObjectiveTranslation expectedTranslation = ObjectiveTranslation.builder()
+ .addFlowRule(inportFlowRuleExpected)
+ .addFlowRule(classifierFlowRuleExpected)
+ .build();
+
+ assertEquals(expectedTranslation, actualTranslation);
+ }
+
+ /**
+ * Creates only one rule for ingress_port_vlan table if there is no
+ * condition of destination mac address. The packet will be handled by
+ * bridging table by default.
+ */
+ @Test
+ public void testFwdBridging() throws Exception {
+ FilteringObjective filteringObjective = buildFilteringObjective(null);
+ ObjectiveTranslation actualTranslation = translator.translate(filteringObjective);
+
+ // in port vlan flow rule
+ FlowRule flowRuleExpected = buildExpectedVlanInPortRule(
+ PORT_1,
+ VlanId.NONE,
+ VlanId.NONE,
+ VLAN_100,
+ FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
+
+ // No rules in forwarding classifier, will do default action: set fwd type to bridging
+
+ ObjectiveTranslation expectedTranslation = ObjectiveTranslation.builder()
+ .addFlowRule(flowRuleExpected)
+ .build();
+
+ assertEquals(expectedTranslation, actualTranslation);
+ }
+
+ /**
+ * Test DENY objective.
+ */
+ @Test
+ public void testDenyObjective() throws FabricPipelinerException {
+ FilteringObjective filteringObjective = DefaultFilteringObjective.builder()
+ .deny()
+ .withKey(Criteria.matchInPort(PORT_1))
+ .addCondition(Criteria.matchVlanId(VlanId.NONE))
+ .fromApp(APP_ID)
+ .makePermanent()
+ .withPriority(PRIORITY)
+ .add();
+
+ ObjectiveTranslation actualTranslation = translator.translate(filteringObjective);
+
+ TrafficSelector.Builder selector = DefaultTrafficSelector.builder()
+ .matchInPort(PORT_1)
+ .matchPi(buildPiCriterionVlan(null, null));
+ PiAction piAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_FILTERING_DENY)
+ .build();
+ FlowRule expectedFlowRule = DefaultFlowRule.builder()
+ .withPriority(PRIORITY)
+ .withSelector(selector.build())
+ .withTreatment(DefaultTrafficTreatment.builder()
+ .piTableAction(piAction).build())
+ .fromApp(APP_ID)
+ .forDevice(DEVICE_ID)
+ .makePermanent()
+ .forTable(FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN)
+ .build();
+
+ ObjectiveTranslation expectedTranslation = ObjectiveTranslation.builder()
+ .addFlowRule(expectedFlowRule)
+ .build();
+
+ assertEquals(expectedTranslation, actualTranslation);
+
+ }
+
+ /**
+ * Test double VLAN pop filtering objective Creates one rule for
+ * ingress_port_vlan table and 3 rules for fwd_classifier table (IPv4, IPv6
+ * and MPLS unicast) when the condition is MAC + VLAN + INNER_VLAN.
+ */
+ @Test
+ public void testPopVlan() throws FabricPipelinerException {
+ FilteringObjective filteringObjective = DefaultFilteringObjective.builder()
+ .withKey(Criteria.matchInPort(PORT_1))
+ .addCondition(Criteria.matchEthDst(ROUTER_MAC))
+ .addCondition(Criteria.matchVlanId(VLAN_100))
+ .addCondition(Criteria.matchInnerVlanId(VLAN_200))
+ .withPriority(PRIORITY)
+ .fromApp(APP_ID)
+ .withMeta(DefaultTrafficTreatment.builder()
+ .popVlan()
+ .build())
+ .permit()
+ .add();
+ ObjectiveTranslation actualTranslation = translator.translate(filteringObjective);
+
+ // Ingress port vlan rule
+ FlowRule inportFlowRuleExpected = buildExpectedVlanInPortRule(
+ PORT_1, VLAN_100, VLAN_200, VlanId.NONE,
+ FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
+ // Forwarding classifier rules (ipv6, ipv4, mpls)
+ FlowRule classifierV4FlowRuleExpected = buildExpectedFwdClassifierRule(
+ PORT_1, ROUTER_MAC, null, Ethernet.TYPE_IPV4,
+ FilteringObjectiveTranslator.FWD_IPV4_ROUTING);
+ FlowRule classifierV6FlowRuleExpected = buildExpectedFwdClassifierRule(
+ PORT_1, ROUTER_MAC, null, Ethernet.TYPE_IPV6,
+ FilteringObjectiveTranslator.FWD_IPV6_ROUTING);
+ FlowRule classifierMplsFlowRuleExpected = buildExpectedFwdClassifierRule(
+ PORT_1, ROUTER_MAC, null, Ethernet.MPLS_UNICAST,
+ FilteringObjectiveTranslator.FWD_MPLS);
+ ObjectiveTranslation expectedTranslation = ObjectiveTranslation.builder()
+ .addFlowRule(inportFlowRuleExpected)
+ .addFlowRule(classifierV4FlowRuleExpected)
+ .addFlowRule(classifierV6FlowRuleExpected)
+ .addFlowRule(classifierMplsFlowRuleExpected)
+ .build();
+
+ assertEquals(expectedTranslation, actualTranslation);
+ }
+
+ /**
+ * Incorrect filtering key or filtering conditions test.
+ */
+ @Test
+ public void badParamTest() {
+ // Filtering objective should contains filtering key
+ FilteringObjective filteringObjective = DefaultFilteringObjective.builder()
+ .permit()
+ .addCondition(Criteria.matchVlanId(VLAN_100))
+ .fromApp(APP_ID)
+ .makePermanent()
+ .add();
+
+ ObjectiveTranslation result1 = translator.translate(filteringObjective);
+ assertError(ObjectiveError.BADPARAMS, result1);
+
+ // Filtering objective should use in_port as key
+ filteringObjective = DefaultFilteringObjective.builder()
+ .permit()
+ .withKey(Criteria.matchEthDst(ROUTER_MAC))
+ .addCondition(Criteria.matchVlanId(VLAN_100))
+ .withMeta(DefaultTrafficTreatment.emptyTreatment())
+ .fromApp(APP_ID)
+ .makePermanent()
+ .add();
+
+ ObjectiveTranslation result2 = translator.translate(filteringObjective);
+ assertError(ObjectiveError.BADPARAMS, result2);
+ }
+
+ /**
+ * Test the mapping between EtherType and conditions.
+ */
+ @Test
+ public void testMappingEthType() {
+ PiCriterion expectedMappingDefault = PiCriterion.builder()
+ .matchExact(FabricConstants.HDR_IS_MPLS, ZERO)
+ .matchExact(FabricConstants.HDR_IS_IPV4, ZERO)
+ .matchExact(FabricConstants.HDR_IS_IPV6, ZERO)
+ .build();
+ PiCriterion expectedMappingIpv6 = PiCriterion.builder()
+ .matchExact(FabricConstants.HDR_IS_MPLS, ZERO)
+ .matchExact(FabricConstants.HDR_IS_IPV4, ZERO)
+ .matchExact(FabricConstants.HDR_IS_IPV6, ONE)
+ .build();
+ PiCriterion expectedMappingIpv4 = PiCriterion.builder()
+ .matchExact(FabricConstants.HDR_IS_MPLS, ZERO)
+ .matchExact(FabricConstants.HDR_IS_IPV4, ONE)
+ .matchExact(FabricConstants.HDR_IS_IPV6, ZERO)
+ .build();
+ PiCriterion expectedMappingMpls = PiCriterion.builder()
+ .matchExact(FabricConstants.HDR_IS_MPLS, ONE)
+ .matchExact(FabricConstants.HDR_IS_IPV4, ZERO)
+ .matchExact(FabricConstants.HDR_IS_IPV6, ZERO)
+ .build();
+
+
+ PiCriterion actualMappingIpv6 = FilteringObjectiveTranslator.mapEthTypeFwdClassifier(Ethernet.TYPE_IPV6);
+ assertEquals(expectedMappingIpv6, actualMappingIpv6);
+
+ PiCriterion actualMappingIpv4 = FilteringObjectiveTranslator.mapEthTypeFwdClassifier(Ethernet.TYPE_IPV4);
+ assertEquals(expectedMappingIpv4, actualMappingIpv4);
+
+ PiCriterion actualMappingMpls = FilteringObjectiveTranslator.mapEthTypeFwdClassifier(Ethernet.MPLS_UNICAST);
+ assertEquals(expectedMappingMpls, actualMappingMpls);
+
+ PiCriterion actualMapping = FilteringObjectiveTranslator.mapEthTypeFwdClassifier(Ethernet.TYPE_ARP);
+ assertEquals(expectedMappingDefault, actualMapping);
+
+
+ }
+
+ /* Utilities */
+
+ private void assertError(ObjectiveError error, ObjectiveTranslation actualTranslation) {
+ ObjectiveTranslation expectedTranslation = ObjectiveTranslation.ofError(error);
+ assertEquals(expectedTranslation, actualTranslation);
+ }
+
+ private FilteringObjective buildFilteringObjective(MacAddress dstMac) {
+ TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .pushVlan()
+ .setVlanId(VLAN_100)
+ .build();
+ DefaultFilteringObjective.Builder builder = DefaultFilteringObjective.builder()
+ .permit()
+ .withPriority(PRIORITY)
+ .withKey(Criteria.matchInPort(PORT_1));
+ if (dstMac != null) {
+ builder.addCondition(Criteria.matchEthDst(dstMac));
+ }
+
+ builder.addCondition(Criteria.matchVlanId(VlanId.NONE))
+ .withMeta(treatment)
+ .fromApp(APP_ID)
+ .makePermanent();
+ return builder.add();
+ }
+
+ private FlowRule buildExpectedVlanInPortRule(PortNumber inPort,
+ VlanId vlanId,
+ VlanId innerVlanId,
+ VlanId internalVlan,
+ TableId tableId) {
+
+ TrafficSelector.Builder selector = DefaultTrafficSelector.builder()
+ .matchInPort(inPort);
+ PiAction piAction;
+ selector.matchPi(buildPiCriterionVlan(vlanId, innerVlanId));
+ if (!vlanValid(vlanId)) {
+ piAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_FILTERING_PERMIT_WITH_INTERNAL_VLAN)
+ .withParameter(new PiActionParam(
+ FabricConstants.VLAN_ID, internalVlan.toShort()))
+ .build();
+ } else {
+ selector.matchVlanId(vlanId);
+ if (vlanValid(innerVlanId)) {
+ selector.matchInnerVlanId(innerVlanId);
+ }
+ piAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_FILTERING_PERMIT)
+ .build();
+ }
+
+ return DefaultFlowRule.builder()
+ .withPriority(PRIORITY)
+ .withSelector(selector.build())
+ .withTreatment(DefaultTrafficTreatment.builder()
+ .piTableAction(piAction).build())
+ .fromApp(APP_ID)
+ .forDevice(DEVICE_ID)
+ .makePermanent()
+ .forTable(tableId)
+ .build();
+ }
+
+ private boolean vlanValid(VlanId vlanId) {
+ return (vlanId != null && !vlanId.equals(VlanId.NONE));
+ }
+
+ private PiCriterion buildPiCriterionVlan(VlanId vlanId,
+ VlanId innerVlanId) {
+ PiCriterion.Builder piCriterionBuilder = PiCriterion.builder()
+ .matchExact(FabricConstants.HDR_VLAN_IS_VALID,
+ vlanValid(vlanId) ? ONE : ZERO);
+ return piCriterionBuilder.build();
+ }
+
+ private FlowRule buildExpectedFwdClassifierRule(PortNumber inPort,
+ MacAddress dstMac,
+ MacAddress dstMacMask,
+ short ethType,
+ byte fwdClass) {
+ TrafficSelector.Builder sbuilder = DefaultTrafficSelector.builder()
+ .matchInPort(inPort)
+ .matchPi(FilteringObjectiveTranslator.mapEthTypeFwdClassifier(ethType));
+ if (dstMacMask != null) {
+ sbuilder.matchEthDstMasked(dstMac, dstMacMask);
+ } else {
+ sbuilder.matchEthDstMasked(dstMac, MacAddress.EXACT_MASK);
+ }
+ TrafficSelector selector = sbuilder.build();
+
+ PiActionParam classParam = new PiActionParam(FabricConstants.FWD_TYPE,
+ ImmutableByteSequence.copyFrom(fwdClass));
+ PiAction fwdClassifierAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_FILTERING_SET_FORWARDING_TYPE)
+ .withParameter(classParam)
+ .build();
+ TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .piTableAction(fwdClassifierAction)
+ .build();
+
+ return DefaultFlowRule.builder()
+ .withPriority(PRIORITY)
+ .withSelector(selector)
+ .withTreatment(treatment)
+ .fromApp(APP_ID)
+ .forDevice(DEVICE_ID)
+ .makePermanent()
+ .forTable(FabricConstants.FABRIC_INGRESS_FILTERING_FWD_CLASSIFIER)
+ .build();
+ }
+}
diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricForwardingPipelineTest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricForwardingPipelineTest.java
new file mode 100644
index 0000000..3d2942f
--- /dev/null
+++ b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricForwardingPipelineTest.java
@@ -0,0 +1,383 @@
+/*
+ * 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.pipelines.fabric.impl.behaviour.pipeliner;
+
+import com.google.common.collect.ImmutableList;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.onlab.packet.Ethernet;
+import org.onlab.packet.IPv4;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.TpPort;
+import org.onlab.packet.UDP;
+import org.onosproject.net.PortNumber;
+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.TrafficSelector;
+import org.onosproject.net.flow.TrafficTreatment;
+import org.onosproject.net.flow.criteria.Criterion;
+import org.onosproject.net.flow.criteria.EthCriterion;
+import org.onosproject.net.flowobjective.DefaultForwardingObjective;
+import org.onosproject.net.flowobjective.ForwardingObjective;
+import org.onosproject.net.group.DefaultGroupBucket;
+import org.onosproject.net.group.DefaultGroupDescription;
+import org.onosproject.net.group.DefaultGroupKey;
+import org.onosproject.net.group.GroupBucket;
+import org.onosproject.net.group.GroupBuckets;
+import org.onosproject.net.group.GroupDescription;
+import org.onosproject.net.group.GroupKey;
+import org.onosproject.net.pi.model.PiTableId;
+import org.onosproject.net.pi.runtime.PiAction;
+import org.onosproject.net.pi.runtime.PiActionParam;
+import org.onosproject.pipelines.fabric.impl.behaviour.FabricConstants;
+
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Test cases for fabric.p4 pipeline forwarding control block.
+ */
+public class FabricForwardingPipelineTest extends FabricPipelinerTest {
+
+ private ForwardingObjectiveTranslator translator;
+
+ @Before
+ public void setup() {
+ super.doSetup();
+ translator = new ForwardingObjectiveTranslator(DEVICE_ID, capabilitiesHashed);
+ }
+
+ /**
+ * Test versatile flag of forwarding objective with ARP match.
+ */
+ @Test
+ public void testAclArp() {
+ TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .punt()
+ .build();
+ // ARP
+ TrafficSelector selector = DefaultTrafficSelector.builder()
+ .matchEthType(Ethernet.TYPE_ARP)
+ .build();
+ ForwardingObjective fwd = DefaultForwardingObjective.builder()
+ .withSelector(selector)
+ .withPriority(PRIORITY)
+ .fromApp(APP_ID)
+ .makePermanent()
+ .withFlag(ForwardingObjective.Flag.VERSATILE)
+ .withTreatment(treatment)
+ .add();
+
+ ObjectiveTranslation result = translator.translate(fwd);
+
+ List<FlowRule> flowRulesInstalled = (List<FlowRule>) result.flowRules();
+ List<GroupDescription> groupsInstalled = (List<GroupDescription>) result.groups();
+ assertEquals(1, flowRulesInstalled.size());
+ assertEquals(1, groupsInstalled.size());
+
+ FlowRule actualFlowRule = flowRulesInstalled.get(0);
+ PiAction piAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_ACL_SET_CLONE_SESSION_ID)
+ .withParameter(new PiActionParam(
+ FabricConstants.CLONE_ID,
+ ForwardingObjectiveTranslator.CLONE_TO_CPU_ID))
+ .build();
+ FlowRule expectedFlowRule = DefaultFlowRule.builder()
+ .forDevice(DEVICE_ID)
+ .forTable(FabricConstants.FABRIC_INGRESS_ACL_ACL)
+ .withPriority(PRIORITY)
+ .makePermanent()
+ .withSelector(selector)
+ .withTreatment(DefaultTrafficTreatment.builder()
+ .piTableAction(piAction).build())
+ .fromApp(APP_ID)
+ .build();
+
+ GroupDescription actualCloneGroup = groupsInstalled.get(0);
+ TrafficTreatment cloneGroupTreatment = DefaultTrafficTreatment.builder()
+ .setOutput(PortNumber.CONTROLLER)
+ .build();
+
+ List<GroupBucket> cloneBuckets = ImmutableList.of(
+ DefaultGroupBucket.createCloneGroupBucket(cloneGroupTreatment));
+
+ GroupBuckets cloneGroupBuckets = new GroupBuckets(cloneBuckets);
+ GroupKey cloneGroupKey = new DefaultGroupKey(
+ FabricPipeliner.KRYO.serialize(ForwardingObjectiveTranslator.CLONE_TO_CPU_ID));
+ GroupDescription expectedCloneGroup = new DefaultGroupDescription(
+ DEVICE_ID,
+ GroupDescription.Type.CLONE,
+ cloneGroupBuckets,
+ cloneGroupKey,
+ ForwardingObjectiveTranslator.CLONE_TO_CPU_ID,
+ APP_ID
+ );
+
+ assertTrue(expectedFlowRule.exactMatch(actualFlowRule));
+ assertTrue(expectedCloneGroup.equals(actualCloneGroup));
+ }
+
+ /**
+ * Test versatile flag of forwarding objective with DHCP match.
+ */
+ @Test
+ public void testAclDhcp() {
+ TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .wipeDeferred()
+ .punt()
+ .build();
+ // DHCP
+ TrafficSelector selector = DefaultTrafficSelector.builder()
+ .matchEthType(Ethernet.TYPE_IPV4)
+ .matchIPProtocol(IPv4.PROTOCOL_UDP)
+ .matchUdpSrc(TpPort.tpPort(UDP.DHCP_CLIENT_PORT))
+ .matchUdpDst(TpPort.tpPort(UDP.DHCP_SERVER_PORT))
+ .build();
+ ForwardingObjective fwd = DefaultForwardingObjective.builder()
+ .withSelector(selector)
+ .withPriority(PRIORITY)
+ .fromApp(APP_ID)
+ .makePermanent()
+ .withFlag(ForwardingObjective.Flag.VERSATILE)
+ .withTreatment(treatment)
+ .add();
+
+ ObjectiveTranslation result = translator.translate(fwd);
+
+ List<FlowRule> flowRulesInstalled = (List<FlowRule>) result.flowRules();
+ List<GroupDescription> groupsInstalled = (List<GroupDescription>) result.groups();
+ assertEquals(1, flowRulesInstalled.size());
+ assertTrue(groupsInstalled.isEmpty());
+
+ FlowRule actualFlowRule = flowRulesInstalled.get(0);
+ PiAction piAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_ACL_PUNT_TO_CPU)
+ .build();
+ FlowRule expectedFlowRule = DefaultFlowRule.builder()
+ .forDevice(DEVICE_ID)
+ .forTable(FabricConstants.FABRIC_INGRESS_ACL_ACL)
+ .withPriority(PRIORITY)
+ .makePermanent()
+ .withSelector(selector)
+ .withTreatment(DefaultTrafficTreatment.builder()
+ .piTableAction(piAction).build())
+ .fromApp(APP_ID)
+ .build();
+
+ assertTrue(expectedFlowRule.exactMatch(actualFlowRule));
+ }
+
+ /**
+ * Test programming L2 unicast rule to bridging table.
+ */
+ @Test
+ public void testL2Unicast() throws FabricPipelinerException {
+ TrafficSelector selector = DefaultTrafficSelector.builder()
+ .matchVlanId(VLAN_100)
+ .matchEthDst(HOST_MAC)
+ .build();
+ testSpecificForward(FabricConstants.FABRIC_INGRESS_FORWARDING_BRIDGING,
+ buildExpectedSelector(selector), selector, NEXT_ID_1);
+ }
+
+ @Test
+ public void testL2Broadcast() throws FabricPipelinerException {
+ TrafficSelector selector = DefaultTrafficSelector.builder()
+ .matchVlanId(VLAN_100)
+ .build();
+ testSpecificForward(FabricConstants.FABRIC_INGRESS_FORWARDING_BRIDGING,
+ selector, selector, NEXT_ID_1);
+ }
+
+ @Test
+ public void testIPv4Unicast() throws FabricPipelinerException {
+ TrafficSelector selector = DefaultTrafficSelector.builder()
+ .matchEthType(Ethernet.TYPE_IPV4)
+ .matchIPDst(IPV4_UNICAST_ADDR)
+ .build();
+ TrafficSelector expectedSelector = DefaultTrafficSelector.builder()
+ .matchIPDst(IPV4_UNICAST_ADDR)
+ .build();
+ testSpecificForward(FabricConstants.FABRIC_INGRESS_FORWARDING_ROUTING_V4,
+ expectedSelector, selector, NEXT_ID_1);
+ }
+
+ @Test
+ public void testIPv4UnicastWithNoNextId() throws FabricPipelinerException {
+ TrafficSelector selector = DefaultTrafficSelector.builder()
+ .matchEthType(Ethernet.TYPE_IPV4)
+ .matchIPDst(IPV4_UNICAST_ADDR)
+ .build();
+ TrafficSelector expectedSelector = DefaultTrafficSelector.builder()
+ .matchIPDst(IPV4_UNICAST_ADDR)
+ .build();
+ testSpecificForward(FabricConstants.FABRIC_INGRESS_FORWARDING_ROUTING_V4,
+ expectedSelector, selector, null);
+ }
+
+ @Test
+ @Ignore
+ public void testIPv4Multicast() throws FabricPipelinerException {
+ TrafficSelector selector = DefaultTrafficSelector.builder()
+ .matchEthType(Ethernet.TYPE_IPV4)
+ .matchVlanId(VLAN_100)
+ .matchIPDst(IPV4_MCAST_ADDR)
+ .build();
+ TrafficSelector expectedSelector = DefaultTrafficSelector.builder()
+ .matchIPDst(IPV4_MCAST_ADDR)
+ .build();
+ testSpecificForward(FabricConstants.FABRIC_INGRESS_FORWARDING_ROUTING_V4,
+ expectedSelector, selector, NEXT_ID_1);
+ }
+
+ @Test
+ @Ignore
+ public void testIPv6Unicast() throws FabricPipelinerException {
+ TrafficSelector selector = DefaultTrafficSelector.builder()
+ .matchEthType(Ethernet.TYPE_IPV6)
+ .matchIPDst(IPV6_UNICAST_ADDR)
+ .build();
+ TrafficSelector expectedSelector = DefaultTrafficSelector.builder()
+ .matchIPDst(IPV6_UNICAST_ADDR)
+ .build();
+ testSpecificForward(FabricConstants.FABRIC_INGRESS_FORWARDING_ROUTING_V6,
+ expectedSelector, selector, NEXT_ID_1);
+
+ }
+
+ @Test
+ @Ignore
+ public void testIPv6Multicast() throws FabricPipelinerException {
+ TrafficSelector selector = DefaultTrafficSelector.builder()
+ .matchEthType(Ethernet.TYPE_IPV6)
+ .matchVlanId(VLAN_100)
+ .matchIPDst(IPV6_MCAST_ADDR)
+ .build();
+ TrafficSelector expectedSelector = DefaultTrafficSelector.builder()
+ .matchIPDst(IPV6_MCAST_ADDR)
+ .build();
+ testSpecificForward(FabricConstants.FABRIC_INGRESS_FORWARDING_ROUTING_V6,
+ expectedSelector, selector, NEXT_ID_1);
+ }
+
+ @Test
+ public void testMpls() throws FabricPipelinerException {
+ TrafficSelector selector = DefaultTrafficSelector.builder()
+ .matchEthType(Ethernet.MPLS_UNICAST)
+ .matchMplsLabel(MPLS_10)
+ .matchMplsBos(true)
+ .build();
+ TrafficSelector expectedSelector = DefaultTrafficSelector.builder()
+ .matchMplsLabel(MPLS_10)
+ .build();
+
+ PiActionParam nextIdParam = new PiActionParam(FabricConstants.NEXT_ID, NEXT_ID_1);
+ PiAction setNextIdAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_FORWARDING_POP_MPLS_AND_NEXT)
+ .withParameter(nextIdParam)
+ .build();
+ TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .piTableAction(setNextIdAction)
+ .build();
+ testSpecificForward(FabricConstants.FABRIC_INGRESS_FORWARDING_MPLS,
+ expectedSelector, selector, NEXT_ID_1, treatment);
+ }
+
+ private void testSpecificForward(PiTableId expectedTableId, TrafficSelector expectedSelector,
+ TrafficSelector selector, Integer nextId) throws FabricPipelinerException {
+ TrafficTreatment setNextIdTreatment;
+ if (nextId == null) {
+ // Ref: RoutingRulePopulator.java->revokeIpRuleForRouter
+
+ setNextIdTreatment = DefaultTrafficTreatment.builder().
+ piTableAction(PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_FORWARDING_NOP_ROUTING_V4)
+ .build())
+ .build();
+ } else {
+ PiActionParam nextIdParam = new PiActionParam(FabricConstants.NEXT_ID, nextId);
+ PiAction.Builder setNextIdAction = PiAction.builder()
+ .withParameter(nextIdParam);
+
+ if (expectedTableId.equals(FabricConstants.FABRIC_INGRESS_FORWARDING_BRIDGING)) {
+ setNextIdAction.withId(FabricConstants.FABRIC_INGRESS_FORWARDING_SET_NEXT_ID_BRIDGING);
+ } else if (expectedTableId.equals(FabricConstants.FABRIC_INGRESS_FORWARDING_ROUTING_V4)) {
+ setNextIdAction.withId(FabricConstants.FABRIC_INGRESS_FORWARDING_SET_NEXT_ID_ROUTING_V4);
+ } else if (expectedTableId.equals(FabricConstants.FABRIC_INGRESS_FORWARDING_ROUTING_V6)) {
+ setNextIdAction.withId(FabricConstants.FABRIC_INGRESS_FORWARDING_SET_NEXT_ID_ROUTING_V6);
+ }
+
+ setNextIdTreatment = DefaultTrafficTreatment.builder()
+ .piTableAction(setNextIdAction.build())
+ .build();
+ }
+
+ testSpecificForward(expectedTableId, expectedSelector, selector, nextId, setNextIdTreatment);
+
+ }
+
+ private void testSpecificForward(PiTableId expectedTableId, TrafficSelector expectedSelector,
+ TrafficSelector selector, Integer nextId, TrafficTreatment treatment)
+ throws FabricPipelinerException {
+ ForwardingObjective.Builder fwd = DefaultForwardingObjective.builder()
+ .withSelector(selector)
+ .withPriority(PRIORITY)
+ .fromApp(APP_ID)
+ .makePermanent()
+ .withTreatment(treatment)
+ .withFlag(ForwardingObjective.Flag.SPECIFIC);
+
+ if (nextId != null) {
+ fwd.nextStep(nextId);
+ }
+
+ ObjectiveTranslation actualTranslation = translator.translate(fwd.add());
+
+ FlowRule expectedFlowRule = DefaultFlowRule.builder()
+ .forDevice(DEVICE_ID)
+ .forTable(expectedTableId)
+ .withPriority(PRIORITY)
+ .makePermanent()
+ .withSelector(expectedSelector)
+ .withTreatment(treatment)
+ .fromApp(APP_ID)
+ .build();
+
+ ObjectiveTranslation expectedTranslation = ObjectiveTranslation.builder()
+ .addFlowRule(expectedFlowRule)
+ .build();
+
+ assertEquals(expectedTranslation, actualTranslation);
+ }
+
+ private TrafficSelector buildExpectedSelector(TrafficSelector selector) {
+ TrafficSelector.Builder sbuilder = DefaultTrafficSelector.builder();
+ selector.criteria().forEach(c -> {
+ if (c.type() == Criterion.Type.ETH_DST) {
+ sbuilder.matchEthDstMasked(((EthCriterion) c).mac(), MacAddress.EXACT_MASK);
+ } else {
+ sbuilder.add(c);
+ }
+ });
+ return sbuilder.build();
+ }
+}
diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricNextPipelinerTest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricNextPipelinerTest.java
new file mode 100644
index 0000000..a7d03c2
--- /dev/null
+++ b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricNextPipelinerTest.java
@@ -0,0 +1,576 @@
+/*
+ * 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.pipelines.fabric.impl.behaviour.pipeliner;
+
+import com.google.common.collect.ImmutableList;
+import org.junit.Before;
+import org.junit.Test;
+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.TrafficSelector;
+import org.onosproject.net.flow.TrafficTreatment;
+import org.onosproject.net.flow.criteria.PiCriterion;
+import org.onosproject.net.flowobjective.DefaultNextObjective;
+import org.onosproject.net.flowobjective.NextObjective;
+import org.onosproject.net.group.DefaultGroupBucket;
+import org.onosproject.net.group.DefaultGroupDescription;
+import org.onosproject.net.group.DefaultGroupKey;
+import org.onosproject.net.group.GroupBucket;
+import org.onosproject.net.group.GroupBuckets;
+import org.onosproject.net.group.GroupDescription;
+import org.onosproject.net.group.GroupKey;
+import org.onosproject.net.pi.runtime.PiAction;
+import org.onosproject.net.pi.runtime.PiActionParam;
+import org.onosproject.net.pi.runtime.PiActionProfileGroupId;
+import org.onosproject.net.pi.runtime.PiGroupKey;
+import org.onosproject.pipelines.fabric.impl.behaviour.FabricConstants;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Test cases for fabric.p4 pipeline next control block.
+ */
+public class FabricNextPipelinerTest extends FabricPipelinerTest {
+
+ private NextObjectiveTranslator translatorHashed;
+ private NextObjectiveTranslator translatorSimple;
+
+ private FlowRule vlanMetaFlowRule;
+
+ @Before
+ public void setup() {
+ super.doSetup();
+
+ translatorHashed = new NextObjectiveTranslator(DEVICE_ID, capabilitiesHashed);
+ translatorSimple = new NextObjectiveTranslator(DEVICE_ID, capabilitiesSimple);
+
+ PiCriterion nextIdCriterion = PiCriterion.builder()
+ .matchExact(FabricConstants.HDR_NEXT_ID, NEXT_ID_1)
+ .build();
+ TrafficSelector selector = DefaultTrafficSelector.builder()
+ .matchPi(nextIdCriterion)
+ .build();
+ PiAction piAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_NEXT_SET_VLAN)
+ .withParameter(new PiActionParam(FabricConstants.VLAN_ID, VLAN_100.toShort()))
+ .build();
+ TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .piTableAction(piAction)
+ .build();
+ vlanMetaFlowRule = DefaultFlowRule.builder()
+ .withSelector(selector)
+ .withTreatment(treatment)
+ .forTable(FabricConstants.FABRIC_INGRESS_NEXT_NEXT_VLAN)
+ .makePermanent()
+ // FIXME: currently next objective doesn't support priority, ignore this
+ .withPriority(0)
+ .forDevice(DEVICE_ID)
+ .fromApp(APP_ID)
+ .build();
+ }
+
+ /**
+ * Test program output rule for Simple table.
+ */
+ @Test
+ public void testSimpleOutput() throws FabricPipelinerException {
+ TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .setOutput(PORT_1)
+ .build();
+ PiAction piAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_NEXT_OUTPUT_SIMPLE)
+ .withParameter(new PiActionParam(
+ FabricConstants.PORT_NUM, PORT_1.toLong()))
+ .build();
+ testSimple(treatment, piAction);
+ }
+
+ /**
+ * Test program set vlan and output rule for Simple table.
+ */
+ @Test
+ public void testSimpleOutputWithVlanTranslation() throws FabricPipelinerException {
+ TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .setVlanId(VLAN_100)
+ .setOutput(PORT_1)
+ .build();
+ PiAction piAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_NEXT_OUTPUT_SIMPLE)
+ .withParameter(new PiActionParam(
+ FabricConstants.PORT_NUM, PORT_1.toLong()))
+ .build();
+ testSimple(treatment, piAction);
+ }
+
+ /**
+ * Test program set mac and output rule for Simple table.
+ */
+ @Test
+ public void testSimpleOutputWithMacTranslation() throws FabricPipelinerException {
+ TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .setEthSrc(ROUTER_MAC)
+ .setEthDst(HOST_MAC)
+ .setOutput(PORT_1)
+ .build();
+ PiAction piAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_NEXT_ROUTING_SIMPLE)
+ .withParameter(new PiActionParam(
+ FabricConstants.SMAC, ROUTER_MAC.toBytes()))
+ .withParameter(new PiActionParam(
+ FabricConstants.DMAC, HOST_MAC.toBytes()))
+ .withParameter(new PiActionParam(
+ FabricConstants.PORT_NUM, PORT_1.toLong()))
+ .build();
+ testSimple(treatment, piAction);
+ }
+
+ /**
+ * Test program set mac, set vlan, and output rule for Simple table.
+ */
+ @Test
+ public void testSimpleOutputWithVlanAndMacTranslation() throws FabricPipelinerException {
+ TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .setEthSrc(ROUTER_MAC)
+ .setEthDst(HOST_MAC)
+ .setVlanId(VLAN_100)
+ .setOutput(PORT_1)
+ .build();
+ PiAction piAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_NEXT_ROUTING_SIMPLE)
+ .withParameter(new PiActionParam(
+ FabricConstants.SMAC, ROUTER_MAC.toBytes()))
+ .withParameter(new PiActionParam(
+ FabricConstants.DMAC, HOST_MAC.toBytes()))
+ .withParameter(new PiActionParam(
+ FabricConstants.PORT_NUM, PORT_1.toLong()))
+ .build();
+ testSimple(treatment, piAction);
+ }
+
+ private void testSimple(TrafficTreatment treatment, PiAction piAction) throws FabricPipelinerException {
+ NextObjective nextObjective = DefaultNextObjective.builder()
+ .withId(NEXT_ID_1)
+ .withPriority(PRIORITY)
+ .withMeta(VLAN_META)
+ .addTreatment(treatment)
+ .withType(NextObjective.Type.SIMPLE)
+ .makePermanent()
+ .fromApp(APP_ID)
+ .add();
+
+ ObjectiveTranslation actualTranslation = translatorSimple.translate(nextObjective);
+
+ // Simple table
+ PiCriterion nextIdCriterion = PiCriterion.builder()
+ .matchExact(FabricConstants.HDR_NEXT_ID, NEXT_ID_1)
+ .build();
+ TrafficSelector nextIdSelector = DefaultTrafficSelector.builder()
+ .matchPi(nextIdCriterion)
+ .build();
+ FlowRule expectedFlowRule = DefaultFlowRule.builder()
+ .forDevice(DEVICE_ID)
+ .fromApp(APP_ID)
+ .makePermanent()
+ // FIXME: currently next objective doesn't support priority, ignore this
+ .withPriority(0)
+ .forTable(FabricConstants.FABRIC_INGRESS_NEXT_SIMPLE)
+ .withSelector(nextIdSelector)
+ .withTreatment(DefaultTrafficTreatment.builder()
+ .piTableAction(piAction).build())
+ .build();
+
+ ObjectiveTranslation expectedTranslation = ObjectiveTranslation.builder()
+ .addFlowRule(vlanMetaFlowRule)
+ .addFlowRule(expectedFlowRule)
+ .build();
+
+ assertEquals(expectedTranslation, actualTranslation);
+ }
+
+ /**
+ * Test Route and Push Next Objective (set mac, set double vlan and output port).
+ */
+ @Test
+ public void testRouteAndPushNextObjective() throws FabricPipelinerException {
+ TrafficTreatment routeAndPushTreatment = DefaultTrafficTreatment.builder()
+ .setEthSrc(ROUTER_MAC)
+ .setEthDst(HOST_MAC)
+ .setOutput(PORT_1)
+ .setVlanId(VLAN_100)
+ .pushVlan()
+ .setVlanId(VLAN_200)
+ .build();
+
+ NextObjective nextObjective = DefaultNextObjective.builder()
+ .withId(NEXT_ID_1)
+ .withPriority(PRIORITY)
+ .addTreatment(routeAndPushTreatment)
+ .withType(NextObjective.Type.SIMPLE)
+ .makePermanent()
+ .fromApp(APP_ID)
+ .add();
+
+ ObjectiveTranslation actualTranslation = translatorSimple.translate(nextObjective);
+
+ PiAction piActionRouting = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_NEXT_ROUTING_SIMPLE)
+ .withParameter(new PiActionParam(
+ FabricConstants.SMAC, ROUTER_MAC.toBytes()))
+ .withParameter(new PiActionParam(
+ FabricConstants.DMAC, HOST_MAC.toBytes()))
+ .withParameter(new PiActionParam(
+ FabricConstants.PORT_NUM, PORT_1.toLong()))
+ .build();
+
+ PiAction piActionPush = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_NEXT_SET_DOUBLE_VLAN)
+ .withParameter(new PiActionParam(
+ FabricConstants.INNER_VLAN_ID, VLAN_100.toShort()))
+ .withParameter(new PiActionParam(
+ FabricConstants.OUTER_VLAN_ID, VLAN_200.toShort()))
+ .build();
+
+
+ TrafficSelector nextIdSelector = DefaultTrafficSelector.builder()
+ .matchPi(PiCriterion.builder()
+ .matchExact(FabricConstants.HDR_NEXT_ID, NEXT_ID_1)
+ .build())
+ .build();
+ FlowRule expectedFlowRuleRouting = DefaultFlowRule.builder()
+ .forDevice(DEVICE_ID)
+ .fromApp(APP_ID)
+ .makePermanent()
+ // FIXME: currently next objective doesn't support priority, ignore this
+ .withPriority(0)
+ .forTable(FabricConstants.FABRIC_INGRESS_NEXT_SIMPLE)
+ .withSelector(nextIdSelector)
+ .withTreatment(DefaultTrafficTreatment.builder()
+ .piTableAction(piActionRouting).build())
+ .build();
+ FlowRule expectedFlowRuleDoublePush = DefaultFlowRule.builder()
+ .withSelector(nextIdSelector)
+ .withTreatment(DefaultTrafficTreatment.builder()
+ .piTableAction(piActionPush)
+ .build())
+ .forTable(FabricConstants.FABRIC_INGRESS_NEXT_NEXT_VLAN)
+ .makePermanent()
+ // FIXME: currently next objective doesn't support priority, ignore this
+ .withPriority(0)
+ .forDevice(DEVICE_ID)
+ .fromApp(APP_ID)
+ .build();
+
+ ObjectiveTranslation expectedTranslation = ObjectiveTranslation.builder()
+ .addFlowRule(expectedFlowRuleDoublePush)
+ .addFlowRule(expectedFlowRuleRouting)
+ .build();
+
+
+ assertEquals(expectedTranslation, actualTranslation);
+ }
+
+ /**
+ * Test program ecmp output group for Hashed table.
+ */
+ @Test
+ public void testHashedOutput() throws Exception {
+ PiAction piAction1 = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_NEXT_ROUTING_HASHED)
+ .withParameter(new PiActionParam(
+ FabricConstants.SMAC, ROUTER_MAC.toBytes()))
+ .withParameter(new PiActionParam(
+ FabricConstants.DMAC, HOST_MAC.toBytes()))
+ .withParameter(new PiActionParam(
+ FabricConstants.PORT_NUM, PORT_1.toLong()))
+ .build();
+ PiAction piAction2 = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_NEXT_ROUTING_HASHED)
+ .withParameter(new PiActionParam(
+ FabricConstants.SMAC, ROUTER_MAC.toBytes()))
+ .withParameter(new PiActionParam(
+ FabricConstants.DMAC, HOST_MAC.toBytes()))
+ .withParameter(new PiActionParam(
+ FabricConstants.PORT_NUM, PORT_1.toLong()))
+ .build();
+ TrafficTreatment treatment1 = DefaultTrafficTreatment.builder()
+ .piTableAction(piAction1)
+ .build();
+ TrafficTreatment treatment2 = DefaultTrafficTreatment.builder()
+ .piTableAction(piAction2)
+ .build();
+
+ NextObjective nextObjective = DefaultNextObjective.builder()
+ .withId(NEXT_ID_1)
+ .withPriority(PRIORITY)
+ .withMeta(VLAN_META)
+ .addTreatment(treatment1)
+ .addTreatment(treatment2)
+ .withType(NextObjective.Type.HASHED)
+ .makePermanent()
+ .fromApp(APP_ID)
+ .add();
+
+ ObjectiveTranslation actualTranslation = translatorHashed.doTranslate(nextObjective);
+
+ // Expected hashed table flow rule.
+ PiCriterion nextIdCriterion = PiCriterion.builder()
+ .matchExact(FabricConstants.HDR_NEXT_ID, NEXT_ID_1)
+ .build();
+ TrafficSelector nextIdSelector = DefaultTrafficSelector.builder()
+ .matchPi(nextIdCriterion)
+ .build();
+ PiActionProfileGroupId actionGroupId = PiActionProfileGroupId.of(NEXT_ID_1);
+ TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .piTableAction(actionGroupId)
+ .build();
+ FlowRule expectedFlowRule = DefaultFlowRule.builder()
+ .forDevice(DEVICE_ID)
+ .fromApp(APP_ID)
+ .makePermanent()
+ // FIXME: currently next objective doesn't support priority, ignore this
+ .withPriority(0)
+ .forTable(FabricConstants.FABRIC_INGRESS_NEXT_HASHED)
+ .withSelector(nextIdSelector)
+ .withTreatment(treatment)
+ .build();
+
+ // Expected group
+ List<TrafficTreatment> treatments = ImmutableList.of(treatment1, treatment2);
+ List<GroupBucket> buckets = treatments.stream()
+ .map(DefaultGroupBucket::createSelectGroupBucket)
+ .collect(Collectors.toList());
+ GroupBuckets groupBuckets = new GroupBuckets(buckets);
+ PiGroupKey groupKey = new PiGroupKey(FabricConstants.FABRIC_INGRESS_NEXT_HASHED,
+ FabricConstants.FABRIC_INGRESS_NEXT_HASHED_SELECTOR,
+ NEXT_ID_1);
+ GroupDescription expectedGroup = new DefaultGroupDescription(
+ DEVICE_ID,
+ GroupDescription.Type.SELECT,
+ groupBuckets,
+ groupKey,
+ NEXT_ID_1,
+ APP_ID
+ );
+
+ ObjectiveTranslation expectedTranslation = ObjectiveTranslation.builder()
+ .addFlowRule(expectedFlowRule)
+ .addFlowRule(vlanMetaFlowRule)
+ .addGroup(expectedGroup)
+ .build();
+
+ assertEquals(expectedTranslation, actualTranslation);
+
+ }
+
+ /**
+ * Test program output group for Broadcast table.
+ */
+ @Test
+ public void testBroadcastOutput() throws FabricPipelinerException {
+ TrafficTreatment treatment1 = DefaultTrafficTreatment.builder()
+ .setOutput(PORT_1)
+ .build();
+ TrafficTreatment treatment2 = DefaultTrafficTreatment.builder()
+ .popVlan()
+ .setOutput(PORT_2)
+ .build();
+ NextObjective nextObjective = DefaultNextObjective.builder()
+ .withId(NEXT_ID_1)
+ .withPriority(PRIORITY)
+ .addTreatment(treatment1)
+ .addTreatment(treatment2)
+ .withMeta(VLAN_META)
+ .withType(NextObjective.Type.BROADCAST)
+ .makePermanent()
+ .fromApp(APP_ID)
+ .add();
+
+ ObjectiveTranslation actualTranslation = translatorHashed.doTranslate(nextObjective);
+
+ // Should generate 3 flows:
+ // - Multicast table flow that matches on next-id and set multicast group (1)
+ // - Egress VLAN pop handling for treatment2 (0)
+ // - Next VLAN flow (2)
+ // And 2 groups:
+ // - Multicast group
+
+ // Expected multicast table flow rule.
+ PiCriterion nextIdCriterion = PiCriterion.builder()
+ .matchExact(FabricConstants.HDR_NEXT_ID, NEXT_ID_1)
+ .build();
+ TrafficSelector nextIdSelector = DefaultTrafficSelector.builder()
+ .matchPi(nextIdCriterion)
+ .build();
+ PiAction setMcGroupAction = PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_NEXT_SET_MCAST_GROUP_ID)
+ .withParameter(new PiActionParam(
+ FabricConstants.GROUP_ID, NEXT_ID_1))
+ .build();
+ TrafficTreatment treatment = DefaultTrafficTreatment.builder()
+ .piTableAction(setMcGroupAction)
+ .build();
+ FlowRule expectedHashedFlowRule = DefaultFlowRule.builder()
+ .forDevice(DEVICE_ID)
+ .fromApp(APP_ID)
+ .makePermanent()
+ .withPriority(nextObjective.priority())
+ .forTable(FabricConstants.FABRIC_INGRESS_NEXT_MULTICAST)
+ .withSelector(nextIdSelector)
+ .withTreatment(treatment)
+ .build();
+
+ // Expected egress VLAN POP flow rule.
+ PiCriterion egressVlanTableMatch = PiCriterion.builder()
+ .matchExact(FabricConstants.HDR_EG_PORT, PORT_2.toLong())
+ .build();
+ TrafficSelector selectorForEgressVlan = DefaultTrafficSelector.builder()
+ .matchPi(egressVlanTableMatch)
+ .matchVlanId(VLAN_100)
+ .build();
+ PiAction piActionForEgressVlan = PiAction.builder()
+ .withId(FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_POP_VLAN)
+ .build();
+ TrafficTreatment treatmentForEgressVlan = DefaultTrafficTreatment.builder()
+ .piTableAction(piActionForEgressVlan)
+ .build();
+ FlowRule expectedEgressVlanRule = DefaultFlowRule.builder()
+ .withSelector(selectorForEgressVlan)
+ .withTreatment(treatmentForEgressVlan)
+ .forTable(FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN)
+ .makePermanent()
+ .withPriority(nextObjective.priority())
+ .forDevice(DEVICE_ID)
+ .fromApp(APP_ID)
+ .build();
+
+ // Expected ALL group.
+ TrafficTreatment allGroupTreatment1 = DefaultTrafficTreatment.builder()
+ .setOutput(PORT_1)
+ .build();
+ TrafficTreatment allGroupTreatment2 = DefaultTrafficTreatment.builder()
+ .setOutput(PORT_2)
+ .build();
+ List<TrafficTreatment> allTreatments = ImmutableList.of(
+ allGroupTreatment1, allGroupTreatment2);
+ List<GroupBucket> allBuckets = allTreatments.stream()
+ .map(DefaultGroupBucket::createAllGroupBucket)
+ .collect(Collectors.toList());
+ GroupBuckets allGroupBuckets = new GroupBuckets(allBuckets);
+ GroupKey allGroupKey = new DefaultGroupKey(FabricPipeliner.KRYO.serialize(NEXT_ID_1));
+ GroupDescription expectedAllGroup = new DefaultGroupDescription(
+ DEVICE_ID,
+ GroupDescription.Type.ALL,
+ allGroupBuckets,
+ allGroupKey,
+ NEXT_ID_1,
+ APP_ID
+ );
+
+ ObjectiveTranslation expectedTranslation = ObjectiveTranslation.builder()
+ .addFlowRule(expectedHashedFlowRule)
+ .addFlowRule(vlanMetaFlowRule)
+ .addFlowRule(expectedEgressVlanRule)
+ .addGroup(expectedAllGroup)
+ .build();
+
+ assertEquals(expectedTranslation, actualTranslation);
+ }
+
+ /**
+ * Test XConnect NextObjective.
+ *
+ * @throws FabricPipelinerException
+ */
+ @Test
+ public void testXconnectOutput() throws FabricPipelinerException {
+ TrafficTreatment treatment1 = DefaultTrafficTreatment.builder()
+ .setOutput(PORT_1)
+ .build();
+ TrafficTreatment treatment2 = DefaultTrafficTreatment.builder()
+ .setOutput(PORT_2)
+ .build();
+ NextObjective nextObjective = DefaultNextObjective.builder()
+ .withId(NEXT_ID_1)
+ .withPriority(PRIORITY)
+ .addTreatment(treatment1)
+ .addTreatment(treatment2)
+ .withType(NextObjective.Type.BROADCAST)
+ .makePermanent()
+ .fromApp(XCONNECT_APP_ID)
+ .add();
+
+ ObjectiveTranslation actualTranslation = translatorHashed.doTranslate(nextObjective);
+
+ // Should generate 2 flows for the xconnect table.
+
+ // Expected multicast table flow rule.
+ PiCriterion nextIdCriterion = PiCriterion.builder()
+ .matchExact(FabricConstants.HDR_NEXT_ID, NEXT_ID_1)
+ .build();
+ TrafficSelector xcSelector1 = DefaultTrafficSelector.builder()
+ .matchPi(nextIdCriterion)
+ .matchInPort(PORT_1)
+ .build();
+ TrafficTreatment xcTreatment1 = DefaultTrafficTreatment.builder()
+ .piTableAction(PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_NEXT_OUTPUT_XCONNECT)
+ .withParameter(new PiActionParam(FabricConstants.PORT_NUM, PORT_2.toLong()))
+ .build())
+ .build();
+ TrafficSelector xcSelector2 = DefaultTrafficSelector.builder()
+ .matchPi(nextIdCriterion)
+ .matchInPort(PORT_2)
+ .build();
+ TrafficTreatment xcTreatment2 = DefaultTrafficTreatment.builder()
+ .piTableAction(PiAction.builder()
+ .withId(FabricConstants.FABRIC_INGRESS_NEXT_OUTPUT_XCONNECT)
+ .withParameter(new PiActionParam(FabricConstants.PORT_NUM, PORT_1.toLong()))
+ .build())
+ .build();
+
+ FlowRule expectedXcFlowRule1 = DefaultFlowRule.builder()
+ .forDevice(DEVICE_ID)
+ .fromApp(XCONNECT_APP_ID)
+ .makePermanent()
+ .withPriority(nextObjective.priority())
+ .forTable(FabricConstants.FABRIC_INGRESS_NEXT_XCONNECT)
+ .withSelector(xcSelector1)
+ .withTreatment(xcTreatment1)
+ .build();
+ FlowRule expectedXcFlowRule2 = DefaultFlowRule.builder()
+ .forDevice(DEVICE_ID)
+ .fromApp(XCONNECT_APP_ID)
+ .makePermanent()
+ .withPriority(nextObjective.priority())
+ .forTable(FabricConstants.FABRIC_INGRESS_NEXT_XCONNECT)
+ .withSelector(xcSelector2)
+ .withTreatment(xcTreatment2)
+ .build();
+
+ ObjectiveTranslation expectedTranslation = ObjectiveTranslation.builder()
+ .addFlowRule(expectedXcFlowRule1)
+ .addFlowRule(expectedXcFlowRule2)
+ .build();
+
+ assertEquals(expectedTranslation, actualTranslation);
+ }
+}
diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipelinerTest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipelinerTest.java
new file mode 100644
index 0000000..850e21f
--- /dev/null
+++ b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/FabricPipelinerTest.java
@@ -0,0 +1,75 @@
+/*
+ * 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.pipelines.fabric.impl.behaviour.pipeliner;
+
+import org.junit.Test;
+import org.onlab.packet.IpPrefix;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.MplsLabel;
+import org.onlab.packet.VlanId;
+import org.onosproject.TestApplicationId;
+import org.onosproject.core.ApplicationId;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.flow.DefaultTrafficSelector;
+import org.onosproject.net.flow.TrafficSelector;
+import org.onosproject.pipelines.fabric.impl.behaviour.FabricCapabilities;
+
+import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+
+public class FabricPipelinerTest {
+ static final ApplicationId APP_ID = TestApplicationId.create("FabricPipelinerTest");
+ static final ApplicationId XCONNECT_APP_ID = TestApplicationId.create("FabricPipelinerTest.xconnect");
+ static final DeviceId DEVICE_ID = DeviceId.deviceId("device:bmv2:11");
+ static final int PRIORITY = 100;
+ static final PortNumber PORT_1 = PortNumber.portNumber(1);
+ static final PortNumber PORT_2 = PortNumber.portNumber(2);
+ static final VlanId VLAN_100 = VlanId.vlanId("100");
+ static final VlanId VLAN_200 = VlanId.vlanId("200");
+ static final MacAddress HOST_MAC = MacAddress.valueOf("00:00:00:00:00:01");
+ static final MacAddress ROUTER_MAC = MacAddress.valueOf("00:00:00:00:02:01");
+ static final IpPrefix IPV4_UNICAST_ADDR = IpPrefix.valueOf("10.0.0.1/32");
+ static final IpPrefix IPV4_MCAST_ADDR = IpPrefix.valueOf("224.0.0.1/32");
+ static final IpPrefix IPV6_UNICAST_ADDR = IpPrefix.valueOf("2000::1/32");
+ static final IpPrefix IPV6_MCAST_ADDR = IpPrefix.valueOf("ff00::1/32");
+ static final MplsLabel MPLS_10 = MplsLabel.mplsLabel(10);
+ static final Integer NEXT_ID_1 = 1;
+ static final TrafficSelector VLAN_META = DefaultTrafficSelector.builder()
+ .matchVlanId(VLAN_100)
+ .build();
+
+ FabricCapabilities capabilitiesHashed;
+ FabricCapabilities capabilitiesSimple;
+
+ void doSetup() {
+ this.capabilitiesHashed = createNiceMock(FabricCapabilities.class);
+ this.capabilitiesSimple = createNiceMock(FabricCapabilities.class);
+ expect(capabilitiesHashed.hasHashedTable()).andReturn(true).anyTimes();
+ expect(capabilitiesSimple.hasHashedTable()).andReturn(false).anyTimes();
+ expect(capabilitiesSimple.supportDoubleVlanTerm()).andReturn(true).anyTimes();
+ replay(capabilitiesHashed);
+ replay(capabilitiesSimple);
+ }
+
+ @Test
+ public void fakeTest() {
+ // Needed otherwise Bazel complains about a test class without test cases.
+ assert true;
+ }
+}
diff --git a/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingFunctionTypeTest.java b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingFunctionTypeTest.java
new file mode 100644
index 0000000..8d98d862
--- /dev/null
+++ b/pipelines/fabric/impl/src/test/java/org/onosproject/pipelines/fabric/impl/behaviour/pipeliner/ForwardingFunctionTypeTest.java
@@ -0,0 +1,138 @@
+/*
+ * 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.pipelines.fabric.impl.behaviour.pipeliner;
+
+import org.junit.Ignore;
+import org.junit.Test;
+import org.onlab.packet.Ethernet;
+import org.onlab.packet.IpPrefix;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.MplsLabel;
+import org.onlab.packet.VlanId;
+import org.onosproject.TestApplicationId;
+import org.onosproject.core.ApplicationId;
+import org.onosproject.net.flow.DefaultTrafficSelector;
+import org.onosproject.net.flow.TrafficSelector;
+import org.onosproject.net.flowobjective.DefaultForwardingObjective;
+import org.onosproject.net.flowobjective.ForwardingObjective;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Unit tests for Forwarding class.
+ */
+public class ForwardingFunctionTypeTest {
+ private static final ApplicationId APP_ID = TestApplicationId.create("ForwardingFunctionTypeTest");
+ private static final VlanId VLAN_100 = VlanId.vlanId((short) 100);
+ private static final MacAddress MAC_ADDR = MacAddress.valueOf("00:00:00:00:00:01");
+ private static final MacAddress MAC_NONE = MacAddress.NONE;
+ private static final IpPrefix IPV4_UNICAST_ADDR = IpPrefix.valueOf("10.0.0.1/32");
+ private static final IpPrefix IPV4_MCAST_ADDR = IpPrefix.valueOf("224.0.0.1/32");
+ private static final IpPrefix IPV6_UNICAST_ADDR = IpPrefix.valueOf("2000::1/32");
+ private static final IpPrefix IPV6_MCAST_ADDR = IpPrefix.valueOf("ff00::1/32");
+ private static final MplsLabel MPLS_10 = MplsLabel.mplsLabel(10);
+ private TrafficSelector selector;
+
+ /**
+ * Match Vlan + EthDst.
+ */
+ @Test
+ public void testL2Unicast() {
+ selector = DefaultTrafficSelector.builder()
+ .matchVlanId(VLAN_100)
+ .matchEthDst(MAC_ADDR)
+ .build();
+ testFft(selector, ForwardingFunctionType.L2_UNICAST);
+ }
+
+ @Test
+ public void testL2Broadcast() {
+ selector = DefaultTrafficSelector.builder()
+ .matchVlanId(VLAN_100)
+ .build();
+ testFft(selector, ForwardingFunctionType.L2_BROADCAST);
+ }
+
+ @Test
+ public void testL2BroadcastWithMacNone() {
+ selector = DefaultTrafficSelector.builder()
+ .matchVlanId(VLAN_100)
+ .matchEthDst(MAC_NONE)
+ .build();
+ testFft(selector, ForwardingFunctionType.L2_BROADCAST);
+ }
+
+ @Test
+ public void testIpv4Unicast() {
+ selector = DefaultTrafficSelector.builder()
+ .matchEthType(Ethernet.TYPE_IPV4)
+ .matchIPDst(IPV4_UNICAST_ADDR)
+ .build();
+ testFft(selector, ForwardingFunctionType.IPV4_ROUTING);
+ }
+
+ @Test
+ @Ignore
+ public void testIpv4Multicast() {
+ selector = DefaultTrafficSelector.builder()
+ .matchEthType(Ethernet.TYPE_IPV4)
+ .matchIPDst(IPV4_MCAST_ADDR)
+ .build();
+ testFft(selector, ForwardingFunctionType.IPV4_ROUTING);
+ }
+
+ @Test
+ @Ignore
+ public void testIpv6Unicast() {
+ selector = DefaultTrafficSelector.builder()
+ .matchEthType(Ethernet.TYPE_IPV6)
+ .matchIPDst(IPV6_UNICAST_ADDR)
+ .build();
+ testFft(selector, ForwardingFunctionType.IPV6_ROUTING);
+ }
+
+ @Test
+ @Ignore
+ public void testIpv6Multicast() {
+ selector = DefaultTrafficSelector.builder()
+ .matchEthType(Ethernet.TYPE_IPV6)
+ .matchIPDst(IPV6_MCAST_ADDR)
+ .build();
+ testFft(selector, ForwardingFunctionType.IPV4_ROUTING);
+ }
+
+ @Test
+ public void testMplsUnicast() {
+ selector = DefaultTrafficSelector.builder()
+ .matchEthType(Ethernet.MPLS_UNICAST)
+ .matchMplsLabel(MPLS_10)
+ .matchMplsBos(true)
+ .build();
+ testFft(selector, ForwardingFunctionType.MPLS_SEGMENT_ROUTING);
+ }
+
+ private void testFft(TrafficSelector selector, ForwardingFunctionType expectedFft) {
+ ForwardingObjective fwd = DefaultForwardingObjective.builder()
+ .withSelector(selector)
+ .withFlag(ForwardingObjective.Flag.SPECIFIC)
+ .nextStep(0)
+ .fromApp(APP_ID)
+ .add();
+ assertEquals(expectedFft,
+ ForwardingFunctionType.getForwardingFunctionType(fwd));
+ }
+}