diff --git a/apps/inbandtelemetry/BUILD b/apps/inbandtelemetry/BUILD new file mode 100644 index 0000000000..3a6d7eba62 --- /dev/null +++ b/apps/inbandtelemetry/BUILD @@ -0,0 +1,15 @@ +BUNDLES = [ + "//apps/inbandtelemetry/api:onos-apps-inbandtelemetry-api", + "//apps/inbandtelemetry/impl:onos-apps-inbandtelemetry-impl", + "//apps/inbandtelemetry/app:onos-apps-inbandtelemetry-app", +] + +onos_app( + app_name = "org.onosproject.inbandtelemetry", + category = "Monitoring", + description = "Provides managements of INT-capable devices. Specifies flows to enable INT and" + + "types of metadata to collect. Sets up INT-related information.", + included_bundles = BUNDLES, + title = "P4 In-band Network Telemetry Service", + url = "http://onosproject.org", +) diff --git a/apps/inbandtelemetry/api/src/main/java/org/onosproject/inbandtelemetry/api/IntConfig.java b/apps/inbandtelemetry/api/src/main/java/org/onosproject/inbandtelemetry/api/IntConfig.java index a3e614808f..c5af580107 100644 --- a/apps/inbandtelemetry/api/src/main/java/org/onosproject/inbandtelemetry/api/IntConfig.java +++ b/apps/inbandtelemetry/api/src/main/java/org/onosproject/inbandtelemetry/api/IntConfig.java @@ -30,7 +30,7 @@ public final class IntConfig { /** * Represents a type of telemetry spec to collect in the dataplane. */ - enum TelemetrySpec { + public enum TelemetrySpec { /** * Embeds telemetry metadata according to the INT specification. * diff --git a/apps/inbandtelemetry/api/src/main/java/org/onosproject/inbandtelemetry/api/IntProgrammable.java b/apps/inbandtelemetry/api/src/main/java/org/onosproject/inbandtelemetry/api/IntProgrammable.java index 452b787af2..507f8702a6 100644 --- a/apps/inbandtelemetry/api/src/main/java/org/onosproject/inbandtelemetry/api/IntProgrammable.java +++ b/apps/inbandtelemetry/api/src/main/java/org/onosproject/inbandtelemetry/api/IntProgrammable.java @@ -16,18 +16,64 @@ package org.onosproject.inbandtelemetry.api; import com.google.common.annotations.Beta; +import org.onosproject.net.PortNumber; import org.onosproject.net.driver.HandlerBehaviour; -import java.util.concurrent.CompletableFuture; - +/** + * Abstraction of a device implementing In-band Network Telemetry (INT) + * capabilities. + */ @Beta public interface IntProgrammable extends HandlerBehaviour { /** - * Initializes the pipeline, by installing required flow rules - * not relevant to specific watchlist, report and event. + * INT functionalities that a device can implement. */ - void init(); + enum IntFunctionality { + /** + * Source functionality. + */ + SOURCE, + /** + * Sink functionality. + */ + SINK, + /** + * Transit functionality. + */ + TRANSIT + } + + /** + * Initializes the pipeline, by installing required flow rules not relevant + * to specific watchlist, report and event. Returns true if the operation + * was successful, false otherwise. + * + * @return true if successful, false otherwise + */ + boolean init(); + + /** + * Configures the given port as an INT source port. Packets received via + * this port can be modified to add the INT header, if a corresponding INT + * objective is matched. Returns true if the operation was successful, false + * otherwise. + * + * @param port port + * @return true if successful, false otherwise + */ + boolean setSourcePort(PortNumber port); + + /** + * Configures the given port as an INT sink port. Packets forwarded via this + * port will be stripped of the INT header and a corresponding INT report + * will be generated. Returns true if the operation was successful, false + * otherwise. + * + * @param port port + * @return true if successful, false otherwise + */ + boolean setSinkPort(PortNumber port); /** * Adds a given IntObjective to the device. @@ -35,7 +81,7 @@ public interface IntProgrammable extends HandlerBehaviour { * @param obj an IntObjective * @return true if the objective is successfully added; false otherwise. */ - CompletableFuture addIntObjective(IntObjective obj); + boolean addIntObjective(IntObjective obj); /** * Removes a given IntObjective entry from the device. @@ -43,7 +89,7 @@ public interface IntProgrammable extends HandlerBehaviour { * @param obj an IntObjective * @return true if the objective is successfully removed; false otherwise. */ - CompletableFuture removeIntObjective(IntObjective obj); + boolean removeIntObjective(IntObjective obj); /** * Set up report-related configuration. @@ -51,7 +97,20 @@ public interface IntProgrammable extends HandlerBehaviour { * @param config a configuration regarding to the collector * @return true if the objective is successfully added; false otherwise. */ - CompletableFuture setupIntConfig(IntConfig config); + boolean setupIntConfig(IntConfig config); + + /** + * Clean up any INT-related configuration from the device. + */ + void cleanup(); + + /** + * Returns true if this device supports the given INT functionality. + * + * @param functionality INt functionality + * @return true if functionality is supported, false otherwise + */ + boolean supportsFunctionality(IntFunctionality functionality); //TODO: [ONOS-7616] Design IntEvent and related APIs } diff --git a/apps/inbandtelemetry/api/src/main/java/org/onosproject/inbandtelemetry/api/IntService.java b/apps/inbandtelemetry/api/src/main/java/org/onosproject/inbandtelemetry/api/IntService.java index ef2e1adb3e..59e65c3024 100644 --- a/apps/inbandtelemetry/api/src/main/java/org/onosproject/inbandtelemetry/api/IntService.java +++ b/apps/inbandtelemetry/api/src/main/java/org/onosproject/inbandtelemetry/api/IntService.java @@ -43,13 +43,13 @@ public interface IntService { } /** - * Starts the INT functionalities in all INT-capable devices. + * Starts the INT functionality in all INT-capable devices. * This will include populating tables to process INT packets. */ void startInt(); /** - * Starts the INT functionalities in specified set of INT transit devices. + * Starts the INT functionality in specified set of INT transit devices. *

* Note: this is an experimental API, which can be either changed or removed. * @@ -116,4 +116,4 @@ public interface IntService { Map getIntIntents(); //TODO: [ONOS-7616] Design IntEvent and related APIs -} \ No newline at end of file +} diff --git a/apps/inbandtelemetry/app/BUILD b/apps/inbandtelemetry/app/BUILD new file mode 100644 index 0000000000..3391ffae61 --- /dev/null +++ b/apps/inbandtelemetry/app/BUILD @@ -0,0 +1,11 @@ +COMPILE_DEPS = CORE_DEPS + KRYO + JACKSON + [ + "//core/store/serializers:onos-core-serializers", + "//apps/inbandtelemetry/api:onos-apps-inbandtelemetry-api", +] + +TEST_DEPS = TEST_REST + +osgi_jar_with_tests( + test_deps = TEST_DEPS, + deps = COMPILE_DEPS, +) diff --git a/apps/inbandtelemetry/app/src/main/java/org/onosproject/inbandtelemetry/app/IntControl.java b/apps/inbandtelemetry/app/src/main/java/org/onosproject/inbandtelemetry/app/IntControl.java deleted file mode 100644 index cbd520cead..0000000000 --- a/apps/inbandtelemetry/app/src/main/java/org/onosproject/inbandtelemetry/app/IntControl.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2015-present Open Networking Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.onosproject.inbandtelemetry.app; - -import org.osgi.service.component.annotations.Activate; -import org.osgi.service.component.annotations.Deactivate; -import org.osgi.service.component.annotations.Reference; -import org.osgi.service.component.annotations.Component; -import org.osgi.service.component.annotations.ReferenceCardinality; -import org.onosproject.core.CoreService; -import org.onosproject.inbandtelemetry.api.IntService; -import org.onosproject.net.host.HostService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -@Component(immediate = true) -public class IntControl { - private final Logger log = LoggerFactory.getLogger(getClass()); -// private ApplicationId appId; -// private static final int collectorPort = 1234; -// private static final IpAddress collectorIp = IpAddress.valueOf("10.0.0.3"); - - @Reference(cardinality = ReferenceCardinality.MANDATORY) - protected CoreService coreService; - - @Reference(cardinality = ReferenceCardinality.MANDATORY) - protected IntService intService; - - @Reference(cardinality = ReferenceCardinality.MANDATORY) - protected HostService hostService; - - @Activate - protected void activate() { - coreService.registerApplication("org.onosproject.inbandtelemetry.app"); - log.info("Started"); - } - - @Deactivate - protected void deactivate() { - log.info("Stopped"); - } -} diff --git a/apps/inbandtelemetry/app/src/main/resources/app/view/intApp/intApp.css b/apps/inbandtelemetry/app/src/main/resources/app/view/intApp/intApp.css index 1cfd4474b2..7c2bbe2542 100644 --- a/apps/inbandtelemetry/app/src/main/resources/app/view/intApp/intApp.css +++ b/apps/inbandtelemetry/app/src/main/resources/app/view/intApp/intApp.css @@ -58,6 +58,10 @@ text-align: center; } +#ov-int-app-main input { + padding: 4px; + font-size: inherit; +} .light #ov-int-app-main .int-app-config-button { color: white; @@ -68,8 +72,25 @@ background-color: #aaa; } /*---------------------------------------------------------------------------*/ +#ov-int-app-main hr { + border: 0; + height: 1px; + background: #333; +} + #ov-int-app-main h2 { display: inline-block; + margin: 15px 0px 15px; +} + +#ov-int-app-main h3 { + display: inline-block; + margin-bottom: 10px; +} + +#ov-int-app-main h4 { + display: inline-block; + margin-bottom: 10px; } /* #ov-int-app-main .table-body{ display: inline-block; diff --git a/apps/inbandtelemetry/app/src/main/resources/app/view/intApp/intApp.html b/apps/inbandtelemetry/app/src/main/resources/app/view/intApp/intApp.html index 42717e0ca9..8c39cdc6fe 100644 --- a/apps/inbandtelemetry/app/src/main/resources/app/view/intApp/intApp.html +++ b/apps/inbandtelemetry/app/src/main/resources/app/view/intApp/intApp.html @@ -1,62 +1,128 @@

-
-
- Collector IP - +
+

In-band Network Telemetry (INT) Control + Application

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

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

+ INT Collector Configuration +

+
+

+ Collector IPv4 address and UDP port +

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

+ INT Watchlist Rules +

+ +
+
+

+ Create New Watchlist Rule +

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

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

+

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

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

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

+ * The implementation listens for different types of events and when required it + * configures a device by cleaning-up any previous state and applying the new + * one. + */ +@Component(immediate = true, service = IntService.class) +public class SimpleIntManager implements IntService { + + private final Logger log = getLogger(getClass()); + + private static final int CONFIG_EVENT_DELAY = 5; // Seconds. + + private static final String APP_NAME = "org.onosproject.inbandtelemetry"; + + @Reference(cardinality = ReferenceCardinality.MANDATORY) + private CoreService coreService; + + @Reference(cardinality = ReferenceCardinality.MANDATORY) + private DeviceService deviceService; + + @Reference(cardinality = ReferenceCardinality.MANDATORY) + private StorageService storageService; + + @Reference(cardinality = ReferenceCardinality.MANDATORY) + private MastershipService mastershipService; + + @Reference(cardinality = ReferenceCardinality.MANDATORY) + private HostService hostService; + + private final Striped deviceLocks = Striped.lock(10); + + private final ConcurrentMap> scheduledDeviceTasks = Maps.newConcurrentMap(); + + // Distributed state. + private ConsistentMap intentMap; + private ConsistentMap devicesToConfigure; + private AtomicValue intConfig; + private AtomicValue intStarted; + private AtomicIdGenerator intentIds; + + // Event listeners. + private final InternalHostListener hostListener = new InternalHostListener(); + private final InternalDeviceListener deviceListener = new InternalDeviceListener(); + private final InternalIntentMapListener intentMapListener = new InternalIntentMapListener(); + private final InternalIntConfigListener intConfigListener = new InternalIntConfigListener(); + private final InternalIntStartedListener intStartedListener = new InternalIntStartedListener(); + private final InternalDeviceToConfigureListener devicesToConfigureListener = + new InternalDeviceToConfigureListener(); + + @Activate + public void activate() { + + final ApplicationId appId = coreService.registerApplication(APP_NAME); + + KryoNamespace.Builder serializer = KryoNamespace.newBuilder() + .register(KryoNamespaces.API) + .register(IntIntent.class) + .register(IntIntentId.class) + .register(IntDeviceRole.class) + .register(IntIntent.IntHeaderType.class) + .register(IntIntent.IntMetadataType.class) + .register(IntIntent.IntReportType.class) + .register(IntIntent.TelemetryMode.class) + .register(IntConfig.class) + .register(IntConfig.TelemetrySpec.class); + + devicesToConfigure = storageService.consistentMapBuilder() + .withSerializer(Serializer.using(serializer.build())) + .withName("onos-int-devices-to-configure") + .withApplicationId(appId) + .withPurgeOnUninstall() + .build(); + devicesToConfigure.addListener(devicesToConfigureListener); + + intentMap = storageService.consistentMapBuilder() + .withSerializer(Serializer.using(serializer.build())) + .withName("onos-int-intents") + .withApplicationId(appId) + .withPurgeOnUninstall() + .build(); + intentMap.addListener(intentMapListener); + + intStarted = storageService.atomicValueBuilder() + .withSerializer(Serializer.using(serializer.build())) + .withName("onos-int-started") + .withApplicationId(appId) + .build() + .asAtomicValue(); + intStarted.addListener(intStartedListener); + + intConfig = storageService.atomicValueBuilder() + .withSerializer(Serializer.using(serializer.build())) + .withName("onos-int-config") + .withApplicationId(appId) + .build() + .asAtomicValue(); + intConfig.addListener(intConfigListener); + + intentIds = storageService.getAtomicIdGenerator("int-intent-id-generator"); + + // Bootstrap config for already existing devices. + triggerAllDeviceConfigure(); + + hostService.addListener(hostListener); + deviceService.addListener(deviceListener); + + startInt(); + log.info("Started", appId.id()); + } + + @Deactivate + public void deactivate() { + deviceService.removeListener(deviceListener); + hostService.removeListener(hostListener); + intentIds = null; + intConfig.removeListener(intConfigListener); + intConfig = null; + intStarted.removeListener(intStartedListener); + intStarted = null; + intentMap.removeListener(intentMapListener); + intentMap = null; + devicesToConfigure.removeListener(devicesToConfigureListener); + devicesToConfigure.destroy(); + devicesToConfigure = null; + // Cancel tasks (if any). + scheduledDeviceTasks.values().forEach(f -> { + f.cancel(true); + if (!f.isDone()) { + try { + f.get(1, TimeUnit.SECONDS); + } catch (InterruptedException | ExecutionException | TimeoutException e) { + // Don't care, we are terminating the service anyways. + } + } + }); + // Clean up INT rules from existing devices. + deviceService.getDevices().forEach(d -> cleanupDevice(d.id())); + log.info("Deactivated"); + } + + @Override + public void startInt() { + // Atomic value event will trigger device configure. + intStarted.set(true); + } + + @Override + public void startInt(Set deviceIds) { + log.warn("Starting INT for a subset of devices is not supported"); + } + + @Override + public void stopInt() { + // Atomic value event will trigger device configure. + intStarted.set(false); + } + + @Override + public void stopInt(Set deviceIds) { + log.warn("Stopping INT for a subset of devices is not supported"); + } + + @Override + public void setConfig(IntConfig cfg) { + checkNotNull(cfg); + // Atomic value event will trigger device configure. + intConfig.set(cfg); + } + + @Override + public IntConfig getConfig() { + return intConfig.get(); + } + + @Override + public IntIntentId installIntIntent(IntIntent intent) { + checkNotNull(intent); + final Integer intentId = (int) intentIds.nextId(); + final IntIntentId intIntentId = IntIntentId.valueOf(intentId); + // Intent map event will trigger device configure. + intentMap.put(intIntentId, intent); + return intIntentId; + } + + @Override + public void removeIntIntent(IntIntentId intentId) { + checkNotNull(intentId); + // Intent map event will trigger device configure. + intentMap.remove(intentId).value(); + } + + @Override + public IntIntent getIntIntent(IntIntentId intentId) { + return Optional.ofNullable(intentMap.get(intentId).value()).orElse(null); + } + + @Override + public Map getIntIntents() { + return intentMap.asJavaMap(); + } + + private boolean isConfigTaskValid(DeviceId deviceId, long creationTime) { + Versioned versioned = devicesToConfigure.get(deviceId); + return versioned != null && versioned.creationTime() == creationTime; + } + + private boolean isIntStarted() { + return intStarted.get(); + } + + private boolean isNotIntConfigured() { + return intConfig.get() == null; + } + + private boolean isIntProgrammable(DeviceId deviceId) { + final Device device = deviceService.getDevice(deviceId); + return device != null && device.is(IntProgrammable.class); + } + + private void triggerDeviceConfigure(DeviceId deviceId) { + if (isIntProgrammable(deviceId)) { + devicesToConfigure.put(deviceId, System.nanoTime()); + } + } + + private void triggerAllDeviceConfigure() { + deviceService.getDevices().forEach(d -> triggerDeviceConfigure(d.id())); + } + + private void configDeviceTask(DeviceId deviceId, long creationTime) { + if (isConfigTaskValid(deviceId, creationTime)) { + // Task outdated. + return; + } + if (!deviceService.isAvailable(deviceId)) { + return; + } + final MastershipRole role = mastershipService.requestRoleForSync(deviceId); + if (!role.equals(MastershipRole.MASTER)) { + return; + } + deviceLocks.get(deviceId).lock(); + try { + // Clean up first. + cleanupDevice(deviceId); + if (!configDevice(deviceId)) { + // Clean up if fails. + cleanupDevice(deviceId); + return; + } + devicesToConfigure.remove(deviceId); + } finally { + deviceLocks.get(deviceId).unlock(); + } + } + + private void cleanupDevice(DeviceId deviceId) { + final Device device = deviceService.getDevice(deviceId); + if (device == null || !device.is(IntProgrammable.class)) { + return; + } + device.as(IntProgrammable.class).cleanup(); + } + + private boolean configDevice(DeviceId deviceId) { + // Returns true if config was successful, false if not and a clean up is + // needed. + final Device device = deviceService.getDevice(deviceId); + if (device == null || !device.is(IntProgrammable.class)) { + return true; + } + + if (isNotIntConfigured()) { + log.warn("Missing INT config, aborting programming of INT device {}", deviceId); + return true; + } + + final boolean isEdge = !hostService.getConnectedHosts(deviceId).isEmpty(); + final IntDeviceRole intDeviceRole = isEdge + ? IntDeviceRole.SOURCE_SINK + : IntDeviceRole.TRANSIT; + + log.info("Started programming of INT device {} with role {}...", + deviceId, intDeviceRole); + + final IntProgrammable intProg = device.as(IntProgrammable.class); + + if (!isIntStarted()) { + // Leave device with no INT configuration. + return true; + } + + if (!intProg.init()) { + log.warn("Unable to init INT pipeline on {}", deviceId); + return false; + } + + if (intDeviceRole != IntDeviceRole.SOURCE_SINK) { + // Stop here, no more configuration needed for transit devices. + return true; + } + + if (intProg.supportsFunctionality(IntProgrammable.IntFunctionality.SINK)) { + if (!intProg.setupIntConfig(intConfig.get())) { + log.warn("Unable to apply INT report config on {}", deviceId); + return false; + } + } + + // Port configuration. + final Set hostPorts = deviceService.getPorts(deviceId) + .stream() + .map(port -> new ConnectPoint(deviceId, port.number())) + .filter(cp -> !hostService.getConnectedHosts(cp).isEmpty()) + .map(ConnectPoint::port) + .collect(Collectors.toSet()); + + for (PortNumber port : hostPorts) { + if (intProg.supportsFunctionality(IntProgrammable.IntFunctionality.SOURCE)) { + log.info("Setting port {}/{} as INT source port...", deviceId, port); + if (!intProg.setSourcePort(port)) { + log.warn("Unable to set INT source port {} on {}", port, deviceId); + return false; + } + } + if (intProg.supportsFunctionality(IntProgrammable.IntFunctionality.SINK)) { + log.info("Setting port {}/{} as INT sink port...", deviceId, port); + if (!intProg.setSinkPort(port)) { + log.warn("Unable to set INT sink port {} on {}", port, deviceId); + return false; + } + } + } + + if (!intProg.supportsFunctionality(IntProgrammable.IntFunctionality.SOURCE)) { + // Stop here, no more configuration needed for sink devices. + return true; + } + + // Apply intents. + // This is a trivial implementation where we simply get the + // corresponding INT objective from an intent and we apply to all source + // device. + final Collection objectives = intentMap.values().stream() + .map(v -> getIntObjective(v.value())) + .collect(Collectors.toList()); + int appliedCount = 0; + for (IntObjective objective : objectives) { + if (intProg.addIntObjective(objective)) { + appliedCount = appliedCount + 1; + } + } + + log.info("Completed programming of {}, applied {} INT objectives of {} total", + deviceId, appliedCount, objectives.size()); + + return true; + } + + private IntObjective getIntObjective(IntIntent intent) { + return new IntObjective.Builder() + .withSelector(intent.selector()) + .withMetadataTypes(intent.metadataTypes()) + .withHeaderType(intent.headerType()) + .build(); + } + + /* Event listeners which trigger device configuration. */ + + private class InternalHostListener implements HostListener { + @Override + public void event(HostEvent event) { + final DeviceId deviceId = event.subject().location().deviceId(); + triggerDeviceConfigure(deviceId); + } + } + + private class InternalDeviceListener implements DeviceListener { + @Override + public void event(DeviceEvent event) { + switch (event.type()) { + case DEVICE_ADDED: + case DEVICE_UPDATED: + case DEVICE_REMOVED: + case DEVICE_SUSPENDED: + case DEVICE_AVAILABILITY_CHANGED: + case PORT_ADDED: + case PORT_UPDATED: + case PORT_REMOVED: + triggerDeviceConfigure(event.subject().id()); + return; + case PORT_STATS_UPDATED: + return; + default: + log.warn("Unknown device event type {}", event.type()); + } + } + } + + private class InternalIntentMapListener + implements MapEventListener { + @Override + public void event(MapEvent event) { + triggerAllDeviceConfigure(); + } + } + + private class InternalIntConfigListener + implements AtomicValueEventListener { + @Override + public void event(AtomicValueEvent event) { + triggerAllDeviceConfigure(); + } + } + + private class InternalIntStartedListener + implements AtomicValueEventListener { + @Override + public void event(AtomicValueEvent event) { + triggerAllDeviceConfigure(); + } + } + + private class InternalDeviceToConfigureListener + implements MapEventListener { + @Override + public void event(MapEvent event) { + if (event.type().equals(MapEvent.Type.REMOVE) || + event.newValue() == null) { + return; + } + // Schedule task in the future. Wait for events for this device to + // stabilize. + final DeviceId deviceId = event.key(); + final long creationTime = event.newValue().creationTime(); + ScheduledFuture newTask = SharedScheduledExecutors.newTimeout( + () -> configDeviceTask(deviceId, creationTime), + CONFIG_EVENT_DELAY, TimeUnit.SECONDS); + ScheduledFuture oldTask = scheduledDeviceTasks.put(deviceId, newTask); + if (oldTask != null) { + oldTask.cancel(false); + } + } + } +} diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultPrometheusTelemetryConfig.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultPrometheusTelemetryConfig.java index b22f053d55..33d1d2e498 100644 --- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultPrometheusTelemetryConfig.java +++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultPrometheusTelemetryConfig.java @@ -124,7 +124,6 @@ public final class DefaultPrometheusTelemetryConfig implements PrometheusTelemet @Override public PrometheusTelemetryConfig build() { checkNotNull(address, "Prometheus exporter binding address cannot be null"); - checkNotNull(configMap, "Config map cannot be null"); return new DefaultPrometheusTelemetryConfig(address, port, configMap); } } diff --git a/core/api/src/main/java/org/onosproject/net/AbstractAnnotated.java b/core/api/src/main/java/org/onosproject/net/AbstractAnnotated.java index 9e71fbd1bf..07bc6a7716 100644 --- a/core/api/src/main/java/org/onosproject/net/AbstractAnnotated.java +++ b/core/api/src/main/java/org/onosproject/net/AbstractAnnotated.java @@ -37,7 +37,7 @@ public abstract class AbstractAnnotated implements Annotated { */ protected AbstractAnnotated(Annotations... annotations) { checkArgument(annotations.length <= 1, "Only one set of annotations is expected"); - this.annotations = annotations.length == 1 ? annotations[0] : EMPTY; + this.annotations = annotations.length == 0 || annotations[0] == null ? EMPTY : annotations[0]; } @Override diff --git a/core/api/src/main/java/org/onosproject/net/pi/model/PiPipeconf.java b/core/api/src/main/java/org/onosproject/net/pi/model/PiPipeconf.java index 9b353c89e8..5fedaf7976 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/model/PiPipeconf.java +++ b/core/api/src/main/java/org/onosproject/net/pi/model/PiPipeconf.java @@ -100,6 +100,14 @@ public interface PiPipeconf { /** * Barefoot's Tofino context JSON. */ - TOFINO_CONTEXT_JSON + TOFINO_CONTEXT_JSON, + + /** + * CPU port file in UTF 8 encoding. + */ + // TODO: consider a better way to get the CPU port in the interpreter + // (see FabricInterpreter.java mapLogicalPortNumber). Perhaps using + // pipeconf annotations? + CPU_PORT_TXT } } diff --git a/core/api/src/main/java/org/onosproject/net/pi/model/PiPipelineInterpreter.java b/core/api/src/main/java/org/onosproject/net/pi/model/PiPipelineInterpreter.java index 4414931a62..9206f5c793 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/model/PiPipelineInterpreter.java +++ b/core/api/src/main/java/org/onosproject/net/pi/model/PiPipelineInterpreter.java @@ -125,6 +125,18 @@ public interface PiPipelineInterpreter extends HandlerBehaviour { return Optional.empty(); } + /** + * If the given table allows for mutable default actions, this method + * returns an action instance to be used when ONOS tries to remove a + * different default action previously set. + * + * @param tableId table ID + * @return optional default action + */ + default Optional getOriginalDefaultAction(PiTableId tableId) { + return Optional.empty(); + } + /** * Signals that an error was encountered while executing the interpreter. */ diff --git a/core/api/src/main/java/org/onosproject/net/pi/model/PiTableModel.java b/core/api/src/main/java/org/onosproject/net/pi/model/PiTableModel.java index ba66c10467..f7ba1bd38b 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/model/PiTableModel.java +++ b/core/api/src/main/java/org/onosproject/net/pi/model/PiTableModel.java @@ -42,8 +42,9 @@ public interface PiTableModel { PiTableType tableType(); /** - * Returns the model of the action profile that implements this table. Meaningful if this table is of type {@link - * PiTableType#INDIRECT}, otherwise returns null. + * Returns the model of the action profile that implements this table. + * Meaningful if this table is of type {@link PiTableType#INDIRECT}, + * otherwise returns null. * * @return action profile ID */ @@ -92,16 +93,19 @@ public interface PiTableModel { Collection actions(); /** - * Returns the model of the default action associated with this table, if any. + * Returns the model of the constant default action associated with this + * table, if any. * * @return optional default action model */ - Optional defaultAction(); + Optional constDefaultAction(); /** - * Returns true if the default action has mutable parameters that can be changed at runtime, false otherwise. + * Returns true if the default action has mutable parameters that can be + * changed at runtime, false otherwise. * - * @return true if the default action has mutable parameters, false otherwise + * @return true if the default action has mutable parameters, false + * otherwise */ boolean hasDefaultMutableParams(); @@ -114,8 +118,8 @@ public interface PiTableModel { boolean isConstantTable(); /** - * Returns the action model associated with the given ID, if present. If not present, it means that this table does - * not support such an action. + * Returns the action model associated with the given ID, if present. If not + * present, it means that this table does not support such an action. * * @param actionId action ID * @return optional action model @@ -123,8 +127,9 @@ public interface PiTableModel { Optional action(PiActionId actionId); /** - * Returns the match field model associated with the given ID, if present. If not present, it means that this table - * does not support such a match field. + * Returns the match field model associated with the given ID, if present. + * If not present, it means that this table does not support such a match + * field. * * @param matchFieldId match field ID * @return optional match field model diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupHandle.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupHandle.java index 4c87f1f7ed..6969714f5e 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupHandle.java +++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupHandle.java @@ -20,6 +20,7 @@ import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import org.onosproject.net.DeviceId; +import org.onosproject.net.pi.model.PiActionProfileId; /** * Global identifier of a PI action group applied to a device, uniquely defined @@ -28,8 +29,13 @@ import org.onosproject.net.DeviceId; @Beta public final class PiActionGroupHandle extends PiHandle { + private final PiActionProfileId actionProfileId; + private final PiActionGroupId groupId; + private PiActionGroupHandle(DeviceId deviceId, PiActionGroup group) { - super(deviceId, group); + super(deviceId); + actionProfileId = group.actionProfileId(); + groupId = group.id(); } /** @@ -44,11 +50,16 @@ public final class PiActionGroupHandle extends PiHandle { return new PiActionGroupHandle(deviceId, group); } + @Override + public PiEntityType entityType() { + return PiEntityType.GROUP; + } + @Override public int hashCode() { return Objects.hashCode(deviceId(), - piEntity().actionProfileId(), - piEntity().id()); + actionProfileId, + groupId); } @Override @@ -61,17 +72,17 @@ public final class PiActionGroupHandle extends PiHandle { } PiActionGroupHandle that = (PiActionGroupHandle) o; return Objects.equal(deviceId(), that.deviceId()) && - Objects.equal(piEntity().actionProfileId(), - that.piEntity().actionProfileId()) && - Objects.equal(piEntity().id(), that.piEntity().id()); + Objects.equal(actionProfileId, + that.actionProfileId) && + Objects.equal(groupId, that.groupId); } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("deviceId", deviceId()) - .add("actionProfileId", piEntity().actionProfileId()) - .add("groupId", piEntity().id()) + .add("actionProfileId", actionProfileId) + .add("groupId", groupId) .toString(); } } diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMember.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMember.java index 1c5ecb3003..690d1186d2 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMember.java +++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMember.java @@ -19,6 +19,7 @@ package org.onosproject.net.pi.runtime; import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; +import org.onosproject.net.pi.model.PiActionProfileId; import static com.google.common.base.Preconditions.checkNotNull; @@ -28,11 +29,18 @@ import static com.google.common.base.Preconditions.checkNotNull; @Beta public final class PiActionGroupMember implements PiEntity { + private final PiActionProfileId actionProfileId; private final PiActionGroupMemberId id; private final PiAction action; + // FIXME: in P4Runtime weight is an attribute of the member reference in a + // group. Either remove it from this class or define the containing group + // ID. private final int weight; - private PiActionGroupMember(PiActionGroupMemberId id, PiAction action, int weight) { + private PiActionGroupMember( + PiActionProfileId actionProfileId, PiActionGroupMemberId id, + PiAction action, int weight) { + this.actionProfileId = actionProfileId; this.id = id; this.action = action; this.weight = weight; @@ -47,6 +55,15 @@ public final class PiActionGroupMember implements PiEntity { return id; } + /** + * Returns the identifier of the action profile. + * + * @return action profile identifier + */ + public PiActionProfileId actionProfile() { + return actionProfileId; + } + /** * Returns the action associated to this member. * @@ -80,18 +97,20 @@ public final class PiActionGroupMember implements PiEntity { } PiActionGroupMember that = (PiActionGroupMember) o; return weight == that.weight && + Objects.equal(actionProfileId, that.actionProfileId) && Objects.equal(id, that.id) && Objects.equal(action, that.action); } @Override public int hashCode() { - return Objects.hashCode(id, action, weight); + return Objects.hashCode(actionProfileId, id, action, weight); } @Override public String toString() { return MoreObjects.toStringHelper(this) + .add("actionProfile", actionProfileId) .add("id", id) .add("action", action) .add("weight", weight) @@ -112,6 +131,7 @@ public final class PiActionGroupMember implements PiEntity { */ public static final class Builder { + private PiActionProfileId actionProfileId; private PiActionGroupMemberId id; private PiAction action; private int weight; @@ -120,6 +140,17 @@ public final class PiActionGroupMember implements PiEntity { // Hides constructor. } + /** + * Sets the action profile identifier of this member. + * + * @param actionProfileId action profile identifier + * @return this + */ + public Builder forActionProfile(PiActionProfileId actionProfileId) { + this.actionProfileId = actionProfileId; + return this; + } + /** * Sets the identifier of this member. * @@ -161,9 +192,10 @@ public final class PiActionGroupMember implements PiEntity { * @return action group member */ public PiActionGroupMember build() { + checkNotNull(actionProfileId); checkNotNull(id); checkNotNull(action); - return new PiActionGroupMember(id, action, weight); + return new PiActionGroupMember(actionProfileId, id, action, weight); } } } diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMemberHandle.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMemberHandle.java new file mode 100644 index 0000000000..9ef8a319c2 --- /dev/null +++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMemberHandle.java @@ -0,0 +1,126 @@ +/* + * Copyright 2018-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onosproject.net.pi.runtime; + +import com.google.common.base.MoreObjects; +import com.google.common.base.Objects; +import org.onosproject.net.DeviceId; +import org.onosproject.net.pi.model.PiActionProfileId; + +import static com.google.common.base.Preconditions.checkNotNull; + +/** + * Global identifier of a PI action profile group member, uniquely defined by a + * device ID, action profile ID, and member ID. + */ +public final class PiActionGroupMemberHandle extends PiHandle { + + private final PiActionGroupMemberId memberId; + private final PiActionProfileId actionProfileId; + + private PiActionGroupMemberHandle(DeviceId deviceId, + PiActionProfileId actionProfileId, + PiActionGroupMemberId memberId) { + super(deviceId); + this.actionProfileId = actionProfileId; + this.memberId = memberId; + } + + /** + * Creates a new handle for the given device ID, action profile ID, and + * member ID. + * + * @param deviceId device ID + * @param actionProfileId action profile ID + * @param memberId member ID + * @return action profile group member handle + */ + public static PiActionGroupMemberHandle of( + DeviceId deviceId, + PiActionProfileId actionProfileId, + PiActionGroupMemberId memberId) { + return new PiActionGroupMemberHandle( + deviceId, actionProfileId, memberId); + } + + /** + * Creates a new handle for the given device ID, and action profile group + * member instance. + * + * @param deviceId device ID + * @param member member instance + * @return action profile group member handle + */ + public static PiActionGroupMemberHandle of( + DeviceId deviceId, + PiActionGroupMember member) { + checkNotNull(member); + return new PiActionGroupMemberHandle( + deviceId, member.actionProfile(), member.id()); + } + + /** + * Returns the member ID of this handle. + * + * @return member ID + */ + public PiActionGroupMemberId memberId() { + return memberId; + } + + /** + * Returns the action profile ID of this handle. + * + * @return action profile ID + */ + public PiActionProfileId actionProfileId() { + return actionProfileId; + } + + @Override + public PiEntityType entityType() { + return PiEntityType.GROUP_MEMBER; + } + + @Override + public int hashCode() { + return Objects.hashCode(deviceId(), actionProfileId, memberId); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null || getClass() != obj.getClass()) { + return false; + } + final PiActionGroupMemberHandle other = (PiActionGroupMemberHandle) obj; + return Objects.equal(this.deviceId(), other.deviceId()) + && Objects.equal(this.actionProfileId, other.actionProfileId) + && Objects.equal(this.memberId, other.memberId); + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("deviceId", deviceId()) + .add("actionProfileId", actionProfileId) + .add("memberId", memberId) + .toString(); + } +} diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiHandle.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiHandle.java index e8e70d10ae..eb74288243 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiHandle.java +++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiHandle.java @@ -29,11 +29,9 @@ import static com.google.common.base.Preconditions.checkNotNull; public abstract class PiHandle { private final DeviceId deviceId; - private final E piEntity; - protected PiHandle(DeviceId deviceId, E piEntity) { + protected PiHandle(DeviceId deviceId) { this.deviceId = checkNotNull(deviceId); - this.piEntity = checkNotNull(piEntity); } /** @@ -50,18 +48,7 @@ public abstract class PiHandle { * * @return PI entity type */ - public final PiEntityType entityType() { - return piEntity.piEntityType(); - } - - /** - * The entity to which this handle is associated. - * - * @return PI entity - */ - public final E piEntity() { - return piEntity; - } + public abstract PiEntityType entityType(); @Override public abstract int hashCode(); diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterHandle.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterHandle.java index ad2af9d478..4baa6fa19d 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterHandle.java +++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMeterHandle.java @@ -21,33 +21,56 @@ import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import org.onosproject.net.DeviceId; +import static com.google.common.base.Preconditions.checkNotNull; + /** - * Global identifier of a PI meter cell configuration applied to a device, uniquely defined - * by a device ID and meter cell ID. + * Global identifier of a PI meter cell configuration applied to a device, + * uniquely defined by a device ID and meter cell ID. */ @Beta public final class PiMeterHandle extends PiHandle { - private PiMeterHandle(DeviceId deviceId, PiMeterCellConfig meterCellConfig) { - super(deviceId, meterCellConfig); + private final PiMeterCellId cellId; + + private PiMeterHandle(DeviceId deviceId, PiMeterCellId meterCellId) { + super(deviceId); + this.cellId = meterCellId; } /** - * Creates a new handle for the given device ID and PI meter cell configuration. + * Creates a new handle for the given device ID and PI meter cell ID. * - * @param deviceId device ID + * @param deviceId device ID + * @param meterCellId meter cell ID + * @return PI meter handle + */ + public static PiMeterHandle of(DeviceId deviceId, + PiMeterCellId meterCellId) { + return new PiMeterHandle(deviceId, meterCellId); + } + + /** + * Creates a new handle for the given device ID and PI meter cell + * configuration. + * + * @param deviceId device ID * @param meterCellConfig meter config * @return PI meter handle */ public static PiMeterHandle of(DeviceId deviceId, PiMeterCellConfig meterCellConfig) { - return new PiMeterHandle(deviceId, meterCellConfig); + checkNotNull(meterCellConfig); + return new PiMeterHandle(deviceId, meterCellConfig.cellId()); + } + + @Override + public PiEntityType entityType() { + return PiEntityType.METER_CELL_CONFIG; } @Override public int hashCode() { - return Objects.hashCode(deviceId(), - piEntity().cellId()); + return Objects.hashCode(deviceId(), cellId); } @Override @@ -60,15 +83,14 @@ public final class PiMeterHandle extends PiHandle { } PiMeterHandle that = (PiMeterHandle) o; return Objects.equal(deviceId(), that.deviceId()) && - Objects.equal(piEntity().cellId(), - that.piEntity().cellId()); + Objects.equal(cellId, that.cellId); } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("deviceId", deviceId()) - .add("meterCellId", piEntity().cellId()) + .add("meterCellId", cellId) .toString(); } -} \ No newline at end of file +} diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMulticastGroupEntryHandle.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMulticastGroupEntryHandle.java index f9b117026f..65a3f28c79 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMulticastGroupEntryHandle.java +++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiMulticastGroupEntryHandle.java @@ -21,6 +21,8 @@ import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import org.onosproject.net.DeviceId; +import static com.google.common.base.Preconditions.checkNotNull; + /** * Global identifier of a PI multicast group entry applied to the packet * replication engine of a device, uniquely defined by a device ID, and group @@ -29,8 +31,23 @@ import org.onosproject.net.DeviceId; @Beta public final class PiMulticastGroupEntryHandle extends PiHandle { - private PiMulticastGroupEntryHandle(DeviceId deviceId, PiMulticastGroupEntry entry) { - super(deviceId, entry); + private final long groupId; + + private PiMulticastGroupEntryHandle(DeviceId deviceId, long groupId) { + super(deviceId); + this.groupId = groupId; + } + + /** + * Creates a new handle for the given device ID and PI multicast group ID. + * + * @param deviceId device ID + * @param groupId multicast group ID + * @return PI multicast group entry handle + */ + public static PiMulticastGroupEntryHandle of(DeviceId deviceId, + long groupId) { + return new PiMulticastGroupEntryHandle(deviceId, groupId); } /** @@ -43,12 +60,18 @@ public final class PiMulticastGroupEntryHandle extends PiHandle + * If {@link #isDefaultAction()} is {@code true} this method returns the + * empty match key ({@link PiMatchKey#EMPTY}). * * @return match key */ @@ -79,6 +85,16 @@ public final class PiTableEntry implements PiEntity { return tableAction; } + /** + * Returns true if this table entry contains the default action for this + * table, a.k.a. table-miss entry, false otherwise. + * + * @return boolean + */ + public boolean isDefaultAction() { + return isDefaultAction; + } + /** * Returns the cookie of this table entry. * @@ -89,8 +105,8 @@ public final class PiTableEntry implements PiEntity { } /** - * Returns the priority of this table entry, if present. If the priority value is not present, then this table entry - * has no explicit priority. + * Returns the priority of this table entry, if present. If the priority + * value is not present, then this table entry has no explicit priority. * * @return optional priority */ @@ -99,8 +115,9 @@ public final class PiTableEntry implements PiEntity { } /** - * Returns the timeout in seconds of this table entry, if present. If the timeout value is not present, then this - * table entry is meant to be permanent. + * Returns the timeout in seconds of this table entry, if present. If the + * timeout value is not present, then this table entry is meant to be + * permanent. * * @return optional timeout value in seconds */ @@ -118,28 +135,46 @@ public final class PiTableEntry implements PiEntity { } PiTableEntry that = (PiTableEntry) o; return priority == that.priority && + cookie == that.cookie && Double.compare(that.timeout, timeout) == 0 && Objects.equal(tableId, that.tableId) && Objects.equal(matchKey, that.matchKey) && + Objects.equal(isDefaultAction, that.isDefaultAction) && Objects.equal(tableAction, that.tableAction); } @Override public int hashCode() { - return Objects.hashCode(tableId, matchKey, tableAction, priority, timeout); + return Objects.hashCode(tableId, matchKey, isDefaultAction, tableAction, + priority, cookie, timeout); } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("tableId", tableId) - .add("matchKey", matchKey) - .add("tableAction", tableAction) + .add("matchKey", isDefaultAction ? "DEFAULT-ACTION" : matchKey) + .add("tableAction", tableActionToString(tableAction)) .add("priority", priority == NO_PRIORITY ? "N/A" : String.valueOf(priority)) .add("timeout", timeout == NO_TIMEOUT ? "PERMANENT" : String.valueOf(timeout)) .toString(); } + private String tableActionToString(PiTableAction tableAction) { + if (tableAction == null) { + return "null"; + } + switch (tableAction.type()) { + case ACTION_GROUP_ID: + return "GROUP:" + ((PiActionGroupId) tableAction).id(); + case GROUP_MEMBER_ID: + return "GROUP_MEMBER:" + ((PiActionGroupMemberId) tableAction).id(); + case ACTION: + default: + return tableAction.toString(); + } + } + /** * Returns a table entry builder. * @@ -244,7 +279,9 @@ public final class PiTableEntry implements PiEntity { public PiTableEntry build() { checkNotNull(tableId); checkNotNull(matchKey); - return new PiTableEntry(tableId, matchKey, tableAction, cookie, priority, timeout); + final boolean isDefaultAction = matchKey.equals(PiMatchKey.EMPTY); + return new PiTableEntry(tableId, matchKey, tableAction, + isDefaultAction, cookie, priority, timeout); } } } diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiTableEntryHandle.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiTableEntryHandle.java index 7eeb7f68f1..2b210a1cbd 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiTableEntryHandle.java +++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiTableEntryHandle.java @@ -20,6 +20,9 @@ import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import org.onosproject.net.DeviceId; +import org.onosproject.net.pi.model.PiTableId; + +import static com.google.common.base.Preconditions.checkNotNull; /** * Global identifier of a PI table entry applied on a device, uniquely defined @@ -28,8 +31,28 @@ import org.onosproject.net.DeviceId; @Beta public final class PiTableEntryHandle extends PiHandle { - private PiTableEntryHandle(DeviceId deviceId, PiTableEntry entry) { - super(deviceId, entry); + private final PiTableId tableId; + private final PiMatchKey matchKey; + + private PiTableEntryHandle(DeviceId deviceId, PiTableId tableId, PiMatchKey matchKey) { + super(deviceId); + this.tableId = tableId; + this.matchKey = matchKey; + } + + /** + * Creates a new handle for the given device ID, PI table ID, and match + * key. + * + * @param deviceId device ID + * @param tableId table ID + * @param matchKey match key + * @return PI table entry handle + */ + public static PiTableEntryHandle of(DeviceId deviceId, PiTableId tableId, PiMatchKey matchKey) { + checkNotNull(tableId); + checkNotNull(matchKey); + return new PiTableEntryHandle(deviceId, tableId, matchKey); } /** @@ -40,14 +63,18 @@ public final class PiTableEntryHandle extends PiHandle { * @return PI table entry handle */ public static PiTableEntryHandle of(DeviceId deviceId, PiTableEntry entry) { - return new PiTableEntryHandle(deviceId, entry); + checkNotNull(entry); + return PiTableEntryHandle.of(deviceId, entry.table(), entry.matchKey()); + } + + @Override + public PiEntityType entityType() { + return PiEntityType.TABLE_ENTRY; } @Override public int hashCode() { - return Objects.hashCode(deviceId(), - piEntity().table(), - piEntity().matchKey()); + return Objects.hashCode(deviceId(), tableId, matchKey); } @Override @@ -60,18 +87,16 @@ public final class PiTableEntryHandle extends PiHandle { } final PiTableEntryHandle other = (PiTableEntryHandle) obj; return Objects.equal(this.deviceId(), other.deviceId()) - && Objects.equal(this.piEntity().table(), - other.piEntity().table()) - && Objects.equal(this.piEntity().matchKey(), - other.piEntity().matchKey()); + && Objects.equal(this.tableId, other.tableId) + && Objects.equal(this.matchKey, other.matchKey); } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("deviceId", deviceId()) - .add("tableId", piEntity().table()) - .add("matchKey", piEntity().matchKey()) + .add("tableId", tableId) + .add("matchKey", matchKey) .toString(); } } diff --git a/core/api/src/main/java/org/onosproject/net/pi/service/PiPipeconfMappingStore.java b/core/api/src/main/java/org/onosproject/net/pi/service/PiPipeconfMappingStore.java index 2f275eefe8..4a9bc90a05 100644 --- a/core/api/src/main/java/org/onosproject/net/pi/service/PiPipeconfMappingStore.java +++ b/core/api/src/main/java/org/onosproject/net/pi/service/PiPipeconfMappingStore.java @@ -31,7 +31,7 @@ import java.util.Set; public interface PiPipeconfMappingStore extends Store { /** - * Retrieves the id of the pipeconf deployed on a given device. + * Retrieves the id of the pipeconf associated to a given device. * * @param deviceId device identifier * @return PiPipeconfId diff --git a/core/api/src/test/java/org/onosproject/net/pi/runtime/PiActionGroupMemberTest.java b/core/api/src/test/java/org/onosproject/net/pi/runtime/PiActionGroupMemberTest.java index 020d575fac..e84d48f662 100644 --- a/core/api/src/test/java/org/onosproject/net/pi/runtime/PiActionGroupMemberTest.java +++ b/core/api/src/test/java/org/onosproject/net/pi/runtime/PiActionGroupMemberTest.java @@ -20,6 +20,7 @@ import com.google.common.testing.EqualsTester; import org.junit.Test; import org.onosproject.net.pi.model.PiActionId; import org.onosproject.net.pi.model.PiActionParamId; +import org.onosproject.net.pi.model.PiActionProfileId; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; @@ -34,26 +35,37 @@ import static org.onosproject.net.pi.runtime.PiConstantsTest.MOD_NW_DST; */ public class PiActionGroupMemberTest { + private final PiActionProfileId actionProfileId1 = PiActionProfileId.of("foo"); + private final PiActionProfileId actionProfileId2 = PiActionProfileId.of("bar"); private final PiActionGroupMemberId piActionGroupMemberId = PiActionGroupMemberId.of(10); private final PiAction piAction = PiAction.builder().withId(PiActionId.of(MOD_NW_DST)) .withParameter(new PiActionParam(PiActionParamId.of(DST_ADDR), copyFrom(0x0a010101))) .build(); private final PiActionGroupMember piActionGroupMember1 = PiActionGroupMember.builder() + .forActionProfile(actionProfileId1) .withId(piActionGroupMemberId) .withAction(piAction) .withWeight(10) .build(); private final PiActionGroupMember sameAsPiActionGroupMember1 = PiActionGroupMember.builder() + .forActionProfile(actionProfileId1) .withId(piActionGroupMemberId) .withAction(piAction) .withWeight(10) .build(); private final PiActionGroupMember piActionGroupMember2 = PiActionGroupMember.builder() + .forActionProfile(actionProfileId1) .withId(piActionGroupMemberId) .withAction(piAction) .withWeight(20) .build(); + private final PiActionGroupMember piActionGroupMember1ForOtherProfile = PiActionGroupMember.builder() + .forActionProfile(actionProfileId2) + .withId(piActionGroupMemberId) + .withAction(piAction) + .withWeight(10) + .build(); /** * Checks that the PiActionGroupMember class is immutable. @@ -73,6 +85,7 @@ public class PiActionGroupMemberTest { new EqualsTester() .addEqualityGroup(piActionGroupMember1, sameAsPiActionGroupMember1) .addEqualityGroup(piActionGroupMember2) + .addEqualityGroup(piActionGroupMember1ForOtherProfile) .testEquals(); } diff --git a/core/api/src/test/java/org/onosproject/net/pi/runtime/PiActionGroupTest.java b/core/api/src/test/java/org/onosproject/net/pi/runtime/PiActionGroupTest.java index bd4bc2cb8d..c3aca5a135 100644 --- a/core/api/src/test/java/org/onosproject/net/pi/runtime/PiActionGroupTest.java +++ b/core/api/src/test/java/org/onosproject/net/pi/runtime/PiActionGroupTest.java @@ -45,6 +45,7 @@ public class PiActionGroupTest { .build(); private final PiActionGroupMember piActionGroupMember = PiActionGroupMember.builder() + .forActionProfile(ACTION_PROF_ID) .withId(piActionGroupMemberId) .withAction(piAction) .withWeight(10) diff --git a/core/net/src/main/java/org/onosproject/net/driver/impl/DriverManager.java b/core/net/src/main/java/org/onosproject/net/driver/impl/DriverManager.java index 001fe58ae4..899082283b 100644 --- a/core/net/src/main/java/org/onosproject/net/driver/impl/DriverManager.java +++ b/core/net/src/main/java/org/onosproject/net/driver/impl/DriverManager.java @@ -119,21 +119,14 @@ public class DriverManager implements DriverService { Driver driver; - // Primary source of driver configuration is the network config. + // Special processing for devices with pipeconf. if (pipeconfService.ofDevice(deviceId).isPresent()) { - // Device has pipeconf associated, look for merged driver. - // Implementation of PiPipeconfService is expected to look for a - // base driver in network config. - PiPipeconfId pipeconfId = pipeconfService.ofDevice(deviceId).get(); - String mergedDriver = pipeconfService.getMergedDriver(deviceId, pipeconfId); - driver = mergedDriver != null ? lookupDriver(mergedDriver) : null; - if (driver != null) { - return driver; - } else { - log.error("Merged driver for {} with pipeconf {} not found, falling back.", - deviceId, pipeconfId); - } + // No fallback for pipeconf merged drivers. Returns null if driver + // does not exist. + return getPipeconfMergedDriver(deviceId); } + + // Primary source of driver configuration is the network config. BasicDeviceConfig cfg = networkConfigService.getConfig(deviceId, BasicDeviceConfig.class); driver = lookupDriver(cfg != null ? cfg.driver() : null); if (driver != null) { @@ -154,6 +147,28 @@ public class DriverManager implements DriverService { NO_DRIVER); } + private Driver getPipeconfMergedDriver(DeviceId deviceId) { + PiPipeconfId pipeconfId = pipeconfService.ofDevice(deviceId).orElse(null); + if (pipeconfId == null) { + log.warn("Missing pipeconf for {}, cannot produce a pipeconf merged driver", + deviceId); + return null; + } + String mergedDriverName = pipeconfService.getMergedDriver(deviceId, pipeconfId); + if (mergedDriverName == null) { + log.warn("Unable to get pipeconf merged driver for {} and {}", + deviceId, pipeconfId); + return null; + } + try { + return getDriver(mergedDriverName); + } catch (ItemNotFoundException e) { + log.warn("Specified pipeconf merged driver {} for {} not found", + mergedDriverName, deviceId); + return null; + } + } + private Driver lookupDriver(String driverName) { if (driverName != null) { try { diff --git a/core/net/src/main/java/org/onosproject/net/pi/impl/PiGroupTranslatorImpl.java b/core/net/src/main/java/org/onosproject/net/pi/impl/PiGroupTranslatorImpl.java index 70d2dde989..d989571bd8 100644 --- a/core/net/src/main/java/org/onosproject/net/pi/impl/PiGroupTranslatorImpl.java +++ b/core/net/src/main/java/org/onosproject/net/pi/impl/PiGroupTranslatorImpl.java @@ -116,6 +116,7 @@ final class PiGroupTranslatorImpl { } piActionGroupBuilder.addMember(PiActionGroupMember.builder() + .forActionProfile(groupKey.actionProfileId()) .withId(PiActionGroupMemberId.of(memberId)) .withAction((PiAction) tableAction) .withWeight(bucket.weight()) diff --git a/core/net/src/main/java/org/onosproject/net/pi/impl/PiPipeconfManager.java b/core/net/src/main/java/org/onosproject/net/pi/impl/PiPipeconfManager.java index 1846ab4bdb..b6a5dbe014 100644 --- a/core/net/src/main/java/org/onosproject/net/pi/impl/PiPipeconfManager.java +++ b/core/net/src/main/java/org/onosproject/net/pi/impl/PiPipeconfManager.java @@ -21,6 +21,7 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; import com.google.common.util.concurrent.Striped; import org.onlab.util.ItemNotFoundException; +import org.onlab.util.SharedExecutors; import org.onosproject.net.DeviceId; import org.onosproject.net.config.ConfigFactory; import org.onosproject.net.config.NetworkConfigRegistry; @@ -54,6 +55,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; import static java.lang.String.format; @@ -73,6 +75,8 @@ public class PiPipeconfManager implements PiPipeconfService { private static final String MERGED_DRIVER_SEPARATOR = ":"; private static final String CFG_SCHEME = "piPipeconf"; + private static final int MISSING_DRIVER_WATCHDOG_INTERVAL = 5; // Seconds. + @Reference(cardinality = ReferenceCardinality.MANDATORY) protected NetworkConfigRegistry cfgService; @@ -109,6 +113,13 @@ public class PiPipeconfManager implements PiPipeconfService { cfgService.registerConfigFactory(configFactory); driverAdminService.addListener(driverListener); checkMissingMergedDrivers(); + if (!missingMergedDrivers.isEmpty()) { + // Missing drivers should be created upon detecting registration + // events of a new pipeconf or a base driver. If, for any reason, we + // miss such event, here's a watchdog task. + SharedExecutors.getPoolThreadExecutor() + .execute(this::missingDriversWatchdogTask); + } log.info("Started"); } @@ -132,7 +143,7 @@ public class PiPipeconfManager implements PiPipeconfService { } pipeconfs.put(pipeconf.id(), pipeconf); log.info("New pipeconf registered: {}", pipeconf.id()); - executor.execute(() -> mergeAll(pipeconf.id())); + executor.execute(() -> attemptMergeAll(pipeconf.id())); } @Override @@ -304,64 +315,102 @@ public class PiPipeconfManager implements PiPipeconfService { } } - private void checkMissingMergedDrivers() { - cfgService.getSubjects(DeviceId.class, BasicDeviceConfig.class).stream() - .map(d -> cfgService.getConfig(d, BasicDeviceConfig.class)) - .map(BasicDeviceConfig::driver) - .filter(Objects::nonNull) - .filter(d -> getDriver(d) == null) - .forEach(driverName -> { - final String baseDriverName = getBaseDriverNameFromMerged(driverName); - final PiPipeconfId pipeconfId = getPipeconfIdFromMerged(driverName); - if (baseDriverName == null || pipeconfId == null) { - // Not a merged driver. - return; - } - log.info("Detected missing merged driver: {}", driverName); - missingMergedDrivers.add(driverName); - // Attempt building the driver now if all pieces are present. - // If not, either a driver or pipeconf event will re-trigger - // the merge process. - if (getDriver(baseDriverName) != null - && pipeconfs.containsKey(pipeconfId)) { - mergedDriverName(baseDriverName, pipeconfId); - } - }); + private boolean driverExists(String name) { + return getDriver(name) != null; } - private void mergeAll(String baseDriverName) { + private void checkMissingMergedDriver(DeviceId deviceId) { + final PiPipeconfId pipeconfId = pipeconfMappingStore.getPipeconfId(deviceId); + final BasicDeviceConfig cfg = cfgService.getConfig(deviceId, BasicDeviceConfig.class); + + if (pipeconfId == null) { + // No pipeconf associated. + return; + } + + if (cfg == null || cfg.driver() == null) { + log.warn("Missing basic device config or driver key in netcfg for " + + "{}, which is odd since it has a " + + "pipeconf associated ({})", + deviceId, pipeconfId); + return; + } + + final String baseDriverName = cfg.driver(); + final String mergedDriverName = mergedDriverName(baseDriverName, pipeconfId); + + if (driverExists(mergedDriverName) || + missingMergedDrivers.contains(mergedDriverName)) { + // Not missing, or already aware of it missing. + return; + } + + log.info("Detected missing merged driver: {}", mergedDriverName); + missingMergedDrivers.add(mergedDriverName); + // Attempt building the driver now if all pieces are present. + // If not, either a driver or pipeconf event will re-trigger + // the process. + attemptDriverMerge(mergedDriverName); + } + + private void attemptDriverMerge(String mergedDriverName) { + final String baseDriverName = getBaseDriverNameFromMerged(mergedDriverName); + final PiPipeconfId pipeconfId = getPipeconfIdFromMerged(mergedDriverName); + if (driverExists(baseDriverName) && pipeconfs.containsKey(pipeconfId)) { + doMergeDriver(baseDriverName, pipeconfId); + } + } + + private void missingDriversWatchdogTask() { + while (true) { + // Most probably all missing drivers will be created before the + // watchdog interval, so wait before starting... + try { + TimeUnit.SECONDS.sleep(MISSING_DRIVER_WATCHDOG_INTERVAL); + } catch (InterruptedException e) { + log.warn("Interrupted! There are still {} missing merged drivers", + missingMergedDrivers.size()); + } + if (missingMergedDrivers.isEmpty()) { + log.info("There are no more missing merged drivers!"); + return; + } + log.info("Detected {} missing merged drivers, attempt merge...", + missingMergedDrivers.size()); + missingMergedDrivers.forEach(this::attemptDriverMerge); + } + } + + private void checkMissingMergedDrivers() { + cfgService.getSubjects(DeviceId.class, BasicDeviceConfig.class) + .forEach(this::checkMissingMergedDriver); + } + + private void attemptMergeAll(String baseDriverName) { missingMergedDrivers.stream() - .filter(driverName -> { - final String xx = getBaseDriverNameFromMerged(driverName); + .filter(missingDriver -> { + // Filter missing merged drivers using this base driver. + final String xx = getBaseDriverNameFromMerged(missingDriver); return xx != null && xx.equals(baseDriverName); }) - .forEach(driverName -> { - final PiPipeconfId pipeconfId = getPipeconfIdFromMerged(driverName); - if (pipeconfs.containsKey(pipeconfId)) { - doMergeDriver(baseDriverName, pipeconfId); - } - }); + .forEach(this::attemptDriverMerge); } - private void mergeAll(PiPipeconfId pipeconfId) { + private void attemptMergeAll(PiPipeconfId pipeconfId) { missingMergedDrivers.stream() - .filter(driverName -> { - final PiPipeconfId xx = getPipeconfIdFromMerged(driverName); + .filter(missingDriver -> { + // Filter missing merged drivers using this pipeconf. + final PiPipeconfId xx = getPipeconfIdFromMerged(missingDriver); return xx != null && xx.equals(pipeconfId); }) - .forEach(driverName -> { - final String baseDriverName = getBaseDriverNameFromMerged(driverName); - if (getDriver(baseDriverName) != null) { - doMergeDriver(baseDriverName, pipeconfId); - } - }); + .forEach(this::attemptDriverMerge); } private class InternalDriverListener implements DriverListener { @Override public void event(DriverEvent event) { - executor.execute(() -> mergeAll(event.subject().name())); + executor.execute(() -> attemptMergeAll(event.subject().name())); } @Override diff --git a/core/net/src/test/java/org/onosproject/net/pi/impl/PiGroupTranslatorImplTest.java b/core/net/src/test/java/org/onosproject/net/pi/impl/PiGroupTranslatorImplTest.java index aeaa553b9d..6c86604410 100644 --- a/core/net/src/test/java/org/onosproject/net/pi/impl/PiGroupTranslatorImplTest.java +++ b/core/net/src/test/java/org/onosproject/net/pi/impl/PiGroupTranslatorImplTest.java @@ -109,6 +109,7 @@ public class PiGroupTranslatorImplTest { .withId(ACT_SET_EGRESS_PORT_WCMP_ID) .withParameter(param).build(); return PiActionGroupMember.builder() + .forActionProfile(ACT_PRF_WCMP_SELECTOR_ID) .withAction(piAction) .withId(PiActionGroupMemberId.of(BASE_MEM_ID + portNum)) .withWeight(DEFAULT_MEMBER_WEIGHT) diff --git a/core/store/dist/src/test/java/org/onosproject/store/pi/impl/DistributedPiTranslationStoreTest.java b/core/store/dist/src/test/java/org/onosproject/store/pi/impl/DistributedPiTranslationStoreTest.java index 2ba52a26df..acfce12f87 100644 --- a/core/store/dist/src/test/java/org/onosproject/store/pi/impl/DistributedPiTranslationStoreTest.java +++ b/core/store/dist/src/test/java/org/onosproject/store/pi/impl/DistributedPiTranslationStoreTest.java @@ -45,7 +45,12 @@ public class DistributedPiTranslationStoreTest { }; private static final PiEntity PI_ENTITY = () -> PiEntityType.TABLE_ENTRY; private static final PiHandle PI_HANDLE = - new PiHandle(DeviceId.NONE, PI_ENTITY) { + new PiHandle(DeviceId.NONE) { + @Override + public PiEntityType entityType() { + return PI_ENTITY.piEntityType(); + } + @Override public int hashCode() { return HANDLE_HASH; diff --git a/core/store/primitives/src/main/java/org/onosproject/store/atomix/cluster/impl/AtomixClusterStore.java b/core/store/primitives/src/main/java/org/onosproject/store/atomix/cluster/impl/AtomixClusterStore.java index 933c8ec30a..ec4e8b4183 100644 --- a/core/store/primitives/src/main/java/org/onosproject/store/atomix/cluster/impl/AtomixClusterStore.java +++ b/core/store/primitives/src/main/java/org/onosproject/store/atomix/cluster/impl/AtomixClusterStore.java @@ -157,13 +157,13 @@ public class AtomixClusterStore extends AbstractStore STRIPED_LOCKS = Striped.lock(30); + + @Override + protected boolean setupBehaviour() { + if (!super.setupBehaviour()) { + return false; + } + groupMirror = this.handler().get(P4RuntimeGroupMirror.class); + memberMirror = this.handler().get(P4RuntimeActionProfileMemberMirror.class); + groupStore = handler().get(GroupStore.class); + groupTranslator = piTranslationService.groupTranslator(); + return true; + } + + @Override + public void performGroupOperation(DeviceId deviceId, + GroupOperations groupOps) { + if (!setupBehaviour()) { + return; + } + + groupOps.operations().stream() + .filter(op -> !op.groupType().equals(GroupDescription.Type.ALL)) + .forEach(op -> { + // ONOS-7785 We need app cookie (action profile id) from the group + Group groupOnStore = groupStore.getGroup(deviceId, op.groupId()); + GroupDescription groupDesc = new DefaultGroupDescription( + deviceId, op.groupType(), op.buckets(), groupOnStore.appCookie(), + op.groupId().id(), groupOnStore.appId()); + DefaultGroup groupToApply = new DefaultGroup(op.groupId(), groupDesc); + processGroupOperation(groupToApply, op.opType()); + }); + } + + @Override + public Collection getGroups() { + if (!setupBehaviour()) { + return Collections.emptyList(); + } + return getActionGroups(); + } + + private Collection getActionGroups() { + + if (driverBoolProperty(READ_ACTION_GROUPS_FROM_MIRROR, + DEFAULT_READ_ACTION_GROUPS_FROM_MIRROR)) { + return getActionGroupsFromMirror(); + } + + final Collection actionProfileIds = pipeconf.pipelineModel() + .actionProfiles() + .stream() + .map(PiActionProfileModel::id) + .collect(Collectors.toList()); + final List groupsOnDevice = actionProfileIds.stream() + .flatMap(this::streamGroupsFromDevice) + .collect(Collectors.toList()); + final Set membersOnDevice = actionProfileIds + .stream() + .flatMap(actProfId -> getMembersFromDevice(actProfId) + .stream() + .map(memberId -> PiActionGroupMemberHandle.of( + deviceId, actProfId, memberId))) + .collect(Collectors.toSet()); + + if (groupsOnDevice.isEmpty()) { + return Collections.emptyList(); + } + + // Sync mirrors. + syncGroupMirror(groupsOnDevice); + syncMemberMirror(membersOnDevice); + + final List result = Lists.newArrayList(); + final List inconsistentGroups = Lists.newArrayList(); + final List validGroups = Lists.newArrayList(); + + for (PiActionGroup piGroup : groupsOnDevice) { + final Group pdGroup = forgeGroupEntry(piGroup); + if (pdGroup == null) { + // Entry is on device but unknown to translation service or + // device mirror. Inconsistent. Mark for removal. + inconsistentGroups.add(piGroup); + } else { + validGroups.add(piGroup); + result.add(pdGroup); + } + } + + // Trigger clean up of inconsistent groups and members. This will also + // remove all members that are not used by any group, and update the + // mirror accordingly. + final Set membersToKeep = validGroups.stream() + .flatMap(g -> g.members().stream()) + .map(m -> PiActionGroupMemberHandle.of(deviceId, m)) + .collect(Collectors.toSet()); + final Set inconsistentMembers = Sets.difference( + membersOnDevice, membersToKeep); + SharedExecutors.getSingleThreadExecutor().execute( + () -> cleanUpInconsistentGroupsAndMembers( + inconsistentGroups, inconsistentMembers)); + + return result; + } + + private void syncGroupMirror(Collection groups) { + Map handleMap = Maps.newHashMap(); + groups.forEach(g -> handleMap.put(PiActionGroupHandle.of(deviceId, g), g)); + groupMirror.sync(deviceId, handleMap); + } + + private void syncMemberMirror(Collection memberHandles) { + Map handleMap = Maps.newHashMap(); + memberHandles.forEach(handle -> handleMap.put( + handle, dummyMember(handle.actionProfileId(), handle.memberId()))); + memberMirror.sync(deviceId, handleMap); + } + + private Collection getActionGroupsFromMirror() { + return groupMirror.getAll(deviceId).stream() + .map(TimedEntry::entry) + .map(this::forgeGroupEntry) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + } + + private void cleanUpInconsistentGroupsAndMembers(Collection groupsToRemove, + Collection membersToRemove) { + if (!groupsToRemove.isEmpty()) { + log.warn("Found {} inconsistent action profile groups on {}, removing them...", + groupsToRemove.size(), deviceId); + groupsToRemove.forEach(piGroup -> { + log.debug(piGroup.toString()); + processGroup(piGroup, null, Operation.REMOVE); + }); + } + if (!membersToRemove.isEmpty()) { + log.warn("Found {} inconsistent action profile members on {}, removing them...", + membersToRemove.size(), deviceId); + // FIXME: implement client call to remove members from multiple + // action profiles in one shot. + final ListMultimap + membersByActProfId = ArrayListMultimap.create(); + membersToRemove.forEach(m -> membersByActProfId.put( + m.actionProfileId(), m.memberId())); + membersByActProfId.keySet().forEach(actProfId -> { + List removedMembers = getFutureWithDeadline( + client.removeActionProfileMembers( + actProfId, membersByActProfId.get(actProfId), pipeconf), + "cleaning up action profile members", Collections.emptyList()); + // Update member mirror. + removedMembers.stream() + .map(id -> PiActionGroupMemberHandle.of(deviceId, actProfId, id)) + .forEach(memberMirror::remove); + }); + } + } + + private Stream streamGroupsFromDevice(PiActionProfileId actProfId) { + // TODO: implement P4Runtime client call to read all groups with one call + // Good if pipeline has multiple action profiles. + final Collection groups = getFutureWithDeadline( + client.dumpGroups(actProfId, pipeconf), + "dumping groups", Collections.emptyList()); + return groups.stream(); + } + + private List getMembersFromDevice(PiActionProfileId actProfId) { + // TODO: implement P4Runtime client call to read all members with one call + // Good if pipeline has multiple action profiles. + return getFutureWithDeadline( + client.dumpActionProfileMemberIds(actProfId, pipeconf), + "dumping action profile ids", Collections.emptyList()); + } + + private Group forgeGroupEntry(PiActionGroup piGroup) { + final PiActionGroupHandle handle = PiActionGroupHandle.of(deviceId, piGroup); + final Optional> + translatedEntity = groupTranslator.lookup(handle); + final TimedEntry timedEntry = groupMirror.get(handle); + // Is entry consistent with our state? + if (!translatedEntity.isPresent()) { + log.warn("Group handle not found in translation store: {}", handle); + return null; + } + if (!translatedEntity.get().translated().equals(piGroup)) { + log.warn("Group obtained from device {} is different from the one in" + + "translation store: device={}, store={}", + deviceId, piGroup, translatedEntity.get().translated()); + return null; + } + if (timedEntry == null) { + log.warn("Group handle not found in device mirror: {}", handle); + return null; + } + return addedGroup(translatedEntity.get().original(), timedEntry.lifeSec()); + } + + private Group addedGroup(Group original, long life) { + final DefaultGroup forgedGroup = new DefaultGroup(original.id(), original); + forgedGroup.setState(Group.GroupState.ADDED); + forgedGroup.setLife(life); + return forgedGroup; + } + + private void processGroupOperation(Group pdGroup, GroupOperation.Type opType) { + final PiActionGroup piGroup; + try { + piGroup = groupTranslator.translate(pdGroup, pipeconf); + } catch (PiTranslationException e) { + log.warn("Unable to translate group, aborting {} operation: {} [{}]", + opType, e.getMessage(), pdGroup); + return; + } + final Operation operation = opType.equals(GroupOperation.Type.DELETE) + ? Operation.REMOVE : Operation.APPLY; + processGroup(piGroup, pdGroup, operation); + } + + private void processGroup(PiActionGroup groupToApply, + Group pdGroup, + Operation operation) { + final PiActionGroupHandle handle = PiActionGroupHandle.of(deviceId, groupToApply); + STRIPED_LOCKS.get(handle).lock(); + try { + switch (operation) { + case APPLY: + if (applyGroupWithMembersOrNothing(groupToApply, handle)) { + groupTranslator.learn(handle, new PiTranslatedEntity<>( + pdGroup, groupToApply, handle)); + } + return; + case REMOVE: + if (deleteGroup(groupToApply, handle)) { + groupTranslator.forget(handle); + } + return; + default: + log.error("Unknwon group operation type {}, cannot process group", operation); + break; + } + } finally { + STRIPED_LOCKS.get(handle).unlock(); + } + } + + private boolean applyGroupWithMembersOrNothing(PiActionGroup group, PiActionGroupHandle handle) { + // First apply members, then group, if fails, delete members. + if (!applyAllMembersOrNothing(group.members())) { + return false; + } + if (!applyGroup(group, handle)) { + deleteMembers(group.members()); + return false; + } + return true; + } + + private boolean applyGroup(PiActionGroup group, PiActionGroupHandle handle) { + final P4RuntimeClient.WriteOperationType opType = + groupMirror.get(handle) == null ? INSERT : MODIFY; + final boolean success = getFutureWithDeadline( + client.writeActionGroup(group, opType, pipeconf), + "performing action profile group " + opType, false); + if (success) { + groupMirror.put(handle, group); + } + return success; + } + + private boolean deleteGroup(PiActionGroup group, PiActionGroupHandle handle) { + final boolean success = getFutureWithDeadline( + client.writeActionGroup(group, DELETE, pipeconf), + "performing action profile group " + DELETE, false); + if (success) { + groupMirror.remove(handle); + } + return success; + } + + private boolean applyAllMembersOrNothing(Collection members) { + Collection appliedMembers = applyMembers(members); + if (appliedMembers.size() == members.size()) { + return true; + } else { + deleteMembers(appliedMembers); + return false; + } + } + + private Collection applyMembers( + Collection members) { + return members.stream() + .filter(this::applyMember) + .collect(Collectors.toList()); + } + + private boolean applyMember(PiActionGroupMember member) { + // If exists, modify, otherwise insert + final PiActionGroupMemberHandle handle = PiActionGroupMemberHandle.of( + deviceId, member); + final P4RuntimeClient.WriteOperationType opType = + memberMirror.get(handle) == null ? INSERT : MODIFY; + final boolean success = getFutureWithDeadline( + client.writeActionGroupMembers(Collections.singletonList(member), + opType, pipeconf), + "performing action profile member " + opType, false); + if (success) { + memberMirror.put(handle, dummyMember(member.actionProfile(), member.id())); + } + return success; + } + + private void deleteMembers(Collection members) { + members.forEach(this::deleteMember); + } + + private void deleteMember(PiActionGroupMember member) { + final PiActionGroupMemberHandle handle = PiActionGroupMemberHandle.of( + deviceId, member); + final boolean success = getFutureWithDeadline( + client.writeActionGroupMembers(Collections.singletonList(member), + DELETE, pipeconf), + "performing action profile member " + DELETE, false); + if (success) { + memberMirror.remove(handle); + } + } + + // FIXME: this is nasty, we have to rely on a dummy member of the mirror + // because the PiActionGroupMember abstraction is broken, since it includes + // attributes that are not part of a P4Runtime member, e.g. weight. + // We should remove weight from the class, and have client methods that + // return the full PiActionGroupMember, not just the IDs. Also the naming + // "ActionGroupMember" is wrong since it makes believe that members can + // exists only inside a group, which is not true. + private PiActionGroupMember dummyMember( + PiActionProfileId actionProfileId, PiActionGroupMemberId memberId) { + return PiActionGroupMember.builder() + .forActionProfile(actionProfileId) + .withId(memberId) + .withAction(PiAction.builder() + .withId(PiActionId.of("dummy")) + .build()) + .build(); + } + + enum Operation { + APPLY, REMOVE + } +} diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeFlowRuleProgrammable.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeFlowRuleProgrammable.java index 5e3e155776..d0acdee80d 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeFlowRuleProgrammable.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeFlowRuleProgrammable.java @@ -18,6 +18,7 @@ package org.onosproject.drivers.p4runtime; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.google.common.util.concurrent.Striped; import org.onlab.util.SharedExecutors; import org.onosproject.drivers.p4runtime.mirror.P4RuntimeTableMirror; @@ -26,8 +27,10 @@ import org.onosproject.net.flow.DefaultFlowEntry; import org.onosproject.net.flow.FlowEntry; import org.onosproject.net.flow.FlowRule; import org.onosproject.net.flow.FlowRuleProgrammable; +import org.onosproject.net.pi.model.PiPipelineInterpreter; import org.onosproject.net.pi.model.PiPipelineModel; import org.onosproject.net.pi.model.PiTableId; +import org.onosproject.net.pi.model.PiTableModel; import org.onosproject.net.pi.runtime.PiCounterCellData; import org.onosproject.net.pi.runtime.PiCounterCellId; import org.onosproject.net.pi.runtime.PiTableEntry; @@ -41,11 +44,13 @@ import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.concurrent.CompletableFuture; import java.util.concurrent.locks.Lock; import java.util.stream.Collectors; +import java.util.stream.Stream; import static com.google.common.collect.Lists.newArrayList; import static org.onosproject.drivers.p4runtime.P4RuntimeFlowRuleProgrammable.Operation.APPLY; @@ -90,6 +95,12 @@ public class P4RuntimeFlowRuleProgrammable // FIXME: set to true as soon as the feature is implemented in P4Runtime. private static final boolean DEFAULT_READ_ALL_DIRECT_COUNTERS = false; + // For default entries, P4Runtime mandates that only MODIFY messages are + // allowed. If true, treats default entries as normal table entries, + // e.g. inserting them first. + private static final String TABLE_DEFAULT_AS_ENTRY = "tableDefaultAsEntry"; + private static final boolean DEFAULT_TABLE_DEFAULT_AS_ENTRY = false; + // Needed to synchronize operations over the same table entry. private static final Striped ENTRY_LOCKS = Striped.lock(30); @@ -124,37 +135,40 @@ public class P4RuntimeFlowRuleProgrammable final ImmutableList.Builder result = ImmutableList.builder(); final List inconsistentEntries = Lists.newArrayList(); - // Read table entries. - // TODO: ONOS-7596 read counters with table entries - final Collection installedEntries = getFutureWithDeadline( - client.dumpAllTables(pipeconf), "dumping all tables", - Collections.emptyList()) - // Filter out entries from constant table. - .stream() + // Read table entries, including default ones. + final Collection deviceEntries = Stream.concat( + streamEntries(), streamDefaultEntries()) + // Ignore entries from constant tables. .filter(e -> !tableIsConstant(e.table())) + // Device implementation might return duplicate entries. For + // example if reading only default ones is not supported and + // non-default entries are returned, by using distinct() we are + // robust against that possibility. + .distinct() .collect(Collectors.toList()); - if (installedEntries.isEmpty()) { + if (deviceEntries.isEmpty()) { return Collections.emptyList(); } - // Read table direct counters (if any). + // Synchronize mirror with the device state. + syncMirror(deviceEntries); + // TODO: ONOS-7596 read counters with table entries final Map counterCellMap = - readEntryCounters(installedEntries); - + readEntryCounters(deviceEntries); // Forge flow entries with counter values. - for (PiTableEntry installedEntry : installedEntries) { - + for (PiTableEntry entry : deviceEntries) { final FlowEntry flowEntry = forgeFlowEntry( - installedEntry, counterCellMap.get(installedEntry)); - + entry, counterCellMap.get(entry)); if (flowEntry == null) { // Entry is on device but unknown to translation service or // device mirror. Inconsistent. Mark for removal. // TODO: make this behaviour configurable // In some cases it's fine for the device to have rules - // that were not installed by us. - inconsistentEntries.add(installedEntry); + // that were not installed by us, e.g. original default entry. + if (!isOriginalDefaultEntry(entry)) { + inconsistentEntries.add(entry); + } } else { result.add(flowEntry); } @@ -169,6 +183,34 @@ public class P4RuntimeFlowRuleProgrammable return result.build(); } + private Stream streamEntries() { + return getFutureWithDeadline( + client.dumpAllTables(pipeconf), "dumping all tables", + Collections.emptyList()) + .stream(); + } + + private Stream streamDefaultEntries() { + // Ignore tables with constant default action. + final Set defaultTables = pipelineModel.tables() + .stream() + .filter(table -> !table.constDefaultAction().isPresent()) + .map(PiTableModel::id) + .collect(Collectors.toSet()); + return defaultTables.isEmpty() ? Stream.empty() + : getFutureWithDeadline( + client.dumpTables(defaultTables, true, pipeconf), + "dumping default table entries", + Collections.emptyList()) + .stream(); + } + + private void syncMirror(Collection entries) { + Map handleMap = Maps.newHashMap(); + entries.forEach(e -> handleMap.put(PiTableEntryHandle.of(deviceId, e), e)); + tableMirror.sync(deviceId, handleMap); + } + @Override public Collection applyFlowRules(Collection rules) { return processFlowRules(rules, APPLY); @@ -188,12 +230,17 @@ public class P4RuntimeFlowRuleProgrammable final TimedEntry timedEntry = tableMirror.get(handle); if (!translatedEntity.isPresent()) { - log.debug("Handle not found in store: {}", handle); + log.warn("Table entry handle not found in translation store: {}", handle); + return null; + } + if (!translatedEntity.get().translated().equals(entry)) { + log.warn("Table entry obtained from device {} is different from " + + "one in in translation store: device={}, store={}", + deviceId, entry, translatedEntity.get().translated()); return null; } - if (timedEntry == null) { - log.debug("Handle not found in device mirror: {}", handle); + log.warn("Table entry handle not found in device mirror: {}", handle); return null; } @@ -211,23 +258,29 @@ public class P4RuntimeFlowRuleProgrammable return tableMirror.getAll(deviceId).stream() .map(timedEntry -> forgeFlowEntry( timedEntry.entry(), null)) + .filter(Objects::nonNull) .collect(Collectors.toList()); } private void cleanUpInconsistentEntries(Collection piEntries) { - log.warn("Found {} entries from {} not on translation store, removing them...", + log.warn("Found {} inconsistent table entries on {}, removing them...", piEntries.size(), deviceId); piEntries.forEach(entry -> { log.debug(entry.toString()); - applyEntry(PiTableEntryHandle.of(deviceId, entry), - entry, null, REMOVE); + final PiTableEntryHandle handle = PiTableEntryHandle.of(deviceId, entry); + ENTRY_LOCKS.get(handle).lock(); + try { + applyEntry(handle, entry, null, REMOVE); + } finally { + ENTRY_LOCKS.get(handle).unlock(); + } }); } private Collection processFlowRules(Collection rules, Operation driverOperation) { - if (!setupBehaviour()) { + if (!setupBehaviour() || rules.isEmpty()) { return Collections.emptyList(); } @@ -270,43 +323,66 @@ public class P4RuntimeFlowRuleProgrammable * Applies the given entry to the device, and returns true if the operation * was successful, false otherwise. */ - private boolean applyEntry(PiTableEntryHandle handle, + private boolean applyEntry(final PiTableEntryHandle handle, PiTableEntry piEntryToApply, - FlowRule ruleToApply, - Operation driverOperation) { + final FlowRule ruleToApply, + final Operation driverOperation) { // Depending on the driver operation, and if a matching rule exists on // the device, decide which P4 Runtime write operation to perform for // this entry. final TimedEntry piEntryOnDevice = tableMirror.get(handle); final WriteOperationType p4Operation; + final WriteOperationType storeOperation; + + final boolean defaultAsEntry = driverBoolProperty( + TABLE_DEFAULT_AS_ENTRY, DEFAULT_TABLE_DEFAULT_AS_ENTRY); + final boolean ignoreSameEntryUpdate = driverBoolProperty( + IGNORE_SAME_ENTRY_UPDATE, DEFAULT_IGNORE_SAME_ENTRY_UPDATE); + final boolean deleteBeforeUpdate = driverBoolProperty( + DELETE_BEFORE_UPDATE, DEFAULT_DELETE_BEFORE_UPDATE); if (driverOperation == APPLY) { if (piEntryOnDevice == null) { - // Entry is first-timer. - p4Operation = INSERT; + // Entry is first-timer, INSERT or MODIFY if default action. + p4Operation = !piEntryToApply.isDefaultAction() || defaultAsEntry + ? INSERT : MODIFY; + storeOperation = p4Operation; } else { - if (driverBoolProperty(IGNORE_SAME_ENTRY_UPDATE, - DEFAULT_IGNORE_SAME_ENTRY_UPDATE) - && piEntryToApply.action().equals(piEntryOnDevice.entry().action())) { + if (ignoreSameEntryUpdate && + piEntryToApply.action().equals(piEntryOnDevice.entry().action())) { log.debug("Ignoring re-apply of existing entry: {}", piEntryToApply); p4Operation = null; - } else if (driverBoolProperty(DELETE_BEFORE_UPDATE, - DEFAULT_DELETE_BEFORE_UPDATE)) { + } else if (deleteBeforeUpdate && !piEntryToApply.isDefaultAction()) { // Some devices return error when updating existing // entries. If requested, remove entry before - // re-inserting the modified one. + // re-inserting the modified one, except the default action + // entry, that cannot be removed. applyEntry(handle, piEntryOnDevice.entry(), null, REMOVE); p4Operation = INSERT; } else { p4Operation = MODIFY; } + storeOperation = p4Operation; } } else { - p4Operation = DELETE; + if (piEntryToApply.isDefaultAction()) { + // Cannot remove default action. Instead we should use the + // original defined by the interpreter (if any). + piEntryToApply = getOriginalDefaultEntry(piEntryToApply.table()); + if (piEntryToApply == null) { + return false; + } + p4Operation = MODIFY; + } else { + p4Operation = DELETE; + } + // Still want to delete the default entry from the mirror and + // translation store. + storeOperation = DELETE; } if (p4Operation != null) { if (writeEntry(piEntryToApply, p4Operation)) { - updateStores(handle, piEntryToApply, ruleToApply, p4Operation); + updateStores(handle, piEntryToApply, ruleToApply, storeOperation); return true; } else { return false; @@ -317,6 +393,34 @@ public class P4RuntimeFlowRuleProgrammable } } + private PiTableEntry getOriginalDefaultEntry(PiTableId tableId) { + final PiPipelineInterpreter interpreter = getInterpreter(); + if (interpreter == null) { + log.warn("Missing interpreter for {}, cannot get default action", + deviceId); + return null; + } + if (!interpreter.getOriginalDefaultAction(tableId).isPresent()) { + log.warn("Interpreter of {} doesn't define a default action for " + + "table {}, cannot produce default action entry", + deviceId, tableId); + return null; + } + return PiTableEntry.builder() + .forTable(tableId) + .withAction(interpreter.getOriginalDefaultAction(tableId).get()) + .build(); + } + + private boolean isOriginalDefaultEntry(PiTableEntry entry) { + if (!entry.isDefaultAction()) { + return false; + } + final PiTableEntry originalDefaultEntry = getOriginalDefaultEntry(entry.table()); + return originalDefaultEntry != null && + originalDefaultEntry.action().equals(entry.action()); + } + /** * Performs a write operation on the device. */ @@ -324,17 +428,9 @@ public class P4RuntimeFlowRuleProgrammable WriteOperationType p4Operation) { final CompletableFuture future = client.writeTableEntries( newArrayList(entry), p4Operation, pipeconf); - final Boolean success = getFutureWithDeadline( - future, "performing table " + p4Operation.name(), null); - if (success == null) { - // Error logged by getFutureWithDeadline(); - return false; - } - if (!success) { - log.warn("Unable to {} table entry in {}: {}", - p4Operation.name(), deviceId, entry); - } - return success; + // If false, errors logged by internal calls. + return getFutureWithDeadline( + future, "performing table " + p4Operation.name(), false); } private void updateStores(PiTableEntryHandle handle, @@ -373,6 +469,8 @@ public class P4RuntimeFlowRuleProgrammable cellDatas = Collections.emptyList(); } else { Set cellIds = tableEntries.stream() + // Ignore counter for default entry. + .filter(e -> !e.isDefaultAction()) .filter(e -> tableHasCounter(e.table())) .map(PiCounterCellId::ofDirect) .collect(Collectors.toSet()); diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeGroupProgrammable.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeGroupProgrammable.java index 0dd5f21504..84678dccd9 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeGroupProgrammable.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeGroupProgrammable.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-present Open Networking Foundation + * Copyright 2018-present Open Networking Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,418 +17,93 @@ package org.onosproject.drivers.p4runtime; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Sets; -import com.google.common.util.concurrent.Striped; -import org.onosproject.drivers.p4runtime.mirror.P4RuntimeGroupMirror; -import org.onosproject.drivers.p4runtime.mirror.P4RuntimeMulticastGroupMirror; -import org.onosproject.drivers.p4runtime.mirror.TimedEntry; +import com.google.common.collect.Lists; import org.onosproject.net.DeviceId; -import org.onosproject.net.group.DefaultGroup; -import org.onosproject.net.group.DefaultGroupDescription; +import org.onosproject.net.driver.AbstractHandlerBehaviour; import org.onosproject.net.group.Group; import org.onosproject.net.group.GroupDescription; import org.onosproject.net.group.GroupOperation; import org.onosproject.net.group.GroupOperations; import org.onosproject.net.group.GroupProgrammable; -import org.onosproject.net.group.GroupStore; -import org.onosproject.net.pi.model.PiActionProfileId; -import org.onosproject.net.pi.model.PiActionProfileModel; -import org.onosproject.net.pi.runtime.PiActionGroup; -import org.onosproject.net.pi.runtime.PiActionGroupHandle; -import org.onosproject.net.pi.runtime.PiActionGroupMember; -import org.onosproject.net.pi.runtime.PiMulticastGroupEntry; -import org.onosproject.net.pi.runtime.PiMulticastGroupEntryHandle; -import org.onosproject.net.pi.service.PiGroupTranslator; -import org.onosproject.net.pi.service.PiMulticastGroupTranslator; -import org.onosproject.net.pi.service.PiTranslatedEntity; -import org.onosproject.net.pi.service.PiTranslationException; -import org.onosproject.p4runtime.api.P4RuntimeClient; import org.slf4j.Logger; import java.util.Collection; import java.util.Collections; -import java.util.Objects; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.locks.Lock; -import java.util.stream.Collectors; -import java.util.stream.Stream; +import java.util.List; -import static java.lang.String.format; -import static org.onosproject.p4runtime.api.P4RuntimeClient.WriteOperationType.DELETE; -import static org.onosproject.p4runtime.api.P4RuntimeClient.WriteOperationType.INSERT; -import static org.onosproject.p4runtime.api.P4RuntimeClient.WriteOperationType.MODIFY; +import static com.google.common.base.Preconditions.checkArgument; import static org.slf4j.LoggerFactory.getLogger; /** - * Implementation of the group programmable behaviour for P4Runtime. - *

- * This implementation distinguishes between ALL groups, and other types. ALL - * groups are handled via PRE multicast group programming, while other types are - * handled via action profile group programming. + * Implementation of GroupProgrammable for P4Runtime devices that uses two + * different implementation of the same behavior to handle both action profile + * groups and multicast groups. */ public class P4RuntimeGroupProgrammable - extends AbstractP4RuntimeHandlerBehaviour - implements GroupProgrammable { + extends AbstractHandlerBehaviour implements GroupProgrammable { - private static final String ACT_GRP_MEMS_STR = "action group members"; - private static final String DELETE_STR = "delete"; - private static final String ACT_GRP_STR = "action group"; - private static final String INSERT_STR = "insert"; - private static final String MODIFY_STR = "modify"; + private final Logger log = getLogger(this.getClass()); - private static final Logger log = getLogger(P4RuntimeGroupProgrammable.class); - - // If true, we ignore re-installing groups that are already known in the - // device mirror. - private static final String CHECK_MIRROR_BEFORE_UPDATE = "checkMirrorBeforeUpdate"; - private static final boolean DEFAULT_CHECK_MIRROR_BEFORE_UPDATE = true; - - // If true, we avoid querying the device and return what's already known by - // the ONOS store. - private static final String IGNORE_DEVICE_WHEN_GET = "ignoreDeviceWhenGet"; - private static final boolean DEFAULT_IGNORE_DEVICE_WHEN_GET = false; - - protected GroupStore groupStore; - private P4RuntimeGroupMirror groupMirror; - private PiGroupTranslator groupTranslator; - private P4RuntimeMulticastGroupMirror mcGroupMirror; - private PiMulticastGroupTranslator mcGroupTranslator; - - // Needed to synchronize operations over the same group. - private static final Striped STRIPED_LOCKS = Striped.lock(30); - - @Override - protected boolean setupBehaviour() { - if (!super.setupBehaviour()) { - return false; + private void doPerformGroupOperation(DeviceId deviceId, GroupOperations groupOps) { + // TODO: fix GroupProgrammable API, passing the device ID is ambiguous + checkArgument(deviceId.equals(data().deviceId()), + "passed deviceId must be the same assigned to this behavior"); + final List actionGroups = Lists.newArrayList(); + final List multicastGroups = Lists.newArrayList(); + groupOps.operations().forEach(op -> { + if (op.groupType().equals(GroupDescription.Type.ALL)) { + multicastGroups.add(op); + } else { + actionGroups.add(op); + } + }); + if (!actionGroups.isEmpty()) { + actionProgrammable().performGroupOperation( + deviceId, new GroupOperations(actionGroups)); } - groupMirror = this.handler().get(P4RuntimeGroupMirror.class); - mcGroupMirror = this.handler().get(P4RuntimeMulticastGroupMirror.class); - groupStore = handler().get(GroupStore.class); - groupTranslator = piTranslationService.groupTranslator(); - mcGroupTranslator = piTranslationService.multicastGroupTranslator(); - return true; + if (!multicastGroups.isEmpty()) { + multicastProgrammable().performGroupOperation( + deviceId, new GroupOperations(multicastGroups)); + } + } + + private Collection doGetGroups() { + return new ImmutableList.Builder() + .addAll(actionProgrammable().getGroups()) + .addAll(multicastProgrammable().getGroups()) + .build(); + } + + private P4RuntimeActionGroupProgrammable actionProgrammable() { + P4RuntimeActionGroupProgrammable prog = new P4RuntimeActionGroupProgrammable(); + prog.setData(data()); + prog.setHandler(handler()); + return prog; + } + + private P4RuntimeMulticastGroupProgrammable multicastProgrammable() { + P4RuntimeMulticastGroupProgrammable prog = new P4RuntimeMulticastGroupProgrammable(); + prog.setData(data()); + prog.setHandler(handler()); + return prog; } @Override - public void performGroupOperation(DeviceId deviceId, - GroupOperations groupOps) { - if (!setupBehaviour()) { - return; + public void performGroupOperation(DeviceId deviceId, GroupOperations groupOps) { + try { + doPerformGroupOperation(deviceId, groupOps); + } catch (Throwable ex) { + log.error("Unhandled exception on performGroupOperation", ex); } - groupOps.operations().forEach(op -> { - // ONOS-7785 We need app cookie (action profile id) from the group - Group groupOnStore = groupStore.getGroup(deviceId, op.groupId()); - GroupDescription groupDesc = new DefaultGroupDescription(deviceId, - op.groupType(), - op.buckets(), - groupOnStore.appCookie(), - op.groupId().id(), - groupOnStore.appId()); - DefaultGroup groupToApply = new DefaultGroup(op.groupId(), groupDesc); - if (op.groupType().equals(GroupDescription.Type.ALL)) { - processMcGroupOp(deviceId, groupToApply, op.opType()); - } else { - - processGroupOp(deviceId, groupToApply, op.opType()); - } - }); } @Override public Collection getGroups() { - if (!setupBehaviour()) { + try { + return doGetGroups(); + } catch (Throwable ex) { + log.error("Unhandled exception on getGroups", ex); return Collections.emptyList(); } - final ImmutableList.Builder groups = ImmutableList.builder(); - - if (!driverBoolProperty(IGNORE_DEVICE_WHEN_GET, DEFAULT_IGNORE_DEVICE_WHEN_GET)) { - groups.addAll(pipeconf.pipelineModel().actionProfiles().stream() - .map(PiActionProfileModel::id) - .flatMap(this::streamGroupsFromDevice) - .iterator()); - // FIXME: enable reading MC groups from device once reading from - // PRE is supported in PI - // groups.addAll(getMcGroupsFromDevice()); - } else { - groups.addAll(groupMirror.getAll(deviceId).stream() - .map(TimedEntry::entry) - .map(this::forgeGroupEntry) - .iterator()); - } - // FIXME: same as before.. - groups.addAll(mcGroupMirror.getAll(deviceId).stream() - .map(TimedEntry::entry) - .map(this::forgeMcGroupEntry) - .iterator()); - - return groups.build(); - } - - private void processGroupOp(DeviceId deviceId, Group pdGroup, GroupOperation.Type opType) { - final PiActionGroup piGroup; - try { - piGroup = groupTranslator.translate(pdGroup, pipeconf); - } catch (PiTranslationException e) { - log.warn("Unable to translate group, aborting {} operation: {} [{}]", - opType, e.getMessage(), pdGroup); - return; - } - final PiActionGroupHandle handle = PiActionGroupHandle.of(deviceId, piGroup); - - final PiActionGroup groupOnDevice = groupMirror.get(handle) == null - ? null - : groupMirror.get(handle).entry(); - - final Lock lock = STRIPED_LOCKS.get(handle); - lock.lock(); - try { - processPiGroup(handle, piGroup, - groupOnDevice, pdGroup, opType); - } finally { - lock.unlock(); - } - } - - private void processMcGroupOp(DeviceId deviceId, Group pdGroup, GroupOperation.Type opType) { - final PiMulticastGroupEntry mcGroup; - try { - mcGroup = mcGroupTranslator.translate(pdGroup, pipeconf); - } catch (PiTranslationException e) { - log.warn("Unable to translate multicast group, aborting {} operation: {} [{}]", - opType, e.getMessage(), pdGroup); - return; - } - final PiMulticastGroupEntryHandle handle = PiMulticastGroupEntryHandle.of( - deviceId, mcGroup); - final PiMulticastGroupEntry groupOnDevice = mcGroupMirror.get(handle) == null - ? null - : mcGroupMirror.get(handle).entry(); - final Lock lock = STRIPED_LOCKS.get(handle); - lock.lock(); - try { - processMcGroup(handle, mcGroup, - groupOnDevice, pdGroup, opType); - } finally { - lock.unlock(); - } - } - - private void processPiGroup(PiActionGroupHandle handle, - PiActionGroup groupToApply, - PiActionGroup groupOnDevice, - Group pdGroup, GroupOperation.Type operationType) { - if (operationType == GroupOperation.Type.ADD) { - if (groupOnDevice != null) { - log.warn("Unable to add group {} since group already on device {}", - groupToApply.id(), deviceId); - log.debug("To apply: {}", groupToApply); - log.debug("On device: {}", groupOnDevice); - return; - } - - if (writeGroupToDevice(groupToApply)) { - groupMirror.put(handle, groupToApply); - groupTranslator.learn(handle, new PiTranslatedEntity<>( - pdGroup, groupToApply, handle)); - } - } else if (operationType == GroupOperation.Type.MODIFY) { - if (groupOnDevice == null) { - log.warn("Group {} does not exists on device {}, can not modify it", - groupToApply.id(), deviceId); - return; - } - if (driverBoolProperty(CHECK_MIRROR_BEFORE_UPDATE, DEFAULT_CHECK_MIRROR_BEFORE_UPDATE) - && groupOnDevice.equals(groupToApply)) { - // Group on device has the same members, ignore operation. - return; - } - if (modifyGroupFromDevice(groupToApply, groupOnDevice)) { - groupMirror.put(handle, groupToApply); - groupTranslator.learn(handle, - new PiTranslatedEntity<>(pdGroup, groupToApply, handle)); - } - } else { - if (groupOnDevice == null) { - log.warn("Unable to remove group {} from device {} since it does" + - "not exists on device.", groupToApply.id(), deviceId); - return; - } - if (deleteGroupFromDevice(groupOnDevice)) { - groupMirror.remove(handle); - groupTranslator.forget(handle); - } - } - } - - private void processMcGroup(PiMulticastGroupEntryHandle handle, - PiMulticastGroupEntry groupToApply, - PiMulticastGroupEntry groupOnDevice, - Group pdGroup, GroupOperation.Type opType) { - if (opType == GroupOperation.Type.DELETE) { - if (writeMcGroupOnDevice(groupToApply, DELETE)) { - mcGroupMirror.remove(handle); - mcGroupTranslator.forget(handle); - } - return; - } - - final P4RuntimeClient.WriteOperationType p4OpType = - opType == GroupOperation.Type.ADD ? INSERT : MODIFY; - - if (driverBoolProperty(CHECK_MIRROR_BEFORE_UPDATE, - DEFAULT_CHECK_MIRROR_BEFORE_UPDATE) - && p4OpType == MODIFY - && groupOnDevice != null - && groupOnDevice.equals(groupToApply)) { - // Ignore. - return; - } - - if (writeMcGroupOnDevice(groupToApply, p4OpType)) { - mcGroupMirror.put(handle, groupToApply); - mcGroupTranslator.learn(handle, new PiTranslatedEntity<>( - pdGroup, groupToApply, handle)); - } - } - - private boolean writeMcGroupOnDevice(PiMulticastGroupEntry group, P4RuntimeClient.WriteOperationType opType) { - return getFutureWithDeadline( - client.writePreMulticastGroupEntries( - Collections.singleton(group), opType), - "performing multicast group " + opType, false); - } - - private boolean modifyGroupFromDevice(PiActionGroup groupToApply, PiActionGroup groupOnDevice) { - PiActionProfileId groupProfileId = groupToApply.actionProfileId(); - Collection membersToRemove = Sets.newHashSet(groupOnDevice.members()); - membersToRemove.removeAll(groupToApply.members()); - Collection membersToAdd = Sets.newHashSet(groupToApply.members()); - membersToAdd.removeAll(groupOnDevice.members()); - - if (!membersToAdd.isEmpty() && - !completeFuture(client.writeActionGroupMembers(groupProfileId, membersToAdd, INSERT, pipeconf), - ACT_GRP_MEMS_STR, INSERT_STR)) { - // remove what we added - completeFuture(client.writeActionGroupMembers(groupProfileId, membersToAdd, DELETE, pipeconf), - ACT_GRP_MEMS_STR, INSERT_STR); - return false; - } - - if (!completeFuture(client.writeActionGroup(groupToApply, MODIFY, pipeconf), - ACT_GRP_STR, MODIFY_STR)) { - // recover group information - completeFuture(client.writeActionGroup(groupOnDevice, MODIFY, pipeconf), - ACT_GRP_STR, MODIFY_STR); - // remove what we added - completeFuture(client.writeActionGroupMembers(groupProfileId, membersToAdd, DELETE, pipeconf), - ACT_GRP_MEMS_STR, INSERT_STR); - return false; - } - - if (!membersToRemove.isEmpty() && - !completeFuture(client.writeActionGroupMembers(groupProfileId, membersToRemove, DELETE, pipeconf), - ACT_GRP_MEMS_STR, DELETE_STR)) { - // add what we removed - completeFuture(client.writeActionGroupMembers(groupProfileId, membersToRemove, INSERT, pipeconf), - ACT_GRP_MEMS_STR, DELETE_STR); - // recover group information - completeFuture(client.writeActionGroup(groupOnDevice, MODIFY, pipeconf), - ACT_GRP_STR, MODIFY_STR); - // remove what we added - completeFuture(client.writeActionGroupMembers(groupProfileId, membersToAdd, DELETE, pipeconf), - ACT_GRP_MEMS_STR, INSERT_STR); - return false; - } - - return true; - } - - private boolean writeGroupToDevice(PiActionGroup groupToApply) { - // First insert members, then group. - // The operation is deemed successful if both operations are successful. - // FIXME: add transactional semantics, i.e. remove members if group fails. - final boolean membersSuccess = completeFuture( - client.writeActionGroupMembers(groupToApply.actionProfileId(), - groupToApply.members(), - INSERT, pipeconf), - ACT_GRP_MEMS_STR, INSERT_STR); - return membersSuccess && completeFuture( - client.writeActionGroup(groupToApply, INSERT, pipeconf), - ACT_GRP_STR, INSERT_STR); - } - - private boolean deleteGroupFromDevice(PiActionGroup piActionGroup) { - // First delete group, then members. - // The operation is deemed successful if both operations are successful. - final boolean groupSuccess = completeFuture( - client.writeActionGroup(piActionGroup, DELETE, pipeconf), - ACT_GRP_STR, DELETE_STR); - return groupSuccess && completeFuture( - client.writeActionGroupMembers(piActionGroup.actionProfileId(), - piActionGroup.members(), - DELETE, pipeconf), - ACT_GRP_MEMS_STR, DELETE_STR); - } - - private boolean completeFuture(CompletableFuture completableFuture, - String topic, String action) { - return getFutureWithDeadline( - completableFuture, format("performing %s %s", action, topic), false); - } - - private Stream streamGroupsFromDevice(PiActionProfileId actProfId) { - // Read PI groups and return original PD one. - Collection groups = getFutureWithDeadline( - client.dumpGroups(actProfId, pipeconf), - "dumping groups", Collections.emptyList()); - return groups.stream() - .map(this::forgeGroupEntry) - .filter(Objects::nonNull); - } - - private Collection getMcGroupsFromDevice() { - Collection groups = getFutureWithDeadline( - client.readAllMulticastGroupEntries(), - "dumping multicast groups", Collections.emptyList()); - return groups.stream() - .map(this::forgeMcGroupEntry) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - } - - private Group forgeGroupEntry(PiActionGroup piGroup) { - final PiActionGroupHandle handle = PiActionGroupHandle.of(deviceId, piGroup); - if (!groupTranslator.lookup(handle).isPresent()) { - log.warn("Missing PI group from translation store: {} - {}:{}", - pipeconf.id(), piGroup.actionProfileId(), - piGroup.id()); - return null; - } - final long life = groupMirror.get(handle) != null - ? groupMirror.get(handle).lifeSec() : 0; - final Group original = groupTranslator.lookup(handle).get().original(); - return addedGroup(original, life); - } - - private Group forgeMcGroupEntry(PiMulticastGroupEntry mcGroup) { - final PiMulticastGroupEntryHandle handle = PiMulticastGroupEntryHandle.of( - deviceId, mcGroup); - if (!mcGroupTranslator.lookup(handle).isPresent()) { - log.warn("Missing PI multicast group {} from translation store", - mcGroup.groupId()); - return null; - } - final long life = mcGroupMirror.get(handle) != null - ? mcGroupMirror.get(handle).lifeSec() : 0; - final Group original = mcGroupTranslator.lookup(handle).get().original(); - return addedGroup(original, life); - } - - private Group addedGroup(Group original, long life) { - final DefaultGroup forgedGroup = new DefaultGroup(original.id(), original); - forgedGroup.setState(Group.GroupState.ADDED); - forgedGroup.setLife(life); - return forgedGroup; } } diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMulticastGroupProgrammable.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMulticastGroupProgrammable.java new file mode 100644 index 0000000000..a5c353897e --- /dev/null +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeMulticastGroupProgrammable.java @@ -0,0 +1,246 @@ +/* + * Copyright 2018-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onosproject.drivers.p4runtime; + +import com.google.common.collect.ImmutableList; +import com.google.common.util.concurrent.Striped; +import org.onosproject.drivers.p4runtime.mirror.P4RuntimeMulticastGroupMirror; +import org.onosproject.drivers.p4runtime.mirror.TimedEntry; +import org.onosproject.net.DeviceId; +import org.onosproject.net.group.DefaultGroup; +import org.onosproject.net.group.Group; +import org.onosproject.net.group.GroupDescription; +import org.onosproject.net.group.GroupOperation; +import org.onosproject.net.group.GroupOperations; +import org.onosproject.net.group.GroupProgrammable; +import org.onosproject.net.group.GroupStore; +import org.onosproject.net.pi.runtime.PiMulticastGroupEntry; +import org.onosproject.net.pi.runtime.PiMulticastGroupEntryHandle; +import org.onosproject.net.pi.service.PiMulticastGroupTranslator; +import org.onosproject.net.pi.service.PiTranslatedEntity; +import org.onosproject.net.pi.service.PiTranslationException; +import org.onosproject.p4runtime.api.P4RuntimeClient; + +import java.util.Collection; +import java.util.Collections; +import java.util.Objects; +import java.util.Optional; +import java.util.concurrent.locks.Lock; +import java.util.stream.Collectors; + +import static org.onosproject.p4runtime.api.P4RuntimeClient.WriteOperationType.DELETE; +import static org.onosproject.p4runtime.api.P4RuntimeClient.WriteOperationType.INSERT; +import static org.onosproject.p4runtime.api.P4RuntimeClient.WriteOperationType.MODIFY; + +/** + * Implementation of GroupProgrammable to handle multicast groups in P4Runtime. + */ +public class P4RuntimeMulticastGroupProgrammable + extends AbstractP4RuntimeHandlerBehaviour implements GroupProgrammable { + + // Needed to synchronize operations over the same group. + private static final Striped STRIPED_LOCKS = Striped.lock(30); + + private GroupStore groupStore; + private P4RuntimeMulticastGroupMirror mcGroupMirror; + private PiMulticastGroupTranslator mcGroupTranslator; + + @Override + protected boolean setupBehaviour() { + if (!super.setupBehaviour()) { + return false; + } + mcGroupMirror = this.handler().get(P4RuntimeMulticastGroupMirror.class); + groupStore = handler().get(GroupStore.class); + mcGroupTranslator = piTranslationService.multicastGroupTranslator(); + return true; + } + + @Override + public void performGroupOperation(DeviceId deviceId, GroupOperations groupOps) { + if (!setupBehaviour()) { + return; + } + groupOps.operations().stream() + .filter(op -> op.groupType().equals(GroupDescription.Type.ALL)) + .forEach(op -> { + final Group group = groupStore.getGroup(deviceId, op.groupId()); + processMcGroupOp(group, op.opType()); + }); + } + + @Override + public Collection getGroups() { + if (!setupBehaviour()) { + return Collections.emptyList(); + } + return ImmutableList.copyOf(getMcGroups()); + } + + private Collection getMcGroups() { + // TODO: missing support for reading multicast groups is ready in PI/Stratum. + return getMcGroupsFromMirror(); + } + + private Collection getMcGroupsFromMirror() { + return mcGroupMirror.getAll(deviceId).stream() + .map(TimedEntry::entry) + .map(this::forgeMcGroupEntry) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + } + + private void processMcGroupOp(Group pdGroup, GroupOperation.Type opType) { + final PiMulticastGroupEntry mcGroup; + try { + mcGroup = mcGroupTranslator.translate(pdGroup, pipeconf); + } catch (PiTranslationException e) { + log.warn("Unable to translate multicast group, aborting {} operation: {} [{}]", + opType, e.getMessage(), pdGroup); + return; + } + final PiMulticastGroupEntryHandle handle = PiMulticastGroupEntryHandle.of( + deviceId, mcGroup); + final PiMulticastGroupEntry groupOnDevice = mcGroupMirror.get(handle) == null + ? null + : mcGroupMirror.get(handle).entry(); + final Lock lock = STRIPED_LOCKS.get(handle); + lock.lock(); + try { + processMcGroup(handle, mcGroup, + groupOnDevice, pdGroup, opType); + } finally { + lock.unlock(); + } + } + + private void processMcGroup(PiMulticastGroupEntryHandle handle, + PiMulticastGroupEntry groupToApply, + PiMulticastGroupEntry groupOnDevice, + Group pdGroup, GroupOperation.Type opType) { + switch (opType) { + case ADD: + robustMcGroupAdd(handle, groupToApply, pdGroup); + return; + case MODIFY: + // Since reading multicast groups is not supported yet on + // PI/Stratum, we cannot trust groupOnDevic) as we don't have a + // mechanism to enforce consistency of the mirror with the + // device state. + // if (driverBoolProperty(CHECK_MIRROR_BEFORE_UPDATE, + // DEFAULT_CHECK_MIRROR_BEFORE_UPDATE) + // && p4OpType == MODIFY + // && groupOnDevice != null + // && groupOnDevice.equals(groupToApply)) { + // // Ignore. + // return; + // } + robustMcGroupModify(handle, groupToApply, pdGroup); + return; + case DELETE: + mcGroupApply(handle, groupToApply, pdGroup, DELETE); + return; + default: + log.error("Unknown group operation type {}, " + + "cannot process multicast group", opType); + } + } + + private boolean writeMcGroupOnDevice(PiMulticastGroupEntry group, P4RuntimeClient.WriteOperationType opType) { + return getFutureWithDeadline( + client.writePreMulticastGroupEntries( + Collections.singletonList(group), opType), + "performing multicast group " + opType, false); + } + + private boolean mcGroupApply(PiMulticastGroupEntryHandle handle, + PiMulticastGroupEntry piGroup, + Group pdGroup, + P4RuntimeClient.WriteOperationType opType) { + switch (opType) { + case DELETE: + if (writeMcGroupOnDevice(piGroup, DELETE)) { + mcGroupMirror.remove(handle); + mcGroupTranslator.forget(handle); + return true; + } else { + return false; + } + case INSERT: + case MODIFY: + if (writeMcGroupOnDevice(piGroup, opType)) { + mcGroupMirror.put(handle, piGroup); + mcGroupTranslator.learn(handle, new PiTranslatedEntity<>( + pdGroup, piGroup, handle)); + return true; + } else { + return false; + } + default: + log.warn("Unknown operation type {}, cannot apply group", opType); + return false; + } + } + + private void robustMcGroupAdd(PiMulticastGroupEntryHandle handle, + PiMulticastGroupEntry piGroup, + Group pdGroup) { + if (mcGroupApply(handle, piGroup, pdGroup, INSERT)) { + return; + } + // Try to delete (perhaps it already exists) and re-add... + mcGroupApply(handle, piGroup, pdGroup, DELETE); + mcGroupApply(handle, piGroup, pdGroup, INSERT); + } + + private void robustMcGroupModify(PiMulticastGroupEntryHandle handle, + PiMulticastGroupEntry piGroup, + Group pdGroup) { + if (mcGroupApply(handle, piGroup, pdGroup, MODIFY)) { + return; + } + // Not sure for which reason it cannot be modified, so try to delete and insert instead... + mcGroupApply(handle, piGroup, pdGroup, DELETE); + mcGroupApply(handle, piGroup, pdGroup, INSERT); + } + + private Group forgeMcGroupEntry(PiMulticastGroupEntry mcGroup) { + final PiMulticastGroupEntryHandle handle = PiMulticastGroupEntryHandle.of( + deviceId, mcGroup); + final Optional> + translatedEntity = mcGroupTranslator.lookup(handle); + final TimedEntry timedEntry = mcGroupMirror.get(handle); + // Is entry consistent with our state? + if (!translatedEntity.isPresent()) { + log.warn("Multicast group handle not found in translation store: {}", handle); + return null; + } + if (timedEntry == null) { + log.warn("Multicast group handle not found in device mirror: {}", handle); + return null; + } + return addedGroup(translatedEntity.get().original(), timedEntry.lifeSec()); + } + + private Group addedGroup(Group original, long life) { + final DefaultGroup forgedGroup = new DefaultGroup(original.id(), original); + forgedGroup.setState(Group.GroupState.ADDED); + forgedGroup.setLife(life); + return forgedGroup; + } + +} diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/AbstractDistributedP4RuntimeMirror.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/AbstractDistributedP4RuntimeMirror.java index 079ab62f42..caa72fe567 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/AbstractDistributedP4RuntimeMirror.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/AbstractDistributedP4RuntimeMirror.java @@ -17,15 +17,21 @@ package org.onosproject.drivers.p4runtime.mirror; import com.google.common.annotations.Beta; +import com.google.common.collect.Maps; 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.onlab.util.KryoNamespace; +import org.onlab.util.SharedExecutors; import org.onosproject.net.DeviceId; import org.onosproject.net.pi.runtime.PiEntity; import org.onosproject.net.pi.runtime.PiHandle; +import org.onosproject.net.pi.service.PiPipeconfWatchdogEvent; +import org.onosproject.net.pi.service.PiPipeconfWatchdogListener; +import org.onosproject.net.pi.service.PiPipeconfWatchdogService; import org.onosproject.store.service.EventuallyConsistentMap; import org.onosproject.store.service.StorageService; import org.onosproject.store.service.WallClockTimestamp; @@ -33,9 +39,12 @@ import org.slf4j.Logger; import java.util.Collection; import java.util.Map; +import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; import static com.google.common.base.Preconditions.checkNotNull; +import static org.onosproject.net.pi.service.PiPipeconfWatchdogService.PipelineStatus.READY; import static org.slf4j.LoggerFactory.getLogger; /** @@ -56,8 +65,14 @@ public abstract class AbstractDistributedP4RuntimeMirror @Reference(cardinality = ReferenceCardinality.MANDATORY) private StorageService storageService; + @Reference(cardinality = ReferenceCardinality.MANDATORY) + private PiPipeconfWatchdogService pipeconfWatchdogService; + private EventuallyConsistentMap> mirrorMap; + private final PiPipeconfWatchdogListener pipeconfListener = + new InternalPipeconfWatchdogListener(); + @Activate public void activate() { mirrorMap = storageService @@ -66,6 +81,7 @@ public abstract class AbstractDistributedP4RuntimeMirror .withSerializer(storeSerializer()) .withTimestampProvider((k, v) -> new WallClockTimestamp()) .build(); + pipeconfWatchdogService.addListener(pipeconfListener); log.info("Started"); } @@ -75,6 +91,7 @@ public abstract class AbstractDistributedP4RuntimeMirror @Deactivate public void deactivate() { + pipeconfWatchdogService.removeListener(pipeconfListener); mirrorMap.destroy(); mirrorMap = null; log.info("Stopped"); @@ -99,6 +116,14 @@ public abstract class AbstractDistributedP4RuntimeMirror public void put(H handle, E entry) { checkNotNull(handle); checkNotNull(entry); + final PiPipeconfWatchdogService.PipelineStatus status = + pipeconfWatchdogService.getStatus(handle.deviceId()); + if (!status.equals(READY)) { + log.info("Ignoring device mirror update because pipeline " + + "status of {} is {}: {}", + handle.deviceId(), status, entry); + return; + } final long now = new WallClockTimestamp().unixTimestamp(); final TimedEntry timedEntry = new TimedEntry<>(now, entry); mirrorMap.put(handle, timedEntry); @@ -110,4 +135,77 @@ public abstract class AbstractDistributedP4RuntimeMirror mirrorMap.remove(handle); } + @Override + public void sync(DeviceId deviceId, Map deviceState) { + checkNotNull(deviceId); + final Map localState = getMirrorMapForDevice(deviceId); + + final AtomicInteger removeCount = new AtomicInteger(0); + final AtomicInteger updateCount = new AtomicInteger(0); + final AtomicInteger addCount = new AtomicInteger(0); + // Add missing entries. + deviceState.keySet().stream() + .filter(deviceHandle -> !localState.containsKey(deviceHandle)) + .forEach(deviceHandle -> { + final E entryToAdd = deviceState.get(deviceHandle); + log.debug("Adding mirror entry for {}: {}", + deviceId, entryToAdd); + put(deviceHandle, entryToAdd); + addCount.incrementAndGet(); + }); + // Update or remove local entries. + localState.keySet().forEach(localHandle -> { + final E localEntry = localState.get(localHandle); + final E deviceEntry = deviceState.get(localHandle); + if (deviceEntry == null) { + log.debug("Removing mirror entry for {}: {}", deviceId, localEntry); + remove(localHandle); + removeCount.incrementAndGet(); + } else if (!deviceEntry.equals(localEntry)) { + log.debug("Updating mirror entry for {}: {}-->{}", + deviceId, localEntry, deviceEntry); + put(localHandle, deviceEntry); + updateCount.incrementAndGet(); + } + }); + if (removeCount.get() + updateCount.get() + addCount.get() > 0) { + log.info("Synchronized mirror entries for {}: {} removed, {} updated, {} added", + deviceId, removeCount, updateCount, addCount); + } + } + + private Set getHandlesForDevice(DeviceId deviceId) { + return mirrorMap.keySet().stream() + .filter(h -> h.deviceId().equals(deviceId)) + .collect(Collectors.toSet()); + } + + private Map getMirrorMapForDevice(DeviceId deviceId) { + final Map deviceMap = Maps.newHashMap(); + mirrorMap.entrySet().stream() + .filter(e -> e.getKey().deviceId().equals(deviceId)) + .forEach(e -> deviceMap.put(e.getKey(), e.getValue().entry())); + return deviceMap; + } + + private void removeAll(DeviceId deviceId) { + checkNotNull(deviceId); + Collection handles = getHandlesForDevice(deviceId); + handles.forEach(mirrorMap::remove); + } + + public class InternalPipeconfWatchdogListener implements PiPipeconfWatchdogListener { + @Override + public void event(PiPipeconfWatchdogEvent event) { + log.debug("Flushing mirror for {}, pipeline status is {}", + event.subject(), event.type()); + SharedExecutors.getPoolThreadExecutor().execute( + () -> removeAll(event.subject())); + } + + @Override + public boolean isRelevant(PiPipeconfWatchdogEvent event) { + return event.type().equals(PiPipeconfWatchdogEvent.Type.PIPELINE_UNKNOWN); + } + } } diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeActionProfileMemberMirror.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeActionProfileMemberMirror.java new file mode 100644 index 0000000000..1ca29c102b --- /dev/null +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/DistributedP4RuntimeActionProfileMemberMirror.java @@ -0,0 +1,48 @@ +/* + * Copyright 2018-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onosproject.drivers.p4runtime.mirror; + +import org.onlab.util.KryoNamespace; +import org.onosproject.net.pi.runtime.PiActionGroupMember; +import org.onosproject.net.pi.runtime.PiActionGroupMemberHandle; +import org.onosproject.store.serializers.KryoNamespaces; +import org.osgi.service.component.annotations.Component; + +/** + * Distributed implementation of a P4Runtime action profile member mirror. + */ +@Component(immediate = true, service = AbstractDistributedP4RuntimeMirror.class) +public class DistributedP4RuntimeActionProfileMemberMirror + extends AbstractDistributedP4RuntimeMirror + + implements P4RuntimeActionProfileMemberMirror { + + private static final String DIST_MAP_NAME = "onos-p4runtime-act-prof-member-mirror"; + + @Override + String mapName() { + return DIST_MAP_NAME; + } + + @Override + KryoNamespace storeSerializer() { + return KryoNamespace.newBuilder() + .register(KryoNamespaces.API) + .register(TimedEntry.class) + .build(); + } +} diff --git a/apps/inbandtelemetry/app/src/main/java/org/onosproject/inbandtelemetry/app/package-info.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/P4RuntimeActionProfileMemberMirror.java similarity index 56% rename from apps/inbandtelemetry/app/src/main/java/org/onosproject/inbandtelemetry/app/package-info.java rename to drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/P4RuntimeActionProfileMemberMirror.java index 859bdf7af5..8ab1fa09bf 100644 --- a/apps/inbandtelemetry/app/src/main/java/org/onosproject/inbandtelemetry/app/package-info.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/P4RuntimeActionProfileMemberMirror.java @@ -1,5 +1,5 @@ /* - * Copyright 2015-present Open Networking Foundation + * Copyright 2018-present Open Networking Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,14 @@ * limitations under the License. */ +package org.onosproject.drivers.p4runtime.mirror; + +import org.onosproject.net.pi.runtime.PiActionGroupMember; +import org.onosproject.net.pi.runtime.PiActionGroupMemberHandle; + /** - * IntService sample application. + * Mirror of action profile members installed on a P4Runtime device. */ -package org.onosproject.inbandtelemetry.app; +public interface P4RuntimeActionProfileMemberMirror + extends P4RuntimeMirror { +} diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/P4RuntimeMirror.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/P4RuntimeMirror.java index ab18c9d5ab..d1c9cddcff 100644 --- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/P4RuntimeMirror.java +++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/mirror/P4RuntimeMirror.java @@ -22,6 +22,7 @@ import org.onosproject.net.pi.runtime.PiEntity; import org.onosproject.net.pi.runtime.PiHandle; import java.util.Collection; +import java.util.Map; /** * Service to keep track of the device state for a given class of PI entities. @@ -71,4 +72,12 @@ public interface P4RuntimeMirror * @param handle handle */ void remove(H handle); + + /** + * Synchronizes the state of the given device ID with the given handle map. + * + * @param deviceId device ID + * @param handleMap handle map + */ + void sync(DeviceId deviceId, Map handleMap); } diff --git a/lib/BUCK b/lib/BUCK index 55a260805a..d799e21b9b 100644 --- a/lib/BUCK +++ b/lib/BUCK @@ -1,8 +1,12 @@ <<<<<<< HEAD +<<<<<<< HEAD # ***** This file was auto-generated at Tue, 18 Sep 2018 20:31:36 GMT. Do not edit this file manually. ***** ======= # ***** This file was auto-generated at Thu, 27 Sep 2018 15:25:26 GMT. Do not edit this file manually. ***** >>>>>>> origin/master +======= +# ***** This file was auto-generated at Fri, 5 Oct 2018 20:40:12 GMT. Do not edit this file manually. ***** +>>>>>>> master # ***** Use onos-lib-gen ***** pass_thru_pom( @@ -246,82 +250,82 @@ remote_jar ( remote_jar ( name = 'atomix', - out = 'atomix-3.0.5.jar', - url = 'mvn:io.atomix:atomix:jar:3.0.5', - sha1 = '758df25aed743d625930654d2e589cc0084efdbc', - maven_coords = 'io.atomix:atomix:3.0.5', + out = 'atomix-3.0.6.jar', + url = 'mvn:io.atomix:atomix:jar:3.0.6', + sha1 = 'a8c1401b9f5d3757c8cfa2b7905d928825507cf8', + maven_coords = 'io.atomix:atomix:3.0.6', visibility = [ 'PUBLIC' ], ) remote_jar ( name = 'atomix-cluster', - out = 'atomix-cluster-3.0.5.jar', - url = 'mvn:io.atomix:atomix-cluster:jar:3.0.5', - sha1 = '3ac50436eaf47fa5ba7553b37628aea7fa8b8deb', - maven_coords = 'io.atomix:atomix-cluster:3.0.5', + out = 'atomix-cluster-3.0.6.jar', + url = 'mvn:io.atomix:atomix-cluster:jar:3.0.6', + sha1 = '8d91e0caf5c2739476826b32bdcf21afc32bf433', + maven_coords = 'io.atomix:atomix-cluster:3.0.6', visibility = [ 'PUBLIC' ], ) remote_jar ( name = 'atomix-gossip', - out = 'atomix-gossip-3.0.5.jar', - url = 'mvn:io.atomix:atomix-gossip:jar:3.0.5', - sha1 = '63c365b00b0164aa067e55febca9a4df253e8ab2', - maven_coords = 'io.atomix:atomix-gossip:3.0.5', + out = 'atomix-gossip-3.0.6.jar', + url = 'mvn:io.atomix:atomix-gossip:jar:3.0.6', + sha1 = '5db475ea2702fabfb8eb19079bc07979bc706c17', + maven_coords = 'io.atomix:atomix-gossip:3.0.6', visibility = [ 'PUBLIC' ], ) remote_jar ( name = 'atomix-primary-backup', - out = 'atomix-primary-backup-3.0.5.jar', - url = 'mvn:io.atomix:atomix-primary-backup:jar:3.0.5', - sha1 = 'f444f8f733457182a096786dd2b6a4369d1feebc', - maven_coords = 'io.atomix:atomix-primary-backup:3.0.5', + out = 'atomix-primary-backup-3.0.6.jar', + url = 'mvn:io.atomix:atomix-primary-backup:jar:3.0.6', + sha1 = 'af3a4475a54a83fe8eafd58925c04db608eec150', + maven_coords = 'io.atomix:atomix-primary-backup:3.0.6', visibility = [ 'PUBLIC' ], ) remote_jar ( name = 'atomix-primitive', - out = 'atomix-primitive-3.0.5.jar', - url = 'mvn:io.atomix:atomix-primitive:jar:3.0.5', - sha1 = 'e383b171c202df84af7e8510034714bc52831115', - maven_coords = 'io.atomix:atomix-primitive:3.0.5', + out = 'atomix-primitive-3.0.6.jar', + url = 'mvn:io.atomix:atomix-primitive:jar:3.0.6', + sha1 = 'bb65acf0dd5e805ffc27f0f768e2fe5310d83a71', + maven_coords = 'io.atomix:atomix-primitive:3.0.6', visibility = [ 'PUBLIC' ], ) remote_jar ( name = 'atomix-raft', - out = 'atomix-raft-3.0.5.jar', - url = 'mvn:io.atomix:atomix-raft:jar:3.0.5', - sha1 = '0e7345cd475adb6e1f5af8ec48fd6faeb1261f84', - maven_coords = 'io.atomix:atomix-raft:3.0.5', + out = 'atomix-raft-3.0.6.jar', + url = 'mvn:io.atomix:atomix-raft:jar:3.0.6', + sha1 = 'f3497269b021f8794ba26296f6779977fd213f0e', + maven_coords = 'io.atomix:atomix-raft:3.0.6', visibility = [ 'PUBLIC' ], ) remote_jar ( name = 'atomix-storage', - out = 'atomix-storage-3.0.5.jar', - url = 'mvn:io.atomix:atomix-storage:jar:3.0.5', - sha1 = '2967037f437ce85c191795baeb65535d76b027fe', - maven_coords = 'io.atomix:atomix-storage:3.0.5', + out = 'atomix-storage-3.0.6.jar', + url = 'mvn:io.atomix:atomix-storage:jar:3.0.6', + sha1 = '0cebbfd8932c7ed27d173d9f3487687317905f5d', + maven_coords = 'io.atomix:atomix-storage:3.0.6', visibility = [ 'PUBLIC' ], ) remote_jar ( name = 'atomix-utils', - out = 'atomix-utils-3.0.5.jar', - url = 'mvn:io.atomix:atomix-utils:jar:3.0.5', - sha1 = '63afb65deccb9631b8017d6aa779b337f920cef0', - maven_coords = 'io.atomix:atomix-utils:3.0.5', + out = 'atomix-utils-3.0.6.jar', + url = 'mvn:io.atomix:atomix-utils:jar:3.0.6', + sha1 = 'd99e63b9df25b59baea5c2fedbd6ad9dab6de59f', + maven_coords = 'io.atomix:atomix-utils:3.0.6', visibility = [ 'PUBLIC' ], ) remote_jar ( name = 'classgraph', - out = 'classgraph-4.0.6.jar', - url = 'mvn:io.github.classgraph:classgraph:jar:4.0.6', - sha1 = '7fe1e7464ffd40c7333b8bbf53c4d73a7cbd7b4c', - maven_coords = 'io.github.classgraph:classgraph:4.0.6', + out = 'classgraph-4.2.3.jar', + url = 'mvn:io.github.classgraph:classgraph:jar:4.2.3', + sha1 = '5c9bfb002097a6cf6c7134821954e24326db3a7b', + maven_coords = 'io.github.classgraph:classgraph:4.2.3', visibility = [ 'PUBLIC' ], ) @@ -1477,10 +1481,10 @@ remote_jar ( remote_jar ( name = 'libthrift', - out = 'libthrift-0.9.3.jar', - url = 'mvn:org.apache.thrift:libthrift:jar:0.9.3', - sha1 = '8625e8f9b6f49b881fa5fd143172c2833df1ce47', - maven_coords = 'org.apache.thrift:libthrift:0.9.3', + out = 'libthrift-0.11.0.jar', + url = 'mvn:org.apache.thrift:libthrift:jar:0.11.0', + sha1 = '4f4f1c1fbbae63258625dea71007fa41bee7edb3', + maven_coords = 'org.apache.thrift:libthrift:0.11.0', visibility = [ 'PUBLIC' ], ) diff --git a/lib/deps.json b/lib/deps.json index ad15f293a0..b06dbeb803 100644 --- a/lib/deps.json +++ b/lib/deps.json @@ -148,7 +148,7 @@ "atomix-raft": "mvn:io.atomix:atomix-raft:3.0.5", "atomix-storage": "mvn:io.atomix:atomix-storage:3.0.5", "atomix-utils": "mvn:io.atomix:atomix-utils:3.0.5", - "classgraph": "mvn:io.github.classgraph:classgraph:4.0.6", + "classgraph": "mvn:io.github.classgraph:classgraph:4.2.3", "commons-codec": "mvn:commons-codec:commons-codec:1.10", "commons-cli": "mvn:commons-cli:commons-cli:1.3", "commons-collections": "mvn:commons-collections:commons-collections:3.2.2", @@ -285,7 +285,7 @@ "apache-karaf": "http://repo1.maven.org/maven2/org/onosproject/apache-karaf-offline/4.2.1-base/apache-karaf-offline-4.2.1-base.tar.gz", "bndlib": "mvn:biz.aQute.bnd:biz.aQute.bndlib:jar:4.0.0", "bndexe": "mvn:biz.aQute.bnd:biz.aQute.bnd:4.0.0", - "libthrift": "mvn:org.apache.thrift:libthrift:0.9.3", + "libthrift": "mvn:org.apache.thrift:libthrift:0.11.0", "qdox": "mvn:com.thoughtworks.qdox:qdox:2.0-M3", "snmp-core": "mvn:org.onosproject:snmp-core:1.3-20161021.1", "mibs-net-snmp": "mvn:org.onosproject:mibbler-mibs-net-snmp:1.0-20151221.1", diff --git a/modules.bzl b/modules.bzl index cd30cc3004..d60188502d 100644 --- a/modules.bzl +++ b/modules.bzl @@ -249,6 +249,7 @@ ONOS_APPS = [ "//apps/layout:onos-apps-layout-oar", "//apps/imr:onos-apps-imr-oar", "//apps/nodemetrics:onos-apps-nodemetrics-oar", + "//apps/inbandtelemetry:onos-apps-inbandtelemetry-oar", # "//web/gui2:onos-web-gui2-oar", "//apps/workflow:onos-apps-workflow-oar", ] diff --git a/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/IntProgrammableImpl.java b/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/IntProgrammableImpl.java index 86e392f450..284e7b8617 100644 --- a/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/IntProgrammableImpl.java +++ b/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/IntProgrammableImpl.java @@ -20,24 +20,21 @@ import com.google.common.collect.Sets; import org.osgi.service.component.annotations.Reference; import org.osgi.service.component.annotations.ReferenceCardinality; import org.onlab.util.ImmutableByteSequence; -import org.onlab.util.SharedExecutors; import org.onosproject.core.ApplicationId; import org.onosproject.core.CoreService; import org.onosproject.inbandtelemetry.api.IntConfig; import org.onosproject.inbandtelemetry.api.IntIntent; import org.onosproject.inbandtelemetry.api.IntObjective; import org.onosproject.inbandtelemetry.api.IntProgrammable; -import org.onosproject.net.ConnectPoint; import org.onosproject.net.DeviceId; -import org.onosproject.net.Port; import org.onosproject.net.PortNumber; -import org.onosproject.net.device.DeviceService; import org.onosproject.net.driver.AbstractHandlerBehaviour; import org.onosproject.net.flow.DefaultFlowRule; import org.onosproject.net.flow.DefaultTrafficSelector; import org.onosproject.net.flow.DefaultTrafficTreatment; import org.onosproject.net.flow.FlowRule; import org.onosproject.net.flow.FlowRuleService; +import org.onosproject.net.flow.TableId; import org.onosproject.net.flow.TrafficSelector; import org.onosproject.net.flow.TrafficTreatment; import org.onosproject.net.flow.criteria.Criterion; @@ -45,7 +42,6 @@ import org.onosproject.net.flow.criteria.IPCriterion; import org.onosproject.net.flow.criteria.PiCriterion; import org.onosproject.net.flow.criteria.TcpPortCriterion; import org.onosproject.net.flow.criteria.UdpPortCriterion; -import org.onosproject.net.host.HostService; import org.onosproject.net.pi.model.PiActionId; import org.onosproject.net.pi.model.PiMatchFieldId; import org.onosproject.net.pi.model.PiTableId; @@ -53,11 +49,9 @@ import org.onosproject.net.pi.runtime.PiAction; import org.onosproject.net.pi.runtime.PiActionParam; import org.slf4j.Logger; -import java.util.ArrayList; -import java.util.List; import java.util.Set; -import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; +import java.util.stream.StreamSupport; import static org.slf4j.LoggerFactory.getLogger; @@ -79,15 +73,18 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int Criterion.Type.TCP_SRC, Criterion.Type.TCP_DST, Criterion.Type.IP_PROTO); + private static final Set TABLES_TO_CLEANUP = Sets.newHashSet( + IntConstants.TBL_INT_INSERT_ID, + IntConstants.TBL_INT_INST_0003_ID, + IntConstants.TBL_INT_INST_0407_ID, + IntConstants.TBL_SET_SOURCE_ID, + IntConstants.TBL_SET_SINK_ID, + IntConstants.TBL_INT_SOURCE_ID, + IntConstants.TBL_GENERATE_REPORT_ID); + @Reference(cardinality = ReferenceCardinality.MANDATORY) private FlowRuleService flowRuleService; - @Reference(cardinality = ReferenceCardinality.MANDATORY) - private DeviceService deviceService; - - @Reference(cardinality = ReferenceCardinality.MANDATORY) - private HostService hostService; - @Reference(cardinality = ReferenceCardinality.MANDATORY) private CoreService coreService; @@ -134,23 +131,16 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int .build(); @Override - public void init() { + public boolean init() { deviceId = this.data().deviceId(); flowRuleService = handler().get(FlowRuleService.class); - deviceService = handler().get(DeviceService.class); - hostService = handler().get(HostService.class); coreService = handler().get(CoreService.class); appId = coreService.getAppId(PIPELINE_APP_NAME); if (appId == null) { log.warn("Application ID is null. Cannot initialize INT-pipeline."); - return; + return false; } - Set hostPorts = deviceService.getPorts(deviceId).stream().filter(port -> - hostService.getConnectedHosts(new ConnectPoint(deviceId, port.number())).size() > 0 - ).map(Port::number).collect(Collectors.toSet()); - List flowRules = new ArrayList<>(); - // process_int_transit.tb_int_insert PiActionParam transitIdParam = new PiActionParam( IntConstants.ACT_PRM_SWITCH_ID, @@ -173,58 +163,8 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int .forDevice(deviceId) .forTable(IntConstants.TBL_INT_INSERT_ID) .build(); - flowRules.add(transitFlowRule); - for (PortNumber portNumber: hostPorts) { - // process_set_source_sink.tb_set_source for each host-facing port - PiCriterion ingressCriterion = PiCriterion.builder() - .matchExact(BasicConstants.HDR_IN_PORT_ID, portNumber.toLong()) - .build(); - TrafficSelector srcSelector = DefaultTrafficSelector.builder() - .matchPi(ingressCriterion) - .build(); - PiAction setSourceAct = PiAction.builder() - .withId(IntConstants.ACT_INT_SET_SOURCE_ID) - .build(); - TrafficTreatment srcTreatment = DefaultTrafficTreatment.builder() - .piTableAction(setSourceAct) - .build(); - FlowRule srcFlowRule = DefaultFlowRule.builder() - .withSelector(srcSelector) - .withTreatment(srcTreatment) - .fromApp(appId) - .withPriority(DEFAULT_PRIORITY) - .makePermanent() - .forDevice(deviceId) - .forTable(IntConstants.TBL_SET_SOURCE_ID) - .build(); - flowRules.add(srcFlowRule); - - // process_set_source_sink.tb_set_sink - PiCriterion egressCriterion = PiCriterion.builder() - .matchExact(IntConstants.HDR_OUT_PORT_ID, portNumber.toLong()) - .build(); - TrafficSelector sinkSelector = DefaultTrafficSelector.builder() - .matchPi(egressCriterion) - .build(); - PiAction setSinkAct = PiAction.builder() - .withId(IntConstants.ACT_INT_SET_SINK_ID) - .build(); - TrafficTreatment sinkTreatment = DefaultTrafficTreatment.builder() - .piTableAction(setSinkAct) - .build(); - FlowRule sinkFlowRule = DefaultFlowRule.builder() - .withSelector(sinkSelector) - .withTreatment(sinkTreatment) - .fromApp(appId) - .withPriority(DEFAULT_PRIORITY) - .makePermanent() - .forDevice(deviceId) - .forTable(IntConstants.TBL_SET_SINK_ID) - .build(); - flowRules.add(sinkFlowRule); - } - flowRules.forEach(flowRule -> flowRuleService.applyFlowRules(flowRule)); + flowRuleService.applyFlowRules(transitFlowRule); // Populate tb_int_inst_0003 table INST_0003_ACTION_MAP.forEach((matchValue, actionId) -> @@ -240,32 +180,103 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int matchValue, actionId, appId)); + + return true; } @Override - public CompletableFuture addIntObjective(IntObjective obj) { + public boolean setSourcePort(PortNumber port) { + // process_set_source_sink.tb_set_source for each host-facing port + PiCriterion ingressCriterion = PiCriterion.builder() + .matchExact(BasicConstants.HDR_IN_PORT_ID, port.toLong()) + .build(); + TrafficSelector srcSelector = DefaultTrafficSelector.builder() + .matchPi(ingressCriterion) + .build(); + PiAction setSourceAct = PiAction.builder() + .withId(IntConstants.ACT_INT_SET_SOURCE_ID) + .build(); + TrafficTreatment srcTreatment = DefaultTrafficTreatment.builder() + .piTableAction(setSourceAct) + .build(); + FlowRule srcFlowRule = DefaultFlowRule.builder() + .withSelector(srcSelector) + .withTreatment(srcTreatment) + .fromApp(appId) + .withPriority(DEFAULT_PRIORITY) + .makePermanent() + .forDevice(deviceId) + .forTable(IntConstants.TBL_SET_SOURCE_ID) + .build(); + flowRuleService.applyFlowRules(srcFlowRule); + return true; + } + + @Override + public boolean setSinkPort(PortNumber port) { + // process_set_source_sink.tb_set_sink + PiCriterion egressCriterion = PiCriterion.builder() + .matchExact(IntConstants.HDR_OUT_PORT_ID, port.toLong()) + .build(); + TrafficSelector sinkSelector = DefaultTrafficSelector.builder() + .matchPi(egressCriterion) + .build(); + PiAction setSinkAct = PiAction.builder() + .withId(IntConstants.ACT_INT_SET_SINK_ID) + .build(); + TrafficTreatment sinkTreatment = DefaultTrafficTreatment.builder() + .piTableAction(setSinkAct) + .build(); + FlowRule sinkFlowRule = DefaultFlowRule.builder() + .withSelector(sinkSelector) + .withTreatment(sinkTreatment) + .fromApp(appId) + .withPriority(DEFAULT_PRIORITY) + .makePermanent() + .forDevice(deviceId) + .forTable(IntConstants.TBL_SET_SINK_ID) + .build(); + flowRuleService.applyFlowRules(sinkFlowRule); + return true; + } + + @Override + public boolean addIntObjective(IntObjective obj) { // TODO: support different types of watchlist other than flow watchlist - return CompletableFuture.supplyAsync( - () -> processIntObjective(obj, true), - SharedExecutors.getPoolThreadExecutor() - ); + return processIntObjective(obj, true); } @Override - public CompletableFuture removeIntObjective(IntObjective obj) { - return CompletableFuture.supplyAsync( - () -> processIntObjective(obj, false), - SharedExecutors.getPoolThreadExecutor() - ); + public boolean removeIntObjective(IntObjective obj) { + return processIntObjective(obj, false); } @Override - public CompletableFuture setupIntConfig(IntConfig config) { - return CompletableFuture.supplyAsync( - () -> setupIntReportInternal(config), - SharedExecutors.getPoolThreadExecutor() - ); + public boolean setupIntConfig(IntConfig config) { + return setupIntReportInternal(config); + } + + @Override + public void cleanup() { + StreamSupport.stream(flowRuleService.getFlowEntries( + data().deviceId()).spliterator(), false) + .filter(f -> f.table().type() == TableId.Type.PIPELINE_INDEPENDENT) + .filter(f -> TABLES_TO_CLEANUP.contains((PiTableId) f.table())) + .forEach(flowRuleService::removeFlowRules); + } + + @Override + public boolean supportsFunctionality(IntFunctionality functionality) { + switch (functionality) { + case SOURCE: + case SINK: + case TRANSIT: + return true; + default: + log.warn("Unknown functionality {}", functionality); + return false; + } } private void populateInstTableEntry(PiTableId tableId, PiMatchFieldId matchFieldId, @@ -419,12 +430,12 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int } /** - * Returns a subset of Criterion from given selector, - * which is unsupported by this INT pipeline. + * Returns a subset of Criterion from given selector, which is unsupported + * by this INT pipeline. * * @param selector a traffic selector - * @return a subset of Criterion from given selector, unsupported by this INT pipeline, - * empty if all criteria are supported. + * @return a subset of Criterion from given selector, unsupported by this + * INT pipeline, empty if all criteria are supported. */ private Set unsupportedSelectors(TrafficSelector selector) { return selector.criteria().stream() diff --git a/pipelines/fabric/BUCK b/pipelines/fabric/BUCK index 168e9d81d0..549128988d 100644 --- a/pipelines/fabric/BUCK +++ b/pipelines/fabric/BUCK @@ -6,6 +6,7 @@ COMPILE_DEPS = [ '//pipelines/basic:onos-pipelines-basic', '//core/store/serializers:onos-core-serializers', '//apps/inbandtelemetry/api:onos-apps-inbandtelemetry-api', + '//providers/general/device:onos-providers-general-device', ] TEST_DEPS = [ diff --git a/pipelines/fabric/BUILD b/pipelines/fabric/BUILD index c356aae99b..11dad5684f 100644 --- a/pipelines/fabric/BUILD +++ b/pipelines/fabric/BUILD @@ -1,6 +1,7 @@ COMPILE_DEPS = CORE_DEPS + KRYO + [ "//protocols/p4runtime/model:onos-protocols-p4runtime-model", "//protocols/p4runtime/api:onos-protocols-p4runtime-api", + "//providers/general/device:onos-providers-general-device", "//pipelines/basic:onos-pipelines-basic", "//core/store/serializers:onos-core-serializers", "//apps/inbandtelemetry/api:onos-apps-inbandtelemetry-api", diff --git a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java index 78cf0717d6..07bb8627d8 100644 --- a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java +++ b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricConstants.java @@ -45,6 +45,8 @@ public final class FabricConstants { PiMatchFieldId.of("hdr.vlan_tag.is_valid"); public static final PiMatchFieldId HDR_ICMP_ICMP_CODE = PiMatchFieldId.of("hdr.icmp.icmp_code"); + public static final PiMatchFieldId HDR_INT_HEADER_IS_VALID = + PiMatchFieldId.of("hdr.int_header.is_valid"); public static final PiMatchFieldId HDR_ETHERNET_SRC_ADDR = PiMatchFieldId.of("hdr.ethernet.src_addr"); public static final PiMatchFieldId HDR_ICMP_ICMP_TYPE = @@ -82,36 +84,36 @@ public final class FabricConstants { PiTableId.of("FabricIngress.forwarding.acl"); public static final PiTableId FABRIC_INGRESS_NEXT_HASHED = PiTableId.of("FabricIngress.next.hashed"); + public static final PiTableId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_SOURCE_TB_INT_SOURCE = + PiTableId.of("FabricEgress.process_int_main.process_int_source.tb_int_source"); public static final PiTableId FABRIC_INGRESS_FORWARDING_MPLS = PiTableId.of("FabricIngress.forwarding.mpls"); public static final PiTableId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SINK = PiTableId.of("FabricIngress.process_set_source_sink.tb_set_sink"); public static final PiTableId FABRIC_INGRESS_FORWARDING_ROUTING_V4 = PiTableId.of("FabricIngress.forwarding.routing_v4"); + public static final PiTableId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_TB_INT_INST_0407 = + PiTableId.of("FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407"); + public static final PiTableId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_TB_INT_INSERT = + PiTableId.of("FabricEgress.process_int_main.process_int_transit.tb_int_insert"); public static final PiTableId FABRIC_INGRESS_NEXT_SIMPLE = PiTableId.of("FabricIngress.next.simple"); - public static final PiTableId FABRIC_EGRESS_PROCESS_INT_SOURCE_TB_INT_SOURCE = - PiTableId.of("FabricEgress.process_int_source.tb_int_source"); - public static final PiTableId FABRIC_EGRESS_PROCESS_INT_TRANSIT_TB_INT_INST_0003 = - PiTableId.of("FabricEgress.process_int_transit.tb_int_inst_0003"); - public static final PiTableId FABRIC_EGRESS_PROCESS_INT_TRANSIT_TB_INT_INSERT = - PiTableId.of("FabricEgress.process_int_transit.tb_int_insert"); public static final PiTableId FABRIC_INGRESS_FILTERING_FWD_CLASSIFIER = PiTableId.of("FabricIngress.filtering.fwd_classifier"); public static final PiTableId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SOURCE = PiTableId.of("FabricIngress.process_set_source_sink.tb_set_source"); - public static final PiTableId FABRIC_EGRESS_PROCESS_INT_REPORT_TB_GENERATE_REPORT = - PiTableId.of("FabricEgress.process_int_report.tb_generate_report"); public static final PiTableId FABRIC_INGRESS_FORWARDING_BRIDGING = PiTableId.of("FabricIngress.forwarding.bridging"); public static final PiTableId FABRIC_INGRESS_SPGW_INGRESS_S1U_FILTER_TABLE = PiTableId.of("FabricIngress.spgw_ingress.s1u_filter_table"); + public static final PiTableId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_TB_INT_INST_0003 = + PiTableId.of("FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003"); public static final PiTableId FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN = PiTableId.of("FabricIngress.filtering.ingress_port_vlan"); + public static final PiTableId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_REPORT_TB_GENERATE_REPORT = + PiTableId.of("FabricEgress.process_int_main.process_int_report.tb_generate_report"); public static final PiTableId FABRIC_INGRESS_SPGW_INGRESS_DL_SESS_LOOKUP = PiTableId.of("FabricIngress.spgw_ingress.dl_sess_lookup"); - public static final PiTableId FABRIC_EGRESS_PROCESS_INT_TRANSIT_TB_INT_INST_0407 = - PiTableId.of("FabricEgress.process_int_transit.tb_int_inst_0407"); public static final PiTableId FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN = PiTableId.of("FabricEgress.egress_next.egress_vlan"); public static final PiTableId FABRIC_INGRESS_NEXT_MULTICAST = @@ -140,22 +142,16 @@ public final class FabricConstants { PiCounterId.of("FabricIngress.forwarding.routing_v4_counter"); public static final PiCounterId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_COUNTER_SET_SOURCE = PiCounterId.of("FabricIngress.process_set_source_sink.counter_set_source"); - public static final PiCounterId FABRIC_EGRESS_PROCESS_INT_TRANSIT_COUNTER_INT_INST_0407 = - PiCounterId.of("FabricEgress.process_int_transit.counter_int_inst_0407"); + public static final PiCounterId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_SOURCE_COUNTER_INT_SOURCE = + PiCounterId.of("FabricEgress.process_int_main.process_int_source.counter_int_source"); public static final PiCounterId FABRIC_INGRESS_SPGW_INGRESS_UE_COUNTER = PiCounterId.of("FabricIngress.spgw_ingress.ue_counter"); - public static final PiCounterId FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN_COUNTER = - PiCounterId.of("FabricEgress.egress_next.egress_vlan_counter"); public static final PiCounterId FABRIC_INGRESS_NEXT_SIMPLE_COUNTER = PiCounterId.of("FabricIngress.next.simple_counter"); public static final PiCounterId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_COUNTER_SET_SINK = PiCounterId.of("FabricIngress.process_set_source_sink.counter_set_sink"); - public static final PiCounterId FABRIC_EGRESS_PROCESS_INT_TRANSIT_COUNTER_INT_INSERT = - PiCounterId.of("FabricEgress.process_int_transit.counter_int_insert"); - public static final PiCounterId FABRIC_EGRESS_PROCESS_INT_SOURCE_COUNTER_INT_SOURCE = - PiCounterId.of("FabricEgress.process_int_source.counter_int_source"); - public static final PiCounterId FABRIC_EGRESS_PROCESS_INT_TRANSIT_COUNTER_INT_INST_0003 = - PiCounterId.of("FabricEgress.process_int_transit.counter_int_inst_0003"); + public static final PiCounterId FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN_COUNTER = + PiCounterId.of("FabricEgress.egress_next.egress_vlan_counter"); public static final PiCounterId FABRIC_INGRESS_FORWARDING_ROUTING_V6_COUNTER = PiCounterId.of("FabricIngress.forwarding.routing_v6_counter"); public static final PiCounterId FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN_COUNTER = @@ -165,145 +161,129 @@ public final class FabricConstants { public static final PiCounterId FABRIC_INGRESS_NEXT_HASHED_COUNTER = PiCounterId.of("FabricIngress.next.hashed_counter"); // Action IDs - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I14 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i14"); public static final PiActionId FABRIC_INGRESS_FORWARDING_PUNT_TO_CPU = PiActionId.of("FabricIngress.forwarding.punt_to_cpu"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I12 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i12"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I13 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i13"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I10 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i10"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I5 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5"); public static final PiActionId FABRIC_INGRESS_NEXT_MPLS_ROUTING_V6_SIMPLE = PiActionId.of("FabricIngress.next.mpls_routing_v6_simple"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I12 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12"); public static final PiActionId FABRIC_INGRESS_FORWARDING_NOP_ROUTING_V4 = PiActionId.of("FabricIngress.forwarding.nop_routing_v4"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_UPDATE_TOTAL_HOP_CNT = - PiActionId.of("FabricEgress.process_int_transit.int_update_total_hop_cnt"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I10 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I11 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11"); public static final PiActionId FABRIC_INGRESS_FILTERING_NOP_INGRESS_PORT_VLAN = PiActionId.of("FabricIngress.filtering.nop_ingress_port_vlan"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I14 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i14"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I14 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14"); public static final PiActionId FABRIC_INGRESS_FORWARDING_SET_NEXT_ID_BRIDGING = PiActionId.of("FabricIngress.forwarding.set_next_id_bridging"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I15 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i15"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I2 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i2"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I5 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i5"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I4 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i4"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_SINK_INT_SINK = - PiActionId.of("FabricEgress.process_int_sink.int_sink"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I3 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i3"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I13 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i13"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I7 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i7"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_SOURCE_INT_SOURCE_DSCP = + PiActionId.of("FabricEgress.process_int_main.process_int_source.int_source_dscp"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I0 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INIT_METADATA = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.init_metadata"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I14 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14"); + public static final PiActionId FABRIC_EGRESS_EGRESS_NEXT_POP_VLAN = + PiActionId.of("FabricEgress.egress_next.pop_vlan"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I4 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I2 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2"); public static final PiActionId FABRIC_INGRESS_NEXT_SET_VLAN = PiActionId.of("FabricIngress.next.set_vlan"); - public static final PiActionId FABRIC_EGRESS_PKT_IO_EGRESS_POP_VLAN = - PiActionId.of("FabricEgress.pkt_io_egress.pop_vlan"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I8 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i8"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I9 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i9"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I4 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4"); public static final PiActionId FABRIC_EGRESS_SPGW_EGRESS_GTPU_ENCAP = PiActionId.of("FabricEgress.spgw_egress.gtpu_encap"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I4 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i4"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I5 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i5"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I12 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I13 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13"); public static final PiActionId FABRIC_INGRESS_FILTERING_SET_VLAN = PiActionId.of("FabricIngress.filtering.set_vlan"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I11 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i11"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I0 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i0"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I1 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i1"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I11 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11"); + public static final PiActionId FABRIC_EGRESS_PKT_IO_EGRESS_POP_VLAN = + PiActionId.of("FabricEgress.pkt_io_egress.pop_vlan"); public static final PiActionId FABRIC_INGRESS_NEXT_L3_ROUTING_SIMPLE = PiActionId.of("FabricIngress.next.l3_routing_simple"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I3 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i3"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I15 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15"); public static final PiActionId FABRIC_INGRESS_NEXT_SET_MCAST_GROUP = PiActionId.of("FabricIngress.next.set_mcast_group"); public static final PiActionId FABRIC_INGRESS_FORWARDING_SET_NEXT_ID_ROUTING_V4 = PiActionId.of("FabricIngress.forwarding.set_next_id_routing_v4"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_OUTER_ENCAP_INT_UPDATE_UDP = - PiActionId.of("FabricEgress.process_int_outer_encap.int_update_udp"); public static final PiActionId FABRIC_INGRESS_FORWARDING_SET_NEXT_ID_ROUTING_V6 = PiActionId.of("FabricIngress.forwarding.set_next_id_routing_v6"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I13 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13"); public static final PiActionId FABRIC_INGRESS_SPGW_INGRESS_SET_DL_SESS_INFO = PiActionId.of("FabricIngress.spgw_ingress.set_dl_sess_info"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I7 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7"); public static final PiActionId FABRIC_INGRESS_FILTERING_PUSH_INTERNAL_VLAN = PiActionId.of("FabricIngress.filtering.push_internal_vlan"); public static final PiActionId FABRIC_INGRESS_FORWARDING_CLONE_TO_CPU = PiActionId.of("FabricIngress.forwarding.clone_to_cpu"); public static final PiActionId FABRIC_INGRESS_SPGW_INGRESS_GTPU_DECAP = PiActionId.of("FabricIngress.spgw_ingress.gtpu_decap"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I15 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i15"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I12 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i12"); public static final PiActionId FABRIC_INGRESS_FORWARDING_POP_MPLS_AND_NEXT = PiActionId.of("FabricIngress.forwarding.pop_mpls_and_next"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I10 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i10"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I11 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i11"); public static final PiActionId DROP_NOW = PiActionId.of("drop_now"); public static final PiActionId FABRIC_INGRESS_NEXT_L3_ROUTING_HASHED = PiActionId.of("FabricIngress.next.l3_routing_hashed"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_SOURCE_INT_SOURCE_DSCP = - PiActionId.of("FabricEgress.process_int_source.int_source_dscp"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_REPORT_DO_REPORT_ENCAPSULATION = - PiActionId.of("FabricEgress.process_int_report.do_report_encapsulation"); - public static final PiActionId FABRIC_EGRESS_EGRESS_NEXT_POP_VLAN = - PiActionId.of("FabricEgress.egress_next.pop_vlan"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I10 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I8 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I0 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0"); public static final PiActionId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_INT_SET_SINK = PiActionId.of("FabricIngress.process_set_source_sink.int_set_sink"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_OUTER_ENCAP_INT_UPDATE_SHIM = - PiActionId.of("FabricEgress.process_int_outer_encap.int_update_shim"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_SINK_INT_SINK = + PiActionId.of("FabricEgress.process_int_main.process_int_sink.int_sink"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I1 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1"); public static final PiActionId FABRIC_INGRESS_NEXT_MPLS_ROUTING_V4_HASHED = PiActionId.of("FabricIngress.next.mpls_routing_v4_hashed"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I1 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1"); public static final PiActionId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_INT_SET_SOURCE = PiActionId.of("FabricIngress.process_set_source_sink.int_set_source"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I3 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3"); public static final PiActionId NOP = PiActionId.of("nop"); public static final PiActionId FABRIC_INGRESS_FORWARDING_DROP = PiActionId.of("FabricIngress.forwarding.drop"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I6 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6"); public static final PiActionId FABRIC_INGRESS_NEXT_OUTPUT_SIMPLE = PiActionId.of("FabricIngress.next.output_simple"); public static final PiActionId FABRIC_INGRESS_FILTERING_DROP = PiActionId.of("FabricIngress.filtering.drop"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_OUTER_ENCAP_INT_UPDATE_IPV4 = - PiActionId.of("FabricEgress.process_int_outer_encap.int_update_ipv4"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I8 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i8"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I9 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i9"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_SINK_RESTORE_HEADER = - PiActionId.of("FabricEgress.process_int_sink.restore_header"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_SINK_RESTORE_HEADER = + PiActionId.of("FabricEgress.process_int_main.process_int_sink.restore_header"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I9 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9"); public static final PiActionId FABRIC_INGRESS_FILTERING_SET_FORWARDING_TYPE = PiActionId.of("FabricIngress.filtering.set_forwarding_type"); public static final PiActionId FABRIC_INGRESS_NEXT_SET_VLAN_OUTPUT = PiActionId.of("FabricIngress.next.set_vlan_output"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I6 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i6"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I7 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i7"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I0 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i0"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I1 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i1"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I2 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i2"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_REPORT_DO_REPORT_ENCAPSULATION = + PiActionId.of("FabricEgress.process_int_main.process_int_report.do_report_encapsulation"); public static final PiActionId NO_ACTION = PiActionId.of("NoAction"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_TRANSIT = - PiActionId.of("FabricEgress.process_int_transit.int_transit"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I8 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I9 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I15 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15"); public static final PiActionId FABRIC_INGRESS_NEXT_MPLS_ROUTING_V4_SIMPLE = PiActionId.of("FabricIngress.next.mpls_routing_v4_simple"); public static final PiActionId FABRIC_INGRESS_FORWARDING_NOP_ACL = @@ -312,10 +292,18 @@ public final class FabricConstants { PiActionId.of("FabricIngress.next.mpls_routing_v6_hashed"); public static final PiActionId FABRIC_INGRESS_NEXT_L3_ROUTING_VLAN = PiActionId.of("FabricIngress.next.l3_routing_vlan"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I2 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I3 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3"); public static final PiActionId FABRIC_INGRESS_FORWARDING_SET_NEXT_ID_ACL = PiActionId.of("FabricIngress.forwarding.set_next_id_acl"); - public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I6 = - PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i6"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I5 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I6 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6"); + public static final PiActionId FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I7 = + PiActionId.of("FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7"); // Action Param IDs public static final PiActionParamId DMAC = PiActionParamId.of("dmac"); public static final PiActionParamId MON_IP = PiActionParamId.of("mon_ip"); diff --git a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricInterpreter.java b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricInterpreter.java index b3f996dcba..2d5b2802af 100644 --- a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricInterpreter.java +++ b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/FabricInterpreter.java @@ -36,12 +36,20 @@ import org.onosproject.net.packet.DefaultInboundPacket; import org.onosproject.net.packet.InboundPacket; import org.onosproject.net.packet.OutboundPacket; import org.onosproject.net.pi.model.PiMatchFieldId; +import org.onosproject.net.pi.model.PiPipeconf; +import org.onosproject.net.pi.model.PiPipeconfId; import org.onosproject.net.pi.model.PiPipelineInterpreter; import org.onosproject.net.pi.model.PiTableId; import org.onosproject.net.pi.runtime.PiAction; import org.onosproject.net.pi.runtime.PiControlMetadata; import org.onosproject.net.pi.runtime.PiPacketOperation; +import org.onosproject.net.pi.service.PiPipeconfService; +import org.slf4j.Logger; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.nio.ByteBuffer; import java.util.Collection; import java.util.List; @@ -51,9 +59,12 @@ import java.util.Set; import static java.lang.String.format; import static java.util.stream.Collectors.toList; import static org.onlab.util.ImmutableByteSequence.copyFrom; +import static org.onosproject.net.PortNumber.CONTROLLER; import static org.onosproject.net.PortNumber.FLOOD; import static org.onosproject.net.flow.instructions.Instruction.Type.OUTPUT; import static org.onosproject.net.pi.model.PiPacketOperationType.PACKET_OUT; +import static org.onosproject.net.pi.model.PiPipeconf.ExtensionType.CPU_PORT_TXT; +import static org.slf4j.LoggerFactory.getLogger; /** * Interpreter for fabric pipeline. @@ -61,6 +72,8 @@ import static org.onosproject.net.pi.model.PiPacketOperationType.PACKET_OUT; public class FabricInterpreter extends AbstractHandlerBehaviour implements PiPipelineInterpreter { + private final Logger log = getLogger(getClass()); + public static final int PORT_BITWIDTH = 9; private static final ImmutableBiMap TABLE_ID_MAP = @@ -134,6 +147,14 @@ public class FabricInterpreter extends AbstractHandlerBehaviour .put(FabricConstants.HDR_ICMP_ICMP_CODE, Criterion.Type.ICMPV6_CODE) .build(); + private static final PiAction NOACTION = PiAction.builder().withId( + FabricConstants.NO_ACTION).build(); + + private static final ImmutableMap DEFAULT_ACTIONS = + ImmutableMap.builder() + .put(FabricConstants.FABRIC_INGRESS_FORWARDING_ROUTING_V4, NOACTION) + .build(); + @Override public Optional mapCriterionType(Criterion.Type type) { return Optional.ofNullable(CRITERION_MAP.get(type)); @@ -262,4 +283,60 @@ public class FabricInterpreter extends AbstractHandlerBehaviour FabricConstants.INGRESS_PORT, deviceId, packetIn)); } } + + @Override + public Optional getOriginalDefaultAction(PiTableId tableId) { + return Optional.ofNullable(DEFAULT_ACTIONS.get(tableId)); + } + + @Override + public Optional mapLogicalPortNumber(PortNumber port) { + if (!port.equals(CONTROLLER)) { + return Optional.empty(); + } + // This is probably brittle, but needed to dynamically get the CPU port + // for different platforms. + final DeviceId deviceId = data().deviceId(); + final PiPipeconfService pipeconfService = handler().get( + PiPipeconfService.class); + final PiPipeconfId pipeconfId = pipeconfService + .ofDevice(deviceId).orElse(null); + if (pipeconfId == null || + !pipeconfService.getPipeconf(pipeconfId).isPresent()) { + log.error("Unable to get pipeconf of {} - BUG?"); + return Optional.empty(); + } + final PiPipeconf pipeconf = pipeconfService.getPipeconf(pipeconfId).get(); + if (!pipeconf.extension(CPU_PORT_TXT).isPresent()) { + log.error("Missing {} extension from pipeconf {}", + CPU_PORT_TXT, pipeconfId); + return Optional.empty(); + } + return Optional.ofNullable( + readCpuPort(pipeconf.extension(CPU_PORT_TXT).get(), + pipeconfId)); + } + + private Integer readCpuPort(InputStream stream, PiPipeconfId pipeconfId) { + try { + final BufferedReader buff = new BufferedReader( + new InputStreamReader(stream)); + final String str = buff.readLine(); + buff.close(); + if (str == null) { + log.error("Empty CPU port file for {}", pipeconfId); + return null; + } + try { + return Integer.parseInt(str); + } catch (NumberFormatException e) { + log.error("Invalid CPU port for {}: {}", pipeconfId, str); + return null; + } + } catch (IOException e) { + log.error("Unable to read CPU port file of {}: {}", + pipeconfId, e.getMessage()); + return null; + } + } } diff --git a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/IntProgrammableImpl.java b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/IntProgrammableImpl.java index 01885bf0fc..dec633258d 100644 --- a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/IntProgrammableImpl.java +++ b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/IntProgrammableImpl.java @@ -15,29 +15,26 @@ */ package org.onosproject.pipelines.fabric; -import com.google.common.collect.ImmutableBiMap; import com.google.common.collect.Sets; import org.osgi.service.component.annotations.Reference; import org.osgi.service.component.annotations.ReferenceCardinality; -import org.onlab.util.ImmutableByteSequence; -import org.onlab.util.SharedExecutors; + import org.onosproject.core.ApplicationId; import org.onosproject.core.CoreService; import org.onosproject.inbandtelemetry.api.IntConfig; import org.onosproject.inbandtelemetry.api.IntIntent; import org.onosproject.inbandtelemetry.api.IntObjective; import org.onosproject.inbandtelemetry.api.IntProgrammable; -import org.onosproject.net.ConnectPoint; import org.onosproject.net.DeviceId; -import org.onosproject.net.Port; import org.onosproject.net.PortNumber; -import org.onosproject.net.device.DeviceService; +import org.onosproject.net.config.NetworkConfigService; import org.onosproject.net.driver.AbstractHandlerBehaviour; import org.onosproject.net.flow.DefaultFlowRule; import org.onosproject.net.flow.DefaultTrafficSelector; import org.onosproject.net.flow.DefaultTrafficTreatment; import org.onosproject.net.flow.FlowRule; import org.onosproject.net.flow.FlowRuleService; +import org.onosproject.net.flow.TableId; import org.onosproject.net.flow.TrafficSelector; import org.onosproject.net.flow.TrafficTreatment; import org.onosproject.net.flow.criteria.Criterion; @@ -45,32 +42,32 @@ import org.onosproject.net.flow.criteria.IPCriterion; import org.onosproject.net.flow.criteria.PiCriterion; import org.onosproject.net.flow.criteria.TcpPortCriterion; import org.onosproject.net.flow.criteria.UdpPortCriterion; -import org.onosproject.net.host.HostService; -import org.onosproject.net.pi.model.PiActionId; -import org.onosproject.net.pi.model.PiMatchFieldId; import org.onosproject.net.pi.model.PiTableId; import org.onosproject.net.pi.runtime.PiAction; import org.onosproject.net.pi.runtime.PiActionParam; +import org.onosproject.provider.general.device.api.GeneralProviderDeviceConfig; import org.slf4j.Logger; -import java.util.ArrayList; -import java.util.List; import java.util.Set; -import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; +import java.util.stream.StreamSupport; +import static org.onlab.util.ImmutableByteSequence.copyFrom; import static org.slf4j.LoggerFactory.getLogger; +/** + * Implementation of INT programmable behavior for fabric.p4. Currently supports + * only SOURCE and TRANSIT functionalities. + */ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements IntProgrammable { + + private final Logger log = getLogger(getClass()); + // TODO: change this value to the value of diameter of a network. + private static final int DEFAULT_PRIORITY = 10000; private static final int MAXHOP = 64; private static final int PORTMASK = 0xffff; - private static final int IDLE_TIMEOUT = 100; private static final int PKT_INSTANCE_TYPE_INGRESS_CLONE = 1; - // Application name of the pipeline which adds this implementation to the pipeconf - private static final String PIPELINE_APP_NAME = "org.onosproject.pipelines.fabric"; - private final Logger log = getLogger(getClass()); - private ApplicationId appId; private static final Set SUPPORTED_CRITERION = Sets.newHashSet( Criterion.Type.IPV4_DST, Criterion.Type.IPV4_SRC, @@ -78,247 +75,225 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int Criterion.Type.TCP_SRC, Criterion.Type.TCP_DST, Criterion.Type.IP_PROTO); + private static final Set TABLES_TO_CLEANUP = Sets.newHashSet( + FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_TB_INT_INSERT, + FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SOURCE, + FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SINK, + FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_SOURCE_TB_INT_SOURCE, + FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_REPORT_TB_GENERATE_REPORT + ); + @Reference(cardinality = ReferenceCardinality.MANDATORY) private FlowRuleService flowRuleService; - @Reference(cardinality = ReferenceCardinality.MANDATORY) - private DeviceService deviceService; - - @Reference(cardinality = ReferenceCardinality.MANDATORY) - private HostService hostService; - - @Reference(cardinality = ReferenceCardinality.MANDATORY) private CoreService coreService; - + private NetworkConfigService cfgService; private DeviceId deviceId; - private static final int DEFAULT_PRIORITY = 10000; - private static final ImmutableBiMap INST_0003_ACTION_MAP = - ImmutableBiMap.builder() - .put(0, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I0) - .put(1, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I1) - .put(2, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I2) - .put(3, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I3) - .put(4, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I4) - .put(5, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I5) - .put(6, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I6) - .put(7, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I7) - .put(8, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I8) - .put(9, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I9) - .put(10, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I10) - .put(11, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I11) - .put(12, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I12) - .put(13, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I13) - .put(14, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I14) - .put(15, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I15) - .build(); + private ApplicationId appId; - private static final ImmutableBiMap INST_0407_ACTION_MAP = - ImmutableBiMap.builder() - .put(0, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I0) - .put(1, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I1) - .put(2, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I2) - .put(3, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I3) - .put(4, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I4) - .put(5, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I5) - .put(6, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I6) - .put(7, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I7) - .put(8, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I8) - .put(9, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I9) - .put(10, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I10) - .put(11, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I11) - .put(12, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I12) - .put(13, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I13) - .put(14, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I14) - .put(15, FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I15) - .build(); - - @Override - public void init() { + private boolean setupBehaviour() { deviceId = this.data().deviceId(); flowRuleService = handler().get(FlowRuleService.class); - deviceService = handler().get(DeviceService.class); - hostService = handler().get(HostService.class); coreService = handler().get(CoreService.class); - appId = coreService.getAppId(PIPELINE_APP_NAME); + cfgService = handler().get(NetworkConfigService.class); + appId = coreService.getAppId(PipeconfLoader.PIPELINE_APP_NAME); if (appId == null) { - log.warn("Application ID is null. Cannot initialize INT-pipeline."); - return; + log.warn("Application ID is null. Cannot initialize behaviour."); + return false; + } + return true; + } + + @Override + public boolean init() { + + if (!setupBehaviour()) { + return false; } - Set hostPorts = deviceService.getPorts(deviceId).stream().filter(port -> - hostService.getConnectedHosts( - new ConnectPoint(deviceId, port.number())).size() > 0 - ).map(Port::number).collect(Collectors.toSet()); - List flowRules = new ArrayList<>(); + final GeneralProviderDeviceConfig cfg = cfgService.getConfig( + deviceId, GeneralProviderDeviceConfig.class); + if (cfg == null) { + log.warn("Missing GeneralProviderDevice config for {}", deviceId); + return false; + } + final String switchId = cfg.protocolsInfo().containsKey("int") ? + cfg.protocolsInfo().get("int").configValues().get("switchId") + : null; + if (switchId == null || switchId.isEmpty()) { + log.warn("Missing INT device config for {}", deviceId); + return false; + } + + PiActionParam transitIdParam; + try { + transitIdParam = new PiActionParam( + FabricConstants.SWITCH_ID, + // FIXME set switch ID from netcfg + copyFrom(Integer.parseInt(switchId))); + } catch (NumberFormatException e) { + log.warn("Invalid INT switch ID for {}: {}", deviceId, switchId); + return false; + } - // process_int_transit.tb_int_insert - PiActionParam transitIdParam = new PiActionParam( - FabricConstants.SWITCH_ID, - ImmutableByteSequence.copyFrom( - Integer.parseInt(deviceId.toString().substring( - deviceId.toString().length() - 2)))); PiAction transitAction = PiAction.builder() - .withId(FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_TRANSIT) + .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_HEADER_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_TRANSIT_TB_INT_INSERT) + .forTable(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_TRANSIT_TB_INT_INSERT) .build(); - flowRules.add(transitFlowRule); - for (PortNumber portNumber: hostPorts) { - // process_set_source_sink.tb_set_source for each host-facing port - PiCriterion ingressCriterion = PiCriterion.builder() - .matchExact(FabricConstants.STANDARD_METADATA_INGRESS_PORT, portNumber.toLong()) - .build(); - TrafficSelector srcSelector = DefaultTrafficSelector.builder() - .matchPi(ingressCriterion) - .build(); - PiAction setSourceAct = PiAction.builder() - .withId(FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_INT_SET_SOURCE) - .build(); - TrafficTreatment srcTreatment = DefaultTrafficTreatment.builder() - .piTableAction(setSourceAct) - .build(); - FlowRule srcFlowRule = DefaultFlowRule.builder() - .withSelector(srcSelector) - .withTreatment(srcTreatment) - .fromApp(appId) - .withPriority(DEFAULT_PRIORITY) - .makePermanent() - .forDevice(deviceId) - .forTable(FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SOURCE) - .build(); - flowRules.add(srcFlowRule); + flowRuleService.applyFlowRules(transitFlowRule); + return true; + } - // process_set_source_sink.tb_set_sink - PiCriterion egressCriterion = PiCriterion.builder() - .matchExact(FabricConstants.STANDARD_METADATA_EGRESS_PORT, portNumber.toLong()) - .build(); - TrafficSelector sinkSelector = DefaultTrafficSelector.builder() - .matchPi(egressCriterion) - .build(); - PiAction setSinkAct = PiAction.builder() - .withId(FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_INT_SET_SINK) - .build(); - TrafficTreatment sinkTreatment = DefaultTrafficTreatment.builder() - .piTableAction(setSinkAct) - .build(); - FlowRule sinkFlowRule = DefaultFlowRule.builder() - .withSelector(sinkSelector) - .withTreatment(sinkTreatment) - .fromApp(appId) - .withPriority(DEFAULT_PRIORITY) - .makePermanent() - .forDevice(deviceId) - .forTable(FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SINK) - .build(); - flowRules.add(sinkFlowRule); + @Override + public boolean setSourcePort(PortNumber port) { + + if (!setupBehaviour()) { + return false; } - flowRules.forEach(flowRule -> flowRuleService.applyFlowRules(flowRule)); - // Populate tb_int_inst_0003 table - INST_0003_ACTION_MAP.forEach((matchValue, actionId) -> - populateInstTableEntry(FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_TB_INT_INST_0003, - FabricConstants.HDR_INT_HEADER_INSTRUCTION_MASK_0003, - matchValue, - actionId, - appId)); - // Populate tb_int_inst_0407 table - INST_0407_ACTION_MAP.forEach((matchValue, actionId) -> - populateInstTableEntry(FabricConstants.FABRIC_EGRESS_PROCESS_INT_TRANSIT_TB_INT_INST_0407, - FabricConstants.HDR_INT_HEADER_INSTRUCTION_MASK_0407, - matchValue, - actionId, - appId)); - } - - @Override - public CompletableFuture addIntObjective(IntObjective obj) { - // TODO: support different types of watchlist other than flow watchlist - - return CompletableFuture.supplyAsync( - () -> processIntObjective(obj, true), - SharedExecutors.getPoolThreadExecutor() - ); - } - - @Override - public CompletableFuture removeIntObjective(IntObjective obj) { - return CompletableFuture.supplyAsync( - () -> processIntObjective(obj, false), - SharedExecutors.getPoolThreadExecutor() - ); - } - - @Override - public CompletableFuture setupIntConfig(IntConfig config) { - return CompletableFuture.supplyAsync( - () -> setupIntReportInternal(config), - SharedExecutors.getPoolThreadExecutor() - ); - } - - private void populateInstTableEntry(PiTableId tableId, PiMatchFieldId matchFieldId, - int matchValue, PiActionId actionId, ApplicationId appId) { - PiCriterion instCriterion = PiCriterion.builder() - .matchExact(matchFieldId, matchValue) + PiCriterion ingressCriterion = PiCriterion.builder() + .matchExact(FabricConstants.STANDARD_METADATA_INGRESS_PORT, port.toLong()) .build(); - TrafficSelector instSelector = DefaultTrafficSelector.builder() - .matchPi(instCriterion) + TrafficSelector srcSelector = DefaultTrafficSelector.builder() + .matchPi(ingressCriterion) .build(); - PiAction instAction = PiAction.builder() - .withId(actionId) + PiAction setSourceAct = PiAction.builder() + .withId(FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_INT_SET_SOURCE) .build(); - TrafficTreatment instTreatment = DefaultTrafficTreatment.builder() - .piTableAction(instAction) + TrafficTreatment srcTreatment = DefaultTrafficTreatment.builder() + .piTableAction(setSourceAct) .build(); - - FlowRule instFlowRule = DefaultFlowRule.builder() - .withSelector(instSelector) - .withTreatment(instTreatment) + FlowRule srcFlowRule = DefaultFlowRule.builder() + .withSelector(srcSelector) + .withTreatment(srcTreatment) + .fromApp(appId) .withPriority(DEFAULT_PRIORITY) .makePermanent() .forDevice(deviceId) - .forTable(tableId) - .fromApp(appId) + .forTable(FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SOURCE) .build(); + flowRuleService.applyFlowRules(srcFlowRule); + return true; + } - flowRuleService.applyFlowRules(instFlowRule); + @Override + public boolean setSinkPort(PortNumber port) { + + if (!setupBehaviour()) { + return false; + } + + PiCriterion egressCriterion = PiCriterion.builder() + .matchExact(FabricConstants.STANDARD_METADATA_EGRESS_PORT, port.toLong()) + .build(); + TrafficSelector sinkSelector = DefaultTrafficSelector.builder() + .matchPi(egressCriterion) + .build(); + PiAction setSinkAct = PiAction.builder() + .withId(FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_INT_SET_SINK) + .build(); + TrafficTreatment sinkTreatment = DefaultTrafficTreatment.builder() + .piTableAction(setSinkAct) + .build(); + FlowRule sinkFlowRule = DefaultFlowRule.builder() + .withSelector(sinkSelector) + .withTreatment(sinkTreatment) + .fromApp(appId) + .withPriority(DEFAULT_PRIORITY) + .makePermanent() + .forDevice(deviceId) + .forTable(FabricConstants.FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SINK) + .build(); + flowRuleService.applyFlowRules(sinkFlowRule); + return true; + } + + @Override + public boolean addIntObjective(IntObjective obj) { + + if (!setupBehaviour()) { + return false; + } + + return processIntObjective(obj, true); + } + + @Override + public boolean removeIntObjective(IntObjective obj) { + + if (!setupBehaviour()) { + return false; + } + + return processIntObjective(obj, false); + } + + @Override + public boolean setupIntConfig(IntConfig config) { + + if (!setupBehaviour()) { + return false; + } + + return setupIntReportInternal(config); + } + + @Override + public void cleanup() { + + if (!setupBehaviour()) { + return; + } + + StreamSupport.stream(flowRuleService.getFlowEntries( + data().deviceId()).spliterator(), false) + .filter(f -> f.table().type() == TableId.Type.PIPELINE_INDEPENDENT) + .filter(f -> TABLES_TO_CLEANUP.contains((PiTableId) f.table())) + .forEach(flowRuleService::removeFlowRules); + } + + @Override + public boolean supportsFunctionality(IntFunctionality functionality) { + // Sink not fully supported yet. + return functionality == IntFunctionality.SOURCE || functionality == IntFunctionality.TRANSIT; } private FlowRule buildWatchlistEntry(IntObjective obj) { - coreService = handler().get(CoreService.class); - appId = coreService.getAppId(PIPELINE_APP_NAME); - if (appId == null) { - log.warn("Application ID is null. Cannot initialize INT-pipeline."); - return null; - } int instructionBitmap = buildInstructionBitmap(obj.metadataTypes()); PiActionParam maxHopParam = new PiActionParam( FabricConstants.MAX_HOP, - ImmutableByteSequence.copyFrom(MAXHOP)); + copyFrom(MAXHOP)); PiActionParam instCntParam = new PiActionParam( FabricConstants.INS_CNT, - ImmutableByteSequence.copyFrom(Integer.bitCount(instructionBitmap))); + copyFrom(Integer.bitCount(instructionBitmap))); PiActionParam inst0003Param = new PiActionParam( FabricConstants.INS_MASK0003, - ImmutableByteSequence.copyFrom((instructionBitmap >> 12) & 0xF)); + copyFrom((instructionBitmap >> 12) & 0xF)); PiActionParam inst0407Param = new PiActionParam( FabricConstants.INS_MASK0407, - ImmutableByteSequence.copyFrom((instructionBitmap >> 8) & 0xF)); + copyFrom((instructionBitmap >> 8) & 0xF)); PiAction intSourceAction = PiAction.builder() - .withId(FabricConstants.FABRIC_EGRESS_PROCESS_INT_SOURCE_INT_SOURCE_DSCP) + .withId(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_SOURCE_INT_SOURCE_DSCP) .withParameter(maxHopParam) .withParameter(instCntParam) .withParameter(inst0003Param) @@ -372,13 +347,13 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int } return DefaultFlowRule.builder() - .forDevice(this.data().deviceId()) + .forDevice(deviceId) .withSelector(sBuilder.build()) .withTreatment(instTreatment) .withPriority(DEFAULT_PRIORITY) - .forTable(FabricConstants.FABRIC_EGRESS_PROCESS_INT_SOURCE_TB_INT_SOURCE) + .forTable(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_SOURCE_TB_INT_SOURCE) .fromApp(appId) - .withIdleTimeout(IDLE_TIMEOUT) + .makePermanent() .build(); } @@ -419,12 +394,12 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int } /** - * Returns a subset of Criterion from given selector, - * which is unsupported by this INT pipeline. + * Returns a subset of Criterion from given selector, which is unsupported + * by this INT pipeline. * * @param selector a traffic selector - * @return a subset of Criterion from given selector, unsupported by this INT pipeline, - * empty if all criteria are supported. + * @return a subset of Criterion from given selector, unsupported by this + * INT pipeline, empty if all criteria are supported. */ private Set unsupportedSelectors(TrafficSelector selector) { return selector.criteria().stream() @@ -433,11 +408,9 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int } private boolean processIntObjective(IntObjective obj, boolean install) { - flowRuleService = handler().get(FlowRuleService.class); - deviceId = this.data().deviceId(); if (install && !unsupportedSelectors(obj.selector()).isEmpty()) { - log.warn("Device {} does not support criteria {} for INT.", - deviceId, unsupportedSelectors(obj.selector())); + log.warn("Criteria {} not supported by {} for INT watchlist", + unsupportedSelectors(obj.selector()), deviceId); return false; } @@ -459,44 +432,42 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int } private boolean setupIntReportInternal(IntConfig cfg) { - flowRuleService = handler().get(FlowRuleService.class); - - FlowRule reportRule = buildReportEntry(cfg, PKT_INSTANCE_TYPE_INGRESS_CLONE); - if (reportRule != null) { - flowRuleService.applyFlowRules(reportRule); - log.info("Report entry {} has been added to {}", reportRule, this.data().deviceId()); - return true; - } else { - log.warn("Failed to add report entry on {}", this.data().deviceId()); - return false; - } + // Report not fully supported yet. + return true; + // FlowRule reportRule = buildReportEntry(cfg, PKT_INSTANCE_TYPE_INGRESS_CLONE); + // if (reportRule != null) { + // flowRuleService.applyFlowRules(reportRule); + // log.info("Report entry {} has been added to {}", reportRule, this.data().deviceId()); + // return true; + // } else { + // log.warn("Failed to add report entry on {}", this.data().deviceId()); + // return false; + // } } private FlowRule buildReportEntry(IntConfig cfg, int type) { - coreService = handler().get(CoreService.class); - appId = coreService.getAppId(PIPELINE_APP_NAME); - if (appId == null) { - log.warn("Application ID is null. Cannot build report entry."); + + if (!setupBehaviour()) { return null; } PiActionParam srcMacParam = new PiActionParam( FabricConstants.SRC_MAC, - ImmutableByteSequence.copyFrom(cfg.sinkMac().toBytes())); + copyFrom(cfg.sinkMac().toBytes())); PiActionParam nextHopMacParam = new PiActionParam( FabricConstants.MON_MAC, - ImmutableByteSequence.copyFrom(cfg.collectorNextHopMac().toBytes())); + copyFrom(cfg.collectorNextHopMac().toBytes())); PiActionParam srcIpParam = new PiActionParam( FabricConstants.SRC_IP, - ImmutableByteSequence.copyFrom(cfg.sinkIp().toOctets())); + copyFrom(cfg.sinkIp().toOctets())); PiActionParam monIpParam = new PiActionParam( FabricConstants.MON_IP, - ImmutableByteSequence.copyFrom(cfg.collectorIp().toOctets())); + copyFrom(cfg.collectorIp().toOctets())); PiActionParam monPortParam = new PiActionParam( FabricConstants.MON_PORT, - ImmutableByteSequence.copyFrom(cfg.collectorPort().toInt())); + copyFrom(cfg.collectorPort().toInt())); PiAction reportAction = PiAction.builder() - .withId(FabricConstants.FABRIC_EGRESS_PROCESS_INT_REPORT_DO_REPORT_ENCAPSULATION) + .withId(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_REPORT_DO_REPORT_ENCAPSULATION) .withParameter(srcMacParam) .withParameter(nextHopMacParam) .withParameter(srcIpParam) @@ -513,7 +484,7 @@ public class IntProgrammableImpl extends AbstractHandlerBehaviour implements Int .withPriority(DEFAULT_PRIORITY) .makePermanent() .forDevice(this.data().deviceId()) - .forTable(FabricConstants.FABRIC_EGRESS_PROCESS_INT_REPORT_TB_GENERATE_REPORT) + .forTable(FabricConstants.FABRIC_EGRESS_PROCESS_INT_MAIN_PROCESS_INT_REPORT_TB_GENERATE_REPORT) .build(); } diff --git a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/PipeconfLoader.java b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/PipeconfLoader.java index 9dd385efac..48ec2abf26 100644 --- a/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/PipeconfLoader.java +++ b/pipelines/fabric/src/main/java/org/onosproject/pipelines/fabric/PipeconfLoader.java @@ -23,7 +23,6 @@ import org.osgi.service.component.annotations.Reference; import org.osgi.service.component.annotations.ReferenceCardinality; import org.onosproject.core.CoreService; import org.onosproject.inbandtelemetry.api.IntProgrammable; -import org.onosproject.net.PortNumber; import org.onosproject.net.behaviour.Pipeliner; import org.onosproject.net.device.PortStatisticsDiscovery; import org.onosproject.net.pi.model.DefaultPiPipeconf; @@ -44,7 +43,6 @@ import java.io.FileNotFoundException; import java.net.URL; import java.util.Collection; import java.util.Objects; -import java.util.Optional; import java.util.stream.Collectors; import static java.lang.String.format; @@ -64,12 +62,11 @@ public class PipeconfLoader { private static Logger log = getLogger(PipeconfLoader.class); + static final String PIPELINE_APP_NAME = "org.onosproject.pipelines.fabric"; + private static final String BASE_PIPECONF_ID = "org.onosproject.pipelines"; - private static final String P4C_OUT_PATH = "/p4c-out"; - private static final String PIPELINE_APP_NAME = "org.onosproject.pipelines.fabric"; - // profile/target/platform private static final String P4C_RES_BASE_PATH = P4C_OUT_PATH + "/%s/%s/%s/"; @@ -79,13 +76,12 @@ public class PipeconfLoader { private static final String DEFAULT_PLATFORM = "default"; private static final String BMV2_JSON = "bmv2.json"; private static final String P4INFO_TXT = "p4info.txt"; + private static final String CPU_PORT_TXT = "cpu_port.txt"; private static final String TOFINO_BIN = "tofino.bin"; private static final String TOFINO_CTX_JSON = "context.json"; private static final String INT_PROFILE_SUFFIX = "-int"; private static final String FULL_PROFILE_SUFFIX = "-full"; - private static final int BMV2_CPU_PORT = 255; - private static final Collection PIPECONFS = buildAllPipeconf(); @Reference(cardinality = ReferenceCardinality.MANDATORY) @@ -131,45 +127,58 @@ public class PipeconfLoader { String profile = pieces[1]; String target = pieces[2]; String platform = pieces[3]; + final DefaultPiPipeconf.Builder pipeconfBuilder; try { switch (target) { case BMV2: - return buildBmv2Pipeconf(profile, platform); + pipeconfBuilder = bmv2Pipeconf(profile, platform); + break; case TOFINO: - return buildTofinoPipeconf(profile, platform); + pipeconfBuilder = tofinoPipeconf(profile, platform); + break; default: log.warn("Unknown target '{}', skipping pipeconf build...", target); return null; } } catch (FileNotFoundException e) { - log.warn("Unable to build pipeconf at {} because one or more p4c outputs are missing", - path); + log.warn("Unable to build pipeconf at {} because file is missing: {}", + path, e.getMessage()); return null; } + // Add IntProgrammable behaviour for INT-enabled profiles. + if (profile.endsWith(INT_PROFILE_SUFFIX) || profile.endsWith(FULL_PROFILE_SUFFIX)) { + pipeconfBuilder.addBehaviour(IntProgrammable.class, IntProgrammableImpl.class); + } + return pipeconfBuilder.build(); } - private static PiPipeconf buildBmv2Pipeconf(String profile, String platform) + private static DefaultPiPipeconf.Builder bmv2Pipeconf( + String profile, String platform) throws FileNotFoundException { final URL bmv2JsonUrl = PipeconfLoader.class.getResource(format( P4C_RES_BASE_PATH + BMV2_JSON, profile, BMV2, platform)); final URL p4InfoUrl = PipeconfLoader.class.getResource(format( P4C_RES_BASE_PATH + P4INFO_TXT, profile, BMV2, platform)); - if (bmv2JsonUrl == null || p4InfoUrl == null) { - throw new FileNotFoundException(); + final URL cpuPortUrl = PipeconfLoader.class.getResource(format( + P4C_RES_BASE_PATH + CPU_PORT_TXT, profile, BMV2, platform)); + if (bmv2JsonUrl == null) { + throw new FileNotFoundException(BMV2_JSON); } - - DefaultPiPipeconf.Builder builder = basePipeconfBuilder( - profile, platform, p4InfoUrl, Bmv2FabricInterpreter.class) + if (p4InfoUrl == null) { + throw new FileNotFoundException(P4INFO_TXT); + } + if (cpuPortUrl == null) { + throw new FileNotFoundException(CPU_PORT_TXT); + } + return basePipeconfBuilder(profile, platform, p4InfoUrl, cpuPortUrl) + .addBehaviour(PortStatisticsDiscovery.class, + FabricPortStatisticsDiscovery.class) .addExtension(ExtensionType.BMV2_JSON, bmv2JsonUrl); - // Add IntProgrammable behaviour for INT-enabled profiles. - if (profile.endsWith(INT_PROFILE_SUFFIX) || profile.endsWith(FULL_PROFILE_SUFFIX)) { - builder.addBehaviour(IntProgrammable.class, IntProgrammableImpl.class); - } - return builder.build(); } - private static PiPipeconf buildTofinoPipeconf(String profile, String platform) + private static DefaultPiPipeconf.Builder tofinoPipeconf( + String profile, String platform) throws FileNotFoundException { final URL tofinoBinUrl = PipeconfLoader.class.getResource(format( P4C_RES_BASE_PATH + TOFINO_BIN, profile, TOFINO, platform)); @@ -177,19 +186,27 @@ public class PipeconfLoader { P4C_RES_BASE_PATH + TOFINO_CTX_JSON, profile, TOFINO, platform)); final URL p4InfoUrl = PipeconfLoader.class.getResource(format( P4C_RES_BASE_PATH + P4INFO_TXT, profile, TOFINO, platform)); - if (tofinoBinUrl == null || contextJsonUrl == null || p4InfoUrl == null) { - throw new FileNotFoundException(); + final URL cpuPortUrl = PipeconfLoader.class.getResource(format( + P4C_RES_BASE_PATH + CPU_PORT_TXT, profile, TOFINO, platform)); + if (tofinoBinUrl == null) { + throw new FileNotFoundException(TOFINO_BIN); } - return basePipeconfBuilder( - profile, platform, p4InfoUrl, FabricInterpreter.class) + if (contextJsonUrl == null) { + throw new FileNotFoundException(TOFINO_CTX_JSON); + } + if (p4InfoUrl == null) { + throw new FileNotFoundException(P4INFO_TXT); + } + if (cpuPortUrl == null) { + throw new FileNotFoundException(CPU_PORT_TXT); + } + return basePipeconfBuilder(profile, platform, p4InfoUrl, cpuPortUrl) .addExtension(ExtensionType.TOFINO_BIN, tofinoBinUrl) - .addExtension(ExtensionType.TOFINO_CONTEXT_JSON, contextJsonUrl) - .build(); + .addExtension(ExtensionType.TOFINO_CONTEXT_JSON, contextJsonUrl); } private static DefaultPiPipeconf.Builder basePipeconfBuilder( - String profile, String platform, URL p4InfoUrl, - Class interpreterClass) { + String profile, String platform, URL p4InfoUrl, URL cpuPortUrl) { final String pipeconfId = platform.equals(DEFAULT_PLATFORM) // Omit platform if default, e.g. with BMv2 pipeconf ? format("%s.%s", BASE_PIPECONF_ID, profile) @@ -199,12 +216,11 @@ public class PipeconfLoader { .withId(new PiPipeconfId(pipeconfId)) .withPipelineModel(model) .addBehaviour(PiPipelineInterpreter.class, - interpreterClass) + FabricInterpreter.class) .addBehaviour(Pipeliner.class, FabricPipeliner.class) - .addBehaviour(PortStatisticsDiscovery.class, - FabricPortStatisticsDiscovery.class) - .addExtension(ExtensionType.P4_INFO_TEXT, p4InfoUrl); + .addExtension(ExtensionType.P4_INFO_TEXT, p4InfoUrl) + .addExtension(ExtensionType.CPU_PORT_TXT, cpuPortUrl); } private static PiPipelineModel parseP4Info(URL p4InfoUrl) { @@ -214,16 +230,4 @@ public class PipeconfLoader { throw new IllegalStateException(e); } } - - // TODO: define interpreters with logical port mapping for Tofino platforms. - public static class Bmv2FabricInterpreter extends FabricInterpreter { - @Override - public Optional mapLogicalPortNumber(PortNumber port) { - if (port.equals(PortNumber.CONTROLLER)) { - return Optional.of(BMV2_CPU_PORT); - } else { - return Optional.empty(); - } - } - } } diff --git a/pipelines/fabric/src/main/resources/Makefile b/pipelines/fabric/src/main/resources/Makefile index 508bb1dee9..81617a13b0 100644 --- a/pipelines/fabric/src/main/resources/Makefile +++ b/pipelines/fabric/src/main/resources/Makefile @@ -1,4 +1,4 @@ -all: fabric fabric-spgw fabric-int fabric-full constants +all: fabric fabric-spgw fabric-int fabric-spgw-int fabric-full constants fabric: @./bmv2-compile.sh "fabric" "" @@ -7,10 +7,14 @@ fabric-spgw: @./bmv2-compile.sh "fabric-spgw" "-DWITH_SPGW" fabric-int: - @./bmv2-compile.sh "fabric-int" "-DWITH_INT" + @./bmv2-compile.sh "fabric-int" "-DWITH_INT_SOURCE -DWITH_INT_TRANSIT" + +fabric-spgw-int: + @./bmv2-compile.sh "fabric-spgw-int" "-DWITH_SPGW -DWITH_INT_SOURCE -DWITH_INT_TRANSIT" fabric-full: - @./bmv2-compile.sh "fabric-full" "-DWITH_MULTICAST -DWITH_IPV6 -DWITH_SPGW -DWITH_INT" + @./bmv2-compile.sh "fabric-full" "-DWITH_MULTICAST -DWITH_IPV6 -DWITH_SPGW \ + -DWITH_INT_SOURCE -DWITH_INT_TRANSIT -DWITH_INT_SINK" constants: onos-gen-p4-constants \ diff --git a/pipelines/fabric/src/main/resources/bmv2-compile.sh b/pipelines/fabric/src/main/resources/bmv2-compile.sh index d92a5c4734..0fede1c09a 100755 --- a/pipelines/fabric/src/main/resources/bmv2-compile.sh +++ b/pipelines/fabric/src/main/resources/bmv2-compile.sh @@ -3,7 +3,7 @@ set -ex BMV2_CPU_PORT="255" -BMV2_PP_FLAGS="-DTARGET_BMV2 -DCPU_PORT=${BMV2_CPU_PORT}" +BMV2_PP_FLAGS="-DTARGET_BMV2 -DCPU_PORT=${BMV2_CPU_PORT} -DWITH_PORT_COUNTER" PROFILE=$1 OTHER_PP_FLAGS=$2 @@ -18,3 +18,5 @@ p4c-bm2-ss --arch v1model \ --p4runtime-file ${OUT_DIR}/p4info.txt \ --p4runtime-format text \ fabric.p4 + +echo ${BMV2_CPU_PORT} > ${OUT_DIR}/cpu_port.txt diff --git a/pipelines/fabric/src/main/resources/fabric.p4 b/pipelines/fabric/src/main/resources/fabric.p4 index 22ad209eee..95b9bc826c 100644 --- a/pipelines/fabric/src/main/resources/fabric.p4 +++ b/pipelines/fabric/src/main/resources/fabric.p4 @@ -21,20 +21,20 @@ #include "include/control/forwarding.p4" #include "include/control/next.p4" #include "include/control/packetio.p4" -#include "include/control/port_counter.p4" #include "include/header.p4" #include "include/checksum.p4" #include "include/parser.p4" +#ifdef WITH_PORT_COUNTER +#include "include/control/port_counter.p4" +#endif // WITH_PORT_COUNTER + #ifdef WITH_SPGW #include "include/spgw.p4" #endif // WITH_SPGW #ifdef WITH_INT -#include "include/int_source.p4" -#include "include/int_transit.p4" -#include "include/int_sink.p4" -#include "include/int_report.p4" +#include "include/int/int_main.p4" #endif // WITH_INT control FabricIngress ( @@ -45,9 +45,12 @@ inout standard_metadata_t standard_metadata) { Filtering() filtering; Forwarding() forwarding; Next() next; +#ifdef WITH_PORT_COUNTER PortCountersControl() port_counters_control; +#endif // WITH_PORT_COUNTER apply { + _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); @@ -64,15 +67,12 @@ inout standard_metadata_t standard_metadata) { filtering.apply(hdr, fabric_metadata, standard_metadata); forwarding.apply(hdr, fabric_metadata, standard_metadata); next.apply(hdr, fabric_metadata, standard_metadata); +#ifdef WITH_PORT_COUNTER + // FIXME: we're not counting pkts punted to cpu or forwarded via multicast groups. port_counters_control.apply(hdr, fabric_metadata, standard_metadata); -#ifdef WITH_INT +#endif // WITH_PORT_COUNTER +#if defined(WITH_INT_SOURCE) || defined(WITH_INT_SINK) process_set_source_sink.apply(hdr, fabric_metadata, standard_metadata); - if(fabric_metadata.int_meta.sink == 1) { - // clone packet for Telemetry Report - #ifdef __TARGET_BMV2__ - clone(CloneType.I2E, REPORT_MIRROR_SESSION_ID); - #endif - } #endif } } @@ -84,6 +84,7 @@ control FabricEgress (inout parsed_headers_t hdr, EgressNextControl() egress_next; apply { + _PRE_EGRESS pkt_io_egress.apply(hdr, fabric_metadata, standard_metadata); egress_next.apply(hdr, fabric_metadata, standard_metadata); #ifdef WITH_SPGW @@ -91,26 +92,7 @@ control FabricEgress (inout parsed_headers_t hdr, fabric_metadata.spgw, standard_metadata); #endif // WITH_SPGW #ifdef WITH_INT - if (standard_metadata.ingress_port != CPU_PORT && - standard_metadata.egress_port != CPU_PORT && - (hdr.udp.isValid() || hdr.tcp.isValid())) { - if (fabric_metadata.int_meta.source == 1) { - process_int_source.apply(hdr, fabric_metadata, standard_metadata); - } - if(hdr.int_header.isValid()) { - process_int_transit.apply(hdr, fabric_metadata, standard_metadata); - // update underlay header based on INT information inserted - process_int_outer_encap.apply(hdr, fabric_metadata, standard_metadata); - if (standard_metadata.instance_type == PKT_INSTANCE_TYPE_INGRESS_CLONE) { - /* send int report */ - process_int_report.apply(hdr, fabric_metadata, standard_metadata); - } - if (fabric_metadata.int_meta.sink == 1) { - // int sink - process_int_sink.apply(hdr, fabric_metadata, standard_metadata); - } - } - } + process_int_main.apply(hdr, fabric_metadata, standard_metadata); #endif } } diff --git a/pipelines/fabric/src/main/resources/include/control/packetio.p4 b/pipelines/fabric/src/main/resources/include/control/packetio.p4 index 1086dace75..a77d82a4f4 100644 --- a/pipelines/fabric/src/main/resources/include/control/packetio.p4 +++ b/pipelines/fabric/src/main/resources/include/control/packetio.p4 @@ -26,6 +26,7 @@ inout standard_metadata_t standard_metadata) { standard_metadata.egress_spec = hdr.packet_out.egress_port; hdr.packet_out.setInvalid(); fabric_metadata.is_controller_packet_out = _TRUE; + // No need for ingress processing, straight to egress. exit; } } @@ -41,7 +42,7 @@ control PacketIoEgress( } apply { if (fabric_metadata.is_controller_packet_out == _TRUE) { - // No need to process through the rest of the pipeline. + // Transmit right away. exit; } if (standard_metadata.egress_port == CPU_PORT) { diff --git a/pipelines/fabric/src/main/resources/include/define.p4 b/pipelines/fabric/src/main/resources/include/define.p4 index 77808bd260..dfde32349e 100644 --- a/pipelines/fabric/src/main/resources/include/define.p4 +++ b/pipelines/fabric/src/main/resources/include/define.p4 @@ -19,6 +19,10 @@ #define MAX_PORTS 511 +#if defined(WITH_INT_SOURCE) || defined(WITH_INT_TRANSIT) || defined(WITH_INT_SINK) +#define WITH_INT +#endif + #ifndef _BOOL #define _BOOL bool #endif @@ -33,6 +37,14 @@ #define _PKT_OUT_HDR_ANNOT #endif +#ifndef _PRE_INGRESS +#define _PRE_INGRESS +#endif + +#ifndef _PRE_EGRESS +#define _PRE_EGRESS +#endif + #ifndef IP_VER_LENGTH #define IP_VER_LENGTH 4 #endif @@ -68,8 +80,6 @@ typedef bit<9> port_num_t; typedef bit<48> mac_addr_t; typedef bit<16> group_id_t; typedef bit<12> vlan_id_t; -typedef bit<48> timestamp_t; -typedef bit<32> switch_id_t; typedef bit<32> ipv4_addr_t; typedef bit<16> l4_port_t; @@ -124,7 +134,10 @@ const pcc_gate_status_t PCC_GATE_CLOSED = 1w1; /* indicate INT at LSB of DSCP */ const bit<6> INT_DSCP = 0x1; -const bit<8> INT_HEADER_LEN_WORD = 4; +// Length of the whole INT header, +// including shim and tail, excluding metadata stack. +const bit<8> INT_HEADER_LEN_WORDS = 4; +const bit<16> INT_HEADER_LEN_BYTES = 16; const bit<8> CPU_MIRROR_SESSION_ID = 250; const bit<32> REPORT_MIRROR_SESSION_ID = 500; diff --git a/pipelines/fabric/src/main/resources/include/header.p4 b/pipelines/fabric/src/main/resources/include/header.p4 index 5591c11d6e..46fa022d1a 100644 --- a/pipelines/fabric/src/main/resources/include/header.p4 +++ b/pipelines/fabric/src/main/resources/include/header.p4 @@ -18,6 +18,7 @@ #define __HEADER__ #include "define.p4" +#include "int/int_header.p4" @controller_header("packet_in") header packet_in_header_t { @@ -147,122 +148,6 @@ struct spgw_meta_t { } #endif // WITH_SPGW -#ifdef WITH_INT -// Report Telemetry Headers -header report_fixed_header_t { - bit<4> ver; - bit<4> nproto; - bit<1> d; - bit<1> q; - bit<1> f; - bit<15> rsvd; - bit<6> hw_id; - bit<32> seq_no; - bit<32> ingress_tstamp; -} - -// Telemetry drop report header -header drop_report_header_t { - bit<32> switch_id; - bit<16> ingress_port_id; - bit<16> egress_port_id; - bit<8> queue_id; - bit<8> drop_reason; - bit<16> pad; -} - -// Switch Local Report Header -header local_report_header_t { - bit<32> switch_id; - bit<16> ingress_port_id; - bit<16> egress_port_id; - bit<8> queue_id; - bit<24> queue_occupancy; - bit<32> egress_tstamp; -} - -header_union local_report_t { - drop_report_header_t drop_report_header; - local_report_header_t local_report_header; -} - -// INT headers -header int_header_t { - bit<2> ver; - bit<2> rep; - bit<1> c; - bit<1> e; - bit<5> rsvd1; - bit<5> ins_cnt; - bit<8> max_hop_cnt; - bit<8> total_hop_cnt; - bit<4> instruction_mask_0003; /* split the bits for lookup */ - bit<4> instruction_mask_0407; - bit<4> instruction_mask_0811; - bit<4> instruction_mask_1215; - bit<16> rsvd2; -} - -// INT meta-value headers - different header for each value type -header int_switch_id_t { - bit<32> switch_id; -} -header int_port_ids_t { - bit<16> ingress_port_id; - bit<16> egress_port_id; -} -header int_hop_latency_t { - bit<32> hop_latency; -} -header int_q_occupancy_t { - bit<8> q_id; - bit<24> q_occupancy; -} -header int_ingress_tstamp_t { - bit<32> ingress_tstamp; -} -header int_egress_tstamp_t { - bit<32> egress_tstamp; -} -header int_q_congestion_t { - bit<8> q_id; - bit<24> q_congestion; -} -header int_egress_port_tx_util_t { - bit<32> egress_port_tx_util; -} - -header int_data_t { - // Maximum int metadata stack size in bits: - // (0xFF -4) * 32 (excluding INT shim header, tail header and INT header) - varbit<8032> data; -} - -/* INT shim header for TCP/UDP */ -header intl4_shim_t { - bit<8> int_type; - bit<8> rsvd1; - bit<8> len; - bit<8> rsvd2; -} -/* INT tail header for TCP/UDP */ -header intl4_tail_t { - bit<8> next_proto; - bit<16> dest_port; - bit<8> dscp; -} - -struct int_metadata_t { - switch_id_t switch_id; - bit<16> insert_byte_cnt; - bit<1> source; - bit<1> sink; - bit<8> mirror_id; - bit<16> flow_id; - bit<8> metadata_len; -} -#endif // WITH_INT - //Custom metadata definition struct fabric_metadata_t { fwd_type_t fwd_type; @@ -279,7 +164,6 @@ struct fabric_metadata_t { #endif // WITH_SPGW #ifdef WITH_INT int_metadata_t int_meta; - bool compute_checksum; #endif // WITH_INT } @@ -304,18 +188,19 @@ struct parsed_headers_t { icmp_t icmp; packet_out_header_t packet_out; packet_in_header_t packet_in; -#ifdef WITH_INT - // INT Report Encapsulation +#ifdef WITH_INT_SINK + // INT Report encap ethernet_t report_ethernet; ipv4_t report_ipv4; udp_t report_udp; - // INT Report Headers + // INT Report header (support only fixed) report_fixed_header_t report_fixed_header; - local_report_t report_local; + // local_report_t report_local; +#endif // WITH_INT_SINK +#ifdef WITH_INT // INT specific headers intl4_shim_t intl4_shim; int_header_t int_header; - int_data_t int_data; int_switch_id_t int_switch_id; int_port_ids_t int_port_ids; int_hop_latency_t int_hop_latency; @@ -324,6 +209,7 @@ struct parsed_headers_t { int_egress_tstamp_t int_egress_tstamp; int_q_congestion_t int_q_congestion; int_egress_port_tx_util_t int_egress_tx_util; + int_data_t int_data; intl4_tail_t intl4_tail; #endif //WITH_INT } diff --git a/pipelines/fabric/src/main/resources/include/int/int_header.p4 b/pipelines/fabric/src/main/resources/include/int/int_header.p4 new file mode 100644 index 0000000000..4e352ee343 --- /dev/null +++ b/pipelines/fabric/src/main/resources/include/int/int_header.p4 @@ -0,0 +1,143 @@ +/* + * 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; +} + +header int_data_t { + // Maximum int metadata stack size in bits: + // (0xFF -4) * 32 (excluding INT shim header, tail header and INT header) + varbit<8032> data; +} + +#ifdef WITH_INT_TRANSIT +// INT meta-value headers - 4 bytes each +// Different header for each value type +header int_switch_id_t { + bit<32> switch_id; +} +header int_port_ids_t { + bit<16> ingress_port_id; + bit<16> egress_port_id; +} +header int_hop_latency_t { + bit<32> hop_latency; +} +header int_q_occupancy_t { + bit<8> q_id; + bit<24> q_occupancy; +} +header int_ingress_tstamp_t { + bit<32> ingress_tstamp; +} +header int_egress_tstamp_t { + bit<32> egress_tstamp; +} +header int_q_congestion_t { + bit<8> q_id; + bit<24> q_congestion; +} +header int_egress_port_tx_util_t { + bit<32> egress_port_tx_util; +} +#endif // WITH_INT_TRANSIT + +#ifdef WITH_INT_SINK +// Report Telemetry Headers +header report_fixed_header_t { + bit<4> ver; + bit<4> nproto; + bit<1> d; + bit<1> q; + bit<1> f; + bit<15> rsvd; + bit<6> hw_id; + bit<32> seq_no; + bit<32> ingress_tstamp; +} + +// Telemetry drop report header +header drop_report_header_t { + bit<32> switch_id; + bit<16> ingress_port_id; + bit<16> egress_port_id; + bit<8> queue_id; + bit<8> drop_reason; + bit<16> pad; +} + +// Switch Local Report Header +header local_report_header_t { + bit<32> switch_id; + bit<16> ingress_port_id; + bit<16> egress_port_id; + bit<8> queue_id; + bit<24> queue_occupancy; + bit<32> egress_tstamp; +} + +header_union local_report_t { + drop_report_header_t drop_report_header; + local_report_header_t local_report_header; +} +#endif // WITH_INT_SINK + +#endif diff --git a/pipelines/fabric/src/main/resources/include/int/int_main.p4 b/pipelines/fabric/src/main/resources/include/int/int_main.p4 new file mode 100644 index 0000000000..ef81cc9057 --- /dev/null +++ b/pipelines/fabric/src/main/resources/include/int/int_main.p4 @@ -0,0 +1,124 @@ +/* + * Copyright 2018-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* -*- P4_16 -*- */ +#ifndef __INT_MAIN__ +#define __INT_MAIN__ + +#ifdef WITH_INT_SOURCE +#include "int_source.p4" +#endif // WITH_INT_SOURCE + +#ifdef WITH_INT_TRANSIT +#include "int_transit.p4" +#endif // WITH_INT_TRANSIT + +#ifdef WITH_INT_SINK +#include "int_sink.p4" +#include "int_report.p4" +#endif // WITH_INT_SINK + +control process_set_source_sink ( + inout parsed_headers_t hdr, + inout fabric_metadata_t fabric_metadata, + inout standard_metadata_t standard_metadata) { + + direct_counter(CounterType.packets_and_bytes) counter_set_source; + + action int_set_source () { + fabric_metadata.int_meta.source = _TRUE; + counter_set_source.count(); + } + + table tb_set_source { + key = { + standard_metadata.ingress_port: exact; + } + actions = { + int_set_source; + } + counters = counter_set_source; + size = MAX_PORTS; + } + +#ifdef WITH_INT_SINK + direct_counter(CounterType.packets_and_bytes) counter_set_sink; + + action int_set_sink () { + fabric_metadata.int_meta.sink = _TRUE; + counter_set_sink.count(); + } + + table tb_set_sink { + key = { + standard_metadata.egress_spec: exact; + } + actions = { + int_set_sink; + } + counters = counter_set_sink; + size = MAX_PORTS; + } +#endif // WITH_INT_SINK + + apply { + tb_set_source.apply(); + +#ifdef WITH_INT_SINK + tb_set_sink.apply(); + if(fabric_metadata.int_meta.sink == _TRUE) { + // FIXME: this works only on BMv2 + #ifdef __TARGET_BMV2__ + clone(CloneType.I2E, REPORT_MIRROR_SESSION_ID); + #endif + } +#endif // WITH_INT_SINK + } +} + +control process_int_main ( + inout parsed_headers_t hdr, + inout fabric_metadata_t fabric_metadata, + inout standard_metadata_t standard_metadata) { + + apply { + if (standard_metadata.ingress_port != CPU_PORT && + standard_metadata.egress_port != CPU_PORT && + (hdr.udp.isValid() || hdr.tcp.isValid())) { +#ifdef WITH_INT_SOURCE + if (fabric_metadata.int_meta.source == _TRUE) { + process_int_source.apply(hdr, fabric_metadata, standard_metadata); + } +#endif // WITH_INT_SOURCE + if(hdr.int_header.isValid()) { +#ifdef WITH_INT_TRANSIT + process_int_transit.apply(hdr, fabric_metadata, standard_metadata); +#endif // WITH_INT_TRANSIT +#ifdef WITH_INT_SINK + if (standard_metadata.instance_type == PKT_INSTANCE_TYPE_INGRESS_CLONE) { + /* send int report */ + process_int_report.apply(hdr, fabric_metadata, standard_metadata); + } + if (fabric_metadata.int_meta.sink == _TRUE) { + // int sink + process_int_sink.apply(hdr, fabric_metadata); + } +#endif // WITH_INT_SINK + } + } + } +} +#endif diff --git a/pipelines/fabric/src/main/resources/include/int_report.p4 b/pipelines/fabric/src/main/resources/include/int/int_report.p4 similarity index 96% rename from pipelines/fabric/src/main/resources/include/int_report.p4 rename to pipelines/fabric/src/main/resources/include/int/int_report.p4 index 6d7c29dfeb..9326375e6f 100644 --- a/pipelines/fabric/src/main/resources/include/int_report.p4 +++ b/pipelines/fabric/src/main/resources/include/int/int_report.p4 @@ -40,8 +40,7 @@ control process_int_report ( // TODO how save a variable and increment hdr.report_fixed_header.seq_no = 0; //TODO how to get timestamp from ingress ns - hdr.report_fixed_header.ingress_tstamp = - (bit<32>) standard_metadata.enq_timestamp; + hdr.report_fixed_header.ingress_tstamp = (bit<32>) standard_metadata.enq_timestamp; } action do_report_encapsulation(mac_addr_t src_mac, mac_addr_t mon_mac, ipv4_addr_t src_ip, @@ -77,7 +76,6 @@ control process_int_report ( hdr.report_udp.len = (bit<16>) UDP_HEADER_LEN + (bit<16>) REPORT_FIXED_HEADER_LEN + (bit<16>) ETH_HEADER_LEN + hdr.ipv4.total_len; - fabric_metadata.compute_checksum = true; add_report_fixed_header(); } diff --git a/pipelines/fabric/src/main/resources/include/int_sink.p4 b/pipelines/fabric/src/main/resources/include/int/int_sink.p4 similarity index 83% rename from pipelines/fabric/src/main/resources/include/int_sink.p4 rename to pipelines/fabric/src/main/resources/include/int/int_sink.p4 index 4c272d685c..6c64e322e8 100644 --- a/pipelines/fabric/src/main/resources/include/int_sink.p4 +++ b/pipelines/fabric/src/main/resources/include/int/int_sink.p4 @@ -20,17 +20,18 @@ control process_int_sink ( inout parsed_headers_t hdr, - inout fabric_metadata_t fabric_metadata, - inout standard_metadata_t standard_metadata) { + inout fabric_metadata_t fabric_metadata) { + action restore_header () { hdr.udp.dst_port = hdr.intl4_tail.dest_port; - hdr.ipv4.dscp = (bit<6>)hdr.intl4_tail.dscp; + hdr.ipv4.dscp = hdr.intl4_tail.dscp; } action int_sink() { // restore length fields of IPv4 header and UDP header - hdr.ipv4.total_len = hdr.ipv4.total_len - (bit<16>)(hdr.intl4_shim.len << 2); - hdr.udp.len = hdr.udp.len - (bit<16>)(hdr.intl4_shim.len << 2); + bit<16> len_bytes = (bit<16>) (hdr.intl4_shim.len_words << 5w2); + hdr.ipv4.total_len = hdr.ipv4.total_len - len_bytes; + hdr.udp.len = hdr.udp.len - len_bytes; // remove all the INT information from the packet hdr.int_header.setInvalid(); hdr.int_data.setInvalid(); @@ -51,4 +52,4 @@ control process_int_sink ( int_sink(); } } -#endif \ No newline at end of file +#endif diff --git a/pipelines/fabric/src/main/resources/include/int_source.p4 b/pipelines/fabric/src/main/resources/include/int/int_source.p4 similarity index 64% rename from pipelines/fabric/src/main/resources/include/int_source.p4 rename to pipelines/fabric/src/main/resources/include/int/int_source.p4 index 57c2b7967d..245fe7e51b 100644 --- a/pipelines/fabric/src/main/resources/include/int_source.p4 +++ b/pipelines/fabric/src/main/resources/include/int/int_source.p4 @@ -27,13 +27,12 @@ control process_int_source ( direct_counter(CounterType.packets_and_bytes) counter_int_source; action int_source(bit<8> max_hop, bit<5> ins_cnt, bit<4> ins_mask0003, bit<4> ins_mask0407) { - // insert INT shim header + // Insert INT shim header. hdr.intl4_shim.setValid(); // int_type: Hop-by-hop type (1) , destination type (2) hdr.intl4_shim.int_type = 1; - hdr.intl4_shim.len = INT_HEADER_LEN_WORD; - - // insert INT header + hdr.intl4_shim.len_words = INT_HEADER_LEN_WORDS; + // Insert INT header. hdr.int_header.setValid(); hdr.int_header.ver = 0; hdr.int_header.rep = 0; @@ -47,20 +46,20 @@ control process_int_source ( hdr.int_header.instruction_mask_0407 = ins_mask0407; hdr.int_header.instruction_mask_0811 = 0; // not supported hdr.int_header.instruction_mask_1215 = 0; // not supported - - // insert INT tail header + // Insert INT tail header. hdr.intl4_tail.setValid(); hdr.intl4_tail.next_proto = hdr.ipv4.protocol; hdr.intl4_tail.dest_port = fabric_metadata.l4_dst_port; - hdr.intl4_tail.dscp = (bit<8>) hdr.ipv4.dscp; - - // add the header len (8 bytes) to total len - hdr.ipv4.total_len = hdr.ipv4.total_len + 16; - hdr.udp.len = hdr.udp.len + 16; + hdr.intl4_tail.dscp = hdr.ipv4.dscp; + // Update IP and UDP (if not valid we don't care) lens (in bytes). + hdr.ipv4.total_len = hdr.ipv4.total_len + INT_HEADER_LEN_BYTES; + hdr.udp.len = hdr.udp.len + INT_HEADER_LEN_BYTES; } + action int_source_dscp(bit<8> max_hop, bit<5> ins_cnt, bit<4> ins_mask0003, bit<4> ins_mask0407) { int_source(max_hop, ins_cnt, ins_mask0003, ins_mask0407); hdr.ipv4.dscp = INT_DSCP; + counter_int_source.count(); } table tb_int_source { @@ -74,54 +73,10 @@ control process_int_source ( int_source_dscp; } counters = counter_int_source; - size = 1024; } apply { tb_int_source.apply(); } } - -control process_set_source_sink ( - inout parsed_headers_t hdr, - inout fabric_metadata_t fabric_metadata, - inout standard_metadata_t standard_metadata) { - - direct_counter(CounterType.packets_and_bytes) counter_set_source; - direct_counter(CounterType.packets_and_bytes) counter_set_sink; - - action int_set_source () { - fabric_metadata.int_meta.source = 1; - } - - action int_set_sink () { - fabric_metadata.int_meta.sink = 1; - } - - table tb_set_source { - key = { - standard_metadata.ingress_port: exact; - } - actions = { - int_set_source; - } - counters = counter_set_source; - size = 256; - } - table tb_set_sink { - key = { - standard_metadata.egress_spec: exact; - } - actions = { - int_set_sink; - } - counters = counter_set_sink; - size = 256; - } - - apply { - tb_set_source.apply(); - tb_set_sink.apply(); - } -} #endif diff --git a/pipelines/fabric/src/main/resources/include/int_transit.p4 b/pipelines/fabric/src/main/resources/include/int/int_transit.p4 similarity index 52% rename from pipelines/fabric/src/main/resources/include/int_transit.p4 rename to pipelines/fabric/src/main/resources/include/int/int_transit.p4 index 3f863e8fd2..579fa07d5c 100644 --- a/pipelines/fabric/src/main/resources/include/int_transit.p4 +++ b/pipelines/fabric/src/main/resources/include/int/int_transit.p4 @@ -19,221 +19,270 @@ #define __INT_TRANSIT__ control process_int_transit ( inout parsed_headers_t hdr, - inout fabric_metadata_t fabric_metadata, - inout standard_metadata_t standard_metadata) { + inout fabric_metadata_t fmeta, + inout standard_metadata_t smeta) { - direct_counter(CounterType.packets_and_bytes) counter_int_insert; - direct_counter(CounterType.packets_and_bytes) counter_int_inst_0003; - direct_counter(CounterType.packets_and_bytes) counter_int_inst_0407; - - action int_update_total_hop_cnt() { - hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 1; + action init_metadata(bit<32> switch_id) { + fmeta.int_meta.transit = _TRUE; +#ifdef _INT_INIT_METADATA + // Allow other targets to initialize INT metadata in their own way. + _INT_INIT_METADATA +#else + fmeta.int_meta.switch_id = switch_id; +#endif // _INT_INIT_METADATA } - action int_transit(switch_id_t switch_id) { - fabric_metadata.int_meta.switch_id = switch_id; - fabric_metadata.int_meta.insert_byte_cnt = (bit<16>) hdr.int_header.ins_cnt << 2; - } - - /* Instr Bit 0 */ - action int_set_header_0() { //switch_id +#ifdef _INT_METADATA_ACTIONS + _INT_METADATA_ACTIONS +#else + // Switch ID. + action int_set_header_0() { hdr.int_switch_id.setValid(); - hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id; + hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id; } - action int_set_header_1() { //port_ids + // Port IDs. + action int_set_header_1() { hdr.int_port_ids.setValid(); - hdr.int_port_ids.ingress_port_id = - (bit<16>) standard_metadata.ingress_port; - hdr.int_port_ids.egress_port_id = - (bit<16>) standard_metadata.egress_port; + hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port; + hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port; } - action int_set_header_2() { //hop_latency + // Hop latency. + action int_set_header_2() { hdr.int_hop_latency.setValid(); - hdr.int_hop_latency.hop_latency = - (bit<32>) standard_metadata.deq_timedelta; + hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta; } - action int_set_header_3() { //q_occupancy - // TODO: Support egress queue ID + // Queue occupancy. + action int_set_header_3() { hdr.int_q_occupancy.setValid(); - hdr.int_q_occupancy.q_id = - 0; - // (bit<8>) standard_metadata.egress_qid; - hdr.int_q_occupancy.q_occupancy = - (bit<24>) standard_metadata.deq_qdepth; + // TODO: support queues in BMv2. ATM we assume only one. + hdr.int_q_occupancy.q_id = 8w0; + hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth; } - action int_set_header_4() { //ingress_tstamp + // Ingress timestamp. + action int_set_header_4() { hdr.int_ingress_tstamp.setValid(); - hdr.int_ingress_tstamp.ingress_tstamp = - (bit<32>) standard_metadata.enq_timestamp; + hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp; } - action int_set_header_5() { //egress_timestamp + // Egress timestamp. + action int_set_header_5() { hdr.int_egress_tstamp.setValid(); - hdr.int_egress_tstamp.egress_tstamp = - (bit<32>) standard_metadata.enq_timestamp + - (bit<32>) standard_metadata.deq_timedelta; + hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta; } - action int_set_header_6() { //q_congestion - // TODO: implement queue congestion support in BMv2 - // TODO: update egress queue ID + // Queue congestion. + action int_set_header_6() { hdr.int_q_congestion.setValid(); - hdr.int_q_congestion.q_id = - 0; - // (bit<8>) standard_metadata.egress_qid; - hdr.int_q_congestion.q_congestion = - // (bit<24>) queueing_metadata.deq_congestion; - 0; + // TODO: support queue congestion. + hdr.int_q_congestion.q_id = 8w0; + hdr.int_q_congestion.q_congestion = 24w0; } - action int_set_header_7() { //egress_port_tx_utilization - // TODO: implement tx utilization support in BMv2 + // Egress port utilization. + action int_set_header_7() { hdr.int_egress_tx_util.setValid(); - hdr.int_egress_tx_util.egress_port_tx_util = - // (bit<32>) queueing_metadata.tx_utilization; - 0; + // TODO: implement tx utilization support in BMv2. + hdr.int_egress_tx_util.egress_port_tx_util = 32w0; + } +#endif // _INT_METADATA_ACTIONS + + // Actions to keep track of the new metadata added. + action add_1() { + fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1; + fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4; } - /* action function for bits 0-3 combinations, 0 is msb, 3 is lsb */ - /* Each bit set indicates that corresponding INT header should be added */ + action add_2() { + fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2; + fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8; + } + + action add_3() { + fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3; + fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12; + } + + action add_4() { + fmeta.int_meta.new_words = fmeta.int_meta.new_words + 4; + fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 16; + } + + // Action function for bits 0-3 combinations, 0 is msb, 3 is lsb. + // Each bit set indicates that corresponding INT header should be added. action int_set_header_0003_i0() { } action int_set_header_0003_i1() { int_set_header_3(); + add_1(); } action int_set_header_0003_i2() { int_set_header_2(); + add_1(); } action int_set_header_0003_i3() { int_set_header_3(); int_set_header_2(); + add_2(); } action int_set_header_0003_i4() { int_set_header_1(); + add_1(); } action int_set_header_0003_i5() { int_set_header_3(); int_set_header_1(); + add_2(); } action int_set_header_0003_i6() { int_set_header_2(); int_set_header_1(); + add_2(); } action int_set_header_0003_i7() { int_set_header_3(); int_set_header_2(); int_set_header_1(); + add_3(); } action int_set_header_0003_i8() { int_set_header_0(); + add_1(); } action int_set_header_0003_i9() { int_set_header_3(); int_set_header_0(); + add_2(); } action int_set_header_0003_i10() { int_set_header_2(); int_set_header_0(); + add_2(); } action int_set_header_0003_i11() { int_set_header_3(); int_set_header_2(); int_set_header_0(); + add_3(); } action int_set_header_0003_i12() { int_set_header_1(); int_set_header_0(); + add_2(); } action int_set_header_0003_i13() { int_set_header_3(); int_set_header_1(); int_set_header_0(); + add_3(); } action int_set_header_0003_i14() { int_set_header_2(); int_set_header_1(); int_set_header_0(); + add_3(); } action int_set_header_0003_i15() { int_set_header_3(); int_set_header_2(); int_set_header_1(); int_set_header_0(); + add_4(); } - /* action function for bits 4-7 combinations, 4 is msb, 7 is lsb */ + // Action function for bits 4-7 combinations, 4 is msb, 7 is lsb. action int_set_header_0407_i0() { } action int_set_header_0407_i1() { int_set_header_7(); + add_1(); } action int_set_header_0407_i2() { int_set_header_6(); + add_1(); } action int_set_header_0407_i3() { int_set_header_7(); int_set_header_6(); + add_2(); } action int_set_header_0407_i4() { int_set_header_5(); + add_1(); } action int_set_header_0407_i5() { int_set_header_7(); int_set_header_5(); + add_2(); } action int_set_header_0407_i6() { int_set_header_6(); int_set_header_5(); + add_2(); } action int_set_header_0407_i7() { int_set_header_7(); int_set_header_6(); int_set_header_5(); + add_3(); } action int_set_header_0407_i8() { int_set_header_4(); + add_1(); } action int_set_header_0407_i9() { int_set_header_7(); int_set_header_4(); + add_2(); } action int_set_header_0407_i10() { int_set_header_6(); int_set_header_4(); + add_2(); } action int_set_header_0407_i11() { int_set_header_7(); int_set_header_6(); int_set_header_4(); + add_3(); } action int_set_header_0407_i12() { int_set_header_5(); int_set_header_4(); + add_2(); } action int_set_header_0407_i13() { int_set_header_7(); int_set_header_5(); int_set_header_4(); + add_3(); } action int_set_header_0407_i14() { int_set_header_6(); int_set_header_5(); int_set_header_4(); + add_3(); } action int_set_header_0407_i15() { int_set_header_7(); int_set_header_6(); int_set_header_5(); int_set_header_4(); + add_4(); } + // Default action used to set switch ID. table tb_int_insert { - key = {} - actions = { - int_transit; + // We don't really need a key here, however we add a dummy one as a + // workaround to ONOS inability to properly support default actions. + key = { + hdr.int_header.isValid(): exact @name("hdr.int_header.is_valid"); } - counters = counter_int_insert; - size = 2; + actions = { + init_metadata; + @defaultonly nop; + } + const default_action = nop; + size = 1; } - /* Table to process instruction bits 0-3 */ + // Table to process instruction bits 0-3. table tb_int_inst_0003 { key = { hdr.int_header.instruction_mask_0003 : exact; @@ -256,11 +305,28 @@ control process_int_transit ( int_set_header_0003_i14; int_set_header_0003_i15; } - counters = counter_int_inst_0003; size = 16; + const entries = { + (0x0) : int_set_header_0003_i0(); + (0x1) : int_set_header_0003_i1(); + (0x2) : int_set_header_0003_i2(); + (0x3) : int_set_header_0003_i3(); + (0x4) : int_set_header_0003_i4(); + (0x5) : int_set_header_0003_i5(); + (0x6) : int_set_header_0003_i6(); + (0x7) : int_set_header_0003_i7(); + (0x8) : int_set_header_0003_i8(); + (0x9) : int_set_header_0003_i9(); + (0xA) : int_set_header_0003_i10(); + (0xB) : int_set_header_0003_i11(); + (0xC) : int_set_header_0003_i12(); + (0xD) : int_set_header_0003_i13(); + (0xE) : int_set_header_0003_i14(); + (0xF) : int_set_header_0003_i15(); + } } - /* Table to process instruction bits 4-7 */ + // Table to process instruction bits 4-7. table tb_int_inst_0407 { key = { hdr.int_header.instruction_mask_0407 : exact; @@ -283,42 +349,45 @@ control process_int_transit ( int_set_header_0407_i14; int_set_header_0407_i15; } - counters = counter_int_inst_0407; size = 16; + const entries = { + (0x0) : int_set_header_0407_i0(); + (0x1) : int_set_header_0407_i1(); + (0x2) : int_set_header_0407_i2(); + (0x3) : int_set_header_0407_i3(); + (0x4) : int_set_header_0407_i4(); + (0x5) : int_set_header_0407_i5(); + (0x6) : int_set_header_0407_i6(); + (0x7) : int_set_header_0407_i7(); + (0x8) : int_set_header_0407_i8(); + (0x9) : int_set_header_0407_i9(); + (0xA) : int_set_header_0407_i10(); + (0xB) : int_set_header_0407_i11(); + (0xC) : int_set_header_0407_i12(); + (0xD) : int_set_header_0407_i13(); + (0xE) : int_set_header_0407_i14(); + (0xF) : int_set_header_0407_i15(); + } } apply { tb_int_insert.apply(); + if (fmeta.int_meta.transit == _FALSE) { + return; + } tb_int_inst_0003.apply(); tb_int_inst_0407.apply(); - int_update_total_hop_cnt(); - } -} - -control process_int_outer_encap ( - inout parsed_headers_t hdr, - inout fabric_metadata_t fabric_metadata, - inout standard_metadata_t standard_metadata) { - - action int_update_ipv4() { - hdr.ipv4.total_len = hdr.ipv4.total_len + fabric_metadata.int_meta.insert_byte_cnt; - } - action int_update_udp() { - hdr.udp.len = hdr.udp.len + fabric_metadata.int_meta.insert_byte_cnt; - } - action int_update_shim() { - hdr.intl4_shim.len = hdr.intl4_shim.len + (bit<8>)hdr.int_header.ins_cnt; - } - - apply { + // Increment hop cnt + hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 1; + // Update headers lengths. if (hdr.ipv4.isValid()) { - int_update_ipv4(); + hdr.ipv4.total_len = hdr.ipv4.total_len + fmeta.int_meta.new_bytes; } if (hdr.udp.isValid()) { - int_update_udp(); + hdr.udp.len = hdr.udp.len + fmeta.int_meta.new_bytes; } if (hdr.intl4_shim.isValid()) { - int_update_shim(); + hdr.intl4_shim.len_words = hdr.intl4_shim.len_words + fmeta.int_meta.new_words; } } } diff --git a/pipelines/fabric/src/main/resources/include/parser.p4 b/pipelines/fabric/src/main/resources/include/parser.p4 index 20c310ccf0..3f77df9595 100644 --- a/pipelines/fabric/src/main/resources/include/parser.p4 +++ b/pipelines/fabric/src/main/resources/include/parser.p4 @@ -25,6 +25,8 @@ out parsed_headers_t hdr, inout fabric_metadata_t fabric_metadata, inout standard_metadata_t standard_metadata) { + bit<6> last_ipv4_dscp = 0; + state start { transition select(standard_metadata.ingress_port) { CPU_PORT: parse_packet_out; @@ -82,6 +84,7 @@ inout standard_metadata_t standard_metadata) { state parse_ipv4 { packet.extract(hdr.ipv4); fabric_metadata.ip_proto = hdr.ipv4.protocol; + last_ipv4_dscp = hdr.ipv4.dscp; //Need header verification? transition select(hdr.ipv4.protocol) { PROTO_TCP: parse_tcp; @@ -114,10 +117,7 @@ inout standard_metadata_t standard_metadata) { fabric_metadata.l4_src_port = hdr.tcp.src_port; fabric_metadata.l4_dst_port = hdr.tcp.dst_port; #ifdef WITH_INT - transition select(hdr.ipv4.isValid() && ((hdr.ipv4.dscp & INT_DSCP) == INT_DSCP)) { - true: parse_intl4_shim; - default: accept; - } + transition parse_int; #else transition accept; #endif // WITH_INT @@ -127,19 +127,16 @@ inout standard_metadata_t standard_metadata) { packet.extract(hdr.udp); fabric_metadata.l4_src_port = hdr.udp.src_port; fabric_metadata.l4_dst_port = hdr.udp.dst_port; -#ifdef WITH_SPGW transition select(hdr.udp.dst_port) { +#ifdef WITH_SPGW UDP_PORT_GTPU: parse_gtpu; - default: accept; - } -#elif WITH_INT - transition select(hdr.ipv4.isValid() && (hdr.ipv4.dscp & INT_DSCP) == INT_DSCP) { - true: parse_intl4_shim; - default: accept; - } +#endif // WITH_SPGW +#ifdef WITH_INT + default: parse_int; #else - transition accept; -#endif // WITH_SPGW, WITH_INT + default: accept; +#endif // WITH_INT + } } state parse_icmp { @@ -147,36 +144,6 @@ inout standard_metadata_t standard_metadata) { transition accept; } -#ifdef WITH_INT - state parse_intl4_shim { - packet.extract(hdr.intl4_shim); - transition parse_int_header; - } - - state parse_int_header { - packet.extract(hdr.int_header); - // If there is no INT metadata but the INT header (and corresponding shim header - // and tail header) exists, default value of length field in shim header - // should be INT_HEADER_LEN_WORD. - fabric_metadata.int_meta.metadata_len = hdr.intl4_shim.len - INT_HEADER_LEN_WORD; - transition select (fabric_metadata.int_meta.metadata_len) { - 0: parse_intl4_tail; - default: parse_int_data; - } - } - - state parse_int_data { - // Parse INT metadata, not INT header, INT shim header and INT tail header - packet.extract(hdr.int_data, (bit<32>) ((hdr.intl4_shim.len - INT_HEADER_LEN_WORD) << 5)); - transition parse_intl4_tail; - } - - state parse_intl4_tail { - packet.extract(hdr.intl4_tail); - transition accept; - } -#endif // WITH_INT - #ifdef WITH_SPGW state parse_gtpu { transition select(hdr.ipv4.dst_addr[31:32-S1U_SGW_PREFIX_LEN]) { @@ -196,6 +163,7 @@ inout standard_metadata_t standard_metadata) { state parse_inner_ipv4 { packet.extract(hdr.inner_ipv4); + last_ipv4_dscp = hdr.inner_ipv4.dscp; transition select(hdr.inner_ipv4.protocol) { PROTO_TCP: parse_tcp; PROTO_UDP: parse_inner_udp; @@ -209,26 +177,63 @@ inout standard_metadata_t standard_metadata) { fabric_metadata.l4_src_port = hdr.inner_udp.src_port; fabric_metadata.l4_dst_port = hdr.inner_udp.dst_port; #ifdef WITH_INT - transition select(hdr.ipv4.isValid() && (hdr.ipv4.dscp & INT_DSCP) == INT_DSCP) { - true: parse_intl4_shim; - default: accept; - } + transition parse_int; #else transition accept; #endif // WITH_INT } #endif // WITH_SPGW + +#ifdef WITH_INT + state parse_int { + transition select(last_ipv4_dscp) { + INT_DSCP &&& INT_DSCP: parse_intl4_shim; + default: accept; + } + } + + state parse_intl4_shim { + packet.extract(hdr.intl4_shim); + transition parse_int_header; + } + + state parse_int_header { + packet.extract(hdr.int_header); + // If there is no INT metadata but the INT header (plus shim and tail) + // exists, default value of length field in shim header should be + // INT_HEADER_LEN_WORDS. + transition select (hdr.intl4_shim.len_words) { + INT_HEADER_LEN_WORDS: parse_intl4_tail; + default: parse_int_data; + } + } + + state parse_int_data { +#ifdef WITH_INT_SINK + // Parse INT metadata stack, but not tail + packet.extract(hdr.int_data, (bit<32>) (hdr.intl4_shim.len_words - INT_HEADER_LEN_WORDS) << 5); + transition parse_intl4_tail; +#else // not interested in INT data + transition accept; +#endif // WITH_INT_SINK + } + + state parse_intl4_tail { + packet.extract(hdr.intl4_tail); + transition accept; + } +#endif // WITH_INT } control FabricDeparser(packet_out packet, in parsed_headers_t hdr) { apply { packet.emit(hdr.packet_in); -#ifdef WITH_INT +#ifdef WITH_INT_SINK packet.emit(hdr.report_ethernet); packet.emit(hdr.report_ipv4); packet.emit(hdr.report_udp); packet.emit(hdr.report_fixed_header); -#endif // WITH_INT +#endif // WITH_INT_SINK packet.emit(hdr.ethernet); packet.emit(hdr.vlan_tag); packet.emit(hdr.mpls); @@ -248,6 +253,7 @@ control FabricDeparser(packet_out packet, in parsed_headers_t hdr) { #ifdef WITH_INT packet.emit(hdr.intl4_shim); packet.emit(hdr.int_header); +#ifdef WITH_INT_TRANSIT packet.emit(hdr.int_switch_id); packet.emit(hdr.int_port_ids); packet.emit(hdr.int_hop_latency); @@ -256,6 +262,7 @@ control FabricDeparser(packet_out packet, in parsed_headers_t hdr) { packet.emit(hdr.int_egress_tstamp); packet.emit(hdr.int_q_congestion); packet.emit(hdr.int_egress_tx_util); +#endif // WITH_INT_TRANSIT packet.emit(hdr.int_data); packet.emit(hdr.intl4_tail); #endif // WITH_INT diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json index 67d1b45113..c7d78e805d 100644 --- a/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/bmv2.json @@ -4,13 +4,12 @@ "name" : "scalars_0", "id" : 0, "fields" : [ + ["last_ipv4_dscp", 6, false], ["tmp", 4, false], - ["tmp_0", 1, false], + ["tmp_0", 8, false], ["tmp_1", 32, false], - ["tmp_2", 8, false], - ["tmp_3", 1, false], - ["tmp_4", 32, false], - ["tmp_5", 32, false], + ["tmp_2", 32, false], + ["tmp_3", 32, false], ["spgw_ingress_tmp_1", 1, false], ["spgw_ingress_tmp_2", 1, false], ["filtering_tmp_0", 1, false], @@ -20,6 +19,7 @@ ["spgw_normalizer_hasReturned_0", 1, false], ["spgw_ingress_hasReturned_0", 1, false], ["next_hasReturned_0", 1, false], + ["process_int_main_process_int_transit_hasReturned_0", 1, false], ["fabric_metadata_t.fwd_type", 3, false], ["fabric_metadata_t.next_id", 32, false], ["fabric_metadata_t.pop_vlan_when_packet_in", 1, false], @@ -29,8 +29,7 @@ ["fabric_metadata_t.ip_proto", 8, false], ["fabric_metadata_t.l4_src_port", 16, false], ["fabric_metadata_t.l4_dst_port", 16, false], - ["fabric_metadata_t.compute_checksum", 1, false], - ["_padding_2", 1, false] + ["_padding_2", 5, false] ] }, { @@ -218,43 +217,19 @@ ["ingress_tstamp", 32, false] ] }, - { - "name" : "drop_report_header_t", - "id" : 15, - "fields" : [ - ["switch_id", 32, false], - ["ingress_port_id", 16, false], - ["egress_port_id", 16, false], - ["queue_id", 8, false], - ["drop_reason", 8, false], - ["pad", 16, false] - ] - }, - { - "name" : "local_report_header_t", - "id" : 16, - "fields" : [ - ["switch_id", 32, false], - ["ingress_port_id", 16, false], - ["egress_port_id", 16, false], - ["queue_id", 8, false], - ["queue_occupancy", 24, false], - ["egress_tstamp", 32, false] - ] - }, { "name" : "intl4_shim_t", - "id" : 17, + "id" : 15, "fields" : [ ["int_type", 8, false], ["rsvd1", 8, false], - ["len", 8, false], + ["len_words", 8, false], ["rsvd2", 8, false] ] }, { "name" : "int_header_t", - "id" : 18, + "id" : 16, "fields" : [ ["ver", 2, false], ["rep", 2, false], @@ -271,24 +246,16 @@ ["rsvd2", 16, false] ] }, - { - "name" : "int_data_t", - "id" : 19, - "fields" : [ - ["data", "*"] - ], - "max_length" : 1004 - }, { "name" : "int_switch_id_t", - "id" : 20, + "id" : 17, "fields" : [ ["switch_id", 32, false] ] }, { "name" : "int_port_ids_t", - "id" : 21, + "id" : 18, "fields" : [ ["ingress_port_id", 16, false], ["egress_port_id", 16, false] @@ -296,14 +263,14 @@ }, { "name" : "int_hop_latency_t", - "id" : 22, + "id" : 19, "fields" : [ ["hop_latency", 32, false] ] }, { "name" : "int_q_occupancy_t", - "id" : 23, + "id" : 20, "fields" : [ ["q_id", 8, false], ["q_occupancy", 24, false] @@ -311,21 +278,21 @@ }, { "name" : "int_ingress_tstamp_t", - "id" : 24, + "id" : 21, "fields" : [ ["ingress_tstamp", 32, false] ] }, { "name" : "int_egress_tstamp_t", - "id" : 25, + "id" : 22, "fields" : [ ["egress_tstamp", 32, false] ] }, { "name" : "int_q_congestion_t", - "id" : 26, + "id" : 23, "fields" : [ ["q_id", 8, false], ["q_congestion", 24, false] @@ -333,23 +300,32 @@ }, { "name" : "int_egress_port_tx_util_t", - "id" : 27, + "id" : 24, "fields" : [ ["egress_port_tx_util", 32, false] ] }, + { + "name" : "int_data_t", + "id" : 25, + "fields" : [ + ["data", "*"] + ], + "max_length" : 1004 + }, { "name" : "intl4_tail_t", - "id" : 28, + "id" : 26, "fields" : [ ["next_proto", 8, false], ["dest_port", 16, false], - ["dscp", 8, false] + ["padding", 2, false], + ["dscp", 6, false] ] }, { "name" : "spgw_meta_t", - "id" : 29, + "id" : 27, "fields" : [ ["direction", 2, false], ["ipv4_len", 16, false], @@ -361,16 +337,15 @@ }, { "name" : "int_metadata_t", - "id" : 30, + "id" : 28, "fields" : [ + ["source", 1, 0], + ["transit", 1, 0], + ["sink", 1, 0], ["switch_id", 32, false], - ["insert_byte_cnt", 16, false], - ["source", 1, false], - ["sink", 1, false], - ["mirror_id", 8, false], - ["flow_id", 16, false], - ["metadata_len", 8, false], - ["_padding_1", 6, false] + ["new_words", 8, false], + ["new_bytes", 16, false], + ["_padding_1", 5, false] ] } ], @@ -529,139 +504,108 @@ "metadata" : false, "pi_omit" : true }, - { - "name" : "report_local.drop_report_header", - "id" : 22, - "header_type" : "drop_report_header_t", - "metadata" : false, - "pi_omit" : true - }, - { - "name" : "report_local.local_report_header", - "id" : 23, - "header_type" : "local_report_header_t", - "metadata" : false, - "pi_omit" : true - }, { "name" : "intl4_shim", - "id" : 24, + "id" : 22, "header_type" : "intl4_shim_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_header", - "id" : 25, + "id" : 23, "header_type" : "int_header_t", "metadata" : false, "pi_omit" : true }, - { - "name" : "int_data", - "id" : 26, - "header_type" : "int_data_t", - "metadata" : false, - "pi_omit" : true - }, { "name" : "int_switch_id", - "id" : 27, + "id" : 24, "header_type" : "int_switch_id_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_port_ids", - "id" : 28, + "id" : 25, "header_type" : "int_port_ids_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_hop_latency", - "id" : 29, + "id" : 26, "header_type" : "int_hop_latency_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_q_occupancy", - "id" : 30, + "id" : 27, "header_type" : "int_q_occupancy_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_ingress_tstamp", - "id" : 31, + "id" : 28, "header_type" : "int_ingress_tstamp_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_egress_tstamp", - "id" : 32, + "id" : 29, "header_type" : "int_egress_tstamp_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_q_congestion", - "id" : 33, + "id" : 30, "header_type" : "int_q_congestion_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_egress_tx_util", - "id" : 34, + "id" : 31, "header_type" : "int_egress_port_tx_util_t", "metadata" : false, "pi_omit" : true }, + { + "name" : "int_data", + "id" : 32, + "header_type" : "int_data_t", + "metadata" : false, + "pi_omit" : true + }, { "name" : "intl4_tail", - "id" : 35, + "id" : 33, "header_type" : "intl4_tail_t", "metadata" : false, "pi_omit" : true }, { "name" : "userMetadata.spgw", - "id" : 36, + "id" : 34, "header_type" : "spgw_meta_t", "metadata" : true, "pi_omit" : true }, { "name" : "userMetadata.int_meta", - "id" : 37, + "id" : 35, "header_type" : "int_metadata_t", "metadata" : true, "pi_omit" : true } ], "header_stacks" : [], - "header_union_types" : [ - { - "name" : "local_report_t", - "id" : 0, - "headers" : [ - ["drop_report_header", "drop_report_header_t"], - ["local_report_header", "local_report_header_t"] - ] - } - ], - "header_unions" : [ - { - "name" : "report_local", - "id" : 0, - "union_type" : "local_report_t", - "header_ids" : [22, 23], - "pi_omit" : true - } - ], + "header_union_types" : [], + "header_unions" : [], "header_union_stacks" : [], "field_lists" : [ { @@ -681,7 +625,21 @@ { "name" : "start", "id" : 0, - "parser_ops" : [], + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "last_ipv4_dscp"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "op" : "set" + } + ], "transitions" : [ { "type" : "hexstr", @@ -913,6 +871,19 @@ } ], "op" : "set" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "last_ipv4_dscp"] + }, + { + "type" : "field", + "value" : ["ipv4", "dscp"] + } + ], + "op" : "set" } ], "transitions" : [ @@ -1067,94 +1038,16 @@ } ], "op" : "set" - }, - { - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "tmp_0"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "?", - "left" : { - "type" : "hexstr", - "value" : "0x01" - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - }, - "cond" : { - "type" : "expression", - "value" : { - "op" : "and", - "left" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["ipv4", "$valid$"] - } - } - }, - "right" : { - "type" : "expression", - "value" : { - "op" : "==", - "left" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["ipv4", "dscp"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - } - } - } - } - } - } - ], - "op" : "set" } ], "transitions" : [ - { - "type" : "hexstr", - "value" : "0x01", - "mask" : null, - "next_state" : "parse_intl4_shim" - }, { "value" : "default", "mask" : null, - "next_state" : null + "next_state" : "parse_int" } ], - "transition_key" : [ - { - "type" : "field", - "value" : ["scalars", "tmp_0"] - } - ] + "transition_key" : [] }, { "name" : "parse_udp", @@ -1206,7 +1099,7 @@ { "value" : "default", "mask" : null, - "next_state" : null + "next_state" : "parse_int" } ], "transition_key" : [ @@ -1240,212 +1133,14 @@ "transition_key" : [] }, { - "name" : "parse_intl4_shim", + "name" : "parse_gtpu", "id" : 11, "parser_ops" : [ - { - "parameters" : [ - { - "type" : "regular", - "value" : "intl4_shim" - } - ], - "op" : "extract" - }, - { - "parameters" : [ - { - "type" : "regular", - "value" : "int_header" - } - ], - "op" : "extract" - }, { "parameters" : [ { "type" : "field", - "value" : ["userMetadata.int_meta", "metadata_len"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["intl4_shim", "len"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xfc" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } - } - ], - "op" : "set" - } - ], - "transitions" : [ - { - "type" : "hexstr", - "value" : "0x00", - "mask" : null, - "next_state" : "parse_intl4_tail" - }, - { - "value" : "default", - "mask" : null, - "next_state" : "parse_int_data" - } - ], - "transition_key" : [ - { - "type" : "field", - "value" : ["userMetadata.int_meta", "metadata_len"] - } - ] - }, - { - "name" : "parse_int_data", - "id" : 12, - "parser_ops" : [ - { - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "tmp_1"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "<<", - "left" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["intl4_shim", "len"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xfc" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0x5" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "op" : "set" - }, - { - "parameters" : [ - { - "type" : "regular", - "value" : "int_data" - }, - { - "type" : "expression", - "value" : { - "type" : "field", - "value" : ["scalars", "tmp_1"] - } - } - ], - "op" : "extract_VL" - } - ], - "transitions" : [ - { - "value" : "default", - "mask" : null, - "next_state" : "parse_intl4_tail" - } - ], - "transition_key" : [] - }, - { - "name" : "parse_intl4_tail", - "id" : 13, - "parser_ops" : [ - { - "parameters" : [ - { - "type" : "regular", - "value" : "intl4_tail" - } - ], - "op" : "extract" - } - ], - "transitions" : [ - { - "value" : "default", - "mask" : null, - "next_state" : null - } - ], - "transition_key" : [] - }, - { - "name" : "parse_gtpu", - "id" : 14, - "parser_ops" : [ - { - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "tmp_2"] + "value" : ["scalars", "tmp_0"] }, { "type" : "expression", @@ -1504,13 +1199,13 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_2"] + "value" : ["scalars", "tmp_0"] } ] }, { "name" : "do_parse_gtpu", - "id" : 15, + "id" : 12, "parser_ops" : [ { "parameters" : [ @@ -1529,6 +1224,19 @@ } ], "op" : "extract" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "last_ipv4_dscp"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "dscp"] + } + ], + "op" : "set" } ], "transitions" : [ @@ -1565,7 +1273,7 @@ }, { "name" : "parse_inner_udp", - "id" : 16, + "id" : 13, "parser_ops" : [ { "parameters" : [ @@ -1601,80 +1309,26 @@ } ], "op" : "set" - }, - { - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "tmp_3"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "?", - "left" : { - "type" : "hexstr", - "value" : "0x01" - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - }, - "cond" : { - "type" : "expression", - "value" : { - "op" : "and", - "left" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["ipv4", "$valid$"] - } - } - }, - "right" : { - "type" : "expression", - "value" : { - "op" : "==", - "left" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["ipv4", "dscp"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - } - } - } - } - } - } - ], - "op" : "set" } ], + "transitions" : [ + { + "value" : "default", + "mask" : null, + "next_state" : "parse_int" + } + ], + "transition_key" : [] + }, + { + "name" : "parse_int", + "id" : 14, + "parser_ops" : [], "transitions" : [ { "type" : "hexstr", "value" : "0x01", - "mask" : null, + "mask" : "0x01", "next_state" : "parse_intl4_shim" }, { @@ -1686,9 +1340,171 @@ "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_3"] + "value" : ["scalars", "last_ipv4_dscp"] } ] + }, + { + "name" : "parse_intl4_shim", + "id" : 15, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "intl4_shim" + } + ], + "op" : "extract" + }, + { + "parameters" : [ + { + "type" : "regular", + "value" : "int_header" + } + ], + "op" : "extract" + } + ], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x04", + "mask" : null, + "next_state" : "parse_intl4_tail" + }, + { + "value" : "default", + "mask" : null, + "next_state" : "parse_int_data" + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["intl4_shim", "len_words"] + } + ] + }, + { + "name" : "parse_int_data", + "id" : 16, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_1"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "<<", + "left" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["intl4_shim", "len_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xfc" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x5" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "op" : "set" + }, + { + "parameters" : [ + { + "type" : "regular", + "value" : "int_data" + }, + { + "type" : "expression", + "value" : { + "type" : "field", + "value" : ["scalars", "tmp_1"] + } + } + ], + "op" : "extract_VL" + } + ], + "transitions" : [ + { + "value" : "default", + "mask" : null, + "next_state" : "parse_intl4_tail" + } + ], + "transition_key" : [] + }, + { + "name" : "parse_intl4_tail", + "id" : 17, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "intl4_tail" + } + ], + "op" : "extract" + } + ], + "transitions" : [ + { + "value" : "default", + "mask" : null, + "next_state" : null + } + ], + "transition_key" : [] } ] } @@ -1700,7 +1516,7 @@ "id" : 0, "source_info" : { "filename" : "include/parser.p4", - "line" : 223, + "line" : 228, "column" : 8, "source_fragment" : "FabricDeparser" }, @@ -1818,32 +1634,14 @@ "is_direct" : false }, { - "name" : "FabricEgress.process_int_source.counter_int_source", + "name" : "FabricEgress.process_int_main.process_int_source.counter_int_source", "id" : 16, "is_direct" : true, - "binding" : "FabricEgress.process_int_source.tb_int_source" - }, - { - "name" : "FabricEgress.process_int_transit.counter_int_insert", - "id" : 17, - "is_direct" : true, - "binding" : "FabricEgress.process_int_transit.tb_int_insert" - }, - { - "name" : "FabricEgress.process_int_transit.counter_int_inst_0003", - "id" : 18, - "is_direct" : true, - "binding" : "FabricEgress.process_int_transit.tb_int_inst_0003" - }, - { - "name" : "FabricEgress.process_int_transit.counter_int_inst_0407", - "id" : 19, - "is_direct" : true, - "binding" : "FabricEgress.process_int_transit.tb_int_inst_0407" + "binding" : "FabricEgress.process_int_main.process_int_source.tb_int_source" }, { "name" : "FabricEgress.egress_next.egress_vlan_counter", - "id" : 20, + "id" : 17, "is_direct" : true, "binding" : "FabricEgress.egress_next.egress_vlan" } @@ -2277,15 +2075,25 @@ "value" : ["userMetadata.int_meta", "source"] }, { - "type" : "hexstr", - "value" : "0x01" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 94, + "filename" : "include/int/int_main.p4", + "line" : 42, "column" : 8, - "source_fragment" : "fabric_metadata.int_meta.source = 1" + "source_fragment" : "fabric_metadata.int_meta.source = true" } } ] @@ -2303,15 +2111,25 @@ "value" : ["userMetadata.int_meta", "sink"] }, { - "type" : "hexstr", - "value" : "0x01" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 98, + "filename" : "include/int/int_main.p4", + "line" : 61, "column" : 8, - "source_fragment" : "fabric_metadata.int_meta.sink = 1" + "source_fragment" : "fabric_metadata.int_meta.sink = true" } } ] @@ -2460,7 +2278,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 89, + "line" : 91, "column" : 31, "source_fragment" : "0x8100; ..." } @@ -3124,7 +2942,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -3200,7 +3018,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -3315,7 +3133,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -3391,7 +3209,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -3683,7 +3501,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -3759,7 +3577,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -3874,7 +3692,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -3950,7 +3768,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -4068,7 +3886,7 @@ ], "source_info" : { "filename" : "fabric.p4", - "line" : 52, + "line" : 54, "column" : 50, "source_fragment" : "hdr.gtpu_ipv4" } @@ -4083,7 +3901,7 @@ ], "source_info" : { "filename" : "fabric.p4", - "line" : 52, + "line" : 54, "column" : 65, "source_fragment" : "hdr.gtpu_udp" } @@ -4374,7 +4192,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 119, + "line" : 121, "column" : 36, "source_fragment" : "2w1; ..." } @@ -4460,7 +4278,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 120, + "line" : 122, "column" : 38, "source_fragment" : "2w2; ..." } @@ -4486,7 +4304,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 118, + "line" : 120, "column" : 37, "source_fragment" : "2w0; ..." } @@ -4657,7 +4475,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 109, + "line" : 111, "column" : 31, "source_fragment" : "7; ..." } @@ -4683,7 +4501,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 92, + "line" : 94, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -5044,7 +4862,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_4"] + "value" : ["scalars", "tmp_2"] }, { "type" : "expression", @@ -5080,7 +4898,7 @@ }, { "type" : "field", - "value" : ["scalars", "tmp_4"] + "value" : ["scalars", "tmp_2"] } ], "source_info" : { @@ -5102,7 +4920,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_5"] + "value" : ["scalars", "tmp_3"] }, { "type" : "expression", @@ -5138,7 +4956,7 @@ }, { "type" : "field", - "value" : ["scalars", "tmp_5"] + "value" : ["scalars", "tmp_3"] } ], "source_info" : { @@ -5195,7 +5013,7 @@ "primitives" : [] }, { - "name" : "NoAction", + "name" : "nop", "id" : 79, "runtime_data" : [], "primitives" : [] @@ -5313,7 +5131,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 101, + "line" : 103, "column" : 28, "source_fragment" : "5; ..." } @@ -5469,7 +5287,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 114, + "line" : 116, "column" : 32, "source_fragment" : "64; ..." } @@ -5488,7 +5306,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 98, + "line" : 100, "column" : 25, "source_fragment" : "17; ..." } @@ -5853,7 +5671,7 @@ ] }, { - "name" : "FabricEgress.process_int_source.int_source_dscp", + "name" : "FabricEgress.process_int_main.process_int_source.int_source_dscp", "id" : 84, "runtime_data" : [ { @@ -5883,7 +5701,7 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", + "filename" : "include/int/int_source.p4", "line" : 31, "column" : 8, "source_fragment" : "hdr.intl4_shim.setValid()" @@ -5902,7 +5720,7 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", + "filename" : "include/int/int_source.p4", "line" : 33, "column" : 8, "source_fragment" : "hdr.intl4_shim.int_type = 1" @@ -5913,7 +5731,7 @@ "parameters" : [ { "type" : "field", - "value" : ["intl4_shim", "len"] + "value" : ["intl4_shim", "len_words"] }, { "type" : "hexstr", @@ -5922,8 +5740,8 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 127, - "column" : 35, + "line" : 131, + "column" : 36, "source_fragment" : "4; ..." } }, @@ -5936,8 +5754,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 37, + "filename" : "include/int/int_source.p4", + "line" : 36, "column" : 8, "source_fragment" : "hdr.int_header.setValid()" } @@ -5955,8 +5773,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 38, + "filename" : "include/int/int_source.p4", + "line" : 37, "column" : 8, "source_fragment" : "hdr.int_header.ver = 0" } @@ -5974,8 +5792,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 39, + "filename" : "include/int/int_source.p4", + "line" : 38, "column" : 8, "source_fragment" : "hdr.int_header.rep = 0" } @@ -5993,8 +5811,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 40, + "filename" : "include/int/int_source.p4", + "line" : 39, "column" : 8, "source_fragment" : "hdr.int_header.c = 0" } @@ -6012,8 +5830,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 41, + "filename" : "include/int/int_source.p4", + "line" : 40, "column" : 8, "source_fragment" : "hdr.int_header.e = 0" } @@ -6031,8 +5849,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 42, + "filename" : "include/int/int_source.p4", + "line" : 41, "column" : 8, "source_fragment" : "hdr.int_header.rsvd1 = 0" } @@ -6050,8 +5868,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 43, + "filename" : "include/int/int_source.p4", + "line" : 42, "column" : 8, "source_fragment" : "hdr.int_header.ins_cnt = ins_cnt; ..." } @@ -6069,8 +5887,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 44, + "filename" : "include/int/int_source.p4", + "line" : 43, "column" : 8, "source_fragment" : "hdr.int_header.max_hop_cnt = max_hop; ..." } @@ -6088,8 +5906,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 45, + "filename" : "include/int/int_source.p4", + "line" : 44, "column" : 8, "source_fragment" : "hdr.int_header.total_hop_cnt = 0" } @@ -6107,8 +5925,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 46, + "filename" : "include/int/int_source.p4", + "line" : 45, "column" : 8, "source_fragment" : "hdr.int_header.instruction_mask_0003 = ins_mask0003; ..." } @@ -6126,8 +5944,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 47, + "filename" : "include/int/int_source.p4", + "line" : 46, "column" : 8, "source_fragment" : "hdr.int_header.instruction_mask_0407 = ins_mask0407; ..." } @@ -6145,8 +5963,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 48, + "filename" : "include/int/int_source.p4", + "line" : 47, "column" : 8, "source_fragment" : "hdr.int_header.instruction_mask_0811 = 0" } @@ -6164,8 +5982,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 49, + "filename" : "include/int/int_source.p4", + "line" : 48, "column" : 8, "source_fragment" : "hdr.int_header.instruction_mask_1215 = 0" } @@ -6179,8 +5997,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 52, + "filename" : "include/int/int_source.p4", + "line" : 50, "column" : 8, "source_fragment" : "hdr.intl4_tail.setValid()" } @@ -6198,8 +6016,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 53, + "filename" : "include/int/int_source.p4", + "line" : 51, "column" : 8, "source_fragment" : "hdr.intl4_tail.next_proto = hdr.ipv4.protocol" } @@ -6217,8 +6035,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 54, + "filename" : "include/int/int_source.p4", + "line" : 52, "column" : 8, "source_fragment" : "hdr.intl4_tail.dest_port = fabric_metadata.l4_dst_port" } @@ -6231,28 +6049,15 @@ "value" : ["intl4_tail", "dscp"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["ipv4", "dscp"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } + "type" : "field", + "value" : ["ipv4", "dscp"] } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 55, + "filename" : "include/int/int_source.p4", + "line" : 53, "column" : 8, - "source_fragment" : "hdr.intl4_tail.dscp = (bit<8>) hdr.ipv4.dscp" + "source_fragment" : "hdr.intl4_tail.dscp = hdr.ipv4.dscp" } }, { @@ -6291,10 +6096,10 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 58, + "filename" : "include/int/int_source.p4", + "line" : 55, "column" : 8, - "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + 16" + "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + INT_HEADER_LEN_BYTES" } }, { @@ -6333,10 +6138,10 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 59, + "filename" : "include/int/int_source.p4", + "line" : 56, "column" : 8, - "source_fragment" : "hdr.udp.len = hdr.udp.len + 16" + "source_fragment" : "hdr.udp.len = hdr.udp.len + INT_HEADER_LEN_BYTES" } }, { @@ -6353,7 +6158,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 125, + "line" : 127, "column" : 24, "source_fragment" : "0x1; ..." } @@ -6361,16 +6166,148 @@ ] }, { - "name" : "FabricEgress.process_int_transit.int_update_total_hop_cnt", + "name" : "FabricEgress.process_int_main.process_int_transit.init_metadata", "id" : 85, - "runtime_data" : [], + "runtime_data" : [ + { + "name" : "switch_id", + "bitwidth" : 32 + } + ], "primitives" : [ { "op" : "assign", "parameters" : [ { "type" : "field", - "value" : ["int_header", "total_hop_cnt"] + "value" : ["userMetadata.int_meta", "transit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 26, + "column" : 8, + "source_fragment" : "fmeta.int_meta.transit = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 31, + "column" : 8, + "source_fragment" : "fmeta.int_meta.switch_id = switch_id" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", + "id" : 86, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", + "id" : 87, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] }, { "type" : "expression", @@ -6384,7 +6321,7 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["int_header", "total_hop_cnt"] + "value" : ["userMetadata.int_meta", "new_words"] }, "right" : { "type" : "hexstr", @@ -6401,41 +6338,10 @@ } ], "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 30, + "filename" : "include/int/int_transit.p4", + "line" : 88, "column" : 8, - "source_fragment" : "hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 1" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_transit", - "id" : 86, - "runtime_data" : [ - { - "name" : "switch_id", - "bitwidth" : 32 - } - ], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - }, - { - "type" : "runtime_data", - "value" : 0 - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 34, - "column" : 8, - "source_fragment" : "fabric_metadata.int_meta.switch_id = switch_id" + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" } }, { @@ -6443,7 +6349,7 @@ "parameters" : [ { "type" : "field", - "value" : ["userMetadata.int_meta", "insert_byte_cnt"] + "value" : ["userMetadata.int_meta", "new_bytes"] }, { "type" : "expression", @@ -6454,24 +6360,14 @@ "left" : { "type" : "expression", "value" : { - "op" : "<<", + "op" : "+", "left" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["int_header", "ins_cnt"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] }, "right" : { "type" : "hexstr", - "value" : "0x2" + "value" : "0x0004" } } }, @@ -6484,97 +6380,18 @@ } ], "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 35, + "filename" : "include/int/int_transit.p4", + "line" : 89, "column" : 8, - "source_fragment" : "fabric_metadata.int_meta.insert_byte_cnt = (bit<16>) hdr.int_header.ins_cnt << 2" + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" } } ] }, { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i0", - "id" : 87, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i1", + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", "id" : 88, "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_occupancy"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "deq_qdepth"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i2", - "id" : 89, - "runtime_data" : [], "primitives" : [ { "op" : "add_header", @@ -6585,7 +6402,7 @@ } ], "source_info" : { - "filename" : "include/int_transit.p4", + "filename" : "include/int/int_transit.p4", "line" : 51, "column" : 8, "source_fragment" : "hdr.int_hop_latency.setValid()" @@ -6604,32 +6421,10 @@ } ], "source_info" : { - "filename" : "include/int_transit.p4", + "filename" : "include/int/int_transit.p4", "line" : 52, "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i3", - "id" : 90, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" } }, { @@ -6637,1903 +6432,7 @@ "parameters" : [ { "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_occupancy"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "deq_qdepth"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i4", - "id" : 91, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i5", - "id" : 92, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_occupancy"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "deq_qdepth"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i6", - "id" : 93, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i7", - "id" : 94, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_occupancy"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "deq_qdepth"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i8", - "id" : 95, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i9", - "id" : 96, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_occupancy"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "deq_qdepth"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i10", - "id" : 97, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i11", - "id" : 98, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_occupancy"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "deq_qdepth"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i12", - "id" : 99, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i13", - "id" : 100, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_occupancy"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "deq_qdepth"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i14", - "id" : 101, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i15", - "id" : 102, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_occupancy"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "deq_qdepth"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i0", - "id" : 103, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i1", - "id" : 104, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 88, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tx_util", "egress_port_tx_util"] - }, - { - "type" : "hexstr", - "value" : "0x00000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i2", - "id" : 105, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i3", - "id" : 106, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 88, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tx_util", "egress_port_tx_util"] - }, - { - "type" : "hexstr", - "value" : "0x00000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i4", - "id" : 107, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] + "value" : ["userMetadata.int_meta", "new_words"] }, { "type" : "expression", @@ -8547,1438 +6446,11 @@ "op" : "+", "left" : { "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] + "value" : ["userMetadata.int_meta", "new_words"] }, "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i5", - "id" : 108, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 88, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tx_util", "egress_port_tx_util"] - }, - { - "type" : "hexstr", - "value" : "0x00000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i6", - "id" : 109, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i7", - "id" : 110, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 88, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tx_util", "egress_port_tx_util"] - }, - { - "type" : "hexstr", - "value" : "0x00000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i8", - "id" : 111, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i9", - "id" : 112, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 88, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tx_util", "egress_port_tx_util"] - }, - { - "type" : "hexstr", - "value" : "0x00000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i10", - "id" : 113, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i11", - "id" : 114, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 88, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tx_util", "egress_port_tx_util"] - }, - { - "type" : "hexstr", - "value" : "0x00000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i12", - "id" : 115, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i13", - "id" : 116, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 88, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tx_util", "egress_port_tx_util"] - }, - { - "type" : "hexstr", - "value" : "0x00000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i14", - "id" : 117, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i15", - "id" : 118, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 88, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tx_util", "egress_port_tx_util"] - }, - { - "type" : "hexstr", - "value" : "0x00000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_outer_encap.int_update_ipv4", - "id" : 119, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["ipv4", "total_len"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["ipv4", "total_len"] - }, - "right" : { - "type" : "field", - "value" : ["userMetadata.int_meta", "insert_byte_cnt"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 304, - "column" : 8, - "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + fabric_metadata.int_meta.insert_byte_cnt" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_outer_encap.int_update_udp", - "id" : 120, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["udp", "len"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["udp", "len"] - }, - "right" : { - "type" : "field", - "value" : ["userMetadata.int_meta", "insert_byte_cnt"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 307, - "column" : 8, - "source_fragment" : "hdr.udp.len = hdr.udp.len + fabric_metadata.int_meta.insert_byte_cnt" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_outer_encap.int_update_shim", - "id" : 121, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["intl4_shim", "len"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["intl4_shim", "len"] - }, - "right" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["int_header", "ins_cnt"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } + "type" : "hexstr", + "value" : "0x01" } } }, @@ -9991,17 +6463,5641 @@ } ], "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 310, + "filename" : "include/int/int_transit.p4", + "line" : 88, "column" : 8, - "source_fragment" : "hdr.intl4_shim.len = hdr.intl4_shim.len + (bit<8>)hdr.int_header.ins_cnt" + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" } } ] }, { - "name" : "FabricEgress.process_int_report.do_report_encapsulation", - "id" : 122, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", + "id" : 89, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_hop_latency", "hop_latency"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", + "id" : 90, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", + "id" : 91, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", + "id" : 92, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_hop_latency", "hop_latency"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", + "id" : 93, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_hop_latency", "hop_latency"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", + "id" : 94, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", + "id" : 95, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", + "id" : 96, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_hop_latency", "hop_latency"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", + "id" : 97, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_hop_latency", "hop_latency"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", + "id" : 98, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", + "id" : 99, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", + "id" : 100, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_hop_latency", "hop_latency"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", + "id" : 101, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_hop_latency", "hop_latency"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x04" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 103, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 4" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0010" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 104, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 16" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", + "id" : 102, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", + "id" : 103, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tx_util", "egress_port_tx_util"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", + "id" : 104, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", + "id" : 105, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tx_util", "egress_port_tx_util"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", + "id" : 106, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", + "id" : 107, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tx_util", "egress_port_tx_util"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", + "id" : 108, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", + "id" : 109, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tx_util", "egress_port_tx_util"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", + "id" : 110, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", + "id" : 111, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tx_util", "egress_port_tx_util"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", + "id" : 112, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", + "id" : 113, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tx_util", "egress_port_tx_util"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", + "id" : 114, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", + "id" : 115, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tx_util", "egress_port_tx_util"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", + "id" : 116, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", + "id" : 117, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tx_util", "egress_port_tx_util"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x04" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 103, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 4" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0010" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 104, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 16" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_report.do_report_encapsulation", + "id" : 118, "runtime_data" : [ { "name" : "src_mac", @@ -10034,8 +12130,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 50, + "filename" : "include/int/int_report.p4", + "line" : 49, "column" : 8, "source_fragment" : "hdr.report_ethernet.setValid()" } @@ -10053,8 +12149,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 51, + "filename" : "include/int/int_report.p4", + "line" : 50, "column" : 8, "source_fragment" : "hdr.report_ethernet.dst_addr = mon_mac" } @@ -10072,8 +12168,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 52, + "filename" : "include/int/int_report.p4", + "line" : 51, "column" : 8, "source_fragment" : "hdr.report_ethernet.src_addr = src_mac" } @@ -10092,7 +12188,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 92, + "line" : 94, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -10106,8 +12202,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 56, + "filename" : "include/int/int_report.p4", + "line" : 55, "column" : 8, "source_fragment" : "hdr.report_ipv4.setValid()" } @@ -10125,8 +12221,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 57, + "filename" : "include/int/int_report.p4", + "line" : 56, "column" : 8, "source_fragment" : "hdr.report_ipv4.version = 4w4" } @@ -10144,8 +12240,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 58, + "filename" : "include/int/int_report.p4", + "line" : 57, "column" : 8, "source_fragment" : "hdr.report_ipv4.ihl = 4w5" } @@ -10163,8 +12259,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 59, + "filename" : "include/int/int_report.p4", + "line" : 58, "column" : 8, "source_fragment" : "hdr.report_ipv4.dscp = 6w0" } @@ -10182,8 +12278,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 60, + "filename" : "include/int/int_report.p4", + "line" : 59, "column" : 8, "source_fragment" : "hdr.report_ipv4.ecn = 2w0" } @@ -10224,8 +12320,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 62, + "filename" : "include/int/int_report.p4", + "line" : 61, "column" : 8, "source_fragment" : "hdr.report_ipv4.total_len = (bit<16>) IPV4_MIN_HEAD_LEN + (bit<16>) UDP_HEADER_LEN + ..." } @@ -10243,8 +12339,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 65, + "filename" : "include/int/int_report.p4", + "line" : 64, "column" : 8, "source_fragment" : "hdr.report_ipv4.identification = 0" } @@ -10262,8 +12358,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 66, + "filename" : "include/int/int_report.p4", + "line" : 65, "column" : 8, "source_fragment" : "hdr.report_ipv4.flags = 0" } @@ -10281,8 +12377,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 67, + "filename" : "include/int/int_report.p4", + "line" : 66, "column" : 8, "source_fragment" : "hdr.report_ipv4.frag_offset = 0" } @@ -10300,8 +12396,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 68, + "filename" : "include/int/int_report.p4", + "line" : 67, "column" : 8, "source_fragment" : "hdr.report_ipv4.ttl = 0xFF" } @@ -10320,7 +12416,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 98, + "line" : 100, "column" : 25, "source_fragment" : "17; ..." } @@ -10338,8 +12434,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 70, + "filename" : "include/int/int_report.p4", + "line" : 69, "column" : 8, "source_fragment" : "hdr.report_ipv4.src_addr = src_ip" } @@ -10357,8 +12453,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 71, + "filename" : "include/int/int_report.p4", + "line" : 70, "column" : 8, "source_fragment" : "hdr.report_ipv4.dst_addr = mon_ip" } @@ -10372,8 +12468,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 74, + "filename" : "include/int/int_report.p4", + "line" : 73, "column" : 8, "source_fragment" : "hdr.report_udp.setValid()" } @@ -10391,8 +12487,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 75, + "filename" : "include/int/int_report.p4", + "line" : 74, "column" : 8, "source_fragment" : "hdr.report_udp.src_port = 0" } @@ -10410,8 +12506,8 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 76, + "filename" : "include/int/int_report.p4", + "line" : 75, "column" : 8, "source_fragment" : "hdr.report_udp.dst_port = mon_port" } @@ -10452,41 +12548,12 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 77, + "filename" : "include/int/int_report.p4", + "line" : 76, "column" : 8, "source_fragment" : "hdr.report_udp.len = (bit<16>) UDP_HEADER_LEN + (bit<16>) REPORT_FIXED_HEADER_LEN + ..." } }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t.compute_checksum"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "b2d", - "left" : null, - "right" : { - "type" : "bool", - "value" : true - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 80, - "column" : 8, - "source_fragment" : "fabric_metadata.compute_checksum = true" - } - }, { "op" : "add_header", "parameters" : [ @@ -10496,7 +12563,7 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", + "filename" : "include/int/int_report.p4", "line" : 30, "column" : 8, "source_fragment" : "hdr.report_fixed_header.setValid()" @@ -10515,7 +12582,7 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", + "filename" : "include/int/int_report.p4", "line" : 31, "column" : 8, "source_fragment" : "hdr.report_fixed_header.ver = 0" @@ -10535,7 +12602,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 132, + "line" : 137, "column" : 31, "source_fragment" : "0; ..." } @@ -10553,7 +12620,7 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", + "filename" : "include/int/int_report.p4", "line" : 34, "column" : 8, "source_fragment" : "hdr.report_fixed_header.d = 0" @@ -10572,7 +12639,7 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", + "filename" : "include/int/int_report.p4", "line" : 35, "column" : 8, "source_fragment" : "hdr.report_fixed_header.q = 0" @@ -10591,7 +12658,7 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", + "filename" : "include/int/int_report.p4", "line" : 36, "column" : 8, "source_fragment" : "hdr.report_fixed_header.f = 1" @@ -10610,7 +12677,7 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", + "filename" : "include/int/int_report.p4", "line" : 37, "column" : 8, "source_fragment" : "hdr.report_fixed_header.rsvd = 0" @@ -10630,7 +12697,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 136, + "line" : 141, "column" : 21, "source_fragment" : "1; ..." } @@ -10648,7 +12715,7 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", + "filename" : "include/int/int_report.p4", "line" : 41, "column" : 8, "source_fragment" : "hdr.report_fixed_header.seq_no = 0" @@ -10667,17 +12734,17 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", + "filename" : "include/int/int_report.p4", "line" : 43, "column" : 8, - "source_fragment" : "hdr.report_fixed_header.ingress_tstamp = ..." + "source_fragment" : "hdr.report_fixed_header.ingress_tstamp = (bit<32>) standard_metadata.enq_timestamp" } } ] }, { - "name" : "FabricEgress.process_int_sink.restore_header", - "id" : 123, + "name" : "FabricEgress.process_int_main.process_int_sink.restore_header", + "id" : 119, "runtime_data" : [], "primitives" : [ { @@ -10693,7 +12760,7 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", + "filename" : "include/int/int_sink.p4", "line" : 26, "column" : 8, "source_fragment" : "hdr.udp.dst_port = hdr.intl4_tail.dest_port" @@ -10707,35 +12774,22 @@ "value" : ["ipv4", "dscp"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["intl4_tail", "dscp"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x3f" - } - } - } + "type" : "field", + "value" : ["intl4_tail", "dscp"] } ], "source_info" : { - "filename" : "include/int_sink.p4", + "filename" : "include/int/int_sink.p4", "line" : 27, "column" : 8, - "source_fragment" : "hdr.ipv4.dscp = (bit<6>)hdr.intl4_tail.dscp" + "source_fragment" : "hdr.ipv4.dscp = hdr.intl4_tail.dscp" } } ] }, { - "name" : "FabricEgress.process_int_sink.int_sink", - "id" : 124, + "name" : "FabricEgress.process_int_main.process_int_sink.int_sink", + "id" : 120, "runtime_data" : [], "primitives" : [ { @@ -10773,11 +12827,11 @@ "op" : "<<", "left" : { "type" : "field", - "value" : ["intl4_shim", "len"] + "value" : ["intl4_shim", "len_words"] }, "right" : { "type" : "hexstr", - "value" : "0x2" + "value" : "0x02" } } }, @@ -10804,10 +12858,10 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 32, + "filename" : "include/int/int_sink.p4", + "line" : 33, "column" : 8, - "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len - (bit<16>)(hdr.intl4_shim.len << 2)" + "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len - len_bytes" } }, { @@ -10845,11 +12899,11 @@ "op" : "<<", "left" : { "type" : "field", - "value" : ["intl4_shim", "len"] + "value" : ["intl4_shim", "len_words"] }, "right" : { "type" : "hexstr", - "value" : "0x2" + "value" : "0x02" } } }, @@ -10876,10 +12930,10 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 33, + "filename" : "include/int/int_sink.p4", + "line" : 34, "column" : 8, - "source_fragment" : "hdr.udp.len = hdr.udp.len - (bit<16>)(hdr.intl4_shim.len << 2)" + "source_fragment" : "hdr.udp.len = hdr.udp.len - len_bytes" } }, { @@ -10891,8 +12945,8 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 35, + "filename" : "include/int/int_sink.p4", + "line" : 36, "column" : 8, "source_fragment" : "hdr.int_header.setInvalid()" } @@ -10906,8 +12960,8 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 36, + "filename" : "include/int/int_sink.p4", + "line" : 37, "column" : 8, "source_fragment" : "hdr.int_data.setInvalid()" } @@ -10921,8 +12975,8 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 37, + "filename" : "include/int/int_sink.p4", + "line" : 38, "column" : 8, "source_fragment" : "hdr.intl4_shim.setInvalid()" } @@ -10936,8 +12990,8 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 38, + "filename" : "include/int/int_sink.p4", + "line" : 39, "column" : 8, "source_fragment" : "hdr.intl4_tail.setInvalid()" } @@ -10951,8 +13005,8 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 39, + "filename" : "include/int/int_sink.p4", + "line" : 40, "column" : 8, "source_fragment" : "hdr.int_switch_id.setInvalid()" } @@ -10966,8 +13020,8 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 40, + "filename" : "include/int/int_sink.p4", + "line" : 41, "column" : 8, "source_fragment" : "hdr.int_port_ids.setInvalid()" } @@ -10981,8 +13035,8 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 41, + "filename" : "include/int/int_sink.p4", + "line" : 42, "column" : 8, "source_fragment" : "hdr.int_hop_latency.setInvalid()" } @@ -10996,8 +13050,8 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 42, + "filename" : "include/int/int_sink.p4", + "line" : 43, "column" : 8, "source_fragment" : "hdr.int_q_occupancy.setInvalid()" } @@ -11011,8 +13065,8 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 43, + "filename" : "include/int/int_sink.p4", + "line" : 44, "column" : 8, "source_fragment" : "hdr.int_ingress_tstamp.setInvalid()" } @@ -11026,8 +13080,8 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 44, + "filename" : "include/int/int_sink.p4", + "line" : 45, "column" : 8, "source_fragment" : "hdr.int_egress_tstamp.setInvalid()" } @@ -11041,8 +13095,8 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 45, + "filename" : "include/int/int_sink.p4", + "line" : 46, "column" : 8, "source_fragment" : "hdr.int_q_congestion.setInvalid()" } @@ -11056,8 +13110,8 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 46, + "filename" : "include/int/int_sink.p4", + "line" : 47, "column" : 8, "source_fragment" : "hdr.int_egress_tx_util.setInvalid()" } @@ -11066,7 +13120,7 @@ }, { "name" : "FabricEgress.pkt_io_egress.pop_vlan", - "id" : 125, + "id" : 121, "runtime_data" : [], "primitives" : [ { @@ -11083,7 +13137,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 39, + "line" : 40, "column" : 8, "source_fragment" : "hdr.ethernet.ether_type = hdr.vlan_tag.ether_type" } @@ -11098,7 +13152,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 40, + "line" : 41, "column" : 8, "source_fragment" : "hdr.vlan_tag.setInvalid()" } @@ -11107,7 +13161,7 @@ }, { "name" : "FabricEgress.egress_next.pop_vlan", - "id" : 126, + "id" : 122, "runtime_data" : [], "primitives" : [ { @@ -11148,7 +13202,7 @@ }, { "name" : "act_31", - "id" : 127, + "id" : 123, "runtime_data" : [], "primitives" : [ { @@ -11161,7 +13215,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 56, + "line" : 57, "column" : 12, "source_fragment" : "hdr.packet_in.setValid()" } @@ -11180,12 +13234,274 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 57, + "line" : 58, "column" : 12, "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port" } } ] + }, + { + "name" : "act_32", + "id" : 124, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "process_int_main_process_int_transit_hasReturned_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "act_33", + "id" : 125, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "process_int_main_process_int_transit_hasReturned_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 374, + "column" : 12, + "source_fragment" : "return" + } + } + ] + }, + { + "name" : "act_34", + "id" : 126, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 382, + "column" : 12, + "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + fmeta.int_meta.new_bytes" + } + } + ] + }, + { + "name" : "act_35", + "id" : 127, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "total_hop_cnt"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["int_header", "total_hop_cnt"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 379, + "column" : 8, + "source_fragment" : "hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 1" + } + } + ] + }, + { + "name" : "act_36", + "id" : 128, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["udp", "len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["udp", "len"] + }, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 385, + "column" : 12, + "source_fragment" : "hdr.udp.len = hdr.udp.len + fmeta.int_meta.new_bytes" + } + } + ] + }, + { + "name" : "act_37", + "id" : 129, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["intl4_shim", "len_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["intl4_shim", "len_words"] + }, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 388, + "column" : 12, + "source_fragment" : "hdr.intl4_shim.len_words = hdr.intl4_shim.len_words + fmeta.int_meta.new_words" + } + } + ] } ], "pipelines" : [ @@ -12538,8 +14854,8 @@ "name" : "FabricIngress.process_set_source_sink.tb_set_source", "id" : 46, "source_info" : { - "filename" : "include/int_source.p4", - "line" : 101, + "filename" : "include/int/int_main.p4", + "line" : 46, "column" : 10, "source_fragment" : "tb_set_source" }, @@ -12553,7 +14869,7 @@ ], "match_type" : "exact", "type" : "simple", - "max_size" : 256, + "max_size" : 511, "with_counters" : true, "support_timeout" : false, "direct_meters" : null, @@ -12575,8 +14891,8 @@ "name" : "FabricIngress.process_set_source_sink.tb_set_sink", "id" : 47, "source_info" : { - "filename" : "include/int_source.p4", - "line" : 111, + "filename" : "include/int/int_main.p4", + "line" : 65, "column" : 10, "source_fragment" : "tb_set_sink" }, @@ -12590,7 +14906,7 @@ ], "match_type" : "exact", "type" : "simple", - "max_size" : 256, + "max_size" : 511, "with_counters" : true, "support_timeout" : false, "direct_meters" : null, @@ -13226,22 +15542,29 @@ "name" : "node_72", "id" : 22, "source_info" : { - "filename" : "fabric.p4", - "line" : 70, + "filename" : "include/int/int_main.p4", + "line" : 82, "column" : 11, - "source_fragment" : "fabric_metadata.int_meta.sink == 1" + "source_fragment" : "fabric_metadata.int_meta.sink == true" }, "expression" : { "type" : "expression", "value" : { "op" : "==", "left" : { - "type" : "field", - "value" : ["userMetadata.int_meta", "sink"] + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "sink"] + } + } }, "right" : { - "type" : "hexstr", - "value" : "0x01" + "type" : "bool", + "value" : true } } }, @@ -13255,7 +15578,7 @@ "id" : 1, "source_info" : { "filename" : "fabric.p4", - "line" : 80, + "line" : 79, "column" : 8, "source_fragment" : "FabricEgress" }, @@ -13271,14 +15594,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [125], + "action_ids" : [121], "actions" : ["FabricEgress.pkt_io_egress.pop_vlan"], "base_default_next" : "node_80", "next_tables" : { "FabricEgress.pkt_io_egress.pop_vlan" : "node_80" }, "default_entry" : { - "action_id" : 125, + "action_id" : 121, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -13317,14 +15640,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [127], + "action_ids" : [123], "actions" : ["act_31"], "base_default_next" : null, "next_tables" : { "act_31" : null }, "default_entry" : { - "action_id" : 127, + "action_id" : 123, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -13382,7 +15705,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [126, 80], + "action_ids" : [122, 80], "actions" : ["FabricEgress.egress_next.pop_vlan", "nop"], "base_default_next" : "node_86", "next_tables" : { @@ -13420,11 +15743,11 @@ } }, { - "name" : "FabricEgress.process_int_source.tb_int_source", + "name" : "FabricEgress.process_int_main.process_int_source.tb_int_source", "id" : 55, "source_info" : { - "filename" : "include/int_source.p4", - "line" : 66, + "filename" : "include/int/int_source.p4", + "line" : 65, "column" : 10, "source_fragment" : "tb_int_source" }, @@ -13461,10 +15784,10 @@ "support_timeout" : false, "direct_meters" : null, "action_ids" : [84, 75], - "actions" : ["FabricEgress.process_int_source.int_source_dscp", "NoAction"], + "actions" : ["FabricEgress.process_int_main.process_int_source.int_source_dscp", "NoAction"], "base_default_next" : "node_91", "next_tables" : { - "FabricEgress.process_int_source.int_source_dscp" : "node_91", + "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_91", "NoAction" : "node_91" }, "default_entry" : { @@ -13475,41 +15798,94 @@ } }, { - "name" : "FabricEgress.process_int_transit.tb_int_insert", + "name" : "tbl_act_32", "id" : 56, - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 227, - "column" : 10, - "source_fragment" : "tb_int_insert" - }, "key" : [], "match_type" : "exact", "type" : "simple", - "max_size" : 2, - "with_counters" : true, + "max_size" : 1024, + "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [86, 76], - "actions" : ["FabricEgress.process_int_transit.int_transit", "NoAction"], - "base_default_next" : "FabricEgress.process_int_transit.tb_int_inst_0003", + "action_ids" : [124], + "actions" : ["act_32"], + "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", "next_tables" : { - "FabricEgress.process_int_transit.int_transit" : "FabricEgress.process_int_transit.tb_int_inst_0003", - "NoAction" : "FabricEgress.process_int_transit.tb_int_inst_0003" + "act_32" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert" }, "default_entry" : { - "action_id" : 76, - "action_const" : false, + "action_id" : 124, + "action_const" : true, "action_data" : [], - "action_entry_const" : false + "action_entry_const" : true } }, { - "name" : "FabricEgress.process_int_transit.tb_int_inst_0003", + "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", "id" : 57, "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 237, + "filename" : "include/int/int_transit.p4", + "line" : 271, + "column" : 10, + "source_fragment" : "tb_int_insert" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "hdr.int_header.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" : [85, 79], + "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "nop"], + "base_default_next" : "node_94", + "next_tables" : { + "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_94", + "nop" : "node_94" + }, + "default_entry" : { + "action_id" : 79, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_33", + "id" : 58, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [125], + "actions" : ["act_33"], + "base_default_next" : "node_96", + "next_tables" : { + "act_33" : "node_96" + }, + "default_entry" : { + "action_id" : 125, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003", + "id" : 59, + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 284, "column" : 10, "source_fragment" : "tb_int_inst_0003" }, @@ -13524,44 +15900,254 @@ "match_type" : "exact", "type" : "simple", "max_size" : 16, - "with_counters" : true, + "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 77], - "actions" : ["FabricEgress.process_int_transit.int_set_header_0003_i0", "FabricEgress.process_int_transit.int_set_header_0003_i1", "FabricEgress.process_int_transit.int_set_header_0003_i2", "FabricEgress.process_int_transit.int_set_header_0003_i3", "FabricEgress.process_int_transit.int_set_header_0003_i4", "FabricEgress.process_int_transit.int_set_header_0003_i5", "FabricEgress.process_int_transit.int_set_header_0003_i6", "FabricEgress.process_int_transit.int_set_header_0003_i7", "FabricEgress.process_int_transit.int_set_header_0003_i8", "FabricEgress.process_int_transit.int_set_header_0003_i9", "FabricEgress.process_int_transit.int_set_header_0003_i10", "FabricEgress.process_int_transit.int_set_header_0003_i11", "FabricEgress.process_int_transit.int_set_header_0003_i12", "FabricEgress.process_int_transit.int_set_header_0003_i13", "FabricEgress.process_int_transit.int_set_header_0003_i14", "FabricEgress.process_int_transit.int_set_header_0003_i15", "NoAction"], - "base_default_next" : "FabricEgress.process_int_transit.tb_int_inst_0407", + "action_ids" : [86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 76], + "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", "NoAction"], + "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", "next_tables" : { - "FabricEgress.process_int_transit.int_set_header_0003_i0" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i1" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i2" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i3" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i4" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i5" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i6" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i7" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i8" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i9" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i10" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i11" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i12" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i13" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i14" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i15" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "NoAction" : "FabricEgress.process_int_transit.tb_int_inst_0407" + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "NoAction" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407" }, "default_entry" : { - "action_id" : 77, + "action_id" : 76, "action_const" : false, "action_data" : [], "action_entry_const" : false - } + }, + "entries" : [ + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 86, + "action_data" : [] + }, + "priority" : 1 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x01" + } + ], + "action_entry" : { + "action_id" : 87, + "action_data" : [] + }, + "priority" : 2 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x02" + } + ], + "action_entry" : { + "action_id" : 88, + "action_data" : [] + }, + "priority" : 3 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x03" + } + ], + "action_entry" : { + "action_id" : 89, + "action_data" : [] + }, + "priority" : 4 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x04" + } + ], + "action_entry" : { + "action_id" : 90, + "action_data" : [] + }, + "priority" : 5 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x05" + } + ], + "action_entry" : { + "action_id" : 91, + "action_data" : [] + }, + "priority" : 6 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x06" + } + ], + "action_entry" : { + "action_id" : 92, + "action_data" : [] + }, + "priority" : 7 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x07" + } + ], + "action_entry" : { + "action_id" : 93, + "action_data" : [] + }, + "priority" : 8 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x08" + } + ], + "action_entry" : { + "action_id" : 94, + "action_data" : [] + }, + "priority" : 9 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x09" + } + ], + "action_entry" : { + "action_id" : 95, + "action_data" : [] + }, + "priority" : 10 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0a" + } + ], + "action_entry" : { + "action_id" : 96, + "action_data" : [] + }, + "priority" : 11 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0b" + } + ], + "action_entry" : { + "action_id" : 97, + "action_data" : [] + }, + "priority" : 12 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0c" + } + ], + "action_entry" : { + "action_id" : 98, + "action_data" : [] + }, + "priority" : 13 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0d" + } + ], + "action_entry" : { + "action_id" : 99, + "action_data" : [] + }, + "priority" : 14 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0e" + } + ], + "action_entry" : { + "action_id" : 100, + "action_data" : [] + }, + "priority" : 15 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0f" + } + ], + "action_entry" : { + "action_id" : 101, + "action_data" : [] + }, + "priority" : 16 + } + ] }, { - "name" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "id" : 58, + "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "id" : 60, "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 264, + "filename" : "include/int/int_transit.p4", + "line" : 328, "column" : 10, "source_fragment" : "tb_int_inst_0407" }, @@ -13576,86 +16162,250 @@ "match_type" : "exact", "type" : "simple", "max_size" : 16, - "with_counters" : true, + "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 78], - "actions" : ["FabricEgress.process_int_transit.int_set_header_0407_i0", "FabricEgress.process_int_transit.int_set_header_0407_i1", "FabricEgress.process_int_transit.int_set_header_0407_i2", "FabricEgress.process_int_transit.int_set_header_0407_i3", "FabricEgress.process_int_transit.int_set_header_0407_i4", "FabricEgress.process_int_transit.int_set_header_0407_i5", "FabricEgress.process_int_transit.int_set_header_0407_i6", "FabricEgress.process_int_transit.int_set_header_0407_i7", "FabricEgress.process_int_transit.int_set_header_0407_i8", "FabricEgress.process_int_transit.int_set_header_0407_i9", "FabricEgress.process_int_transit.int_set_header_0407_i10", "FabricEgress.process_int_transit.int_set_header_0407_i11", "FabricEgress.process_int_transit.int_set_header_0407_i12", "FabricEgress.process_int_transit.int_set_header_0407_i13", "FabricEgress.process_int_transit.int_set_header_0407_i14", "FabricEgress.process_int_transit.int_set_header_0407_i15", "NoAction"], - "base_default_next" : "tbl_process_int_transit_int_update_total_hop_cnt", + "action_ids" : [102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 77], + "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", "NoAction"], + "base_default_next" : "tbl_act_34", "next_tables" : { - "FabricEgress.process_int_transit.int_set_header_0407_i0" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i1" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i2" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i3" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i4" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i5" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i6" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i7" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i8" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i9" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i10" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i11" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i12" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i13" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i14" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i15" : "tbl_process_int_transit_int_update_total_hop_cnt", - "NoAction" : "tbl_process_int_transit_int_update_total_hop_cnt" + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14" : "tbl_act_34", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15" : "tbl_act_34", + "NoAction" : "tbl_act_34" }, "default_entry" : { - "action_id" : 78, + "action_id" : 77, "action_const" : false, "action_data" : [], "action_entry_const" : false - } - }, - { - "name" : "tbl_process_int_transit_int_update_total_hop_cnt", - "id" : 59, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [85], - "actions" : ["FabricEgress.process_int_transit.int_update_total_hop_cnt"], - "base_default_next" : "node_96", - "next_tables" : { - "FabricEgress.process_int_transit.int_update_total_hop_cnt" : "node_96" }, - "default_entry" : { - "action_id" : 85, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } + "entries" : [ + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 102, + "action_data" : [] + }, + "priority" : 1 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x01" + } + ], + "action_entry" : { + "action_id" : 103, + "action_data" : [] + }, + "priority" : 2 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x02" + } + ], + "action_entry" : { + "action_id" : 104, + "action_data" : [] + }, + "priority" : 3 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x03" + } + ], + "action_entry" : { + "action_id" : 105, + "action_data" : [] + }, + "priority" : 4 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x04" + } + ], + "action_entry" : { + "action_id" : 106, + "action_data" : [] + }, + "priority" : 5 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x05" + } + ], + "action_entry" : { + "action_id" : 107, + "action_data" : [] + }, + "priority" : 6 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x06" + } + ], + "action_entry" : { + "action_id" : 108, + "action_data" : [] + }, + "priority" : 7 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x07" + } + ], + "action_entry" : { + "action_id" : 109, + "action_data" : [] + }, + "priority" : 8 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x08" + } + ], + "action_entry" : { + "action_id" : 110, + "action_data" : [] + }, + "priority" : 9 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x09" + } + ], + "action_entry" : { + "action_id" : 111, + "action_data" : [] + }, + "priority" : 10 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0a" + } + ], + "action_entry" : { + "action_id" : 112, + "action_data" : [] + }, + "priority" : 11 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0b" + } + ], + "action_entry" : { + "action_id" : 113, + "action_data" : [] + }, + "priority" : 12 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0c" + } + ], + "action_entry" : { + "action_id" : 114, + "action_data" : [] + }, + "priority" : 13 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0d" + } + ], + "action_entry" : { + "action_id" : 115, + "action_data" : [] + }, + "priority" : 14 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0e" + } + ], + "action_entry" : { + "action_id" : 116, + "action_data" : [] + }, + "priority" : 15 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0f" + } + ], + "action_entry" : { + "action_id" : 117, + "action_data" : [] + }, + "priority" : 16 + } + ] }, { - "name" : "tbl_process_int_outer_encap_int_update_ipv4", - "id" : 60, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [119], - "actions" : ["FabricEgress.process_int_outer_encap.int_update_ipv4"], - "base_default_next" : "node_98", - "next_tables" : { - "FabricEgress.process_int_outer_encap.int_update_ipv4" : "node_98" - }, - "default_entry" : { - "action_id" : 119, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_process_int_outer_encap_int_update_udp", + "name" : "tbl_act_34", "id" : 61, "key" : [], "match_type" : "exact", @@ -13664,21 +16414,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [120], - "actions" : ["FabricEgress.process_int_outer_encap.int_update_udp"], + "action_ids" : [127], + "actions" : ["act_35"], "base_default_next" : "node_100", "next_tables" : { - "FabricEgress.process_int_outer_encap.int_update_udp" : "node_100" + "act_35" : "node_100" }, "default_entry" : { - "action_id" : 120, + "action_id" : 127, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_process_int_outer_encap_int_update_shim", + "name" : "tbl_act_35", "id" : 62, "key" : [], "match_type" : "exact", @@ -13687,25 +16437,71 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [121], - "actions" : ["FabricEgress.process_int_outer_encap.int_update_shim"], + "action_ids" : [126], + "actions" : ["act_34"], "base_default_next" : "node_102", "next_tables" : { - "FabricEgress.process_int_outer_encap.int_update_shim" : "node_102" + "act_34" : "node_102" }, "default_entry" : { - "action_id" : 121, + "action_id" : 126, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "FabricEgress.process_int_report.tb_generate_report", + "name" : "tbl_act_36", "id" : 63, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [128], + "actions" : ["act_36"], + "base_default_next" : "node_104", + "next_tables" : { + "act_36" : "node_104" + }, + "default_entry" : { + "action_id" : 128, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_37", + "id" : 64, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [129], + "actions" : ["act_37"], + "base_default_next" : "node_106", + "next_tables" : { + "act_37" : "node_106" + }, + "default_entry" : { + "action_id" : 129, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.process_int_main.process_int_report.tb_generate_report", + "id" : 65, "source_info" : { - "filename" : "include/int_report.p4", - "line" : 87, + "filename" : "include/int/int_report.p4", + "line" : 85, "column" : 10, "source_fragment" : "tb_generate_report" }, @@ -13716,23 +16512,23 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [122, 79], - "actions" : ["FabricEgress.process_int_report.do_report_encapsulation", "NoAction"], - "base_default_next" : "node_104", + "action_ids" : [118, 78], + "actions" : ["FabricEgress.process_int_main.process_int_report.do_report_encapsulation", "NoAction"], + "base_default_next" : "node_108", "next_tables" : { - "FabricEgress.process_int_report.do_report_encapsulation" : "node_104", - "NoAction" : "node_104" + "FabricEgress.process_int_main.process_int_report.do_report_encapsulation" : "node_108", + "NoAction" : "node_108" }, "default_entry" : { - "action_id" : 79, + "action_id" : 78, "action_const" : false, "action_data" : [], "action_entry_const" : false } }, { - "name" : "tbl_process_int_sink_restore_header", - "id" : 64, + "name" : "tbl_process_int_main_process_int_sink_restore_header", + "id" : 66, "key" : [], "match_type" : "exact", "type" : "simple", @@ -13740,22 +16536,22 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [123], - "actions" : ["FabricEgress.process_int_sink.restore_header"], - "base_default_next" : "tbl_process_int_sink_int_sink", + "action_ids" : [119], + "actions" : ["FabricEgress.process_int_main.process_int_sink.restore_header"], + "base_default_next" : "tbl_process_int_main_process_int_sink_int_sink", "next_tables" : { - "FabricEgress.process_int_sink.restore_header" : "tbl_process_int_sink_int_sink" + "FabricEgress.process_int_main.process_int_sink.restore_header" : "tbl_process_int_main_process_int_sink_int_sink" }, "default_entry" : { - "action_id" : 123, + "action_id" : 119, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_process_int_sink_int_sink", - "id" : 65, + "name" : "tbl_process_int_main_process_int_sink_int_sink", + "id" : 67, "key" : [], "match_type" : "exact", "type" : "simple", @@ -13763,14 +16559,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [124], - "actions" : ["FabricEgress.process_int_sink.int_sink"], + "action_ids" : [120], + "actions" : ["FabricEgress.process_int_main.process_int_sink.int_sink"], "base_default_next" : null, "next_tables" : { - "FabricEgress.process_int_sink.int_sink" : null + "FabricEgress.process_int_main.process_int_sink.int_sink" : null }, "default_entry" : { - "action_id" : 124, + "action_id" : 120, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -13784,7 +16580,7 @@ "id" : 23, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 43, + "line" : 44, "column" : 12, "source_fragment" : "fabric_metadata.is_controller_packet_out == true" }, @@ -13817,7 +16613,7 @@ "id" : 24, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 47, + "line" : 48, "column" : 12, "source_fragment" : "standard_metadata.egress_port == 255" }, @@ -13843,7 +16639,7 @@ "id" : 25, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 48, + "line" : 49, "column" : 16, "source_fragment" : "hdr.vlan_tag.isValid() && fabric_metadata.pop_vlan_when_packet_in == true" }, @@ -13893,7 +16689,7 @@ "id" : 26, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 51, + "line" : 52, "column" : 16, "source_fragment" : "fabric_metadata.is_multicast == true && ..." }, @@ -14031,8 +16827,8 @@ "name" : "node_88", "id" : 29, "source_info" : { - "filename" : "fabric.p4", - "line" : 94, + "filename" : "include/int/int_main.p4", + "line" : 98, "column" : 12, "source_fragment" : "standard_metadata.ingress_port != 255 && ..." }, @@ -14111,34 +16907,41 @@ "name" : "node_89", "id" : 30, "source_info" : { - "filename" : "fabric.p4", - "line" : 97, + "filename" : "include/int/int_main.p4", + "line" : 102, "column" : 16, - "source_fragment" : "fabric_metadata.int_meta.source == 1" + "source_fragment" : "fabric_metadata.int_meta.source == true" }, "expression" : { "type" : "expression", "value" : { "op" : "==", "left" : { - "type" : "field", - "value" : ["userMetadata.int_meta", "source"] + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "source"] + } + } }, "right" : { - "type" : "hexstr", - "value" : "0x01" + "type" : "bool", + "value" : true } } }, - "true_next" : "FabricEgress.process_int_source.tb_int_source", + "true_next" : "FabricEgress.process_int_main.process_int_source.tb_int_source", "false_next" : "node_91" }, { "name" : "node_91", "id" : 31, "source_info" : { - "filename" : "fabric.p4", - "line" : 100, + "filename" : "include/int/int_main.p4", + "line" : 106, "column" : 15, "source_fragment" : "hdr.int_header.isValid()" }, @@ -14154,14 +16957,71 @@ } }, "false_next" : null, - "true_next" : "FabricEgress.process_int_transit.tb_int_insert" + "true_next" : "tbl_act_32" + }, + { + "name" : "node_94", + "id" : 32, + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 373, + "column" : 12, + "source_fragment" : "fmeta.int_meta.transit == false" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "transit"] + } + } + }, + "right" : { + "type" : "bool", + "value" : false + } + } + }, + "true_next" : "tbl_act_33", + "false_next" : "node_96" }, { "name" : "node_96", - "id" : 32, + "id" : 33, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "process_int_main_process_int_transit_hasReturned_0"] + } + } + } + } + }, + "true_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003", + "false_next" : "node_106" + }, + { + "name" : "node_100", + "id" : 34, "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 314, + "filename" : "include/int/int_transit.p4", + "line" : 381, "column" : 12, "source_fragment" : "hdr.ipv4.isValid()" }, @@ -14176,15 +17036,15 @@ } } }, - "true_next" : "tbl_process_int_outer_encap_int_update_ipv4", - "false_next" : "node_98" + "true_next" : "tbl_act_35", + "false_next" : "node_102" }, { - "name" : "node_98", - "id" : 33, + "name" : "node_102", + "id" : 35, "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 317, + "filename" : "include/int/int_transit.p4", + "line" : 384, "column" : 12, "source_fragment" : "hdr.udp.isValid()" }, @@ -14199,15 +17059,15 @@ } } }, - "true_next" : "tbl_process_int_outer_encap_int_update_udp", - "false_next" : "node_100" + "true_next" : "tbl_act_36", + "false_next" : "node_104" }, { - "name" : "node_100", - "id" : 34, + "name" : "node_104", + "id" : 36, "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 320, + "filename" : "include/int/int_transit.p4", + "line" : 387, "column" : 12, "source_fragment" : "hdr.intl4_shim.isValid()" }, @@ -14222,15 +17082,15 @@ } } }, - "true_next" : "tbl_process_int_outer_encap_int_update_shim", - "false_next" : "node_102" + "true_next" : "tbl_act_37", + "false_next" : "node_106" }, { - "name" : "node_102", - "id" : 35, + "name" : "node_106", + "id" : 37, "source_info" : { - "filename" : "fabric.p4", - "line" : 104, + "filename" : "include/int/int_main.p4", + "line" : 111, "column" : 20, "source_fragment" : "standard_metadata.instance_type == 1" }, @@ -14248,34 +17108,41 @@ } } }, - "true_next" : "FabricEgress.process_int_report.tb_generate_report", - "false_next" : "node_104" + "true_next" : "FabricEgress.process_int_main.process_int_report.tb_generate_report", + "false_next" : "node_108" }, { - "name" : "node_104", - "id" : 36, + "name" : "node_108", + "id" : 38, "source_info" : { - "filename" : "fabric.p4", - "line" : 108, + "filename" : "include/int/int_main.p4", + "line" : 115, "column" : 20, - "source_fragment" : "fabric_metadata.int_meta.sink == 1" + "source_fragment" : "fabric_metadata.int_meta.sink == true" }, "expression" : { "type" : "expression", "value" : { "op" : "==", "left" : { - "type" : "field", - "value" : ["userMetadata.int_meta", "sink"] + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "sink"] + } + } }, "right" : { - "type" : "hexstr", - "value" : "0x01" + "type" : "bool", + "value" : true } } }, "false_next" : null, - "true_next" : "tbl_process_int_sink_restore_header" + "true_next" : "tbl_process_int_main_process_int_sink_restore_header" } ] } diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/cpu_port.txt b/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/cpu_port.txt new file mode 100644 index 0000000000..ace9d03621 --- /dev/null +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/cpu_port.txt @@ -0,0 +1 @@ +255 diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt b/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt index e9551596f4..943fb1c173 100644 --- a/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-full/bmv2/default/p4info.txt @@ -59,7 +59,7 @@ tables { annotations: "@defaultonly()" } direct_resource_ids: 318787614 - size: 256 + size: 511 idle_timeout_behavior: NO_TIMEOUT } tables { @@ -82,7 +82,7 @@ tables { annotations: "@defaultonly()" } direct_resource_ids: 318770551 - size: 256 + size: 511 idle_timeout_behavior: NO_TIMEOUT } tables { @@ -473,8 +473,8 @@ tables { } tables { preamble { - id: 33566961 - name: "FabricEgress.process_int_source.tb_int_source" + id: 33612258 + name: "FabricEgress.process_int_main.process_int_source.tb_int_source" alias: "tb_int_source" } match_fields { @@ -502,37 +502,43 @@ tables { match_type: TERNARY } action_refs { - id: 16807851 + id: 16785857 } action_refs { id: 16800567 annotations: "@defaultonly()" } - direct_resource_ids: 318776637 + direct_resource_ids: 318800047 size: 1024 idle_timeout_behavior: NO_TIMEOUT } tables { preamble { - id: 33602084 - name: "FabricEgress.process_int_transit.tb_int_insert" + id: 33599867 + name: "FabricEgress.process_int_main.process_int_transit.tb_int_insert" alias: "tb_int_insert" } - action_refs { - id: 16806530 + match_fields { + id: 1 + name: "hdr.int_header.is_valid" + bitwidth: 1 + match_type: EXACT } action_refs { - id: 16800567 + id: 16780783 + } + action_refs { + id: 16819938 annotations: "@defaultonly()" } - direct_resource_ids: 318794595 - size: 2 + const_default_action_id: 16819938 + size: 1 idle_timeout_behavior: NO_TIMEOUT } tables { preamble { - id: 33561642 - name: "FabricEgress.process_int_transit.tb_int_inst_0003" + id: 33569467 + name: "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003" alias: "tb_int_inst_0003" } match_fields { @@ -542,65 +548,65 @@ tables { match_type: EXACT } action_refs { - id: 16788439 + id: 16809886 } action_refs { - id: 16792702 + id: 16783130 } action_refs { - id: 16834796 + id: 16809096 } action_refs { - id: 16815381 + id: 16834117 } action_refs { - id: 16824457 + id: 16825314 } action_refs { - id: 16796364 + id: 16811436 } action_refs { - id: 16806322 + id: 16802199 } action_refs { - id: 16819063 + id: 16796779 } action_refs { - id: 16828306 + id: 16787676 } action_refs { - id: 16799786 + id: 16825351 } action_refs { - id: 16796975 + id: 16793999 } action_refs { - id: 16801652 + id: 16786714 } action_refs { - id: 16778440 + id: 16814203 } action_refs { - id: 16790887 + id: 16807054 } action_refs { - id: 16783849 + id: 16800064 } action_refs { - id: 16837726 + id: 16792997 } action_refs { id: 16800567 annotations: "@defaultonly()" } - direct_resource_ids: 318777781 size: 16 idle_timeout_behavior: NO_TIMEOUT + is_const_table: true } tables { preamble { - id: 33571998 - name: "FabricEgress.process_int_transit.tb_int_inst_0407" + id: 33595914 + name: "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407" alias: "tb_int_inst_0407" } match_fields { @@ -610,69 +616,69 @@ tables { match_type: EXACT } action_refs { - id: 16839298 + id: 16819022 } action_refs { - id: 16837018 + id: 16804144 } action_refs { - id: 16827414 + id: 16829117 } action_refs { - id: 16786021 + id: 16797781 } action_refs { - id: 16785131 + id: 16813543 } action_refs { - id: 16808652 + id: 16824974 } action_refs { - id: 16799296 + id: 16815362 } action_refs { - id: 16780668 + id: 16835399 } action_refs { - id: 16805625 + id: 16834505 } action_refs { - id: 16778495 + id: 16811493 } action_refs { - id: 16784981 + id: 16825476 } action_refs { - id: 16806353 + id: 16799777 } action_refs { - id: 16802140 + id: 16829592 } action_refs { - id: 16827601 + id: 16805877 } action_refs { - id: 16820295 + id: 16780182 } action_refs { - id: 16810955 + id: 16799476 } action_refs { id: 16800567 annotations: "@defaultonly()" } - direct_resource_ids: 318818305 size: 16 idle_timeout_behavior: NO_TIMEOUT + is_const_table: true } tables { preamble { - id: 33607792 - name: "FabricEgress.process_int_report.tb_generate_report" + id: 33618104 + name: "FabricEgress.process_int_main.process_int_report.tb_generate_report" alias: "tb_generate_report" } action_refs { - id: 16814383 + id: 16788620 } action_refs { id: 16800567 @@ -1160,8 +1166,8 @@ actions { } actions { preamble { - id: 16807851 - name: "FabricEgress.process_int_source.int_source_dscp" + id: 16785857 + name: "FabricEgress.process_int_main.process_int_source.int_source_dscp" alias: "int_source_dscp" } params { @@ -1187,16 +1193,9 @@ actions { } actions { preamble { - id: 16806280 - name: "FabricEgress.process_int_transit.int_update_total_hop_cnt" - alias: "int_update_total_hop_cnt" - } -} -actions { - preamble { - id: 16806530 - name: "FabricEgress.process_int_transit.int_transit" - alias: "int_transit" + id: 16780783 + name: "FabricEgress.process_int_main.process_int_transit.init_metadata" + alias: "init_metadata" } params { id: 1 @@ -1206,253 +1205,232 @@ actions { } actions { preamble { - id: 16788439 - name: "FabricEgress.process_int_transit.int_set_header_0003_i0" + id: 16809886 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0" alias: "int_set_header_0003_i0" } } actions { preamble { - id: 16792702 - name: "FabricEgress.process_int_transit.int_set_header_0003_i1" + id: 16783130 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1" alias: "int_set_header_0003_i1" } } actions { preamble { - id: 16834796 - name: "FabricEgress.process_int_transit.int_set_header_0003_i2" + id: 16809096 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2" alias: "int_set_header_0003_i2" } } actions { preamble { - id: 16815381 - name: "FabricEgress.process_int_transit.int_set_header_0003_i3" + id: 16834117 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3" alias: "int_set_header_0003_i3" } } actions { preamble { - id: 16824457 - name: "FabricEgress.process_int_transit.int_set_header_0003_i4" + id: 16825314 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4" alias: "int_set_header_0003_i4" } } actions { preamble { - id: 16796364 - name: "FabricEgress.process_int_transit.int_set_header_0003_i5" + id: 16811436 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5" alias: "int_set_header_0003_i5" } } actions { preamble { - id: 16806322 - name: "FabricEgress.process_int_transit.int_set_header_0003_i6" + id: 16802199 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6" alias: "int_set_header_0003_i6" } } actions { preamble { - id: 16819063 - name: "FabricEgress.process_int_transit.int_set_header_0003_i7" + id: 16796779 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7" alias: "int_set_header_0003_i7" } } actions { preamble { - id: 16828306 - name: "FabricEgress.process_int_transit.int_set_header_0003_i8" + id: 16787676 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8" alias: "int_set_header_0003_i8" } } actions { preamble { - id: 16799786 - name: "FabricEgress.process_int_transit.int_set_header_0003_i9" + id: 16825351 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9" alias: "int_set_header_0003_i9" } } actions { preamble { - id: 16796975 - name: "FabricEgress.process_int_transit.int_set_header_0003_i10" + id: 16793999 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10" alias: "int_set_header_0003_i10" } } actions { preamble { - id: 16801652 - name: "FabricEgress.process_int_transit.int_set_header_0003_i11" + id: 16786714 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11" alias: "int_set_header_0003_i11" } } actions { preamble { - id: 16778440 - name: "FabricEgress.process_int_transit.int_set_header_0003_i12" + id: 16814203 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12" alias: "int_set_header_0003_i12" } } actions { preamble { - id: 16790887 - name: "FabricEgress.process_int_transit.int_set_header_0003_i13" + id: 16807054 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13" alias: "int_set_header_0003_i13" } } actions { preamble { - id: 16783849 - name: "FabricEgress.process_int_transit.int_set_header_0003_i14" + id: 16800064 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14" alias: "int_set_header_0003_i14" } } actions { preamble { - id: 16837726 - name: "FabricEgress.process_int_transit.int_set_header_0003_i15" + id: 16792997 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15" alias: "int_set_header_0003_i15" } } actions { preamble { - id: 16839298 - name: "FabricEgress.process_int_transit.int_set_header_0407_i0" + id: 16819022 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0" alias: "int_set_header_0407_i0" } } actions { preamble { - id: 16837018 - name: "FabricEgress.process_int_transit.int_set_header_0407_i1" + id: 16804144 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1" alias: "int_set_header_0407_i1" } } actions { preamble { - id: 16827414 - name: "FabricEgress.process_int_transit.int_set_header_0407_i2" + id: 16829117 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2" alias: "int_set_header_0407_i2" } } actions { preamble { - id: 16786021 - name: "FabricEgress.process_int_transit.int_set_header_0407_i3" + id: 16797781 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3" alias: "int_set_header_0407_i3" } } actions { preamble { - id: 16785131 - name: "FabricEgress.process_int_transit.int_set_header_0407_i4" + id: 16813543 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4" alias: "int_set_header_0407_i4" } } actions { preamble { - id: 16808652 - name: "FabricEgress.process_int_transit.int_set_header_0407_i5" + id: 16824974 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5" alias: "int_set_header_0407_i5" } } actions { preamble { - id: 16799296 - name: "FabricEgress.process_int_transit.int_set_header_0407_i6" + id: 16815362 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6" alias: "int_set_header_0407_i6" } } actions { preamble { - id: 16780668 - name: "FabricEgress.process_int_transit.int_set_header_0407_i7" + id: 16835399 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7" alias: "int_set_header_0407_i7" } } actions { preamble { - id: 16805625 - name: "FabricEgress.process_int_transit.int_set_header_0407_i8" + id: 16834505 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8" alias: "int_set_header_0407_i8" } } actions { preamble { - id: 16778495 - name: "FabricEgress.process_int_transit.int_set_header_0407_i9" + id: 16811493 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9" alias: "int_set_header_0407_i9" } } actions { preamble { - id: 16784981 - name: "FabricEgress.process_int_transit.int_set_header_0407_i10" + id: 16825476 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10" alias: "int_set_header_0407_i10" } } actions { preamble { - id: 16806353 - name: "FabricEgress.process_int_transit.int_set_header_0407_i11" + id: 16799777 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11" alias: "int_set_header_0407_i11" } } actions { preamble { - id: 16802140 - name: "FabricEgress.process_int_transit.int_set_header_0407_i12" + id: 16829592 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12" alias: "int_set_header_0407_i12" } } actions { preamble { - id: 16827601 - name: "FabricEgress.process_int_transit.int_set_header_0407_i13" + id: 16805877 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13" alias: "int_set_header_0407_i13" } } actions { preamble { - id: 16820295 - name: "FabricEgress.process_int_transit.int_set_header_0407_i14" + id: 16780182 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14" alias: "int_set_header_0407_i14" } } actions { preamble { - id: 16810955 - name: "FabricEgress.process_int_transit.int_set_header_0407_i15" + id: 16799476 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15" alias: "int_set_header_0407_i15" } } actions { preamble { - id: 16816602 - name: "FabricEgress.process_int_outer_encap.int_update_ipv4" - alias: "int_update_ipv4" - } -} -actions { - preamble { - id: 16829666 - name: "FabricEgress.process_int_outer_encap.int_update_udp" - alias: "int_update_udp" - } -} -actions { - preamble { - id: 16826978 - name: "FabricEgress.process_int_outer_encap.int_update_shim" - alias: "int_update_shim" - } -} -actions { - preamble { - id: 16814383 - name: "FabricEgress.process_int_report.do_report_encapsulation" + id: 16788620 + name: "FabricEgress.process_int_main.process_int_report.do_report_encapsulation" alias: "do_report_encapsulation" } params { @@ -1483,15 +1461,15 @@ actions { } actions { preamble { - id: 16810741 - name: "FabricEgress.process_int_sink.restore_header" + id: 16816369 + name: "FabricEgress.process_int_main.process_int_sink.restore_header" alias: "restore_header" } } actions { preamble { - id: 16787662 - name: "FabricEgress.process_int_sink.int_sink" + id: 16834566 + name: "FabricEgress.process_int_main.process_int_sink.int_sink" alias: "int_sink" } } @@ -1697,47 +1675,14 @@ direct_counters { } direct_counters { preamble { - id: 318776637 - name: "FabricEgress.process_int_source.counter_int_source" + id: 318800047 + name: "FabricEgress.process_int_main.process_int_source.counter_int_source" alias: "counter_int_source" } spec { unit: BOTH } - direct_table_id: 33566961 -} -direct_counters { - preamble { - id: 318794595 - name: "FabricEgress.process_int_transit.counter_int_insert" - alias: "counter_int_insert" - } - spec { - unit: BOTH - } - direct_table_id: 33602084 -} -direct_counters { - preamble { - id: 318777781 - name: "FabricEgress.process_int_transit.counter_int_inst_0003" - alias: "counter_int_inst_0003" - } - spec { - unit: BOTH - } - direct_table_id: 33561642 -} -direct_counters { - preamble { - id: 318818305 - name: "FabricEgress.process_int_transit.counter_int_inst_0407" - alias: "counter_int_inst_0407" - } - spec { - unit: BOTH - } - direct_table_id: 33571998 + direct_table_id: 33612258 } direct_counters { preamble { diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json index 7e96c8b6a3..293212f5ae 100644 --- a/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/bmv2.json @@ -4,17 +4,16 @@ "name" : "scalars_0", "id" : 0, "fields" : [ + ["last_ipv4_dscp", 6, false], ["tmp", 4, false], - ["tmp_0", 1, false], - ["tmp_1", 1, false], - ["tmp_2", 32, false], - ["tmp_3", 32, false], - ["tmp_4", 32, false], + ["tmp_0", 32, false], + ["tmp_1", 32, false], ["filtering_tmp_0", 1, false], ["next_tmp_2", 1, false], ["next_tmp_3", 1, false], ["next_tmp_4", 1, false], ["next_hasReturned_0", 1, false], + ["process_int_main_process_int_transit_hasReturned_0", 1, false], ["fabric_metadata_t.fwd_type", 3, false], ["fabric_metadata_t.next_id", 32, false], ["fabric_metadata_t.pop_vlan_when_packet_in", 1, false], @@ -24,8 +23,7 @@ ["fabric_metadata_t.ip_proto", 8, false], ["fabric_metadata_t.l4_src_port", 16, false], ["fabric_metadata_t.l4_dst_port", 16, false], - ["fabric_metadata_t.compute_checksum", 1, false], - ["_padding_1", 5, false] + ["_padding_1", 1, false] ] }, { @@ -169,58 +167,19 @@ ["_pad", 7, false] ] }, - { - "name" : "report_fixed_header_t", - "id" : 12, - "fields" : [ - ["ver", 4, false], - ["nproto", 4, false], - ["d", 1, false], - ["q", 1, false], - ["f", 1, false], - ["rsvd", 15, false], - ["hw_id", 6, false], - ["seq_no", 32, false], - ["ingress_tstamp", 32, false] - ] - }, - { - "name" : "drop_report_header_t", - "id" : 13, - "fields" : [ - ["switch_id", 32, false], - ["ingress_port_id", 16, false], - ["egress_port_id", 16, false], - ["queue_id", 8, false], - ["drop_reason", 8, false], - ["pad", 16, false] - ] - }, - { - "name" : "local_report_header_t", - "id" : 14, - "fields" : [ - ["switch_id", 32, false], - ["ingress_port_id", 16, false], - ["egress_port_id", 16, false], - ["queue_id", 8, false], - ["queue_occupancy", 24, false], - ["egress_tstamp", 32, false] - ] - }, { "name" : "intl4_shim_t", - "id" : 15, + "id" : 12, "fields" : [ ["int_type", 8, false], ["rsvd1", 8, false], - ["len", 8, false], + ["len_words", 8, false], ["rsvd2", 8, false] ] }, { "name" : "int_header_t", - "id" : 16, + "id" : 13, "fields" : [ ["ver", 2, false], ["rep", 2, false], @@ -237,24 +196,16 @@ ["rsvd2", 16, false] ] }, - { - "name" : "int_data_t", - "id" : 17, - "fields" : [ - ["data", "*"] - ], - "max_length" : 1004 - }, { "name" : "int_switch_id_t", - "id" : 18, + "id" : 14, "fields" : [ ["switch_id", 32, false] ] }, { "name" : "int_port_ids_t", - "id" : 19, + "id" : 15, "fields" : [ ["ingress_port_id", 16, false], ["egress_port_id", 16, false] @@ -262,14 +213,14 @@ }, { "name" : "int_hop_latency_t", - "id" : 20, + "id" : 16, "fields" : [ ["hop_latency", 32, false] ] }, { "name" : "int_q_occupancy_t", - "id" : 21, + "id" : 17, "fields" : [ ["q_id", 8, false], ["q_occupancy", 24, false] @@ -277,21 +228,21 @@ }, { "name" : "int_ingress_tstamp_t", - "id" : 22, + "id" : 18, "fields" : [ ["ingress_tstamp", 32, false] ] }, { "name" : "int_egress_tstamp_t", - "id" : 23, + "id" : 19, "fields" : [ ["egress_tstamp", 32, false] ] }, { "name" : "int_q_congestion_t", - "id" : 24, + "id" : 20, "fields" : [ ["q_id", 8, false], ["q_congestion", 24, false] @@ -299,32 +250,40 @@ }, { "name" : "int_egress_port_tx_util_t", - "id" : 25, + "id" : 21, "fields" : [ ["egress_port_tx_util", 32, false] ] }, + { + "name" : "int_data_t", + "id" : 22, + "fields" : [ + ["data", "*"] + ], + "max_length" : 1004 + }, { "name" : "intl4_tail_t", - "id" : 26, + "id" : 23, "fields" : [ ["next_proto", 8, false], ["dest_port", 16, false], - ["dscp", 8, false] + ["padding", 2, false], + ["dscp", 6, false] ] }, { "name" : "int_metadata_t", - "id" : 27, + "id" : 24, "fields" : [ + ["source", 1, 0], + ["transit", 1, 0], + ["sink", 1, 0], ["switch_id", 32, false], - ["insert_byte_cnt", 16, false], - ["source", 1, false], - ["sink", 1, false], - ["mirror_id", 8, false], - ["flow_id", 16, false], - ["metadata_len", 8, false], - ["_padding_0", 6, false] + ["new_words", 8, false], + ["new_bytes", 16, false], + ["_padding_0", 5, false] ] } ], @@ -413,168 +372,103 @@ "metadata" : false, "pi_omit" : true }, - { - "name" : "report_ethernet", - "id" : 12, - "header_type" : "ethernet_t", - "metadata" : false, - "pi_omit" : true - }, - { - "name" : "report_ipv4", - "id" : 13, - "header_type" : "ipv4_t", - "metadata" : false, - "pi_omit" : true - }, - { - "name" : "report_udp", - "id" : 14, - "header_type" : "udp_t", - "metadata" : false, - "pi_omit" : true - }, - { - "name" : "report_fixed_header", - "id" : 15, - "header_type" : "report_fixed_header_t", - "metadata" : false, - "pi_omit" : true - }, - { - "name" : "report_local.drop_report_header", - "id" : 16, - "header_type" : "drop_report_header_t", - "metadata" : false, - "pi_omit" : true - }, - { - "name" : "report_local.local_report_header", - "id" : 17, - "header_type" : "local_report_header_t", - "metadata" : false, - "pi_omit" : true - }, { "name" : "intl4_shim", - "id" : 18, + "id" : 12, "header_type" : "intl4_shim_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_header", - "id" : 19, + "id" : 13, "header_type" : "int_header_t", "metadata" : false, "pi_omit" : true }, - { - "name" : "int_data", - "id" : 20, - "header_type" : "int_data_t", - "metadata" : false, - "pi_omit" : true - }, { "name" : "int_switch_id", - "id" : 21, + "id" : 14, "header_type" : "int_switch_id_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_port_ids", - "id" : 22, + "id" : 15, "header_type" : "int_port_ids_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_hop_latency", - "id" : 23, + "id" : 16, "header_type" : "int_hop_latency_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_q_occupancy", - "id" : 24, + "id" : 17, "header_type" : "int_q_occupancy_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_ingress_tstamp", - "id" : 25, + "id" : 18, "header_type" : "int_ingress_tstamp_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_egress_tstamp", - "id" : 26, + "id" : 19, "header_type" : "int_egress_tstamp_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_q_congestion", - "id" : 27, + "id" : 20, "header_type" : "int_q_congestion_t", "metadata" : false, "pi_omit" : true }, { "name" : "int_egress_tx_util", - "id" : 28, + "id" : 21, "header_type" : "int_egress_port_tx_util_t", "metadata" : false, "pi_omit" : true }, + { + "name" : "int_data", + "id" : 22, + "header_type" : "int_data_t", + "metadata" : false, + "pi_omit" : true + }, { "name" : "intl4_tail", - "id" : 29, + "id" : 23, "header_type" : "intl4_tail_t", "metadata" : false, "pi_omit" : true }, { "name" : "userMetadata.int_meta", - "id" : 30, + "id" : 24, "header_type" : "int_metadata_t", "metadata" : true, "pi_omit" : true } ], "header_stacks" : [], - "header_union_types" : [ - { - "name" : "local_report_t", - "id" : 0, - "headers" : [ - ["drop_report_header", "drop_report_header_t"], - ["local_report_header", "local_report_header_t"] - ] - } - ], - "header_unions" : [ - { - "name" : "report_local", - "id" : 0, - "union_type" : "local_report_t", - "header_ids" : [16, 17], - "pi_omit" : true - } - ], + "header_union_types" : [], + "header_unions" : [], "header_union_stacks" : [], - "field_lists" : [ - { - "id" : 1, - "name" : "fl", - "elements" : [] - } - ], + "field_lists" : [], "errors" : [], "enums" : [], "parsers" : [ @@ -800,6 +694,19 @@ } ], "op" : "set" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "last_ipv4_dscp"] + }, + { + "type" : "field", + "value" : ["ipv4", "dscp"] + } + ], + "op" : "set" } ], "transitions" : [ @@ -895,94 +802,16 @@ } ], "op" : "set" - }, - { - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "tmp_0"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "?", - "left" : { - "type" : "hexstr", - "value" : "0x01" - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - }, - "cond" : { - "type" : "expression", - "value" : { - "op" : "and", - "left" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["ipv4", "$valid$"] - } - } - }, - "right" : { - "type" : "expression", - "value" : { - "op" : "==", - "left" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["ipv4", "dscp"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - } - } - } - } - } - } - ], - "op" : "set" } ], "transitions" : [ - { - "type" : "hexstr", - "value" : "0x01", - "mask" : null, - "next_state" : "parse_intl4_shim" - }, { "value" : "default", "mask" : null, - "next_state" : null + "next_state" : "parse_int" } ], - "transition_key" : [ - { - "type" : "field", - "value" : ["scalars", "tmp_0"] - } - ] + "transition_key" : [] }, { "name" : "parse_udp", @@ -1022,92 +851,19 @@ } ], "op" : "set" - }, - { - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "tmp_1"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "?", - "left" : { - "type" : "hexstr", - "value" : "0x01" - }, - "right" : { - "type" : "hexstr", - "value" : "0x00" - }, - "cond" : { - "type" : "expression", - "value" : { - "op" : "and", - "left" : { - "type" : "expression", - "value" : { - "op" : "d2b", - "left" : null, - "right" : { - "type" : "field", - "value" : ["ipv4", "$valid$"] - } - } - }, - "right" : { - "type" : "expression", - "value" : { - "op" : "==", - "left" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["ipv4", "dscp"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - } - } - } - } - } - } - ], - "op" : "set" } ], "transitions" : [ - { - "type" : "hexstr", - "value" : "0x01", - "mask" : null, - "next_state" : "parse_intl4_shim" - }, { "value" : "default", "mask" : null, - "next_state" : null + "next_state" : "parse_int" } ], "transition_key" : [ { "type" : "field", - "value" : ["scalars", "tmp_1"] + "value" : ["udp", "dst_port"] } ] }, @@ -1135,8 +891,32 @@ "transition_key" : [] }, { - "name" : "parse_intl4_shim", + "name" : "parse_int", "id" : 10, + "parser_ops" : [], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x01", + "mask" : "0x01", + "next_state" : "parse_intl4_shim" + }, + { + "value" : "default", + "mask" : null, + "next_state" : null + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["scalars", "last_ipv4_dscp"] + } + ] + }, + { + "name" : "parse_intl4_shim", + "id" : 11, "parser_ops" : [ { "parameters" : [ @@ -1155,48 +935,12 @@ } ], "op" : "extract" - }, - { - "parameters" : [ - { - "type" : "field", - "value" : ["userMetadata.int_meta", "metadata_len"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["intl4_shim", "len"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xfc" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } - } - ], - "op" : "set" } ], "transitions" : [ { "type" : "hexstr", - "value" : "0x00", + "value" : "0x04", "mask" : null, "next_state" : "parse_intl4_tail" }, @@ -1209,109 +953,26 @@ "transition_key" : [ { "type" : "field", - "value" : ["userMetadata.int_meta", "metadata_len"] + "value" : ["intl4_shim", "len_words"] } ] }, { "name" : "parse_int_data", - "id" : 11, - "parser_ops" : [ - { - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "tmp_2"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "<<", - "left" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["intl4_shim", "len"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xfc" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0x5" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "op" : "set" - }, - { - "parameters" : [ - { - "type" : "regular", - "value" : "int_data" - }, - { - "type" : "expression", - "value" : { - "type" : "field", - "value" : ["scalars", "tmp_2"] - } - } - ], - "op" : "extract_VL" - } - ], + "id" : 12, + "parser_ops" : [], "transitions" : [ { "value" : "default", "mask" : null, - "next_state" : "parse_intl4_tail" + "next_state" : null } ], "transition_key" : [] }, { "name" : "parse_intl4_tail", - "id" : 12, + "id" : 13, "parser_ops" : [ { "parameters" : [ @@ -1342,11 +1003,11 @@ "id" : 0, "source_info" : { "filename" : "include/parser.p4", - "line" : 223, + "line" : 228, "column" : 8, "source_fragment" : "FabricDeparser" }, - "order" : ["packet_in", "report_ethernet", "report_ipv4", "report_udp", "report_fixed_header", "ethernet", "vlan_tag", "mpls", "arp", "ipv4", "tcp", "udp", "icmp", "intl4_shim", "int_header", "int_switch_id", "int_port_ids", "int_hop_latency", "int_q_occupancy", "int_ingress_tstamp", "int_egress_tstamp", "int_q_congestion", "int_egress_tx_util", "int_data", "intl4_tail"] + "order" : ["packet_in", "ethernet", "vlan_tag", "mpls", "arp", "ipv4", "tcp", "udp", "icmp", "intl4_shim", "int_header", "int_switch_id", "int_port_ids", "int_hop_latency", "int_q_occupancy", "int_ingress_tstamp", "int_egress_tstamp", "int_q_congestion", "int_egress_tx_util", "int_data", "intl4_tail"] } ], "meter_arrays" : [], @@ -1357,75 +1018,69 @@ "is_direct" : true, "binding" : "FabricIngress.process_set_source_sink.tb_set_source" }, - { - "name" : "FabricIngress.process_set_source_sink.counter_set_sink", - "id" : 1, - "is_direct" : true, - "binding" : "FabricIngress.process_set_source_sink.tb_set_sink" - }, { "name" : "FabricIngress.filtering.ingress_port_vlan_counter", - "id" : 2, + "id" : 1, "is_direct" : true, "binding" : "FabricIngress.filtering.ingress_port_vlan" }, { "name" : "FabricIngress.filtering.fwd_classifier_counter", - "id" : 3, + "id" : 2, "is_direct" : true, "binding" : "FabricIngress.filtering.fwd_classifier" }, { "name" : "FabricIngress.forwarding.bridging_counter", - "id" : 4, + "id" : 3, "is_direct" : true, "binding" : "FabricIngress.forwarding.bridging" }, { "name" : "FabricIngress.forwarding.mpls_counter", - "id" : 5, + "id" : 4, "is_direct" : true, "binding" : "FabricIngress.forwarding.mpls" }, { "name" : "FabricIngress.forwarding.routing_v4_counter", - "id" : 6, + "id" : 5, "is_direct" : true, "binding" : "FabricIngress.forwarding.routing_v4" }, { "name" : "FabricIngress.forwarding.acl_counter", - "id" : 7, + "id" : 6, "is_direct" : true, "binding" : "FabricIngress.forwarding.acl" }, { "name" : "FabricIngress.next.vlan_meta_counter", - "id" : 8, + "id" : 7, "is_direct" : true, "binding" : "FabricIngress.next.vlan_meta" }, { "name" : "FabricIngress.next.simple_counter", - "id" : 9, + "id" : 8, "is_direct" : true, "binding" : "FabricIngress.next.simple" }, { "name" : "FabricIngress.next.hashed_counter", - "id" : 10, + "id" : 9, "is_direct" : true, "binding" : "FabricIngress.next.hashed" }, { "name" : "FabricIngress.next.multicast_counter", - "id" : 11, + "id" : 10, "is_direct" : true, "binding" : "FabricIngress.next.multicast" }, { "name" : "FabricIngress.port_counters_control.egress_port_counter", - "id" : 12, + "id" : 11, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 23, @@ -1437,7 +1092,7 @@ }, { "name" : "FabricIngress.port_counters_control.ingress_port_counter", - "id" : 13, + "id" : 12, "source_info" : { "filename" : "include/control/port_counter.p4", "line" : 24, @@ -1448,32 +1103,14 @@ "is_direct" : false }, { - "name" : "FabricEgress.process_int_source.counter_int_source", - "id" : 14, + "name" : "FabricEgress.process_int_main.process_int_source.counter_int_source", + "id" : 13, "is_direct" : true, - "binding" : "FabricEgress.process_int_source.tb_int_source" - }, - { - "name" : "FabricEgress.process_int_transit.counter_int_insert", - "id" : 15, - "is_direct" : true, - "binding" : "FabricEgress.process_int_transit.tb_int_insert" - }, - { - "name" : "FabricEgress.process_int_transit.counter_int_inst_0003", - "id" : 16, - "is_direct" : true, - "binding" : "FabricEgress.process_int_transit.tb_int_inst_0003" - }, - { - "name" : "FabricEgress.process_int_transit.counter_int_inst_0407", - "id" : 17, - "is_direct" : true, - "binding" : "FabricEgress.process_int_transit.tb_int_inst_0407" + "binding" : "FabricEgress.process_int_main.process_int_source.tb_int_source" }, { "name" : "FabricEgress.egress_next.egress_vlan_counter", - "id" : 18, + "id" : 14, "is_direct" : true, "binding" : "FabricEgress.egress_next.egress_vlan" } @@ -1648,20 +1285,14 @@ "primitives" : [] }, { - "name" : "NoAction", + "name" : "nop", "id" : 7, "runtime_data" : [], "primitives" : [] }, - { - "name" : "nop", - "id" : 8, - "runtime_data" : [], - "primitives" : [] - }, { "name" : "FabricIngress.process_set_source_sink.int_set_source", - "id" : 9, + "id" : 8, "runtime_data" : [], "primitives" : [ { @@ -1672,48 +1303,32 @@ "value" : ["userMetadata.int_meta", "source"] }, { - "type" : "hexstr", - "value" : "0x01" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 94, + "filename" : "include/int/int_main.p4", + "line" : 42, "column" : 8, - "source_fragment" : "fabric_metadata.int_meta.source = 1" - } - } - ] - }, - { - "name" : "FabricIngress.process_set_source_sink.int_set_sink", - "id" : 10, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["userMetadata.int_meta", "sink"] - }, - { - "type" : "hexstr", - "value" : "0x01" - } - ], - "source_info" : { - "filename" : "include/int_source.p4", - "line" : 98, - "column" : 8, - "source_fragment" : "fabric_metadata.int_meta.sink = 1" + "source_fragment" : "fabric_metadata.int_meta.source = true" } } ] }, { "name" : "FabricIngress.filtering.drop", - "id" : 11, + "id" : 9, "runtime_data" : [], "primitives" : [ { @@ -1730,7 +1345,7 @@ }, { "name" : "FabricIngress.filtering.set_vlan", - "id" : 12, + "id" : 10, "runtime_data" : [ { "name" : "new_vlan_id", @@ -1761,7 +1376,7 @@ }, { "name" : "FabricIngress.filtering.push_internal_vlan", - "id" : 13, + "id" : 11, "runtime_data" : [ { "name" : "new_vlan_id", @@ -1855,7 +1470,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 89, + "line" : 91, "column" : 31, "source_fragment" : "0x8100; ..." } @@ -1912,13 +1527,13 @@ }, { "name" : "FabricIngress.filtering.nop_ingress_port_vlan", - "id" : 14, + "id" : 12, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricIngress.filtering.set_forwarding_type", - "id" : 15, + "id" : 13, "runtime_data" : [ { "name" : "fwd_type", @@ -1949,7 +1564,7 @@ }, { "name" : "FabricIngress.forwarding.set_next_id_bridging", - "id" : 16, + "id" : 14, "runtime_data" : [ { "name" : "next_id", @@ -1980,7 +1595,7 @@ }, { "name" : "FabricIngress.forwarding.pop_mpls_and_next", - "id" : 17, + "id" : 15, "runtime_data" : [ { "name" : "next_id", @@ -2026,7 +1641,7 @@ }, { "name" : "FabricIngress.forwarding.set_next_id_routing_v4", - "id" : 18, + "id" : 16, "runtime_data" : [ { "name" : "next_id", @@ -2057,13 +1672,13 @@ }, { "name" : "FabricIngress.forwarding.nop_routing_v4", - "id" : 19, + "id" : 17, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricIngress.forwarding.set_next_id_acl", - "id" : 20, + "id" : 18, "runtime_data" : [ { "name" : "next_id", @@ -2094,7 +1709,7 @@ }, { "name" : "FabricIngress.forwarding.punt_to_cpu", - "id" : 21, + "id" : 19, "runtime_data" : [], "primitives" : [ { @@ -2130,7 +1745,7 @@ }, { "name" : "FabricIngress.forwarding.clone_to_cpu", - "id" : 22, + "id" : 20, "runtime_data" : [], "primitives" : [ { @@ -2166,7 +1781,7 @@ }, { "name" : "FabricIngress.forwarding.drop", - "id" : 23, + "id" : 21, "runtime_data" : [], "primitives" : [ { @@ -2183,13 +1798,13 @@ }, { "name" : "FabricIngress.forwarding.nop_acl", - "id" : 24, + "id" : 22, "runtime_data" : [], "primitives" : [] }, { "name" : "FabricIngress.next.set_vlan", - "id" : 25, + "id" : 23, "runtime_data" : [ { "name" : "new_vlan_id", @@ -2220,7 +1835,7 @@ }, { "name" : "FabricIngress.next.output_simple", - "id" : 26, + "id" : 24, "runtime_data" : [ { "name" : "port_num", @@ -2251,7 +1866,7 @@ }, { "name" : "FabricIngress.next.set_vlan_output", - "id" : 27, + "id" : 25, "runtime_data" : [ { "name" : "new_vlan_id", @@ -2305,7 +1920,7 @@ }, { "name" : "FabricIngress.next.l3_routing_simple", - "id" : 28, + "id" : 26, "runtime_data" : [ { "name" : "port_num", @@ -2382,7 +1997,7 @@ }, { "name" : "FabricIngress.next.mpls_routing_v4_simple", - "id" : 29, + "id" : 27, "runtime_data" : [ { "name" : "port_num", @@ -2488,7 +2103,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -2564,7 +2179,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -2573,7 +2188,7 @@ }, { "name" : "FabricIngress.next.mpls_routing_v6_simple", - "id" : 30, + "id" : 28, "runtime_data" : [ { "name" : "port_num", @@ -2679,7 +2294,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -2755,7 +2370,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -2764,7 +2379,7 @@ }, { "name" : "FabricIngress.next.l3_routing_vlan", - "id" : 31, + "id" : 29, "runtime_data" : [ { "name" : "port_num", @@ -2864,7 +2479,7 @@ }, { "name" : "FabricIngress.next.l3_routing_hashed", - "id" : 32, + "id" : 30, "runtime_data" : [ { "name" : "port_num", @@ -2941,7 +2556,7 @@ }, { "name" : "FabricIngress.next.mpls_routing_v4_hashed", - "id" : 33, + "id" : 31, "runtime_data" : [ { "name" : "port_num", @@ -3047,7 +2662,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -3123,7 +2738,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -3132,7 +2747,7 @@ }, { "name" : "FabricIngress.next.mpls_routing_v6_hashed", - "id" : 34, + "id" : 32, "runtime_data" : [ { "name" : "port_num", @@ -3238,7 +2853,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -3314,7 +2929,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -3323,7 +2938,7 @@ }, { "name" : "FabricIngress.next.set_mcast_group", - "id" : 35, + "id" : 33, "runtime_data" : [ { "name" : "gid", @@ -3383,7 +2998,7 @@ }, { "name" : "act", - "id" : 36, + "id" : 34, "runtime_data" : [], "primitives" : [ { @@ -3453,7 +3068,7 @@ }, { "name" : "act_0", - "id" : 37, + "id" : 35, "runtime_data" : [], "primitives" : [ { @@ -3483,7 +3098,7 @@ }, { "name" : "act_1", - "id" : 38, + "id" : 36, "runtime_data" : [], "primitives" : [ { @@ -3513,7 +3128,7 @@ }, { "name" : "act_2", - "id" : 39, + "id" : 37, "runtime_data" : [], "primitives" : [ { @@ -3530,7 +3145,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 109, + "line" : 111, "column" : 31, "source_fragment" : "7; ..." } @@ -3539,7 +3154,7 @@ }, { "name" : "act_3", - "id" : 40, + "id" : 38, "runtime_data" : [], "primitives" : [ { @@ -3556,7 +3171,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 92, + "line" : 94, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -3565,7 +3180,7 @@ }, { "name" : "act_4", - "id" : 41, + "id" : 39, "runtime_data" : [], "primitives" : [ { @@ -3595,7 +3210,7 @@ }, { "name" : "act_5", - "id" : 42, + "id" : 40, "runtime_data" : [], "primitives" : [ { @@ -3625,7 +3240,7 @@ }, { "name" : "act_6", - "id" : 43, + "id" : 41, "runtime_data" : [], "primitives" : [ { @@ -3655,7 +3270,7 @@ }, { "name" : "act_7", - "id" : 44, + "id" : 42, "runtime_data" : [], "primitives" : [ { @@ -3685,7 +3300,7 @@ }, { "name" : "act_8", - "id" : 45, + "id" : 43, "runtime_data" : [], "primitives" : [ { @@ -3715,7 +3330,7 @@ }, { "name" : "act_9", - "id" : 46, + "id" : 44, "runtime_data" : [], "primitives" : [ { @@ -3745,7 +3360,7 @@ }, { "name" : "act_10", - "id" : 47, + "id" : 45, "runtime_data" : [], "primitives" : [ { @@ -3775,7 +3390,7 @@ }, { "name" : "act_11", - "id" : 48, + "id" : 46, "runtime_data" : [], "primitives" : [ { @@ -3811,7 +3426,7 @@ }, { "name" : "act_12", - "id" : 49, + "id" : 47, "runtime_data" : [], "primitives" : [ { @@ -3860,7 +3475,7 @@ }, { "name" : "act_13", - "id" : 50, + "id" : 48, "runtime_data" : [], "primitives" : [ { @@ -3868,7 +3483,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_3"] + "value" : ["scalars", "tmp_0"] }, { "type" : "expression", @@ -3904,7 +3519,7 @@ }, { "type" : "field", - "value" : ["scalars", "tmp_3"] + "value" : ["scalars", "tmp_0"] } ], "source_info" : { @@ -3918,7 +3533,7 @@ }, { "name" : "act_14", - "id" : 51, + "id" : 49, "runtime_data" : [], "primitives" : [ { @@ -3926,7 +3541,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_4"] + "value" : ["scalars", "tmp_1"] }, { "type" : "expression", @@ -3962,7 +3577,7 @@ }, { "type" : "field", - "value" : ["scalars", "tmp_4"] + "value" : ["scalars", "tmp_1"] } ], "source_info" : { @@ -3975,64 +3590,38 @@ ] }, { - "name" : "act_15", + "name" : "NoAction", + "id" : 50, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 51, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", "id" : 52, "runtime_data" : [], - "primitives" : [ - { - "op" : "clone_ingress_pkt_to_egress", - "parameters" : [ - { - "type" : "hexstr", - "value" : "0x000001f4" - }, - { - "type" : "hexstr", - "value" : "0x1" - } - ] - } - ] - }, - { - "name" : "NoAction", - "id" : 53, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "NoAction", - "id" : 54, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "NoAction", - "id" : 55, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "NoAction", - "id" : 56, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "NoAction", - "id" : 57, - "runtime_data" : [], "primitives" : [] }, { "name" : "nop", - "id" : 58, + "id" : 53, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "nop", + "id" : 54, "runtime_data" : [], "primitives" : [] }, { "name" : "drop_now", - "id" : 59, + "id" : 55, "runtime_data" : [], "primitives" : [ { @@ -4059,7 +3648,7 @@ }, { "name" : "drop_now", - "id" : 60, + "id" : 56, "runtime_data" : [], "primitives" : [ { @@ -4085,8 +3674,8 @@ ] }, { - "name" : "FabricEgress.process_int_source.int_source_dscp", - "id" : 61, + "name" : "FabricEgress.process_int_main.process_int_source.int_source_dscp", + "id" : 57, "runtime_data" : [ { "name" : "max_hop", @@ -4115,7 +3704,7 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", + "filename" : "include/int/int_source.p4", "line" : 31, "column" : 8, "source_fragment" : "hdr.intl4_shim.setValid()" @@ -4134,7 +3723,7 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", + "filename" : "include/int/int_source.p4", "line" : 33, "column" : 8, "source_fragment" : "hdr.intl4_shim.int_type = 1" @@ -4145,7 +3734,7 @@ "parameters" : [ { "type" : "field", - "value" : ["intl4_shim", "len"] + "value" : ["intl4_shim", "len_words"] }, { "type" : "hexstr", @@ -4154,8 +3743,8 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 127, - "column" : 35, + "line" : 131, + "column" : 36, "source_fragment" : "4; ..." } }, @@ -4168,8 +3757,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 37, + "filename" : "include/int/int_source.p4", + "line" : 36, "column" : 8, "source_fragment" : "hdr.int_header.setValid()" } @@ -4187,8 +3776,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 38, + "filename" : "include/int/int_source.p4", + "line" : 37, "column" : 8, "source_fragment" : "hdr.int_header.ver = 0" } @@ -4206,8 +3795,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 39, + "filename" : "include/int/int_source.p4", + "line" : 38, "column" : 8, "source_fragment" : "hdr.int_header.rep = 0" } @@ -4225,8 +3814,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 40, + "filename" : "include/int/int_source.p4", + "line" : 39, "column" : 8, "source_fragment" : "hdr.int_header.c = 0" } @@ -4244,8 +3833,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 41, + "filename" : "include/int/int_source.p4", + "line" : 40, "column" : 8, "source_fragment" : "hdr.int_header.e = 0" } @@ -4263,8 +3852,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 42, + "filename" : "include/int/int_source.p4", + "line" : 41, "column" : 8, "source_fragment" : "hdr.int_header.rsvd1 = 0" } @@ -4282,8 +3871,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 43, + "filename" : "include/int/int_source.p4", + "line" : 42, "column" : 8, "source_fragment" : "hdr.int_header.ins_cnt = ins_cnt; ..." } @@ -4301,8 +3890,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 44, + "filename" : "include/int/int_source.p4", + "line" : 43, "column" : 8, "source_fragment" : "hdr.int_header.max_hop_cnt = max_hop; ..." } @@ -4320,8 +3909,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 45, + "filename" : "include/int/int_source.p4", + "line" : 44, "column" : 8, "source_fragment" : "hdr.int_header.total_hop_cnt = 0" } @@ -4339,8 +3928,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 46, + "filename" : "include/int/int_source.p4", + "line" : 45, "column" : 8, "source_fragment" : "hdr.int_header.instruction_mask_0003 = ins_mask0003; ..." } @@ -4358,8 +3947,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 47, + "filename" : "include/int/int_source.p4", + "line" : 46, "column" : 8, "source_fragment" : "hdr.int_header.instruction_mask_0407 = ins_mask0407; ..." } @@ -4377,8 +3966,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 48, + "filename" : "include/int/int_source.p4", + "line" : 47, "column" : 8, "source_fragment" : "hdr.int_header.instruction_mask_0811 = 0" } @@ -4396,8 +3985,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 49, + "filename" : "include/int/int_source.p4", + "line" : 48, "column" : 8, "source_fragment" : "hdr.int_header.instruction_mask_1215 = 0" } @@ -4411,8 +4000,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 52, + "filename" : "include/int/int_source.p4", + "line" : 50, "column" : 8, "source_fragment" : "hdr.intl4_tail.setValid()" } @@ -4430,8 +4019,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 53, + "filename" : "include/int/int_source.p4", + "line" : 51, "column" : 8, "source_fragment" : "hdr.intl4_tail.next_proto = hdr.ipv4.protocol" } @@ -4449,8 +4038,8 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 54, + "filename" : "include/int/int_source.p4", + "line" : 52, "column" : 8, "source_fragment" : "hdr.intl4_tail.dest_port = fabric_metadata.l4_dst_port" } @@ -4463,28 +4052,15 @@ "value" : ["intl4_tail", "dscp"] }, { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["ipv4", "dscp"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } + "type" : "field", + "value" : ["ipv4", "dscp"] } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 55, + "filename" : "include/int/int_source.p4", + "line" : 53, "column" : 8, - "source_fragment" : "hdr.intl4_tail.dscp = (bit<8>) hdr.ipv4.dscp" + "source_fragment" : "hdr.intl4_tail.dscp = hdr.ipv4.dscp" } }, { @@ -4523,10 +4099,10 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 58, + "filename" : "include/int/int_source.p4", + "line" : 55, "column" : 8, - "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + 16" + "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + INT_HEADER_LEN_BYTES" } }, { @@ -4565,10 +4141,10 @@ } ], "source_info" : { - "filename" : "include/int_source.p4", - "line" : 59, + "filename" : "include/int/int_source.p4", + "line" : 56, "column" : 8, - "source_fragment" : "hdr.udp.len = hdr.udp.len + 16" + "source_fragment" : "hdr.udp.len = hdr.udp.len + INT_HEADER_LEN_BYTES" } }, { @@ -4585,7 +4161,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 125, + "line" : 127, "column" : 24, "source_fragment" : "0x1; ..." } @@ -4593,57 +4169,8 @@ ] }, { - "name" : "FabricEgress.process_int_transit.int_update_total_hop_cnt", - "id" : 62, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_header", "total_hop_cnt"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["int_header", "total_hop_cnt"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 30, - "column" : 8, - "source_fragment" : "hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 1" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_transit", - "id" : 63, + "name" : "FabricEgress.process_int_main.process_int_transit.init_metadata", + "id" : 58, "runtime_data" : [ { "name" : "switch_id", @@ -4656,4046 +4183,7 @@ "parameters" : [ { "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - }, - { - "type" : "runtime_data", - "value" : 0 - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 34, - "column" : 8, - "source_fragment" : "fabric_metadata.int_meta.switch_id = switch_id" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["userMetadata.int_meta", "insert_byte_cnt"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "<<", - "left" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["int_header", "ins_cnt"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0x2" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 35, - "column" : 8, - "source_fragment" : "fabric_metadata.int_meta.insert_byte_cnt = (bit<16>) hdr.int_header.ins_cnt << 2" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i0", - "id" : 64, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i1", - "id" : 65, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_occupancy"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "deq_qdepth"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i2", - "id" : 66, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i3", - "id" : 67, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_occupancy"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "deq_qdepth"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i4", - "id" : 68, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i5", - "id" : 69, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_occupancy"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "deq_qdepth"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i6", - "id" : 70, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i7", - "id" : 71, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_occupancy"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "deq_qdepth"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i8", - "id" : 72, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i9", - "id" : 73, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_occupancy"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "deq_qdepth"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i10", - "id" : 74, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i11", - "id" : 75, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_occupancy"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "deq_qdepth"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i12", - "id" : 76, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i13", - "id" : 77, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_occupancy"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "deq_qdepth"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i14", - "id" : 78, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0003_i15", - "id" : 79, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_occupancy" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_occupancy", "q_occupancy"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "deq_qdepth"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 61, - "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.q_occupancy = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_hop_latency" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 51, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_hop_latency", "hop_latency"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.int_hop_latency.hop_latency = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 44, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "ingress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "ingress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 45, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.ingress_port_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_port_ids", "egress_port_id"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "egress_port"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 47, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.egress_port_id = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_switch_id", "switch_id"] - }, - { - "type" : "field", - "value" : ["userMetadata.int_meta", "switch_id"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.switch_id = fabric_metadata.int_meta.switch_id" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i0", - "id" : 80, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i1", - "id" : 81, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 88, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tx_util", "egress_port_tx_util"] - }, - { - "type" : "hexstr", - "value" : "0x00000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i2", - "id" : 82, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i3", - "id" : 83, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 88, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tx_util", "egress_port_tx_util"] - }, - { - "type" : "hexstr", - "value" : "0x00000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i4", - "id" : 84, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i5", - "id" : 85, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 88, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tx_util", "egress_port_tx_util"] - }, - { - "type" : "hexstr", - "value" : "0x00000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i6", - "id" : 86, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i7", - "id" : 87, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 88, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tx_util", "egress_port_tx_util"] - }, - { - "type" : "hexstr", - "value" : "0x00000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i8", - "id" : 88, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i9", - "id" : 89, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 88, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tx_util", "egress_port_tx_util"] - }, - { - "type" : "hexstr", - "value" : "0x00000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i10", - "id" : 90, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i11", - "id" : 91, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 88, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tx_util", "egress_port_tx_util"] - }, - { - "type" : "hexstr", - "value" : "0x00000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i12", - "id" : 92, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i13", - "id" : 93, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 88, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tx_util", "egress_port_tx_util"] - }, - { - "type" : "hexstr", - "value" : "0x00000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i14", - "id" : 94, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_transit.int_set_header_0407_i15", - "id" : 95, - "runtime_data" : [], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tx_util" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 88, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tx_util", "egress_port_tx_util"] - }, - { - "type" : "hexstr", - "value" : "0x00000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 89, - "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_q_congestion" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 78, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_id"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 79, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_id = ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_q_congestion", "q_congestion"] - }, - { - "type" : "hexstr", - "value" : "0x000000" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 82, - "column" : 8, - "source_fragment" : "hdr.int_q_congestion.q_congestion = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_egress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 70, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_egress_tstamp", "egress_tstamp"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - }, - "right" : { - "type" : "field", - "value" : ["standard_metadata", "deq_timedelta"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffffffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_ingress_tstamp" - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 65, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_ingress_tstamp", "ingress_tstamp"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = ..." - } - } - ] - }, - { - "name" : "FabricEgress.process_int_outer_encap.int_update_ipv4", - "id" : 96, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["ipv4", "total_len"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["ipv4", "total_len"] - }, - "right" : { - "type" : "field", - "value" : ["userMetadata.int_meta", "insert_byte_cnt"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 304, - "column" : 8, - "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + fabric_metadata.int_meta.insert_byte_cnt" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_outer_encap.int_update_udp", - "id" : 97, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["udp", "len"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["udp", "len"] - }, - "right" : { - "type" : "field", - "value" : ["userMetadata.int_meta", "insert_byte_cnt"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 307, - "column" : 8, - "source_fragment" : "hdr.udp.len = hdr.udp.len + fabric_metadata.int_meta.insert_byte_cnt" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_outer_encap.int_update_shim", - "id" : 98, - "runtime_data" : [], - "primitives" : [ - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["intl4_shim", "len"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "field", - "value" : ["intl4_shim", "len"] - }, - "right" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "field", - "value" : ["int_header", "ins_cnt"] - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 310, - "column" : 8, - "source_fragment" : "hdr.intl4_shim.len = hdr.intl4_shim.len + (bit<8>)hdr.int_header.ins_cnt" - } - } - ] - }, - { - "name" : "FabricEgress.process_int_report.do_report_encapsulation", - "id" : 99, - "runtime_data" : [ - { - "name" : "src_mac", - "bitwidth" : 48 - }, - { - "name" : "mon_mac", - "bitwidth" : 48 - }, - { - "name" : "src_ip", - "bitwidth" : 32 - }, - { - "name" : "mon_ip", - "bitwidth" : 32 - }, - { - "name" : "mon_port", - "bitwidth" : 16 - } - ], - "primitives" : [ - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "report_ethernet" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 50, - "column" : 8, - "source_fragment" : "hdr.report_ethernet.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ethernet", "dst_addr"] - }, - { - "type" : "runtime_data", - "value" : 1 - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 51, - "column" : 8, - "source_fragment" : "hdr.report_ethernet.dst_addr = mon_mac" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ethernet", "src_addr"] - }, - { - "type" : "runtime_data", - "value" : 0 - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 52, - "column" : 8, - "source_fragment" : "hdr.report_ethernet.src_addr = src_mac" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ethernet", "ether_type"] - }, - { - "type" : "hexstr", - "value" : "0x0800" - } - ], - "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 92, - "column" : 31, - "source_fragment" : "0x0800; ..." - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "report_ipv4" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 56, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ipv4", "version"] - }, - { - "type" : "hexstr", - "value" : "0x04" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 57, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.version = 4w4" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ipv4", "ihl"] - }, - { - "type" : "hexstr", - "value" : "0x05" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 58, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.ihl = 4w5" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ipv4", "dscp"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 59, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.dscp = 6w0" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ipv4", "ecn"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 60, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.ecn = 2w0" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ipv4", "total_len"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "hexstr", - "value" : "0x0036" - }, - "right" : { - "type" : "field", - "value" : ["ipv4", "total_len"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 62, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.total_len = (bit<16>) IPV4_MIN_HEAD_LEN + (bit<16>) UDP_HEADER_LEN + ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ipv4", "identification"] - }, - { - "type" : "hexstr", - "value" : "0x0000" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 65, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.identification = 0" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ipv4", "flags"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 66, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.flags = 0" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ipv4", "frag_offset"] - }, - { - "type" : "hexstr", - "value" : "0x0000" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 67, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.frag_offset = 0" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ipv4", "ttl"] - }, - { - "type" : "hexstr", - "value" : "0xff" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 68, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.ttl = 0xFF" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ipv4", "protocol"] - }, - { - "type" : "hexstr", - "value" : "0x11" - } - ], - "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 98, - "column" : 25, - "source_fragment" : "17; ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ipv4", "src_addr"] - }, - { - "type" : "runtime_data", - "value" : 2 - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 70, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.src_addr = src_ip" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_ipv4", "dst_addr"] - }, - { - "type" : "runtime_data", - "value" : 3 - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 71, - "column" : 8, - "source_fragment" : "hdr.report_ipv4.dst_addr = mon_ip" - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "report_udp" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 74, - "column" : 8, - "source_fragment" : "hdr.report_udp.setValid()" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_udp", "src_port"] - }, - { - "type" : "hexstr", - "value" : "0x0000" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 75, - "column" : 8, - "source_fragment" : "hdr.report_udp.src_port = 0" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_udp", "dst_port"] - }, - { - "type" : "runtime_data", - "value" : 4 - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 76, - "column" : 8, - "source_fragment" : "hdr.report_udp.dst_port = mon_port" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_udp", "len"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "+", - "left" : { - "type" : "hexstr", - "value" : "0x0022" - }, - "right" : { - "type" : "field", - "value" : ["ipv4", "total_len"] - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 77, - "column" : 8, - "source_fragment" : "hdr.report_udp.len = (bit<16>) UDP_HEADER_LEN + (bit<16>) REPORT_FIXED_HEADER_LEN + ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["scalars", "fabric_metadata_t.compute_checksum"] + "value" : ["userMetadata.int_meta", "transit"] }, { "type" : "expression", @@ -8713,25 +4201,10 @@ } ], "source_info" : { - "filename" : "include/int_report.p4", - "line" : 80, + "filename" : "include/int/int_transit.p4", + "line" : 26, "column" : 8, - "source_fragment" : "fabric_metadata.compute_checksum = true" - } - }, - { - "op" : "add_header", - "parameters" : [ - { - "type" : "header", - "value" : "report_fixed_header" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 30, - "column" : 8, - "source_fragment" : "hdr.report_fixed_header.setValid()" + "source_fragment" : "fmeta.int_meta.transit = true" } }, { @@ -8739,196 +4212,46 @@ "parameters" : [ { "type" : "field", - "value" : ["report_fixed_header", "ver"] + "value" : ["userMetadata.int_meta", "switch_id"] }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "runtime_data", + "value" : 0 } ], "source_info" : { - "filename" : "include/int_report.p4", + "filename" : "include/int/int_transit.p4", "line" : 31, "column" : 8, - "source_fragment" : "hdr.report_fixed_header.ver = 0" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_fixed_header", "nproto"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 132, - "column" : 31, - "source_fragment" : "0; ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_fixed_header", "d"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 34, - "column" : 8, - "source_fragment" : "hdr.report_fixed_header.d = 0" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_fixed_header", "q"] - }, - { - "type" : "hexstr", - "value" : "0x00" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 35, - "column" : 8, - "source_fragment" : "hdr.report_fixed_header.q = 0" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_fixed_header", "f"] - }, - { - "type" : "hexstr", - "value" : "0x01" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 36, - "column" : 8, - "source_fragment" : "hdr.report_fixed_header.f = 1" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_fixed_header", "rsvd"] - }, - { - "type" : "hexstr", - "value" : "0x0000" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 37, - "column" : 8, - "source_fragment" : "hdr.report_fixed_header.rsvd = 0" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_fixed_header", "hw_id"] - }, - { - "type" : "hexstr", - "value" : "0x01" - } - ], - "source_info" : { - "filename" : "include/control/../define.p4", - "line" : 136, - "column" : 21, - "source_fragment" : "1; ..." - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_fixed_header", "seq_no"] - }, - { - "type" : "hexstr", - "value" : "0x00000000" - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 41, - "column" : 8, - "source_fragment" : "hdr.report_fixed_header.seq_no = 0" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["report_fixed_header", "ingress_tstamp"] - }, - { - "type" : "field", - "value" : ["standard_metadata", "enq_timestamp"] - } - ], - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 43, - "column" : 8, - "source_fragment" : "hdr.report_fixed_header.ingress_tstamp = ..." + "source_fragment" : "fmeta.int_meta.switch_id = switch_id" } } ] }, { - "name" : "FabricEgress.process_int_sink.restore_header", - "id" : 100, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", + "id" : 59, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", + "id" : 60, "runtime_data" : [], "primitives" : [ { - "op" : "assign", + "op" : "add_header", "parameters" : [ { - "type" : "field", - "value" : ["udp", "dst_port"] - }, - { - "type" : "field", - "value" : ["intl4_tail", "dest_port"] + "type" : "header", + "value" : "int_q_occupancy" } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 26, + "filename" : "include/int/int_transit.p4", + "line" : 56, "column" : 8, - "source_fragment" : "hdr.udp.dst_port = hdr.intl4_tail.dest_port" + "source_fragment" : "hdr.int_q_occupancy.setValid()" } }, { @@ -8936,7 +4259,26 @@ "parameters" : [ { "type" : "field", - "value" : ["ipv4", "dscp"] + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] }, { "type" : "expression", @@ -8946,266 +4288,116 @@ "op" : "&", "left" : { "type" : "field", - "value" : ["intl4_tail", "dscp"] + "value" : ["standard_metadata", "deq_qdepth"] }, "right" : { "type" : "hexstr", - "value" : "0x3f" + "value" : "0xffffff" } } } } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 27, + "filename" : "include/int/int_transit.p4", + "line" : 59, "column" : 8, - "source_fragment" : "hdr.ipv4.dscp = (bit<6>)hdr.intl4_tail.dscp" + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" } } ] }, { - "name" : "FabricEgress.process_int_sink.int_sink", - "id" : 101, + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", + "id" : 61, "runtime_data" : [], "primitives" : [ { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["ipv4", "total_len"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "-", - "left" : { - "type" : "field", - "value" : ["ipv4", "total_len"] - }, - "right" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "<<", - "left" : { - "type" : "field", - "value" : ["intl4_shim", "len"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x2" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 32, - "column" : 8, - "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len - (bit<16>)(hdr.intl4_shim.len << 2)" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["udp", "len"] - }, - { - "type" : "expression", - "value" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "-", - "left" : { - "type" : "field", - "value" : ["udp", "len"] - }, - "right" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "&", - "left" : { - "type" : "expression", - "value" : { - "op" : "<<", - "left" : { - "type" : "field", - "value" : ["intl4_shim", "len"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x2" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xff" - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - }, - "right" : { - "type" : "hexstr", - "value" : "0xffff" - } - } - } - } - ], - "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 33, - "column" : 8, - "source_fragment" : "hdr.udp.len = hdr.udp.len - (bit<16>)(hdr.intl4_shim.len << 2)" - } - }, - { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_header" - } - ], - "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 35, - "column" : 8, - "source_fragment" : "hdr.int_header.setInvalid()" - } - }, - { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_data" - } - ], - "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 36, - "column" : 8, - "source_fragment" : "hdr.int_data.setInvalid()" - } - }, - { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "intl4_shim" - } - ], - "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 37, - "column" : 8, - "source_fragment" : "hdr.intl4_shim.setInvalid()" - } - }, - { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "intl4_tail" - } - ], - "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 38, - "column" : 8, - "source_fragment" : "hdr.intl4_tail.setInvalid()" - } - }, - { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_switch_id" - } - ], - "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 39, - "column" : 8, - "source_fragment" : "hdr.int_switch_id.setInvalid()" - } - }, - { - "op" : "remove_header", - "parameters" : [ - { - "type" : "header", - "value" : "int_port_ids" - } - ], - "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 40, - "column" : 8, - "source_fragment" : "hdr.int_port_ids.setInvalid()" - } - }, - { - "op" : "remove_header", + "op" : "add_header", "parameters" : [ { "type" : "header", @@ -9213,14 +4405,124 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 41, + "filename" : "include/int/int_transit.p4", + "line" : 51, "column" : 8, - "source_fragment" : "hdr.int_hop_latency.setInvalid()" + "source_fragment" : "hdr.int_hop_latency.setValid()" } }, { - "op" : "remove_header", + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_hop_latency", "hop_latency"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", + "id" : 62, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", "parameters" : [ { "type" : "header", @@ -9228,59 +4530,2792 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 42, + "filename" : "include/int/int_transit.p4", + "line" : 56, "column" : 8, - "source_fragment" : "hdr.int_q_occupancy.setInvalid()" + "source_fragment" : "hdr.int_q_occupancy.setValid()" } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "int_ingress_tstamp" + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 43, + "filename" : "include/int/int_transit.p4", + "line" : 58, "column" : 8, - "source_fragment" : "hdr.int_ingress_tstamp.setInvalid()" + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" } }, { - "op" : "remove_header", + "op" : "assign", "parameters" : [ { - "type" : "header", - "value" : "int_egress_tstamp" + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 44, + "filename" : "include/int/int_transit.p4", + "line" : 59, "column" : 8, - "source_fragment" : "hdr.int_egress_tstamp.setInvalid()" + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" } }, { - "op" : "remove_header", + "op" : "add_header", "parameters" : [ { "type" : "header", - "value" : "int_q_congestion" + "value" : "int_hop_latency" } ], "source_info" : { - "filename" : "include/int_sink.p4", + "filename" : "include/int/int_transit.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_hop_latency", "hop_latency"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", + "id" : 63, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", "line" : 45, "column" : 8, - "source_fragment" : "hdr.int_q_congestion.setInvalid()" + "source_fragment" : "hdr.int_port_ids.setValid()" } }, { - "op" : "remove_header", + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", + "id" : 64, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", + "id" : 65, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_hop_latency", "hop_latency"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", + "id" : 66, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_hop_latency", "hop_latency"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", + "id" : 67, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", + "id" : 68, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", + "id" : 69, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_hop_latency", "hop_latency"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", + "id" : 70, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_hop_latency", "hop_latency"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", + "id" : 71, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", + "id" : 72, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", + "id" : 73, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_hop_latency", "hop_latency"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", + "id" : 74, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_hop_latency", "hop_latency"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x04" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 103, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 4" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0010" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 104, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 16" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", + "id" : 75, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", + "id" : 76, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", "parameters" : [ { "type" : "header", @@ -9288,17 +7323,2784 @@ } ], "source_info" : { - "filename" : "include/int_sink.p4", - "line" : 46, + "filename" : "include/int/int_transit.p4", + "line" : 80, "column" : 8, - "source_fragment" : "hdr.int_egress_tx_util.setInvalid()" + "source_fragment" : "hdr.int_egress_tx_util.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tx_util", "egress_port_tx_util"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", + "id" : 77, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", + "id" : 78, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tx_util", "egress_port_tx_util"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", + "id" : 79, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", + "id" : 80, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tx_util", "egress_port_tx_util"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", + "id" : 81, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", + "id" : 82, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tx_util", "egress_port_tx_util"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", + "id" : 83, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", + "id" : 84, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tx_util", "egress_port_tx_util"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", + "id" : 85, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", + "id" : 86, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tx_util", "egress_port_tx_util"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", + "id" : 87, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", + "id" : 88, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tx_util", "egress_port_tx_util"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", + "id" : 89, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", + "id" : 90, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tx_util", "egress_port_tx_util"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x04" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 103, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 4" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0010" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 104, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 16" } } ] }, { "name" : "FabricEgress.pkt_io_egress.pop_vlan", - "id" : 102, + "id" : 91, "runtime_data" : [], "primitives" : [ { @@ -9315,7 +10117,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 39, + "line" : 40, "column" : 8, "source_fragment" : "hdr.ethernet.ether_type = hdr.vlan_tag.ether_type" } @@ -9330,7 +10132,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 40, + "line" : 41, "column" : 8, "source_fragment" : "hdr.vlan_tag.setInvalid()" } @@ -9339,7 +10141,7 @@ }, { "name" : "FabricEgress.egress_next.pop_vlan", - "id" : 103, + "id" : 92, "runtime_data" : [], "primitives" : [ { @@ -9379,8 +10181,8 @@ ] }, { - "name" : "act_16", - "id" : 104, + "name" : "act_15", + "id" : 93, "runtime_data" : [], "primitives" : [ { @@ -9393,7 +10195,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 56, + "line" : 57, "column" : 12, "source_fragment" : "hdr.packet_in.setValid()" } @@ -9412,12 +10214,274 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 57, + "line" : 58, "column" : 12, "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port" } } ] + }, + { + "name" : "act_16", + "id" : 94, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "process_int_main_process_int_transit_hasReturned_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "act_17", + "id" : 95, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "process_int_main_process_int_transit_hasReturned_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 374, + "column" : 12, + "source_fragment" : "return" + } + } + ] + }, + { + "name" : "act_18", + "id" : 96, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 382, + "column" : 12, + "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + fmeta.int_meta.new_bytes" + } + } + ] + }, + { + "name" : "act_19", + "id" : 97, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "total_hop_cnt"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["int_header", "total_hop_cnt"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 379, + "column" : 8, + "source_fragment" : "hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 1" + } + } + ] + }, + { + "name" : "act_20", + "id" : 98, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["udp", "len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["udp", "len"] + }, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 385, + "column" : 12, + "source_fragment" : "hdr.udp.len = hdr.udp.len + fmeta.int_meta.new_bytes" + } + } + ] + }, + { + "name" : "act_21", + "id" : 99, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["intl4_shim", "len_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["intl4_shim", "len_words"] + }, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 388, + "column" : 12, + "source_fragment" : "hdr.intl4_shim.len_words = hdr.intl4_shim.len_words + fmeta.int_meta.new_words" + } + } + ] } ], "pipelines" : [ @@ -9442,14 +10506,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [36], + "action_ids" : [34], "actions" : ["act"], "base_default_next" : null, "next_tables" : { "act" : null }, "default_entry" : { - "action_id" : 36, + "action_id" : 34, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -9490,7 +10554,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [13, 12, 11, 14], + "action_ids" : [11, 10, 9, 12], "actions" : ["FabricIngress.filtering.push_internal_vlan", "FabricIngress.filtering.set_vlan", "FabricIngress.filtering.drop", "FabricIngress.filtering.nop_ingress_port_vlan"], "base_default_next" : null, "next_tables" : { @@ -9498,7 +10562,7 @@ "__MISS__" : "tbl_act_1" }, "default_entry" : { - "action_id" : 13, + "action_id" : 11, "action_const" : true, "action_data" : ["0xffe"], "action_entry_const" : true @@ -9514,14 +10578,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [37], + "action_ids" : [35], "actions" : ["act_0"], "base_default_next" : "node_7", "next_tables" : { "act_0" : "node_7" }, "default_entry" : { - "action_id" : 37, + "action_id" : 35, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -9537,14 +10601,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [38], + "action_ids" : [36], "actions" : ["act_1"], "base_default_next" : "node_7", "next_tables" : { "act_1" : "node_7" }, "default_entry" : { - "action_id" : 38, + "action_id" : 36, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -9585,14 +10649,14 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [15], + "action_ids" : [13], "actions" : ["FabricIngress.filtering.set_forwarding_type"], "base_default_next" : "node_10", "next_tables" : { "FabricIngress.filtering.set_forwarding_type" : "node_10" }, "default_entry" : { - "action_id" : 15, + "action_id" : 13, "action_const" : true, "action_data" : ["0x0"], "action_entry_const" : true @@ -9608,14 +10672,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [39], + "action_ids" : [37], "actions" : ["act_2"], "base_default_next" : "node_10", "next_tables" : { "act_2" : "node_10" }, "default_entry" : { - "action_id" : 39, + "action_id" : 37, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -9650,7 +10714,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [16, 2], + "action_ids" : [14, 1], "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "NoAction"], "base_default_next" : "FabricIngress.forwarding.acl", "next_tables" : { @@ -9658,7 +10722,7 @@ "NoAction" : "FabricIngress.forwarding.acl" }, "default_entry" : { - "action_id" : 2, + "action_id" : 1, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -9687,7 +10751,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [17, 3], + "action_ids" : [15, 2], "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "NoAction"], "base_default_next" : "tbl_act_3", "next_tables" : { @@ -9695,7 +10759,7 @@ "NoAction" : "tbl_act_3" }, "default_entry" : { - "action_id" : 3, + "action_id" : 2, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -9711,14 +10775,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [40], + "action_ids" : [38], "actions" : ["act_3"], "base_default_next" : "FabricIngress.forwarding.acl", "next_tables" : { "act_3" : "FabricIngress.forwarding.acl" }, "default_entry" : { - "action_id" : 40, + "action_id" : 38, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -9747,7 +10811,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [18, 19, 4], + "action_ids" : [16, 17, 3], "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "NoAction"], "base_default_next" : "FabricIngress.forwarding.acl", "next_tables" : { @@ -9756,7 +10820,7 @@ "NoAction" : "FabricIngress.forwarding.acl" }, "default_entry" : { - "action_id" : 4, + "action_id" : 3, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -9851,7 +10915,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [20, 21, 22, 23, 24], + "action_ids" : [18, 19, 20, 21, 22], "actions" : ["FabricIngress.forwarding.set_next_id_acl", "FabricIngress.forwarding.punt_to_cpu", "FabricIngress.forwarding.clone_to_cpu", "FabricIngress.forwarding.drop", "FabricIngress.forwarding.nop_acl"], "base_default_next" : "tbl_act_4", "next_tables" : { @@ -9862,7 +10926,7 @@ "FabricIngress.forwarding.nop_acl" : "tbl_act_4" }, "default_entry" : { - "action_id" : 24, + "action_id" : 22, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -9878,14 +10942,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [41], + "action_ids" : [39], "actions" : ["act_4"], "base_default_next" : "FabricIngress.next.vlan_meta", "next_tables" : { "act_4" : "FabricIngress.next.vlan_meta" }, "default_entry" : { - "action_id" : 41, + "action_id" : 39, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -9914,7 +10978,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [25, 8], + "action_ids" : [23, 7], "actions" : ["FabricIngress.next.set_vlan", "nop"], "base_default_next" : "FabricIngress.next.simple", "next_tables" : { @@ -9922,7 +10986,7 @@ "nop" : "FabricIngress.next.simple" }, "default_entry" : { - "action_id" : 8, + "action_id" : 7, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -9951,7 +11015,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [26, 27, 28, 29, 30, 31, 5], + "action_ids" : [24, 25, 26, 27, 28, 29, 4], "actions" : ["FabricIngress.next.output_simple", "FabricIngress.next.set_vlan_output", "FabricIngress.next.l3_routing_simple", "FabricIngress.next.mpls_routing_v4_simple", "FabricIngress.next.mpls_routing_v6_simple", "FabricIngress.next.l3_routing_vlan", "NoAction"], "base_default_next" : null, "next_tables" : { @@ -9959,7 +11023,7 @@ "__MISS__" : "tbl_act_6" }, "default_entry" : { - "action_id" : 5, + "action_id" : 4, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -9975,14 +11039,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [42], + "action_ids" : [40], "actions" : ["act_5"], "base_default_next" : "node_23", "next_tables" : { "act_5" : "node_23" }, "default_entry" : { - "action_id" : 42, + "action_id" : 40, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -9998,14 +11062,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [43], + "action_ids" : [41], "actions" : ["act_6"], "base_default_next" : "node_23", "next_tables" : { "act_6" : "node_23" }, "default_entry" : { - "action_id" : 43, + "action_id" : 41, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10035,7 +11099,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [32, 33, 34, 6], + "action_ids" : [30, 31, 32, 5], "actions" : ["FabricIngress.next.l3_routing_hashed", "FabricIngress.next.mpls_routing_v4_hashed", "FabricIngress.next.mpls_routing_v6_hashed", "NoAction"], "base_default_next" : null, "next_tables" : { @@ -10053,14 +11117,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [44], + "action_ids" : [42], "actions" : ["act_7"], "base_default_next" : "node_27", "next_tables" : { "act_7" : "node_27" }, "default_entry" : { - "action_id" : 44, + "action_id" : 42, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10076,14 +11140,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [45], + "action_ids" : [43], "actions" : ["act_8"], "base_default_next" : "node_27", "next_tables" : { "act_8" : "node_27" }, "default_entry" : { - "action_id" : 45, + "action_id" : 43, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10112,7 +11176,7 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [35, 7], + "action_ids" : [33, 6], "actions" : ["FabricIngress.next.set_mcast_group", "NoAction"], "base_default_next" : null, "next_tables" : { @@ -10120,7 +11184,7 @@ "__MISS__" : "tbl_act_10" }, "default_entry" : { - "action_id" : 7, + "action_id" : 6, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -10136,14 +11200,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [46], + "action_ids" : [44], "actions" : ["act_9"], "base_default_next" : "node_31", "next_tables" : { "act_9" : "node_31" }, "default_entry" : { - "action_id" : 46, + "action_id" : 44, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10159,14 +11223,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [47], + "action_ids" : [45], "actions" : ["act_10"], "base_default_next" : "node_31", "next_tables" : { "act_10" : "node_31" }, "default_entry" : { - "action_id" : 47, + "action_id" : 45, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10182,14 +11246,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [48], + "action_ids" : [46], "actions" : ["act_11"], "base_default_next" : "node_33", "next_tables" : { "act_11" : "node_33" }, "default_entry" : { - "action_id" : 48, + "action_id" : 46, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10205,14 +11269,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [49], + "action_ids" : [47], "actions" : ["act_12"], "base_default_next" : "node_37", "next_tables" : { "act_12" : "node_37" }, "default_entry" : { - "action_id" : 49, + "action_id" : 47, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10228,14 +11292,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [50], + "action_ids" : [48], "actions" : ["act_13"], "base_default_next" : "node_39", "next_tables" : { "act_13" : "node_39" }, "default_entry" : { - "action_id" : 50, + "action_id" : 48, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10251,14 +11315,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [51], + "action_ids" : [49], "actions" : ["act_14"], "base_default_next" : "FabricIngress.process_set_source_sink.tb_set_source", "next_tables" : { "act_14" : "FabricIngress.process_set_source_sink.tb_set_source" }, "default_entry" : { - "action_id" : 51, + "action_id" : 49, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10268,8 +11332,8 @@ "name" : "FabricIngress.process_set_source_sink.tb_set_source", "id" : 26, "source_info" : { - "filename" : "include/int_source.p4", - "line" : 101, + "filename" : "include/int/int_main.p4", + "line" : 46, "column" : 10, "source_fragment" : "tb_set_source" }, @@ -10283,16 +11347,16 @@ ], "match_type" : "exact", "type" : "simple", - "max_size" : 256, + "max_size" : 511, "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [9, 0], + "action_ids" : [8, 0], "actions" : ["FabricIngress.process_set_source_sink.int_set_source", "NoAction"], - "base_default_next" : "FabricIngress.process_set_source_sink.tb_set_sink", + "base_default_next" : null, "next_tables" : { - "FabricIngress.process_set_source_sink.int_set_source" : "FabricIngress.process_set_source_sink.tb_set_sink", - "NoAction" : "FabricIngress.process_set_source_sink.tb_set_sink" + "FabricIngress.process_set_source_sink.int_set_source" : null, + "NoAction" : null }, "default_entry" : { "action_id" : 0, @@ -10300,66 +11364,6 @@ "action_data" : [], "action_entry_const" : false } - }, - { - "name" : "FabricIngress.process_set_source_sink.tb_set_sink", - "id" : 27, - "source_info" : { - "filename" : "include/int_source.p4", - "line" : 111, - "column" : 10, - "source_fragment" : "tb_set_sink" - }, - "key" : [ - { - "match_type" : "exact", - "name" : "standard_metadata.egress_spec", - "target" : ["standard_metadata", "egress_spec"], - "mask" : null - } - ], - "match_type" : "exact", - "type" : "simple", - "max_size" : 256, - "with_counters" : true, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [10, 1], - "actions" : ["FabricIngress.process_set_source_sink.int_set_sink", "NoAction"], - "base_default_next" : "node_43", - "next_tables" : { - "FabricIngress.process_set_source_sink.int_set_sink" : "node_43", - "NoAction" : "node_43" - }, - "default_entry" : { - "action_id" : 1, - "action_const" : false, - "action_data" : [], - "action_entry_const" : false - } - }, - { - "name" : "tbl_act_15", - "id" : 28, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [52], - "actions" : ["act_15"], - "base_default_next" : null, - "next_tables" : { - "act_15" : null - }, - "default_entry" : { - "action_id" : 52, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } } ], "action_profiles" : [ @@ -10731,32 +11735,6 @@ }, "true_next" : "tbl_act_14", "false_next" : "FabricIngress.process_set_source_sink.tb_set_source" - }, - { - "name" : "node_43", - "id" : 13, - "source_info" : { - "filename" : "fabric.p4", - "line" : 70, - "column" : 11, - "source_fragment" : "fabric_metadata.int_meta.sink == 1" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "==", - "left" : { - "type" : "field", - "value" : ["userMetadata.int_meta", "sink"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - }, - "false_next" : null, - "true_next" : "tbl_act_15" } ] }, @@ -10765,14 +11743,60 @@ "id" : 1, "source_info" : { "filename" : "fabric.p4", - "line" : 80, + "line" : 79, "column" : 8, "source_fragment" : "FabricEgress" }, - "init_table" : "node_47", + "init_table" : "node_44", "tables" : [ { "name" : "tbl_pkt_io_egress_pop_vlan", + "id" : 27, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [91], + "actions" : ["FabricEgress.pkt_io_egress.pop_vlan"], + "base_default_next" : "node_48", + "next_tables" : { + "FabricEgress.pkt_io_egress.pop_vlan" : "node_48" + }, + "default_entry" : { + "action_id" : 91, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_drop_now", + "id" : 28, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [55], + "actions" : ["drop_now"], + "base_default_next" : "tbl_act_15", + "next_tables" : { + "drop_now" : "tbl_act_15" + }, + "default_entry" : { + "action_id" : 55, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_15", "id" : 29, "key" : [], "match_type" : "exact", @@ -10781,21 +11805,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [102], - "actions" : ["FabricEgress.pkt_io_egress.pop_vlan"], - "base_default_next" : "node_51", + "action_ids" : [93], + "actions" : ["act_15"], + "base_default_next" : null, "next_tables" : { - "FabricEgress.pkt_io_egress.pop_vlan" : "node_51" + "act_15" : null }, "default_entry" : { - "action_id" : 102, + "action_id" : 93, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_drop_now", + "name" : "tbl_drop_now_0", "id" : 30, "key" : [], "match_type" : "exact", @@ -10804,60 +11828,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [59], - "actions" : ["drop_now"], - "base_default_next" : "tbl_act_16", - "next_tables" : { - "drop_now" : "tbl_act_16" - }, - "default_entry" : { - "action_id" : 59, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_act_16", - "id" : 31, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [104], - "actions" : ["act_16"], - "base_default_next" : null, - "next_tables" : { - "act_16" : null - }, - "default_entry" : { - "action_id" : 104, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_drop_now_0", - "id" : 32, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [60], + "action_ids" : [56], "actions" : ["drop_now"], "base_default_next" : "FabricEgress.egress_next.egress_vlan", "next_tables" : { "drop_now" : "FabricEgress.egress_next.egress_vlan" }, "default_entry" : { - "action_id" : 60, + "action_id" : 56, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -10865,7 +11843,7 @@ }, { "name" : "FabricEgress.egress_next.egress_vlan", - "id" : 33, + "id" : 31, "source_info" : { "filename" : "include/control/next.p4", "line" : 258, @@ -10892,26 +11870,26 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [103, 58], + "action_ids" : [92, 54], "actions" : ["FabricEgress.egress_next.pop_vlan", "nop"], - "base_default_next" : "node_57", + "base_default_next" : "node_54", "next_tables" : { - "FabricEgress.egress_next.pop_vlan" : "node_57", - "nop" : "node_57" + "FabricEgress.egress_next.pop_vlan" : "node_54", + "nop" : "node_54" }, "default_entry" : { - "action_id" : 58, + "action_id" : 54, "action_const" : false, "action_data" : [], "action_entry_const" : false } }, { - "name" : "FabricEgress.process_int_source.tb_int_source", - "id" : 34, + "name" : "FabricEgress.process_int_main.process_int_source.tb_int_source", + "id" : 32, "source_info" : { - "filename" : "include/int_source.p4", - "line" : 66, + "filename" : "include/int/int_source.p4", + "line" : 65, "column" : 10, "source_fragment" : "tb_int_source" }, @@ -10947,56 +11925,109 @@ "with_counters" : true, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [61, 53], - "actions" : ["FabricEgress.process_int_source.int_source_dscp", "NoAction"], - "base_default_next" : "node_60", + "action_ids" : [57, 50], + "actions" : ["FabricEgress.process_int_main.process_int_source.int_source_dscp", "NoAction"], + "base_default_next" : "node_57", "next_tables" : { - "FabricEgress.process_int_source.int_source_dscp" : "node_60", - "NoAction" : "node_60" + "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_57", + "NoAction" : "node_57" }, "default_entry" : { - "action_id" : 53, + "action_id" : 50, "action_const" : false, "action_data" : [], "action_entry_const" : false } }, { - "name" : "FabricEgress.process_int_transit.tb_int_insert", - "id" : 35, - "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 227, - "column" : 10, - "source_fragment" : "tb_int_insert" - }, + "name" : "tbl_act_16", + "id" : 33, "key" : [], "match_type" : "exact", "type" : "simple", - "max_size" : 2, - "with_counters" : true, + "max_size" : 1024, + "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [63, 54], - "actions" : ["FabricEgress.process_int_transit.int_transit", "NoAction"], - "base_default_next" : "FabricEgress.process_int_transit.tb_int_inst_0003", + "action_ids" : [94], + "actions" : ["act_16"], + "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", "next_tables" : { - "FabricEgress.process_int_transit.int_transit" : "FabricEgress.process_int_transit.tb_int_inst_0003", - "NoAction" : "FabricEgress.process_int_transit.tb_int_inst_0003" + "act_16" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert" }, "default_entry" : { - "action_id" : 54, - "action_const" : false, + "action_id" : 94, + "action_const" : true, "action_data" : [], - "action_entry_const" : false + "action_entry_const" : true } }, { - "name" : "FabricEgress.process_int_transit.tb_int_inst_0003", + "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", + "id" : 34, + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 271, + "column" : 10, + "source_fragment" : "tb_int_insert" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "hdr.int_header.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" : [58, 53], + "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "nop"], + "base_default_next" : "node_60", + "next_tables" : { + "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_60", + "nop" : "node_60" + }, + "default_entry" : { + "action_id" : 53, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_17", + "id" : 35, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [95], + "actions" : ["act_17"], + "base_default_next" : "node_62", + "next_tables" : { + "act_17" : "node_62" + }, + "default_entry" : { + "action_id" : 95, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003", "id" : 36, "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 237, + "filename" : "include/int/int_transit.p4", + "line" : 284, "column" : 10, "source_fragment" : "tb_int_inst_0003" }, @@ -11011,44 +12042,254 @@ "match_type" : "exact", "type" : "simple", "max_size" : 16, - "with_counters" : true, + "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 55], - "actions" : ["FabricEgress.process_int_transit.int_set_header_0003_i0", "FabricEgress.process_int_transit.int_set_header_0003_i1", "FabricEgress.process_int_transit.int_set_header_0003_i2", "FabricEgress.process_int_transit.int_set_header_0003_i3", "FabricEgress.process_int_transit.int_set_header_0003_i4", "FabricEgress.process_int_transit.int_set_header_0003_i5", "FabricEgress.process_int_transit.int_set_header_0003_i6", "FabricEgress.process_int_transit.int_set_header_0003_i7", "FabricEgress.process_int_transit.int_set_header_0003_i8", "FabricEgress.process_int_transit.int_set_header_0003_i9", "FabricEgress.process_int_transit.int_set_header_0003_i10", "FabricEgress.process_int_transit.int_set_header_0003_i11", "FabricEgress.process_int_transit.int_set_header_0003_i12", "FabricEgress.process_int_transit.int_set_header_0003_i13", "FabricEgress.process_int_transit.int_set_header_0003_i14", "FabricEgress.process_int_transit.int_set_header_0003_i15", "NoAction"], - "base_default_next" : "FabricEgress.process_int_transit.tb_int_inst_0407", + "action_ids" : [59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 51], + "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", "NoAction"], + "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", "next_tables" : { - "FabricEgress.process_int_transit.int_set_header_0003_i0" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i1" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i2" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i3" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i4" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i5" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i6" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i7" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i8" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i9" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i10" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i11" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i12" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i13" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i14" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "FabricEgress.process_int_transit.int_set_header_0003_i15" : "FabricEgress.process_int_transit.tb_int_inst_0407", - "NoAction" : "FabricEgress.process_int_transit.tb_int_inst_0407" + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "NoAction" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407" }, "default_entry" : { - "action_id" : 55, + "action_id" : 51, "action_const" : false, "action_data" : [], "action_entry_const" : false - } + }, + "entries" : [ + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 59, + "action_data" : [] + }, + "priority" : 1 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x01" + } + ], + "action_entry" : { + "action_id" : 60, + "action_data" : [] + }, + "priority" : 2 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x02" + } + ], + "action_entry" : { + "action_id" : 61, + "action_data" : [] + }, + "priority" : 3 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x03" + } + ], + "action_entry" : { + "action_id" : 62, + "action_data" : [] + }, + "priority" : 4 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x04" + } + ], + "action_entry" : { + "action_id" : 63, + "action_data" : [] + }, + "priority" : 5 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x05" + } + ], + "action_entry" : { + "action_id" : 64, + "action_data" : [] + }, + "priority" : 6 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x06" + } + ], + "action_entry" : { + "action_id" : 65, + "action_data" : [] + }, + "priority" : 7 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x07" + } + ], + "action_entry" : { + "action_id" : 66, + "action_data" : [] + }, + "priority" : 8 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x08" + } + ], + "action_entry" : { + "action_id" : 67, + "action_data" : [] + }, + "priority" : 9 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x09" + } + ], + "action_entry" : { + "action_id" : 68, + "action_data" : [] + }, + "priority" : 10 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0a" + } + ], + "action_entry" : { + "action_id" : 69, + "action_data" : [] + }, + "priority" : 11 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0b" + } + ], + "action_entry" : { + "action_id" : 70, + "action_data" : [] + }, + "priority" : 12 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0c" + } + ], + "action_entry" : { + "action_id" : 71, + "action_data" : [] + }, + "priority" : 13 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0d" + } + ], + "action_entry" : { + "action_id" : 72, + "action_data" : [] + }, + "priority" : 14 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0e" + } + ], + "action_entry" : { + "action_id" : 73, + "action_data" : [] + }, + "priority" : 15 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0f" + } + ], + "action_entry" : { + "action_id" : 74, + "action_data" : [] + }, + "priority" : 16 + } + ] }, { - "name" : "FabricEgress.process_int_transit.tb_int_inst_0407", + "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", "id" : 37, "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 264, + "filename" : "include/int/int_transit.p4", + "line" : 328, "column" : 10, "source_fragment" : "tb_int_inst_0407" }, @@ -11063,40 +12304,250 @@ "match_type" : "exact", "type" : "simple", "max_size" : 16, - "with_counters" : true, + "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 56], - "actions" : ["FabricEgress.process_int_transit.int_set_header_0407_i0", "FabricEgress.process_int_transit.int_set_header_0407_i1", "FabricEgress.process_int_transit.int_set_header_0407_i2", "FabricEgress.process_int_transit.int_set_header_0407_i3", "FabricEgress.process_int_transit.int_set_header_0407_i4", "FabricEgress.process_int_transit.int_set_header_0407_i5", "FabricEgress.process_int_transit.int_set_header_0407_i6", "FabricEgress.process_int_transit.int_set_header_0407_i7", "FabricEgress.process_int_transit.int_set_header_0407_i8", "FabricEgress.process_int_transit.int_set_header_0407_i9", "FabricEgress.process_int_transit.int_set_header_0407_i10", "FabricEgress.process_int_transit.int_set_header_0407_i11", "FabricEgress.process_int_transit.int_set_header_0407_i12", "FabricEgress.process_int_transit.int_set_header_0407_i13", "FabricEgress.process_int_transit.int_set_header_0407_i14", "FabricEgress.process_int_transit.int_set_header_0407_i15", "NoAction"], - "base_default_next" : "tbl_process_int_transit_int_update_total_hop_cnt", + "action_ids" : [75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 52], + "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", "NoAction"], + "base_default_next" : "tbl_act_18", "next_tables" : { - "FabricEgress.process_int_transit.int_set_header_0407_i0" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i1" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i2" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i3" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i4" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i5" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i6" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i7" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i8" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i9" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i10" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i11" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i12" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i13" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i14" : "tbl_process_int_transit_int_update_total_hop_cnt", - "FabricEgress.process_int_transit.int_set_header_0407_i15" : "tbl_process_int_transit_int_update_total_hop_cnt", - "NoAction" : "tbl_process_int_transit_int_update_total_hop_cnt" + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14" : "tbl_act_18", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15" : "tbl_act_18", + "NoAction" : "tbl_act_18" }, "default_entry" : { - "action_id" : 56, + "action_id" : 52, "action_const" : false, "action_data" : [], "action_entry_const" : false - } + }, + "entries" : [ + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 75, + "action_data" : [] + }, + "priority" : 1 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x01" + } + ], + "action_entry" : { + "action_id" : 76, + "action_data" : [] + }, + "priority" : 2 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x02" + } + ], + "action_entry" : { + "action_id" : 77, + "action_data" : [] + }, + "priority" : 3 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x03" + } + ], + "action_entry" : { + "action_id" : 78, + "action_data" : [] + }, + "priority" : 4 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x04" + } + ], + "action_entry" : { + "action_id" : 79, + "action_data" : [] + }, + "priority" : 5 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x05" + } + ], + "action_entry" : { + "action_id" : 80, + "action_data" : [] + }, + "priority" : 6 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x06" + } + ], + "action_entry" : { + "action_id" : 81, + "action_data" : [] + }, + "priority" : 7 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x07" + } + ], + "action_entry" : { + "action_id" : 82, + "action_data" : [] + }, + "priority" : 8 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x08" + } + ], + "action_entry" : { + "action_id" : 83, + "action_data" : [] + }, + "priority" : 9 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x09" + } + ], + "action_entry" : { + "action_id" : 84, + "action_data" : [] + }, + "priority" : 10 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0a" + } + ], + "action_entry" : { + "action_id" : 85, + "action_data" : [] + }, + "priority" : 11 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0b" + } + ], + "action_entry" : { + "action_id" : 86, + "action_data" : [] + }, + "priority" : 12 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0c" + } + ], + "action_entry" : { + "action_id" : 87, + "action_data" : [] + }, + "priority" : 13 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0d" + } + ], + "action_entry" : { + "action_id" : 88, + "action_data" : [] + }, + "priority" : 14 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0e" + } + ], + "action_entry" : { + "action_id" : 89, + "action_data" : [] + }, + "priority" : 15 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0f" + } + ], + "action_entry" : { + "action_id" : 90, + "action_data" : [] + }, + "priority" : 16 + } + ] }, { - "name" : "tbl_process_int_transit_int_update_total_hop_cnt", + "name" : "tbl_act_18", "id" : 38, "key" : [], "match_type" : "exact", @@ -11105,57 +12556,11 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [62], - "actions" : ["FabricEgress.process_int_transit.int_update_total_hop_cnt"], - "base_default_next" : "node_65", - "next_tables" : { - "FabricEgress.process_int_transit.int_update_total_hop_cnt" : "node_65" - }, - "default_entry" : { - "action_id" : 62, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_process_int_outer_encap_int_update_ipv4", - "id" : 39, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [96], - "actions" : ["FabricEgress.process_int_outer_encap.int_update_ipv4"], - "base_default_next" : "node_67", - "next_tables" : { - "FabricEgress.process_int_outer_encap.int_update_ipv4" : "node_67" - }, - "default_entry" : { - "action_id" : 96, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_process_int_outer_encap_int_update_udp", - "id" : 40, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, "action_ids" : [97], - "actions" : ["FabricEgress.process_int_outer_encap.int_update_udp"], - "base_default_next" : "node_69", + "actions" : ["act_19"], + "base_default_next" : "node_66", "next_tables" : { - "FabricEgress.process_int_outer_encap.int_update_udp" : "node_69" + "act_19" : "node_66" }, "default_entry" : { "action_id" : 97, @@ -11165,8 +12570,31 @@ } }, { - "name" : "tbl_process_int_outer_encap_int_update_shim", - "id" : 41, + "name" : "tbl_act_19", + "id" : 39, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [96], + "actions" : ["act_18"], + "base_default_next" : "node_68", + "next_tables" : { + "act_18" : "node_68" + }, + "default_entry" : { + "action_id" : 96, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_20", + "id" : 40, "key" : [], "match_type" : "exact", "type" : "simple", @@ -11175,10 +12603,10 @@ "support_timeout" : false, "direct_meters" : null, "action_ids" : [98], - "actions" : ["FabricEgress.process_int_outer_encap.int_update_shim"], - "base_default_next" : "node_71", + "actions" : ["act_20"], + "base_default_next" : "node_70", "next_tables" : { - "FabricEgress.process_int_outer_encap.int_update_shim" : "node_71" + "act_20" : "node_70" }, "default_entry" : { "action_id" : 98, @@ -11188,14 +12616,8 @@ } }, { - "name" : "FabricEgress.process_int_report.tb_generate_report", - "id" : 42, - "source_info" : { - "filename" : "include/int_report.p4", - "line" : 87, - "column" : 10, - "source_fragment" : "tb_generate_report" - }, + "name" : "tbl_act_21", + "id" : 41, "key" : [], "match_type" : "exact", "type" : "simple", @@ -11203,61 +12625,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [99, 57], - "actions" : ["FabricEgress.process_int_report.do_report_encapsulation", "NoAction"], - "base_default_next" : "node_73", - "next_tables" : { - "FabricEgress.process_int_report.do_report_encapsulation" : "node_73", - "NoAction" : "node_73" - }, - "default_entry" : { - "action_id" : 57, - "action_const" : false, - "action_data" : [], - "action_entry_const" : false - } - }, - { - "name" : "tbl_process_int_sink_restore_header", - "id" : 43, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [100], - "actions" : ["FabricEgress.process_int_sink.restore_header"], - "base_default_next" : "tbl_process_int_sink_int_sink", - "next_tables" : { - "FabricEgress.process_int_sink.restore_header" : "tbl_process_int_sink_int_sink" - }, - "default_entry" : { - "action_id" : 100, - "action_const" : true, - "action_data" : [], - "action_entry_const" : true - } - }, - { - "name" : "tbl_process_int_sink_int_sink", - "id" : 44, - "key" : [], - "match_type" : "exact", - "type" : "simple", - "max_size" : 1024, - "with_counters" : false, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [101], - "actions" : ["FabricEgress.process_int_sink.int_sink"], + "action_ids" : [99], + "actions" : ["act_21"], "base_default_next" : null, "next_tables" : { - "FabricEgress.process_int_sink.int_sink" : null + "act_21" : null }, "default_entry" : { - "action_id" : 101, + "action_id" : 99, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -11267,11 +12642,11 @@ "action_profiles" : [], "conditionals" : [ { - "name" : "node_47", - "id" : 14, + "name" : "node_44", + "id" : 13, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 43, + "line" : 44, "column" : 12, "source_fragment" : "fabric_metadata.is_controller_packet_out == true" }, @@ -11297,14 +12672,14 @@ } }, "true_next" : null, - "false_next" : "node_48" + "false_next" : "node_45" }, { - "name" : "node_48", - "id" : 15, + "name" : "node_45", + "id" : 14, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 47, + "line" : 48, "column" : 12, "source_fragment" : "standard_metadata.egress_port == 255" }, @@ -11322,15 +12697,15 @@ } } }, - "true_next" : "node_49", - "false_next" : "node_54" + "true_next" : "node_46", + "false_next" : "node_51" }, { - "name" : "node_49", - "id" : 16, + "name" : "node_46", + "id" : 15, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 48, + "line" : 49, "column" : 16, "source_fragment" : "hdr.vlan_tag.isValid() && fabric_metadata.pop_vlan_when_packet_in == true" }, @@ -11373,14 +12748,14 @@ } }, "true_next" : "tbl_pkt_io_egress_pop_vlan", - "false_next" : "node_51" + "false_next" : "node_48" }, { - "name" : "node_51", - "id" : 17, + "name" : "node_48", + "id" : 16, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 51, + "line" : 52, "column" : 16, "source_fragment" : "fabric_metadata.is_multicast == true && ..." }, @@ -11433,11 +12808,11 @@ } }, "true_next" : "tbl_drop_now", - "false_next" : "tbl_act_16" + "false_next" : "tbl_act_15" }, { - "name" : "node_54", - "id" : 18, + "name" : "node_51", + "id" : 17, "source_info" : { "filename" : "include/control/next.p4", "line" : 272, @@ -11489,11 +12864,11 @@ "false_next" : "FabricEgress.egress_next.egress_vlan" }, { - "name" : "node_57", - "id" : 19, + "name" : "node_54", + "id" : 18, "source_info" : { - "filename" : "fabric.p4", - "line" : 94, + "filename" : "include/int/int_main.p4", + "line" : 98, "column" : 12, "source_fragment" : "standard_metadata.ingress_port != 255 && ..." }, @@ -11566,40 +12941,47 @@ } }, "false_next" : null, - "true_next" : "node_58" + "true_next" : "node_55" }, { - "name" : "node_58", - "id" : 20, + "name" : "node_55", + "id" : 19, "source_info" : { - "filename" : "fabric.p4", - "line" : 97, + "filename" : "include/int/int_main.p4", + "line" : 102, "column" : 16, - "source_fragment" : "fabric_metadata.int_meta.source == 1" + "source_fragment" : "fabric_metadata.int_meta.source == true" }, "expression" : { "type" : "expression", "value" : { "op" : "==", "left" : { - "type" : "field", - "value" : ["userMetadata.int_meta", "source"] + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "source"] + } + } }, "right" : { - "type" : "hexstr", - "value" : "0x01" + "type" : "bool", + "value" : true } } }, - "true_next" : "FabricEgress.process_int_source.tb_int_source", - "false_next" : "node_60" + "true_next" : "FabricEgress.process_int_main.process_int_source.tb_int_source", + "false_next" : "node_57" }, { - "name" : "node_60", - "id" : 21, + "name" : "node_57", + "id" : 20, "source_info" : { - "filename" : "fabric.p4", - "line" : 100, + "filename" : "include/int/int_main.p4", + "line" : 106, "column" : 15, "source_fragment" : "hdr.int_header.isValid()" }, @@ -11615,14 +12997,71 @@ } }, "false_next" : null, - "true_next" : "FabricEgress.process_int_transit.tb_int_insert" + "true_next" : "tbl_act_16" }, { - "name" : "node_65", - "id" : 22, + "name" : "node_60", + "id" : 21, "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 314, + "filename" : "include/int/int_transit.p4", + "line" : 373, + "column" : 12, + "source_fragment" : "fmeta.int_meta.transit == false" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "transit"] + } + } + }, + "right" : { + "type" : "bool", + "value" : false + } + } + }, + "true_next" : "tbl_act_17", + "false_next" : "node_62" + }, + { + "name" : "node_62", + "id" : 22, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "process_int_main_process_int_transit_hasReturned_0"] + } + } + } + } + }, + "false_next" : null, + "true_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003" + }, + { + "name" : "node_66", + "id" : 23, + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 381, "column" : 12, "source_fragment" : "hdr.ipv4.isValid()" }, @@ -11637,15 +13076,15 @@ } } }, - "true_next" : "tbl_process_int_outer_encap_int_update_ipv4", - "false_next" : "node_67" + "true_next" : "tbl_act_19", + "false_next" : "node_68" }, { - "name" : "node_67", - "id" : 23, + "name" : "node_68", + "id" : 24, "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 317, + "filename" : "include/int/int_transit.p4", + "line" : 384, "column" : 12, "source_fragment" : "hdr.udp.isValid()" }, @@ -11660,15 +13099,15 @@ } } }, - "true_next" : "tbl_process_int_outer_encap_int_update_udp", - "false_next" : "node_69" + "true_next" : "tbl_act_20", + "false_next" : "node_70" }, { - "name" : "node_69", - "id" : 24, + "name" : "node_70", + "id" : 25, "source_info" : { - "filename" : "include/int_transit.p4", - "line" : 320, + "filename" : "include/int/int_transit.p4", + "line" : 387, "column" : 12, "source_fragment" : "hdr.intl4_shim.isValid()" }, @@ -11683,60 +13122,8 @@ } } }, - "true_next" : "tbl_process_int_outer_encap_int_update_shim", - "false_next" : "node_71" - }, - { - "name" : "node_71", - "id" : 25, - "source_info" : { - "filename" : "fabric.p4", - "line" : 104, - "column" : 20, - "source_fragment" : "standard_metadata.instance_type == 1" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "==", - "left" : { - "type" : "field", - "value" : ["standard_metadata", "instance_type"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x00000001" - } - } - }, - "true_next" : "FabricEgress.process_int_report.tb_generate_report", - "false_next" : "node_73" - }, - { - "name" : "node_73", - "id" : 26, - "source_info" : { - "filename" : "fabric.p4", - "line" : 108, - "column" : 20, - "source_fragment" : "fabric_metadata.int_meta.sink == 1" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "==", - "left" : { - "type" : "field", - "value" : ["userMetadata.int_meta", "sink"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - }, "false_next" : null, - "true_next" : "tbl_process_int_sink_restore_header" + "true_next" : "tbl_act_21" } ] } diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/cpu_port.txt b/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/cpu_port.txt new file mode 100644 index 0000000000..ace9d03621 --- /dev/null +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/cpu_port.txt @@ -0,0 +1 @@ +255 diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt b/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt index 545564cafe..62132343f2 100644 --- a/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-int/bmv2/default/p4info.txt @@ -18,30 +18,7 @@ tables { annotations: "@defaultonly()" } direct_resource_ids: 318787614 - size: 256 - idle_timeout_behavior: NO_TIMEOUT -} -tables { - preamble { - id: 33561619 - name: "FabricIngress.process_set_source_sink.tb_set_sink" - alias: "tb_set_sink" - } - match_fields { - id: 1 - name: "standard_metadata.egress_spec" - bitwidth: 9 - match_type: EXACT - } - action_refs { - id: 16788951 - } - action_refs { - id: 16800567 - annotations: "@defaultonly()" - } - direct_resource_ids: 318770551 - size: 256 + size: 511 idle_timeout_behavior: NO_TIMEOUT } tables { @@ -409,8 +386,8 @@ tables { } tables { preamble { - id: 33566961 - name: "FabricEgress.process_int_source.tb_int_source" + id: 33612258 + name: "FabricEgress.process_int_main.process_int_source.tb_int_source" alias: "tb_int_source" } match_fields { @@ -438,37 +415,43 @@ tables { match_type: TERNARY } action_refs { - id: 16807851 + id: 16785857 } action_refs { id: 16800567 annotations: "@defaultonly()" } - direct_resource_ids: 318776637 + direct_resource_ids: 318800047 size: 1024 idle_timeout_behavior: NO_TIMEOUT } tables { preamble { - id: 33602084 - name: "FabricEgress.process_int_transit.tb_int_insert" + id: 33599867 + name: "FabricEgress.process_int_main.process_int_transit.tb_int_insert" alias: "tb_int_insert" } - action_refs { - id: 16806530 + match_fields { + id: 1 + name: "hdr.int_header.is_valid" + bitwidth: 1 + match_type: EXACT } action_refs { - id: 16800567 + id: 16780783 + } + action_refs { + id: 16819938 annotations: "@defaultonly()" } - direct_resource_ids: 318794595 - size: 2 + const_default_action_id: 16819938 + size: 1 idle_timeout_behavior: NO_TIMEOUT } tables { preamble { - id: 33561642 - name: "FabricEgress.process_int_transit.tb_int_inst_0003" + id: 33569467 + name: "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003" alias: "tb_int_inst_0003" } match_fields { @@ -478,65 +461,65 @@ tables { match_type: EXACT } action_refs { - id: 16788439 + id: 16809886 } action_refs { - id: 16792702 + id: 16783130 } action_refs { - id: 16834796 + id: 16809096 } action_refs { - id: 16815381 + id: 16834117 } action_refs { - id: 16824457 + id: 16825314 } action_refs { - id: 16796364 + id: 16811436 } action_refs { - id: 16806322 + id: 16802199 } action_refs { - id: 16819063 + id: 16796779 } action_refs { - id: 16828306 + id: 16787676 } action_refs { - id: 16799786 + id: 16825351 } action_refs { - id: 16796975 + id: 16793999 } action_refs { - id: 16801652 + id: 16786714 } action_refs { - id: 16778440 + id: 16814203 } action_refs { - id: 16790887 + id: 16807054 } action_refs { - id: 16783849 + id: 16800064 } action_refs { - id: 16837726 + id: 16792997 } action_refs { id: 16800567 annotations: "@defaultonly()" } - direct_resource_ids: 318777781 size: 16 idle_timeout_behavior: NO_TIMEOUT + is_const_table: true } tables { preamble { - id: 33571998 - name: "FabricEgress.process_int_transit.tb_int_inst_0407" + id: 33595914 + name: "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407" alias: "tb_int_inst_0407" } match_fields { @@ -546,76 +529,60 @@ tables { match_type: EXACT } action_refs { - id: 16839298 + id: 16819022 } action_refs { - id: 16837018 + id: 16804144 } action_refs { - id: 16827414 + id: 16829117 } action_refs { - id: 16786021 + id: 16797781 } action_refs { - id: 16785131 + id: 16813543 } action_refs { - id: 16808652 + id: 16824974 } action_refs { - id: 16799296 + id: 16815362 } action_refs { - id: 16780668 + id: 16835399 } action_refs { - id: 16805625 + id: 16834505 } action_refs { - id: 16778495 + id: 16811493 } action_refs { - id: 16784981 + id: 16825476 } action_refs { - id: 16806353 + id: 16799777 } action_refs { - id: 16802140 + id: 16829592 } action_refs { - id: 16827601 + id: 16805877 } action_refs { - id: 16820295 + id: 16780182 } action_refs { - id: 16810955 + id: 16799476 } action_refs { id: 16800567 annotations: "@defaultonly()" } - direct_resource_ids: 318818305 size: 16 idle_timeout_behavior: NO_TIMEOUT -} -tables { - preamble { - id: 33607792 - name: "FabricEgress.process_int_report.tb_generate_report" - alias: "tb_generate_report" - } - action_refs { - id: 16814383 - } - action_refs { - id: 16800567 - annotations: "@defaultonly()" - } - size: 1024 - idle_timeout_behavior: NO_TIMEOUT + is_const_table: true } tables { preamble { @@ -667,13 +634,6 @@ actions { alias: "int_set_source" } } -actions { - preamble { - id: 16788951 - name: "FabricIngress.process_set_source_sink.int_set_sink" - alias: "int_set_sink" - } -} actions { preamble { id: 16798734 @@ -1048,8 +1008,8 @@ actions { } actions { preamble { - id: 16807851 - name: "FabricEgress.process_int_source.int_source_dscp" + id: 16785857 + name: "FabricEgress.process_int_main.process_int_source.int_source_dscp" alias: "int_source_dscp" } params { @@ -1075,16 +1035,9 @@ actions { } actions { preamble { - id: 16806280 - name: "FabricEgress.process_int_transit.int_update_total_hop_cnt" - alias: "int_update_total_hop_cnt" - } -} -actions { - preamble { - id: 16806530 - name: "FabricEgress.process_int_transit.int_transit" - alias: "int_transit" + id: 16780783 + name: "FabricEgress.process_int_main.process_int_transit.init_metadata" + alias: "init_metadata" } params { id: 1 @@ -1094,295 +1047,228 @@ actions { } actions { preamble { - id: 16788439 - name: "FabricEgress.process_int_transit.int_set_header_0003_i0" + id: 16809886 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0" alias: "int_set_header_0003_i0" } } actions { preamble { - id: 16792702 - name: "FabricEgress.process_int_transit.int_set_header_0003_i1" + id: 16783130 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1" alias: "int_set_header_0003_i1" } } actions { preamble { - id: 16834796 - name: "FabricEgress.process_int_transit.int_set_header_0003_i2" + id: 16809096 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2" alias: "int_set_header_0003_i2" } } actions { preamble { - id: 16815381 - name: "FabricEgress.process_int_transit.int_set_header_0003_i3" + id: 16834117 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3" alias: "int_set_header_0003_i3" } } actions { preamble { - id: 16824457 - name: "FabricEgress.process_int_transit.int_set_header_0003_i4" + id: 16825314 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4" alias: "int_set_header_0003_i4" } } actions { preamble { - id: 16796364 - name: "FabricEgress.process_int_transit.int_set_header_0003_i5" + id: 16811436 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5" alias: "int_set_header_0003_i5" } } actions { preamble { - id: 16806322 - name: "FabricEgress.process_int_transit.int_set_header_0003_i6" + id: 16802199 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6" alias: "int_set_header_0003_i6" } } actions { preamble { - id: 16819063 - name: "FabricEgress.process_int_transit.int_set_header_0003_i7" + id: 16796779 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7" alias: "int_set_header_0003_i7" } } actions { preamble { - id: 16828306 - name: "FabricEgress.process_int_transit.int_set_header_0003_i8" + id: 16787676 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8" alias: "int_set_header_0003_i8" } } actions { preamble { - id: 16799786 - name: "FabricEgress.process_int_transit.int_set_header_0003_i9" + id: 16825351 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9" alias: "int_set_header_0003_i9" } } actions { preamble { - id: 16796975 - name: "FabricEgress.process_int_transit.int_set_header_0003_i10" + id: 16793999 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10" alias: "int_set_header_0003_i10" } } actions { preamble { - id: 16801652 - name: "FabricEgress.process_int_transit.int_set_header_0003_i11" + id: 16786714 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11" alias: "int_set_header_0003_i11" } } actions { preamble { - id: 16778440 - name: "FabricEgress.process_int_transit.int_set_header_0003_i12" + id: 16814203 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12" alias: "int_set_header_0003_i12" } } actions { preamble { - id: 16790887 - name: "FabricEgress.process_int_transit.int_set_header_0003_i13" + id: 16807054 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13" alias: "int_set_header_0003_i13" } } actions { preamble { - id: 16783849 - name: "FabricEgress.process_int_transit.int_set_header_0003_i14" + id: 16800064 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14" alias: "int_set_header_0003_i14" } } actions { preamble { - id: 16837726 - name: "FabricEgress.process_int_transit.int_set_header_0003_i15" + id: 16792997 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15" alias: "int_set_header_0003_i15" } } actions { preamble { - id: 16839298 - name: "FabricEgress.process_int_transit.int_set_header_0407_i0" + id: 16819022 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0" alias: "int_set_header_0407_i0" } } actions { preamble { - id: 16837018 - name: "FabricEgress.process_int_transit.int_set_header_0407_i1" + id: 16804144 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1" alias: "int_set_header_0407_i1" } } actions { preamble { - id: 16827414 - name: "FabricEgress.process_int_transit.int_set_header_0407_i2" + id: 16829117 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2" alias: "int_set_header_0407_i2" } } actions { preamble { - id: 16786021 - name: "FabricEgress.process_int_transit.int_set_header_0407_i3" + id: 16797781 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3" alias: "int_set_header_0407_i3" } } actions { preamble { - id: 16785131 - name: "FabricEgress.process_int_transit.int_set_header_0407_i4" + id: 16813543 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4" alias: "int_set_header_0407_i4" } } actions { preamble { - id: 16808652 - name: "FabricEgress.process_int_transit.int_set_header_0407_i5" + id: 16824974 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5" alias: "int_set_header_0407_i5" } } actions { preamble { - id: 16799296 - name: "FabricEgress.process_int_transit.int_set_header_0407_i6" + id: 16815362 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6" alias: "int_set_header_0407_i6" } } actions { preamble { - id: 16780668 - name: "FabricEgress.process_int_transit.int_set_header_0407_i7" + id: 16835399 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7" alias: "int_set_header_0407_i7" } } actions { preamble { - id: 16805625 - name: "FabricEgress.process_int_transit.int_set_header_0407_i8" + id: 16834505 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8" alias: "int_set_header_0407_i8" } } actions { preamble { - id: 16778495 - name: "FabricEgress.process_int_transit.int_set_header_0407_i9" + id: 16811493 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9" alias: "int_set_header_0407_i9" } } actions { preamble { - id: 16784981 - name: "FabricEgress.process_int_transit.int_set_header_0407_i10" + id: 16825476 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10" alias: "int_set_header_0407_i10" } } actions { preamble { - id: 16806353 - name: "FabricEgress.process_int_transit.int_set_header_0407_i11" + id: 16799777 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11" alias: "int_set_header_0407_i11" } } actions { preamble { - id: 16802140 - name: "FabricEgress.process_int_transit.int_set_header_0407_i12" + id: 16829592 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12" alias: "int_set_header_0407_i12" } } actions { preamble { - id: 16827601 - name: "FabricEgress.process_int_transit.int_set_header_0407_i13" + id: 16805877 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13" alias: "int_set_header_0407_i13" } } actions { preamble { - id: 16820295 - name: "FabricEgress.process_int_transit.int_set_header_0407_i14" + id: 16780182 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14" alias: "int_set_header_0407_i14" } } actions { preamble { - id: 16810955 - name: "FabricEgress.process_int_transit.int_set_header_0407_i15" + id: 16799476 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15" alias: "int_set_header_0407_i15" } } -actions { - preamble { - id: 16816602 - name: "FabricEgress.process_int_outer_encap.int_update_ipv4" - alias: "int_update_ipv4" - } -} -actions { - preamble { - id: 16829666 - name: "FabricEgress.process_int_outer_encap.int_update_udp" - alias: "int_update_udp" - } -} -actions { - preamble { - id: 16826978 - name: "FabricEgress.process_int_outer_encap.int_update_shim" - alias: "int_update_shim" - } -} -actions { - preamble { - id: 16814383 - name: "FabricEgress.process_int_report.do_report_encapsulation" - alias: "do_report_encapsulation" - } - params { - id: 1 - name: "src_mac" - bitwidth: 48 - } - params { - id: 2 - name: "mon_mac" - bitwidth: 48 - } - params { - id: 3 - name: "src_ip" - bitwidth: 32 - } - params { - id: 4 - name: "mon_ip" - bitwidth: 32 - } - params { - id: 5 - name: "mon_port" - bitwidth: 16 - } -} -actions { - preamble { - id: 16810741 - name: "FabricEgress.process_int_sink.restore_header" - alias: "restore_header" - } -} -actions { - preamble { - id: 16787662 - name: "FabricEgress.process_int_sink.int_sink" - alias: "int_sink" - } -} actions { preamble { id: 16801047 @@ -1440,17 +1326,6 @@ direct_counters { } direct_table_id: 33581620 } -direct_counters { - preamble { - id: 318770551 - name: "FabricIngress.process_set_source_sink.counter_set_sink" - alias: "counter_set_sink" - } - spec { - unit: BOTH - } - direct_table_id: 33561619 -} direct_counters { preamble { id: 318815501 @@ -1563,47 +1438,14 @@ direct_counters { } direct_counters { preamble { - id: 318776637 - name: "FabricEgress.process_int_source.counter_int_source" + id: 318800047 + name: "FabricEgress.process_int_main.process_int_source.counter_int_source" alias: "counter_int_source" } spec { unit: BOTH } - direct_table_id: 33566961 -} -direct_counters { - preamble { - id: 318794595 - name: "FabricEgress.process_int_transit.counter_int_insert" - alias: "counter_int_insert" - } - spec { - unit: BOTH - } - direct_table_id: 33602084 -} -direct_counters { - preamble { - id: 318777781 - name: "FabricEgress.process_int_transit.counter_int_inst_0003" - alias: "counter_int_inst_0003" - } - spec { - unit: BOTH - } - direct_table_id: 33561642 -} -direct_counters { - preamble { - id: 318818305 - name: "FabricEgress.process_int_transit.counter_int_inst_0407" - alias: "counter_int_inst_0407" - } - spec { - unit: BOTH - } - direct_table_id: 33571998 + direct_table_id: 33612258 } direct_counters { preamble { diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json new file mode 100644 index 0000000000..97da4ebb78 --- /dev/null +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/bmv2.json @@ -0,0 +1,15488 @@ +{ + "header_types" : [ + { + "name" : "scalars_0", + "id" : 0, + "fields" : [ + ["last_ipv4_dscp", 6, false], + ["tmp", 4, false], + ["tmp_0", 8, false], + ["tmp_1", 32, false], + ["tmp_2", 32, false], + ["spgw_ingress_tmp_1", 1, false], + ["spgw_ingress_tmp_2", 1, false], + ["filtering_tmp_0", 1, false], + ["next_tmp_2", 1, false], + ["next_tmp_3", 1, false], + ["next_tmp_4", 1, false], + ["spgw_normalizer_hasReturned_0", 1, false], + ["spgw_ingress_hasReturned_0", 1, false], + ["next_hasReturned_0", 1, false], + ["process_int_main_process_int_transit_hasReturned_0", 1, false], + ["fabric_metadata_t.fwd_type", 3, false], + ["fabric_metadata_t.next_id", 32, false], + ["fabric_metadata_t.pop_vlan_when_packet_in", 1, false], + ["fabric_metadata_t.is_multicast", 1, false], + ["fabric_metadata_t.is_controller_packet_out", 1, false], + ["fabric_metadata_t.clone_to_cpu", 1, false], + ["fabric_metadata_t.ip_proto", 8, false], + ["fabric_metadata_t.l4_src_port", 16, false], + ["fabric_metadata_t.l4_dst_port", 16, false], + ["_padding_2", 5, false] + ] + }, + { + "name" : "standard_metadata", + "id" : 1, + "fields" : [ + ["ingress_port", 9, false], + ["egress_spec", 9, false], + ["egress_port", 9, false], + ["clone_spec", 32, false], + ["instance_type", 32, false], + ["drop", 1, false], + ["recirculate_port", 16, false], + ["packet_length", 32, false], + ["enq_timestamp", 32, false], + ["enq_qdepth", 19, false], + ["deq_timedelta", 32, false], + ["deq_qdepth", 19, false], + ["ingress_global_timestamp", 48, false], + ["egress_global_timestamp", 48, false], + ["lf_field_list", 32, false], + ["mcast_grp", 16, false], + ["resubmit_flag", 32, false], + ["egress_rid", 16, false], + ["checksum_error", 1, false], + ["recirculate_flag", 32, false], + ["_padding", 5, false] + ] + }, + { + "name" : "ethernet_t", + "id" : 2, + "fields" : [ + ["dst_addr", 48, false], + ["src_addr", 48, false], + ["ether_type", 16, false] + ] + }, + { + "name" : "vlan_tag_t", + "id" : 3, + "fields" : [ + ["pri", 3, false], + ["cfi", 1, false], + ["vlan_id", 12, false], + ["ether_type", 16, false] + ] + }, + { + "name" : "mpls_t", + "id" : 4, + "fields" : [ + ["label", 20, false], + ["tc", 3, false], + ["bos", 1, false], + ["ttl", 8, false] + ] + }, + { + "name" : "ipv4_t", + "id" : 5, + "fields" : [ + ["version", 4, false], + ["ihl", 4, false], + ["dscp", 6, false], + ["ecn", 2, false], + ["total_len", 16, false], + ["identification", 16, false], + ["flags", 3, false], + ["frag_offset", 13, false], + ["ttl", 8, false], + ["protocol", 8, false], + ["hdr_checksum", 16, false], + ["src_addr", 32, false], + ["dst_addr", 32, false] + ] + }, + { + "name" : "udp_t", + "id" : 6, + "fields" : [ + ["src_port", 16, false], + ["dst_port", 16, false], + ["len", 16, false], + ["checksum", 16, false] + ] + }, + { + "name" : "gtpu_t", + "id" : 7, + "fields" : [ + ["version", 3, false], + ["pt", 1, false], + ["spare", 1, false], + ["ex_flag", 1, false], + ["seq_flag", 1, false], + ["npdu_flag", 1, false], + ["msgtype", 8, false], + ["msglen", 16, false], + ["teid", 32, false] + ] + }, + { + "name" : "arp_t", + "id" : 8, + "fields" : [ + ["hw_type", 16, false], + ["proto_type", 16, false], + ["hw_addr_len", 8, false], + ["proto_addr_len", 8, false], + ["opcode", 16, false] + ] + }, + { + "name" : "tcp_t", + "id" : 9, + "fields" : [ + ["src_port", 16, false], + ["dst_port", 16, false], + ["seq_no", 32, false], + ["ack_no", 32, false], + ["data_offset", 4, false], + ["res", 3, false], + ["ecn", 3, false], + ["ctrl", 6, false], + ["window", 16, false], + ["checksum", 16, false], + ["urgent_ptr", 16, false] + ] + }, + { + "name" : "icmp_t", + "id" : 10, + "fields" : [ + ["icmp_type", 8, false], + ["icmp_code", 8, false], + ["checksum", 16, false], + ["identifier", 16, false], + ["sequence_number", 16, false], + ["timestamp", 64, false] + ] + }, + { + "name" : "packet_out_header_t", + "id" : 11, + "fields" : [ + ["egress_port", 9, false], + ["_pad", 7, false] + ] + }, + { + "name" : "packet_in_header_t", + "id" : 12, + "fields" : [ + ["ingress_port", 9, false], + ["_pad", 7, false] + ] + }, + { + "name" : "intl4_shim_t", + "id" : 13, + "fields" : [ + ["int_type", 8, false], + ["rsvd1", 8, false], + ["len_words", 8, false], + ["rsvd2", 8, false] + ] + }, + { + "name" : "int_header_t", + "id" : 14, + "fields" : [ + ["ver", 2, false], + ["rep", 2, false], + ["c", 1, false], + ["e", 1, false], + ["rsvd1", 5, false], + ["ins_cnt", 5, false], + ["max_hop_cnt", 8, false], + ["total_hop_cnt", 8, false], + ["instruction_mask_0003", 4, false], + ["instruction_mask_0407", 4, false], + ["instruction_mask_0811", 4, false], + ["instruction_mask_1215", 4, false], + ["rsvd2", 16, false] + ] + }, + { + "name" : "int_switch_id_t", + "id" : 15, + "fields" : [ + ["switch_id", 32, false] + ] + }, + { + "name" : "int_port_ids_t", + "id" : 16, + "fields" : [ + ["ingress_port_id", 16, false], + ["egress_port_id", 16, false] + ] + }, + { + "name" : "int_hop_latency_t", + "id" : 17, + "fields" : [ + ["hop_latency", 32, false] + ] + }, + { + "name" : "int_q_occupancy_t", + "id" : 18, + "fields" : [ + ["q_id", 8, false], + ["q_occupancy", 24, false] + ] + }, + { + "name" : "int_ingress_tstamp_t", + "id" : 19, + "fields" : [ + ["ingress_tstamp", 32, false] + ] + }, + { + "name" : "int_egress_tstamp_t", + "id" : 20, + "fields" : [ + ["egress_tstamp", 32, false] + ] + }, + { + "name" : "int_q_congestion_t", + "id" : 21, + "fields" : [ + ["q_id", 8, false], + ["q_congestion", 24, false] + ] + }, + { + "name" : "int_egress_port_tx_util_t", + "id" : 22, + "fields" : [ + ["egress_port_tx_util", 32, false] + ] + }, + { + "name" : "int_data_t", + "id" : 23, + "fields" : [ + ["data", "*"] + ], + "max_length" : 1004 + }, + { + "name" : "intl4_tail_t", + "id" : 24, + "fields" : [ + ["next_proto", 8, false], + ["dest_port", 16, false], + ["padding", 2, false], + ["dscp", 6, false] + ] + }, + { + "name" : "spgw_meta_t", + "id" : 25, + "fields" : [ + ["direction", 2, false], + ["ipv4_len", 16, false], + ["teid", 32, false], + ["s1u_enb_addr", 32, false], + ["s1u_sgw_addr", 32, false], + ["_padding_0", 6, false] + ] + }, + { + "name" : "int_metadata_t", + "id" : 26, + "fields" : [ + ["source", 1, 0], + ["transit", 1, 0], + ["sink", 1, 0], + ["switch_id", 32, false], + ["new_words", 8, false], + ["new_bytes", 16, false], + ["_padding_1", 5, false] + ] + } + ], + "headers" : [ + { + "name" : "scalars", + "id" : 0, + "header_type" : "scalars_0", + "metadata" : true, + "pi_omit" : true + }, + { + "name" : "standard_metadata", + "id" : 1, + "header_type" : "standard_metadata", + "metadata" : true, + "pi_omit" : true + }, + { + "name" : "ethernet", + "id" : 2, + "header_type" : "ethernet_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "vlan_tag", + "id" : 3, + "header_type" : "vlan_tag_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "mpls", + "id" : 4, + "header_type" : "mpls_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "gtpu_ipv4", + "id" : 5, + "header_type" : "ipv4_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "gtpu_udp", + "id" : 6, + "header_type" : "udp_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "gtpu", + "id" : 7, + "header_type" : "gtpu_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "inner_ipv4", + "id" : 8, + "header_type" : "ipv4_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "inner_udp", + "id" : 9, + "header_type" : "udp_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "ipv4", + "id" : 10, + "header_type" : "ipv4_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "arp", + "id" : 11, + "header_type" : "arp_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "tcp", + "id" : 12, + "header_type" : "tcp_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "udp", + "id" : 13, + "header_type" : "udp_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "icmp", + "id" : 14, + "header_type" : "icmp_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "packet_out", + "id" : 15, + "header_type" : "packet_out_header_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "packet_in", + "id" : 16, + "header_type" : "packet_in_header_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "intl4_shim", + "id" : 17, + "header_type" : "intl4_shim_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "int_header", + "id" : 18, + "header_type" : "int_header_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "int_switch_id", + "id" : 19, + "header_type" : "int_switch_id_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "int_port_ids", + "id" : 20, + "header_type" : "int_port_ids_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "int_hop_latency", + "id" : 21, + "header_type" : "int_hop_latency_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "int_q_occupancy", + "id" : 22, + "header_type" : "int_q_occupancy_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "int_ingress_tstamp", + "id" : 23, + "header_type" : "int_ingress_tstamp_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "int_egress_tstamp", + "id" : 24, + "header_type" : "int_egress_tstamp_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "int_q_congestion", + "id" : 25, + "header_type" : "int_q_congestion_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "int_egress_tx_util", + "id" : 26, + "header_type" : "int_egress_port_tx_util_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "int_data", + "id" : 27, + "header_type" : "int_data_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "intl4_tail", + "id" : 28, + "header_type" : "intl4_tail_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "userMetadata.spgw", + "id" : 29, + "header_type" : "spgw_meta_t", + "metadata" : true, + "pi_omit" : true + }, + { + "name" : "userMetadata.int_meta", + "id" : 30, + "header_type" : "int_metadata_t", + "metadata" : true, + "pi_omit" : true + } + ], + "header_stacks" : [], + "header_union_types" : [], + "header_unions" : [], + "header_union_stacks" : [], + "field_lists" : [], + "errors" : [], + "enums" : [], + "parsers" : [ + { + "name" : "parser", + "id" : 0, + "init_state" : "start", + "parse_states" : [ + { + "name" : "start", + "id" : 0, + "parser_ops" : [], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x00ff", + "mask" : null, + "next_state" : "parse_packet_out" + }, + { + "value" : "default", + "mask" : null, + "next_state" : "parse_ethernet" + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + } + ] + }, + { + "name" : "parse_packet_out", + "id" : 1, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "packet_out" + } + ], + "op" : "extract" + } + ], + "transitions" : [ + { + "value" : "default", + "mask" : null, + "next_state" : "parse_ethernet" + } + ], + "transition_key" : [] + }, + { + "name" : "parse_ethernet", + "id" : 2, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "ethernet" + } + ], + "op" : "extract" + } + ], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x8100", + "mask" : null, + "next_state" : "parse_vlan_tag" + }, + { + "type" : "hexstr", + "value" : "0x8847", + "mask" : null, + "next_state" : "parse_mpls" + }, + { + "type" : "hexstr", + "value" : "0x0806", + "mask" : null, + "next_state" : "parse_arp" + }, + { + "type" : "hexstr", + "value" : "0x0800", + "mask" : null, + "next_state" : "parse_ipv4" + }, + { + "value" : "default", + "mask" : null, + "next_state" : null + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["ethernet", "ether_type"] + } + ] + }, + { + "name" : "parse_vlan_tag", + "id" : 3, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "vlan_tag" + } + ], + "op" : "extract" + } + ], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x0806", + "mask" : null, + "next_state" : "parse_arp" + }, + { + "type" : "hexstr", + "value" : "0x0800", + "mask" : null, + "next_state" : "parse_ipv4" + }, + { + "type" : "hexstr", + "value" : "0x8847", + "mask" : null, + "next_state" : "parse_mpls" + }, + { + "value" : "default", + "mask" : null, + "next_state" : null + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["vlan_tag", "ether_type"] + } + ] + }, + { + "name" : "parse_mpls", + "id" : 4, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "mpls" + } + ], + "op" : "extract" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp"] + }, + { + "type" : "lookahead", + "value" : [0, 4] + } + ], + "op" : "set" + } + ], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x04", + "mask" : null, + "next_state" : "parse_ipv4" + }, + { + "value" : "default", + "mask" : null, + "next_state" : "parse_ethernet" + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["scalars", "tmp"] + } + ] + }, + { + "name" : "parse_ipv4", + "id" : 5, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "ipv4" + } + ], + "op" : "extract" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.ip_proto"] + }, + { + "type" : "field", + "value" : ["ipv4", "protocol"] + } + ], + "op" : "set" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "last_ipv4_dscp"] + }, + { + "type" : "field", + "value" : ["ipv4", "dscp"] + } + ], + "op" : "set" + } + ], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x06", + "mask" : null, + "next_state" : "parse_tcp" + }, + { + "type" : "hexstr", + "value" : "0x11", + "mask" : null, + "next_state" : "parse_udp" + }, + { + "type" : "hexstr", + "value" : "0x01", + "mask" : null, + "next_state" : "parse_icmp" + }, + { + "value" : "default", + "mask" : null, + "next_state" : null + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["ipv4", "protocol"] + } + ] + }, + { + "name" : "parse_arp", + "id" : 6, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "arp" + } + ], + "op" : "extract" + } + ], + "transitions" : [ + { + "value" : "default", + "mask" : null, + "next_state" : null + } + ], + "transition_key" : [] + }, + { + "name" : "parse_tcp", + "id" : 7, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "tcp" + } + ], + "op" : "extract" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.l4_src_port"] + }, + { + "type" : "field", + "value" : ["tcp", "src_port"] + } + ], + "op" : "set" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.l4_dst_port"] + }, + { + "type" : "field", + "value" : ["tcp", "dst_port"] + } + ], + "op" : "set" + } + ], + "transitions" : [ + { + "value" : "default", + "mask" : null, + "next_state" : "parse_int" + } + ], + "transition_key" : [] + }, + { + "name" : "parse_udp", + "id" : 8, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "udp" + } + ], + "op" : "extract" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.l4_src_port"] + }, + { + "type" : "field", + "value" : ["udp", "src_port"] + } + ], + "op" : "set" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.l4_dst_port"] + }, + { + "type" : "field", + "value" : ["udp", "dst_port"] + } + ], + "op" : "set" + } + ], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x0868", + "mask" : null, + "next_state" : "parse_gtpu" + }, + { + "value" : "default", + "mask" : null, + "next_state" : "parse_int" + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["udp", "dst_port"] + } + ] + }, + { + "name" : "parse_icmp", + "id" : 9, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "icmp" + } + ], + "op" : "extract" + } + ], + "transitions" : [ + { + "value" : "default", + "mask" : null, + "next_state" : null + } + ], + "transition_key" : [] + }, + { + "name" : "parse_gtpu", + "id" : 10, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : ">>", + "left" : { + "type" : "field", + "value" : ["ipv4", "dst_addr"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x18" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "op" : "set" + } + ], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x8c", + "mask" : null, + "next_state" : "do_parse_gtpu" + }, + { + "value" : "default", + "mask" : null, + "next_state" : null + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_0"] + } + ] + }, + { + "name" : "do_parse_gtpu", + "id" : 11, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "gtpu" + } + ], + "op" : "extract" + }, + { + "parameters" : [ + { + "type" : "regular", + "value" : "inner_ipv4" + } + ], + "op" : "extract" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "last_ipv4_dscp"] + }, + { + "type" : "field", + "value" : ["inner_ipv4", "dscp"] + } + ], + "op" : "set" + } + ], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x06", + "mask" : null, + "next_state" : "parse_tcp" + }, + { + "type" : "hexstr", + "value" : "0x11", + "mask" : null, + "next_state" : "parse_inner_udp" + }, + { + "type" : "hexstr", + "value" : "0x01", + "mask" : null, + "next_state" : "parse_icmp" + }, + { + "value" : "default", + "mask" : null, + "next_state" : null + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["inner_ipv4", "protocol"] + } + ] + }, + { + "name" : "parse_inner_udp", + "id" : 12, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "inner_udp" + } + ], + "op" : "extract" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.l4_src_port"] + }, + { + "type" : "field", + "value" : ["inner_udp", "src_port"] + } + ], + "op" : "set" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.l4_dst_port"] + }, + { + "type" : "field", + "value" : ["inner_udp", "dst_port"] + } + ], + "op" : "set" + } + ], + "transitions" : [ + { + "value" : "default", + "mask" : null, + "next_state" : "parse_int" + } + ], + "transition_key" : [] + }, + { + "name" : "parse_int", + "id" : 13, + "parser_ops" : [], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x01", + "mask" : "0x01", + "next_state" : "parse_intl4_shim" + }, + { + "value" : "default", + "mask" : null, + "next_state" : null + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["scalars", "last_ipv4_dscp"] + } + ] + }, + { + "name" : "parse_intl4_shim", + "id" : 14, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "intl4_shim" + } + ], + "op" : "extract" + }, + { + "parameters" : [ + { + "type" : "regular", + "value" : "int_header" + } + ], + "op" : "extract" + } + ], + "transitions" : [ + { + "type" : "hexstr", + "value" : "0x04", + "mask" : null, + "next_state" : "parse_intl4_tail" + }, + { + "value" : "default", + "mask" : null, + "next_state" : "parse_int_data" + } + ], + "transition_key" : [ + { + "type" : "field", + "value" : ["intl4_shim", "len_words"] + } + ] + }, + { + "name" : "parse_int_data", + "id" : 15, + "parser_ops" : [], + "transitions" : [ + { + "value" : "default", + "mask" : null, + "next_state" : null + } + ], + "transition_key" : [] + }, + { + "name" : "parse_intl4_tail", + "id" : 16, + "parser_ops" : [ + { + "parameters" : [ + { + "type" : "regular", + "value" : "intl4_tail" + } + ], + "op" : "extract" + } + ], + "transitions" : [ + { + "value" : "default", + "mask" : null, + "next_state" : null + } + ], + "transition_key" : [] + } + ] + } + ], + "parse_vsets" : [], + "deparsers" : [ + { + "name" : "deparser", + "id" : 0, + "source_info" : { + "filename" : "include/parser.p4", + "line" : 228, + "column" : 8, + "source_fragment" : "FabricDeparser" + }, + "order" : ["packet_in", "ethernet", "vlan_tag", "mpls", "arp", "gtpu_ipv4", "gtpu_udp", "gtpu", "ipv4", "tcp", "udp", "icmp", "intl4_shim", "int_header", "int_switch_id", "int_port_ids", "int_hop_latency", "int_q_occupancy", "int_ingress_tstamp", "int_egress_tstamp", "int_q_congestion", "int_egress_tx_util", "int_data", "intl4_tail"] + } + ], + "meter_arrays" : [], + "counter_arrays" : [ + { + "name" : "FabricIngress.spgw_ingress.ue_counter", + "id" : 0, + "is_direct" : true, + "binding" : "FabricIngress.spgw_ingress.dl_sess_lookup" + }, + { + "name" : "FabricIngress.process_set_source_sink.counter_set_source", + "id" : 1, + "is_direct" : true, + "binding" : "FabricIngress.process_set_source_sink.tb_set_source" + }, + { + "name" : "FabricIngress.filtering.ingress_port_vlan_counter", + "id" : 2, + "is_direct" : true, + "binding" : "FabricIngress.filtering.ingress_port_vlan" + }, + { + "name" : "FabricIngress.filtering.fwd_classifier_counter", + "id" : 3, + "is_direct" : true, + "binding" : "FabricIngress.filtering.fwd_classifier" + }, + { + "name" : "FabricIngress.forwarding.bridging_counter", + "id" : 4, + "is_direct" : true, + "binding" : "FabricIngress.forwarding.bridging" + }, + { + "name" : "FabricIngress.forwarding.mpls_counter", + "id" : 5, + "is_direct" : true, + "binding" : "FabricIngress.forwarding.mpls" + }, + { + "name" : "FabricIngress.forwarding.routing_v4_counter", + "id" : 6, + "is_direct" : true, + "binding" : "FabricIngress.forwarding.routing_v4" + }, + { + "name" : "FabricIngress.forwarding.acl_counter", + "id" : 7, + "is_direct" : true, + "binding" : "FabricIngress.forwarding.acl" + }, + { + "name" : "FabricIngress.next.vlan_meta_counter", + "id" : 8, + "is_direct" : true, + "binding" : "FabricIngress.next.vlan_meta" + }, + { + "name" : "FabricIngress.next.simple_counter", + "id" : 9, + "is_direct" : true, + "binding" : "FabricIngress.next.simple" + }, + { + "name" : "FabricIngress.next.hashed_counter", + "id" : 10, + "is_direct" : true, + "binding" : "FabricIngress.next.hashed" + }, + { + "name" : "FabricIngress.next.multicast_counter", + "id" : 11, + "is_direct" : true, + "binding" : "FabricIngress.next.multicast" + }, + { + "name" : "FabricIngress.port_counters_control.egress_port_counter", + "id" : 12, + "source_info" : { + "filename" : "include/control/port_counter.p4", + "line" : 23, + "column" : 48, + "source_fragment" : "egress_port_counter" + }, + "size" : 511, + "is_direct" : false + }, + { + "name" : "FabricIngress.port_counters_control.ingress_port_counter", + "id" : 13, + "source_info" : { + "filename" : "include/control/port_counter.p4", + "line" : 24, + "column" : 48, + "source_fragment" : "ingress_port_counter" + }, + "size" : 511, + "is_direct" : false + }, + { + "name" : "FabricEgress.process_int_main.process_int_source.counter_int_source", + "id" : 14, + "is_direct" : true, + "binding" : "FabricEgress.process_int_main.process_int_source.tb_int_source" + }, + { + "name" : "FabricEgress.egress_next.egress_vlan_counter", + "id" : 15, + "is_direct" : true, + "binding" : "FabricEgress.egress_next.egress_vlan" + } + ], + "register_arrays" : [], + "calculations" : [ + { + "name" : "calc", + "id" : 0, + "source_info" : { + "filename" : "include/checksum.p4", + "line" : 28, + "column" : 8, + "source_fragment" : "update_checksum(hdr.ipv4.isValid(), ..." + }, + "algo" : "csum16", + "input" : [ + { + "type" : "field", + "value" : ["ipv4", "version"] + }, + { + "type" : "field", + "value" : ["ipv4", "ihl"] + }, + { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + { + "type" : "field", + "value" : ["ipv4", "ecn"] + }, + { + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + { + "type" : "field", + "value" : ["ipv4", "identification"] + }, + { + "type" : "field", + "value" : ["ipv4", "flags"] + }, + { + "type" : "field", + "value" : ["ipv4", "frag_offset"] + }, + { + "type" : "field", + "value" : ["ipv4", "ttl"] + }, + { + "type" : "field", + "value" : ["ipv4", "protocol"] + }, + { + "type" : "field", + "value" : ["ipv4", "src_addr"] + }, + { + "type" : "field", + "value" : ["ipv4", "dst_addr"] + } + ] + }, + { + "name" : "calc_0", + "id" : 1, + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 237, + "column" : 8, + "source_fragment" : "update_checksum(gtpu_ipv4.isValid(), ..." + }, + "algo" : "csum16", + "input" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "version"] + }, + { + "type" : "field", + "value" : ["gtpu_ipv4", "ihl"] + }, + { + "type" : "field", + "value" : ["gtpu_ipv4", "dscp"] + }, + { + "type" : "field", + "value" : ["gtpu_ipv4", "ecn"] + }, + { + "type" : "field", + "value" : ["gtpu_ipv4", "total_len"] + }, + { + "type" : "field", + "value" : ["gtpu_ipv4", "identification"] + }, + { + "type" : "field", + "value" : ["gtpu_ipv4", "flags"] + }, + { + "type" : "field", + "value" : ["gtpu_ipv4", "frag_offset"] + }, + { + "type" : "field", + "value" : ["gtpu_ipv4", "ttl"] + }, + { + "type" : "field", + "value" : ["gtpu_ipv4", "protocol"] + }, + { + "type" : "field", + "value" : ["gtpu_ipv4", "src_addr"] + }, + { + "type" : "field", + "value" : ["gtpu_ipv4", "dst_addr"] + } + ] + }, + { + "name" : "calc_1", + "id" : 2, + "source_info" : { + "filename" : "include/checksum.p4", + "line" : 57, + "column" : 8, + "source_fragment" : "verify_checksum(hdr.ipv4.isValid(), ..." + }, + "algo" : "csum16", + "input" : [ + { + "type" : "field", + "value" : ["ipv4", "version"] + }, + { + "type" : "field", + "value" : ["ipv4", "ihl"] + }, + { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + { + "type" : "field", + "value" : ["ipv4", "ecn"] + }, + { + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + { + "type" : "field", + "value" : ["ipv4", "identification"] + }, + { + "type" : "field", + "value" : ["ipv4", "flags"] + }, + { + "type" : "field", + "value" : ["ipv4", "frag_offset"] + }, + { + "type" : "field", + "value" : ["ipv4", "ttl"] + }, + { + "type" : "field", + "value" : ["ipv4", "protocol"] + }, + { + "type" : "field", + "value" : ["ipv4", "src_addr"] + }, + { + "type" : "field", + "value" : ["ipv4", "dst_addr"] + } + ] + } + ], + "learn_lists" : [], + "actions" : [ + { + "name" : "NoAction", + "id" : 0, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 1, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 2, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 3, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 4, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 5, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 6, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 7, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 8, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "nop", + "id" : 9, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "drop_now", + "id" : 10, + "runtime_data" : [], + "primitives" : [ + { + "op" : "drop", + "parameters" : [], + "source_info" : { + "filename" : "include/control/../action.p4", + "line" : 24, + "column" : 4, + "source_fragment" : "mark_to_drop()" + } + }, + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "include/control/../action.p4", + "line" : 25, + "column" : 4, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "FabricIngress.spgw_ingress.gtpu_decap", + "id" : 11, + "runtime_data" : [], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ipv4" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 54, + "column" : 8, + "source_fragment" : "gtpu_ipv4.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_udp" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 55, + "column" : 8, + "source_fragment" : "gtpu_udp.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "gtpu.setInvalid()" + } + } + ] + }, + { + "name" : "FabricIngress.spgw_ingress.set_dl_sess_info", + "id" : 12, + "runtime_data" : [ + { + "name" : "teid", + "bitwidth" : 32 + }, + { + "name" : "s1u_enb_addr", + "bitwidth" : 32 + }, + { + "name" : "s1u_sgw_addr", + "bitwidth" : 32 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.spgw", "teid"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 62, + "column" : 8, + "source_fragment" : "spgw_meta.teid = teid" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.spgw", "s1u_enb_addr"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "spgw_meta.s1u_enb_addr = s1u_enb_addr" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.spgw", "s1u_sgw_addr"] + }, + { + "type" : "runtime_data", + "value" : 2 + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "spgw_meta.s1u_sgw_addr = s1u_sgw_addr" + } + } + ] + }, + { + "name" : "FabricIngress.process_set_source_sink.int_set_source", + "id" : 13, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "source"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_main.p4", + "line" : 42, + "column" : 8, + "source_fragment" : "fabric_metadata.int_meta.source = true" + } + } + ] + }, + { + "name" : "FabricIngress.filtering.drop", + "id" : 14, + "runtime_data" : [], + "primitives" : [ + { + "op" : "drop", + "parameters" : [], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 37, + "column" : 8, + "source_fragment" : "mark_to_drop()" + } + } + ] + }, + { + "name" : "FabricIngress.filtering.set_vlan", + "id" : 15, + "runtime_data" : [ + { + "name" : "new_vlan_id", + "bitwidth" : 12 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "vlan_id"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 42, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.vlan_id = new_vlan_id" + } + } + ] + }, + { + "name" : "FabricIngress.filtering.push_internal_vlan", + "id" : 16, + "runtime_data" : [ + { + "name" : "new_vlan_id", + "bitwidth" : 12 + } + ], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "vlan_tag" + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "cfi"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 50, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.cfi = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "pri"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.pri = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "ether_type"] + }, + { + "type" : "field", + "value" : ["ethernet", "ether_type"] + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.ether_type = hdr.ethernet.ether_type" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "ether_type"] + }, + { + "type" : "hexstr", + "value" : "0x8100" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 91, + "column" : 31, + "source_fragment" : "0x8100; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "vlan_id"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 54, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.vlan_id = new_vlan_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.pop_vlan_when_packet_in"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 57, + "column" : 8, + "source_fragment" : "fabric_metadata.pop_vlan_when_packet_in = true" + } + } + ] + }, + { + "name" : "FabricIngress.filtering.nop_ingress_port_vlan", + "id" : 17, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricIngress.filtering.set_forwarding_type", + "id" : 18, + "runtime_data" : [ + { + "name" : "fwd_type", + "bitwidth" : 3 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.fwd_type"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fabric_metadata.fwd_type = fwd_type" + } + } + ] + }, + { + "name" : "FabricIngress.forwarding.set_next_id_bridging", + "id" : 19, + "runtime_data" : [ + { + "name" : "next_id", + "bitwidth" : 32 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.next_id"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 37, + "column" : 8, + "source_fragment" : "fabric_metadata.next_id = next_id" + } + } + ] + }, + { + "name" : "FabricIngress.forwarding.pop_mpls_and_next", + "id" : 20, + "runtime_data" : [ + { + "name" : "next_id", + "bitwidth" : 32 + } + ], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "mpls" + } + ], + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 60, + "column" : 8, + "source_fragment" : "hdr.mpls.setInvalid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.next_id"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 61, + "column" : 8, + "source_fragment" : "fabric_metadata.next_id = next_id" + } + } + ] + }, + { + "name" : "FabricIngress.forwarding.set_next_id_routing_v4", + "id" : 21, + "runtime_data" : [ + { + "name" : "next_id", + "bitwidth" : 32 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.next_id"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 83, + "column" : 8, + "source_fragment" : "fabric_metadata.next_id = next_id" + } + } + ] + }, + { + "name" : "FabricIngress.forwarding.nop_routing_v4", + "id" : 22, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricIngress.forwarding.set_next_id_acl", + "id" : 23, + "runtime_data" : [ + { + "name" : "next_id", + "bitwidth" : 32 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.next_id"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 110, + "column" : 8, + "source_fragment" : "fabric_metadata.next_id = next_id" + } + } + ] + }, + { + "name" : "FabricIngress.forwarding.punt_to_cpu", + "id" : 24, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "hexstr", + "value" : "0x00ff" + } + ], + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 116, + "column" : 8, + "source_fragment" : "standard_metadata.egress_spec = 255" + } + }, + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 118, + "column" : 8, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "FabricIngress.forwarding.clone_to_cpu", + "id" : 25, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.clone_to_cpu"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 123, + "column" : 8, + "source_fragment" : "fabric_metadata.clone_to_cpu = true" + } + } + ] + }, + { + "name" : "FabricIngress.forwarding.drop", + "id" : 26, + "runtime_data" : [], + "primitives" : [ + { + "op" : "drop", + "parameters" : [], + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 128, + "column" : 8, + "source_fragment" : "mark_to_drop()" + } + } + ] + }, + { + "name" : "FabricIngress.forwarding.nop_acl", + "id" : 27, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricIngress.next.set_vlan", + "id" : 28, + "runtime_data" : [ + { + "name" : "new_vlan_id", + "bitwidth" : 12 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "vlan_id"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 61, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.vlan_id = new_vlan_id" + } + } + ] + }, + { + "name" : "FabricIngress.next.output_simple", + "id" : 29, + "runtime_data" : [ + { + "name" : "port_num", + "bitwidth" : 9 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 85, + "column" : 8, + "source_fragment" : "standard_metadata.egress_spec = port_num" + } + } + ] + }, + { + "name" : "FabricIngress.next.set_vlan_output", + "id" : 30, + "runtime_data" : [ + { + "name" : "new_vlan_id", + "bitwidth" : 12 + }, + { + "name" : "port_num", + "bitwidth" : 9 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "vlan_id"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 90, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.vlan_id = new_vlan_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 85, + "column" : 8, + "source_fragment" : "standard_metadata.egress_spec = port_num; ..." + } + } + ] + }, + { + "name" : "FabricIngress.next.l3_routing_simple", + "id" : 31, + "runtime_data" : [ + { + "name" : "port_num", + "bitwidth" : 9 + }, + { + "name" : "smac", + "bitwidth" : 48 + }, + { + "name" : "dmac", + "bitwidth" : 48 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "src_addr"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 37, + "column" : 8, + "source_fragment" : "hdr.ethernet.src_addr = smac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "dst_addr"] + }, + { + "type" : "runtime_data", + "value" : 2 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.ethernet.dst_addr = dmac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 85, + "column" : 8, + "source_fragment" : "standard_metadata.egress_spec = port_num; ..." + } + } + ] + }, + { + "name" : "FabricIngress.next.mpls_routing_v4_simple", + "id" : 32, + "runtime_data" : [ + { + "name" : "port_num", + "bitwidth" : 9 + }, + { + "name" : "smac", + "bitwidth" : 48 + }, + { + "name" : "dmac", + "bitwidth" : 48 + }, + { + "name" : "label", + "bitwidth" : 20 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "src_addr"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 37, + "column" : 8, + "source_fragment" : "hdr.ethernet.src_addr = smac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "dst_addr"] + }, + { + "type" : "runtime_data", + "value" : 2 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.ethernet.dst_addr = dmac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 85, + "column" : 8, + "source_fragment" : "standard_metadata.egress_spec = port_num; ..." + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "mpls" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.mpls.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "ether_type"] + }, + { + "type" : "hexstr", + "value" : "0x8847" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 92, + "column" : 31, + "source_fragment" : "0x8847; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "label"] + }, + { + "type" : "runtime_data", + "value" : 3 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.mpls.label = label; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "tc"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.mpls.tc = tc; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "bos"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 50, + "column" : 8, + "source_fragment" : "hdr.mpls.bos = 1w1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "ttl"] + }, + { + "type" : "hexstr", + "value" : "0x40" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 115, + "column" : 32, + "source_fragment" : "64; ..." + } + } + ] + }, + { + "name" : "FabricIngress.next.mpls_routing_v6_simple", + "id" : 33, + "runtime_data" : [ + { + "name" : "port_num", + "bitwidth" : 9 + }, + { + "name" : "smac", + "bitwidth" : 48 + }, + { + "name" : "dmac", + "bitwidth" : 48 + }, + { + "name" : "label", + "bitwidth" : 20 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "src_addr"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 37, + "column" : 8, + "source_fragment" : "hdr.ethernet.src_addr = smac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "dst_addr"] + }, + { + "type" : "runtime_data", + "value" : 2 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.ethernet.dst_addr = dmac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 85, + "column" : 8, + "source_fragment" : "standard_metadata.egress_spec = port_num; ..." + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "mpls" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.mpls.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "ether_type"] + }, + { + "type" : "hexstr", + "value" : "0x8847" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 92, + "column" : 31, + "source_fragment" : "0x8847; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "label"] + }, + { + "type" : "runtime_data", + "value" : 3 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.mpls.label = label; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "tc"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.mpls.tc = tc; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "bos"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 50, + "column" : 8, + "source_fragment" : "hdr.mpls.bos = 1w1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "ttl"] + }, + { + "type" : "hexstr", + "value" : "0x40" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 115, + "column" : 32, + "source_fragment" : "64; ..." + } + } + ] + }, + { + "name" : "FabricIngress.next.l3_routing_vlan", + "id" : 34, + "runtime_data" : [ + { + "name" : "port_num", + "bitwidth" : 9 + }, + { + "name" : "smac", + "bitwidth" : 48 + }, + { + "name" : "dmac", + "bitwidth" : 48 + }, + { + "name" : "new_vlan_id", + "bitwidth" : 12 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "src_addr"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 37, + "column" : 8, + "source_fragment" : "hdr.ethernet.src_addr = smac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "dst_addr"] + }, + { + "type" : "runtime_data", + "value" : 2 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.ethernet.dst_addr = dmac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "vlan_id"] + }, + { + "type" : "runtime_data", + "value" : 3 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 90, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.vlan_id = new_vlan_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 85, + "column" : 8, + "source_fragment" : "standard_metadata.egress_spec = port_num; ..." + } + } + ] + }, + { + "name" : "FabricIngress.next.l3_routing_hashed", + "id" : 35, + "runtime_data" : [ + { + "name" : "port_num", + "bitwidth" : 9 + }, + { + "name" : "smac", + "bitwidth" : 48 + }, + { + "name" : "dmac", + "bitwidth" : 48 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "src_addr"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 37, + "column" : 8, + "source_fragment" : "hdr.ethernet.src_addr = smac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "dst_addr"] + }, + { + "type" : "runtime_data", + "value" : 2 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.ethernet.dst_addr = dmac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 149, + "column" : 8, + "source_fragment" : "standard_metadata.egress_spec = port_num; ..." + } + } + ] + }, + { + "name" : "FabricIngress.next.mpls_routing_v4_hashed", + "id" : 36, + "runtime_data" : [ + { + "name" : "port_num", + "bitwidth" : 9 + }, + { + "name" : "smac", + "bitwidth" : 48 + }, + { + "name" : "dmac", + "bitwidth" : 48 + }, + { + "name" : "label", + "bitwidth" : 20 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "src_addr"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 37, + "column" : 8, + "source_fragment" : "hdr.ethernet.src_addr = smac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "dst_addr"] + }, + { + "type" : "runtime_data", + "value" : 2 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.ethernet.dst_addr = dmac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 149, + "column" : 8, + "source_fragment" : "standard_metadata.egress_spec = port_num; ..." + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "mpls" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.mpls.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "ether_type"] + }, + { + "type" : "hexstr", + "value" : "0x8847" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 92, + "column" : 31, + "source_fragment" : "0x8847; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "label"] + }, + { + "type" : "runtime_data", + "value" : 3 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.mpls.label = label; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "tc"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.mpls.tc = tc; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "bos"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 50, + "column" : 8, + "source_fragment" : "hdr.mpls.bos = 1w1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "ttl"] + }, + { + "type" : "hexstr", + "value" : "0x40" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 115, + "column" : 32, + "source_fragment" : "64; ..." + } + } + ] + }, + { + "name" : "FabricIngress.next.mpls_routing_v6_hashed", + "id" : 37, + "runtime_data" : [ + { + "name" : "port_num", + "bitwidth" : 9 + }, + { + "name" : "smac", + "bitwidth" : 48 + }, + { + "name" : "dmac", + "bitwidth" : 48 + }, + { + "name" : "label", + "bitwidth" : 20 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "src_addr"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 37, + "column" : 8, + "source_fragment" : "hdr.ethernet.src_addr = smac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "dst_addr"] + }, + { + "type" : "runtime_data", + "value" : 2 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.ethernet.dst_addr = dmac; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 149, + "column" : 8, + "source_fragment" : "standard_metadata.egress_spec = port_num; ..." + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "mpls" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.mpls.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "ether_type"] + }, + { + "type" : "hexstr", + "value" : "0x8847" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 92, + "column" : 31, + "source_fragment" : "0x8847; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "label"] + }, + { + "type" : "runtime_data", + "value" : 3 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.mpls.label = label; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "tc"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 49, + "column" : 8, + "source_fragment" : "hdr.mpls.tc = tc; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "bos"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 50, + "column" : 8, + "source_fragment" : "hdr.mpls.bos = 1w1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["mpls", "ttl"] + }, + { + "type" : "hexstr", + "value" : "0x40" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 115, + "column" : 32, + "source_fragment" : "64; ..." + } + } + ] + }, + { + "name" : "FabricIngress.next.set_mcast_group", + "id" : 38, + "runtime_data" : [ + { + "name" : "gid", + "bitwidth" : 16 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "mcast_grp"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 202, + "column" : 8, + "source_fragment" : "standard_metadata.mcast_grp = gid" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.is_multicast"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 203, + "column" : 8, + "source_fragment" : "fabric_metadata.is_multicast = true" + } + } + ] + }, + { + "name" : "act", + "id" : 39, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "spgw_normalizer_hasReturned_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 30, + "column" : 32, + "source_fragment" : "return" + } + } + ] + }, + { + "name" : "act_0", + "id" : 40, + "runtime_data" : [], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ipv4" + } + ], + "source_info" : { + "filename" : "fabric.p4", + "line" : 54, + "column" : 50, + "source_fragment" : "hdr.gtpu_ipv4" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_udp" + } + ], + "source_info" : { + "filename" : "fabric.p4", + "line" : 54, + "column" : 65, + "source_fragment" : "hdr.gtpu_udp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "spgw_normalizer_hasReturned_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "act_1", + "id" : 41, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "udp" + }, + { + "type" : "header", + "value" : "inner_udp" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 35, + "column" : 16, + "source_fragment" : "= inner_udp; ..." + } + } + ] + }, + { + "name" : "act_2", + "id" : 42, + "runtime_data" : [], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "udp" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 37, + "column" : 12, + "source_fragment" : "udp.setInvalid()" + } + } + ] + }, + { + "name" : "act_3", + "id" : 43, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ipv4" + }, + { + "type" : "header", + "value" : "ipv4" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 31, + "column" : 18, + "source_fragment" : "= ipv4; ..." + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "ipv4" + }, + { + "type" : "header", + "value" : "inner_ipv4" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 32, + "column" : 13, + "source_fragment" : "= inner_ipv4; ..." + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_udp" + }, + { + "type" : "header", + "value" : "udp" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 33, + "column" : 17, + "source_fragment" : "= udp; ..." + } + } + ] + }, + { + "name" : "act_4", + "id" : 44, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "field", + "value" : ["packet_out", "egress_port"] + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 26, + "column" : 12, + "source_fragment" : "standard_metadata.egress_spec = hdr.packet_out.egress_port" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "packet_out" + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 27, + "column" : 12, + "source_fragment" : "hdr.packet_out.setInvalid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.is_controller_packet_out"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 28, + "column" : 12, + "source_fragment" : "fabric_metadata.is_controller_packet_out = true" + } + } + ] + }, + { + "name" : "act_5", + "id" : 45, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "spgw_ingress_tmp_1"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ] + } + ] + }, + { + "name" : "act_6", + "id" : 46, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "spgw_ingress_tmp_1"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "act_7", + "id" : 47, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.spgw", "direction"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 121, + "column" : 36, + "source_fragment" : "2w1; ..." + } + } + ] + }, + { + "name" : "act_8", + "id" : 48, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "spgw_ingress_tmp_2"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ] + } + ] + }, + { + "name" : "act_9", + "id" : 49, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "spgw_ingress_tmp_2"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "act_10", + "id" : 50, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.spgw", "direction"] + }, + { + "type" : "hexstr", + "value" : "0x02" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 122, + "column" : 38, + "source_fragment" : "2w2; ..." + } + } + ] + }, + { + "name" : "act_11", + "id" : 51, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.spgw", "direction"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 120, + "column" : 37, + "source_fragment" : "2w0; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "spgw_ingress_hasReturned_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 153, + "column" : 12, + "source_fragment" : "return" + } + } + ] + }, + { + "name" : "act_12", + "id" : 52, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "spgw_ingress_hasReturned_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "act_13", + "id" : 53, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.spgw", "ipv4_len"] + }, + { + "type" : "field", + "value" : ["ipv4", "total_len"] + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 170, + "column" : 8, + "source_fragment" : "spgw_meta.ipv4_len = ipv4.total_len" + } + } + ] + }, + { + "name" : "act_14", + "id" : 54, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "filtering_tmp_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ] + } + ] + }, + { + "name" : "act_15", + "id" : 55, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "filtering_tmp_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "act_16", + "id" : 56, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.fwd_type"] + }, + { + "type" : "hexstr", + "value" : "0x07" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 111, + "column" : 31, + "source_fragment" : "7; ..." + } + } + ] + }, + { + "name" : "act_17", + "id" : 57, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["vlan_tag", "ether_type"] + }, + { + "type" : "hexstr", + "value" : "0x0800" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 94, + "column" : 31, + "source_fragment" : "0x0800; ..." + } + } + ] + }, + { + "name" : "act_18", + "id" : 58, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "next_hasReturned_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "act_19", + "id" : 59, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "next_tmp_4"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ] + } + ] + }, + { + "name" : "act_20", + "id" : 60, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "next_tmp_4"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "act_21", + "id" : 61, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "next_tmp_3"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ] + } + ] + }, + { + "name" : "act_22", + "id" : 62, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "next_tmp_3"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "act_23", + "id" : 63, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "next_tmp_2"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ] + } + ] + }, + { + "name" : "act_24", + "id" : 64, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "next_tmp_2"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "act_25", + "id" : 65, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "next_hasReturned_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 223, + "column" : 20, + "source_fragment" : "return" + } + } + ] + }, + { + "name" : "act_26", + "id" : 66, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ipv4", "ttl"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["ipv4", "ttl"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 230, + "column" : 16, + "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1" + } + } + ] + }, + { + "name" : "act_27", + "id" : 67, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_1"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/port_counter.p4", + "line" : 28, + "column" : 38, + "source_fragment" : "(bit<32>)standard_metadata.egress_spec" + } + }, + { + "op" : "count", + "parameters" : [ + { + "type" : "counter_array", + "value" : "FabricIngress.port_counters_control.egress_port_counter" + }, + { + "type" : "field", + "value" : ["scalars", "tmp_1"] + } + ], + "source_info" : { + "filename" : "include/control/port_counter.p4", + "line" : 28, + "column" : 12, + "source_fragment" : "egress_port_counter.count((bit<32>)standard_metadata.egress_spec)" + } + } + ] + }, + { + "name" : "act_28", + "id" : 68, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_2"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/control/port_counter.p4", + "line" : 31, + "column" : 39, + "source_fragment" : "(bit<32>)standard_metadata.ingress_port" + } + }, + { + "op" : "count", + "parameters" : [ + { + "type" : "counter_array", + "value" : "FabricIngress.port_counters_control.ingress_port_counter" + }, + { + "type" : "field", + "value" : ["scalars", "tmp_2"] + } + ], + "source_info" : { + "filename" : "include/control/port_counter.p4", + "line" : 31, + "column" : 12, + "source_fragment" : "ingress_port_counter.count((bit<32>)standard_metadata.ingress_port)" + } + } + ] + }, + { + "name" : "NoAction", + "id" : 69, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 70, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 71, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "nop", + "id" : 72, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "nop", + "id" : 73, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "drop_now", + "id" : 74, + "runtime_data" : [], + "primitives" : [ + { + "op" : "drop", + "parameters" : [], + "source_info" : { + "filename" : "include/control/../action.p4", + "line" : 24, + "column" : 4, + "source_fragment" : "mark_to_drop()" + } + }, + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "include/control/../action.p4", + "line" : 25, + "column" : 4, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "drop_now", + "id" : 75, + "runtime_data" : [], + "primitives" : [ + { + "op" : "drop", + "parameters" : [], + "source_info" : { + "filename" : "include/control/../action.p4", + "line" : 24, + "column" : 4, + "source_fragment" : "mark_to_drop()" + } + }, + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "include/control/../action.p4", + "line" : 25, + "column" : 4, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "FabricEgress.spgw_egress.gtpu_encap", + "id" : 76, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_ipv4" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 185, + "column" : 8, + "source_fragment" : "gtpu_ipv4.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "version"] + }, + { + "type" : "hexstr", + "value" : "0x04" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 186, + "column" : 8, + "source_fragment" : "gtpu_ipv4.version = 4" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "ihl"] + }, + { + "type" : "hexstr", + "value" : "0x05" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 103, + "column" : 28, + "source_fragment" : "5; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "dscp"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 188, + "column" : 8, + "source_fragment" : "gtpu_ipv4.dscp = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "ecn"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 189, + "column" : 8, + "source_fragment" : "gtpu_ipv4.ecn = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "total_len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0024" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 190, + "column" : 8, + "source_fragment" : "gtpu_ipv4.total_len = ipv4.total_len ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "identification"] + }, + { + "type" : "hexstr", + "value" : "0x1513" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 192, + "column" : 8, + "source_fragment" : "gtpu_ipv4.identification = 0x1513" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "flags"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 193, + "column" : 8, + "source_fragment" : "gtpu_ipv4.flags = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "frag_offset"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 194, + "column" : 8, + "source_fragment" : "gtpu_ipv4.frag_offset = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "ttl"] + }, + { + "type" : "hexstr", + "value" : "0x40" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 116, + "column" : 32, + "source_fragment" : "64; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "protocol"] + }, + { + "type" : "hexstr", + "value" : "0x11" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 100, + "column" : 25, + "source_fragment" : "17; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "dst_addr"] + }, + { + "type" : "field", + "value" : ["userMetadata.spgw", "s1u_enb_addr"] + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 197, + "column" : 8, + "source_fragment" : "gtpu_ipv4.dst_addr = spgw_meta.s1u_enb_addr" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "src_addr"] + }, + { + "type" : "field", + "value" : ["userMetadata.spgw", "s1u_sgw_addr"] + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 198, + "column" : 8, + "source_fragment" : "gtpu_ipv4.src_addr = spgw_meta.s1u_sgw_addr" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_ipv4", "hdr_checksum"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 199, + "column" : 8, + "source_fragment" : "gtpu_ipv4.hdr_checksum = 0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu_udp" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 201, + "column" : 8, + "source_fragment" : "gtpu_udp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_udp", "src_port"] + }, + { + "type" : "hexstr", + "value" : "0x0868" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 202, + "column" : 8, + "source_fragment" : "gtpu_udp.src_port = 2152" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_udp", "dst_port"] + }, + { + "type" : "hexstr", + "value" : "0x0868" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 203, + "column" : 8, + "source_fragment" : "gtpu_udp.dst_port = 2152" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_udp", "len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.spgw", "ipv4_len"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0010" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 204, + "column" : 8, + "source_fragment" : "gtpu_udp.len = spgw_meta.ipv4_len ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu_udp", "checksum"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 206, + "column" : 8, + "source_fragment" : "gtpu_udp.checksum = 0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "gtpu" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 208, + "column" : 8, + "source_fragment" : "gtpu.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu", "version"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 209, + "column" : 8, + "source_fragment" : "gtpu.version = 0x01" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu", "pt"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 210, + "column" : 8, + "source_fragment" : "gtpu.pt = 0x01" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu", "spare"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 211, + "column" : 8, + "source_fragment" : "gtpu.spare = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu", "ex_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 212, + "column" : 8, + "source_fragment" : "gtpu.ex_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu", "seq_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 213, + "column" : 8, + "source_fragment" : "gtpu.seq_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu", "npdu_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 214, + "column" : 8, + "source_fragment" : "gtpu.npdu_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu", "msgtype"] + }, + { + "type" : "hexstr", + "value" : "0xff" + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 215, + "column" : 8, + "source_fragment" : "gtpu.msgtype = 0xff" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu", "msglen"] + }, + { + "type" : "field", + "value" : ["userMetadata.spgw", "ipv4_len"] + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 216, + "column" : 8, + "source_fragment" : "gtpu.msglen = spgw_meta.ipv4_len" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["gtpu", "teid"] + }, + { + "type" : "field", + "value" : ["userMetadata.spgw", "teid"] + } + ], + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 217, + "column" : 8, + "source_fragment" : "gtpu.teid = spgw_meta.teid" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_source.int_source_dscp", + "id" : 77, + "runtime_data" : [ + { + "name" : "max_hop", + "bitwidth" : 8 + }, + { + "name" : "ins_cnt", + "bitwidth" : 5 + }, + { + "name" : "ins_mask0003", + "bitwidth" : 4 + }, + { + "name" : "ins_mask0407", + "bitwidth" : 4 + } + ], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "intl4_shim" + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 31, + "column" : 8, + "source_fragment" : "hdr.intl4_shim.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["intl4_shim", "int_type"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 33, + "column" : 8, + "source_fragment" : "hdr.intl4_shim.int_type = 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["intl4_shim", "len_words"] + }, + { + "type" : "hexstr", + "value" : "0x04" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 131, + "column" : 36, + "source_fragment" : "4; ..." + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_header" + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 36, + "column" : 8, + "source_fragment" : "hdr.int_header.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "ver"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 37, + "column" : 8, + "source_fragment" : "hdr.int_header.ver = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "rep"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 38, + "column" : 8, + "source_fragment" : "hdr.int_header.rep = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "c"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 39, + "column" : 8, + "source_fragment" : "hdr.int_header.c = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "e"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_header.e = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "rsvd1"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_header.rsvd1 = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "ins_cnt"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 42, + "column" : 8, + "source_fragment" : "hdr.int_header.ins_cnt = ins_cnt; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "max_hop_cnt"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 43, + "column" : 8, + "source_fragment" : "hdr.int_header.max_hop_cnt = max_hop; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "total_hop_cnt"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 44, + "column" : 8, + "source_fragment" : "hdr.int_header.total_hop_cnt = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "instruction_mask_0003"] + }, + { + "type" : "runtime_data", + "value" : 2 + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_header.instruction_mask_0003 = ins_mask0003; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "instruction_mask_0407"] + }, + { + "type" : "runtime_data", + "value" : 3 + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_header.instruction_mask_0407 = ins_mask0407; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "instruction_mask_0811"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_header.instruction_mask_0811 = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "instruction_mask_1215"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 48, + "column" : 8, + "source_fragment" : "hdr.int_header.instruction_mask_1215 = 0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "intl4_tail" + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 50, + "column" : 8, + "source_fragment" : "hdr.intl4_tail.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["intl4_tail", "next_proto"] + }, + { + "type" : "field", + "value" : ["ipv4", "protocol"] + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.intl4_tail.next_proto = hdr.ipv4.protocol" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["intl4_tail", "dest_port"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.l4_dst_port"] + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.intl4_tail.dest_port = fabric_metadata.l4_dst_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["intl4_tail", "dscp"] + }, + { + "type" : "field", + "value" : ["ipv4", "dscp"] + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 53, + "column" : 8, + "source_fragment" : "hdr.intl4_tail.dscp = hdr.ipv4.dscp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0010" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 55, + "column" : 8, + "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + INT_HEADER_LEN_BYTES" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["udp", "len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["udp", "len"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0010" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.udp.len = hdr.udp.len + INT_HEADER_LEN_BYTES" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "include/control/../define.p4", + "line" : 127, + "column" : 24, + "source_fragment" : "0x1; ..." + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.init_metadata", + "id" : 78, + "runtime_data" : [ + { + "name" : "switch_id", + "bitwidth" : 32 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "transit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 26, + "column" : 8, + "source_fragment" : "fmeta.int_meta.transit = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 31, + "column" : 8, + "source_fragment" : "fmeta.int_meta.switch_id = switch_id" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", + "id" : 79, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", + "id" : 80, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", + "id" : 81, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_hop_latency", "hop_latency"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", + "id" : 82, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_hop_latency", "hop_latency"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", + "id" : 83, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", + "id" : 84, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", + "id" : 85, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_hop_latency", "hop_latency"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", + "id" : 86, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_hop_latency", "hop_latency"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", + "id" : 87, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", + "id" : 88, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", + "id" : 89, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_hop_latency", "hop_latency"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", + "id" : 90, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_hop_latency", "hop_latency"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", + "id" : 91, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", + "id" : 92, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", + "id" : 93, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_hop_latency", "hop_latency"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", + "id" : 94, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 58, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_occupancy", "q_occupancy"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "deq_qdepth"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 59, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.q_occupancy = (bit<24>) smeta.deq_qdepth" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 51, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_hop_latency", "hop_latency"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 52, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.hop_latency = (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "ingress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.ingress_port_id = (bit<16>) smeta.ingress_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_port_ids", "egress_port_id"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.egress_port_id = (bit<16>) smeta.egress_port" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_switch_id" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_switch_id", "switch_id"] + }, + { + "type" : "field", + "value" : ["userMetadata.int_meta", "switch_id"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_switch_id.switch_id = fmeta.int_meta.switch_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x04" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 103, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 4" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0010" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 104, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 16" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", + "id" : 95, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", + "id" : 96, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tx_util", "egress_port_tx_util"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", + "id" : 97, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", + "id" : 98, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tx_util", "egress_port_tx_util"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", + "id" : 99, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", + "id" : 100, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tx_util", "egress_port_tx_util"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", + "id" : 101, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", + "id" : 102, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tx_util", "egress_port_tx_util"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", + "id" : 103, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 88, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0004" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 89, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 4" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", + "id" : 104, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tx_util", "egress_port_tx_util"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", + "id" : 105, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", + "id" : 106, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tx_util", "egress_port_tx_util"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", + "id" : 107, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 93, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 2" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0008" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 94, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 8" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", + "id" : 108, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tx_util", "egress_port_tx_util"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", + "id" : 109, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x03" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 98, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 3" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x000c" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 99, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 12" + } + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", + "id" : 110, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 80, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tx_util", "egress_port_tx_util"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 82, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.egress_port_tx_util = 32w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 75, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_id = 8w0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_q_congestion", "q_congestion"] + }, + { + "type" : "hexstr", + "value" : "0x000000" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 76, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.q_congestion = 24w0" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 68, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_tstamp", "egress_tstamp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "deq_timedelta"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.egress_tstamp = (bit<32>) smeta.enq_timestamp + (bit<32>) smeta.deq_timedelta" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 63, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_ingress_tstamp", "ingress_tstamp"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "enq_timestamp"] + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 64, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.ingress_tstamp = (bit<32>) smeta.enq_timestamp" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x04" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 103, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_words = fmeta.int_meta.new_words + 4" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x0010" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 104, + "column" : 8, + "source_fragment" : "fmeta.int_meta.new_bytes = fmeta.int_meta.new_bytes + 16" + } + } + ] + }, + { + "name" : "FabricEgress.pkt_io_egress.pop_vlan", + "id" : 111, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "ether_type"] + }, + { + "type" : "field", + "value" : ["vlan_tag", "ether_type"] + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "hdr.ethernet.ether_type = hdr.vlan_tag.ether_type" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "vlan_tag" + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.setInvalid()" + } + } + ] + }, + { + "name" : "FabricEgress.egress_next.pop_vlan", + "id" : 112, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ethernet", "ether_type"] + }, + { + "type" : "field", + "value" : ["vlan_tag", "ether_type"] + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 253, + "column" : 8, + "source_fragment" : "hdr.ethernet.ether_type = hdr.vlan_tag.ether_type" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "vlan_tag" + } + ], + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 254, + "column" : 8, + "source_fragment" : "hdr.vlan_tag.setInvalid()" + } + } + ] + }, + { + "name" : "act_29", + "id" : 113, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "packet_in" + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 57, + "column" : 12, + "source_fragment" : "hdr.packet_in.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["packet_in", "ingress_port"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + } + ], + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 58, + "column" : 12, + "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port" + } + } + ] + }, + { + "name" : "act_30", + "id" : 114, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "process_int_main_process_int_transit_hasReturned_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ] + } + ] + }, + { + "name" : "act_31", + "id" : 115, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "process_int_main_process_int_transit_hasReturned_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 374, + "column" : 12, + "source_fragment" : "return" + } + } + ] + }, + { + "name" : "act_32", + "id" : 116, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["ipv4", "total_len"] + }, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 382, + "column" : 12, + "source_fragment" : "hdr.ipv4.total_len = hdr.ipv4.total_len + fmeta.int_meta.new_bytes" + } + } + ] + }, + { + "name" : "act_33", + "id" : 117, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_header", "total_hop_cnt"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["int_header", "total_hop_cnt"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 379, + "column" : 8, + "source_fragment" : "hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 1" + } + } + ] + }, + { + "name" : "act_34", + "id" : 118, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["udp", "len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["udp", "len"] + }, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_bytes"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 385, + "column" : 12, + "source_fragment" : "hdr.udp.len = hdr.udp.len + fmeta.int_meta.new_bytes" + } + } + ] + }, + { + "name" : "act_35", + "id" : 119, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["intl4_shim", "len_words"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "field", + "value" : ["intl4_shim", "len_words"] + }, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "new_words"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 388, + "column" : 12, + "source_fragment" : "hdr.intl4_shim.len_words = hdr.intl4_shim.len_words + fmeta.int_meta.new_words" + } + } + ] + } + ], + "pipelines" : [ + { + "name" : "ingress", + "id" : 0, + "source_info" : { + "filename" : "fabric.p4", + "line" : 40, + "column" : 8, + "source_fragment" : "FabricIngress" + }, + "init_table" : "tbl_act", + "tables" : [ + { + "name" : "tbl_act", + "id" : 0, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [40], + "actions" : ["act_0"], + "base_default_next" : "node_3", + "next_tables" : { + "act_0" : "node_3" + }, + "default_entry" : { + "action_id" : 40, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_0", + "id" : 1, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [39], + "actions" : ["act"], + "base_default_next" : "node_5", + "next_tables" : { + "act" : "node_5" + }, + "default_entry" : { + "action_id" : 39, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_1", + "id" : 2, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [43], + "actions" : ["act_3"], + "base_default_next" : "node_7", + "next_tables" : { + "act_3" : "node_7" + }, + "default_entry" : { + "action_id" : 43, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_2", + "id" : 3, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [41], + "actions" : ["act_1"], + "base_default_next" : "node_10", + "next_tables" : { + "act_1" : "node_10" + }, + "default_entry" : { + "action_id" : 41, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_3", + "id" : 4, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [42], + "actions" : ["act_2"], + "base_default_next" : "node_10", + "next_tables" : { + "act_2" : "node_10" + }, + "default_entry" : { + "action_id" : 42, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_4", + "id" : 5, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [44], + "actions" : ["act_4"], + "base_default_next" : null, + "next_tables" : { + "act_4" : null + }, + "default_entry" : { + "action_id" : 44, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_5", + "id" : 6, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [52], + "actions" : ["act_12"], + "base_default_next" : "node_13", + "next_tables" : { + "act_12" : "node_13" + }, + "default_entry" : { + "action_id" : 52, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.spgw_ingress.s1u_filter_table", + "id" : 7, + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 79, + "column" : 10, + "source_fragment" : "s1u_filter_table" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "gtpu_ipv4.dst_addr", + "target" : ["gtpu_ipv4", "dst_addr"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [1], + "actions" : ["NoAction"], + "base_default_next" : null, + "next_tables" : { + "__HIT__" : "tbl_act_6", + "__MISS__" : "tbl_act_7" + }, + "default_entry" : { + "action_id" : 1, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "tbl_act_6", + "id" : 8, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [45], + "actions" : ["act_5"], + "base_default_next" : "node_17", + "next_tables" : { + "act_5" : "node_17" + }, + "default_entry" : { + "action_id" : 45, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_7", + "id" : 9, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [46], + "actions" : ["act_6"], + "base_default_next" : "node_17", + "next_tables" : { + "act_6" : "node_17" + }, + "default_entry" : { + "action_id" : 46, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_drop_now", + "id" : 10, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [10], + "actions" : ["drop_now"], + "base_default_next" : "tbl_act_8", + "next_tables" : { + "drop_now" : "tbl_act_8" + }, + "default_entry" : { + "action_id" : 10, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_8", + "id" : 11, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [47], + "actions" : ["act_7"], + "base_default_next" : "tbl_spgw_ingress_gtpu_decap", + "next_tables" : { + "act_7" : "tbl_spgw_ingress_gtpu_decap" + }, + "default_entry" : { + "action_id" : 47, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_spgw_ingress_gtpu_decap", + "id" : 12, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [11], + "actions" : ["FabricIngress.spgw_ingress.gtpu_decap"], + "base_default_next" : "node_27", + "next_tables" : { + "FabricIngress.spgw_ingress.gtpu_decap" : "node_27" + }, + "default_entry" : { + "action_id" : 11, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.spgw_ingress.dl_sess_lookup", + "id" : 13, + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 68, + "column" : 10, + "source_fragment" : "dl_sess_lookup" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "ipv4.dst_addr", + "target" : ["ipv4", "dst_addr"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [12, 0], + "actions" : ["FabricIngress.spgw_ingress.set_dl_sess_info", "NoAction"], + "base_default_next" : null, + "next_tables" : { + "__HIT__" : "tbl_act_9", + "__MISS__" : "tbl_act_10" + }, + "default_entry" : { + "action_id" : 0, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "tbl_act_9", + "id" : 14, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [48], + "actions" : ["act_8"], + "base_default_next" : "node_24", + "next_tables" : { + "act_8" : "node_24" + }, + "default_entry" : { + "action_id" : 48, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_10", + "id" : 15, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [49], + "actions" : ["act_9"], + "base_default_next" : "node_24", + "next_tables" : { + "act_9" : "node_24" + }, + "default_entry" : { + "action_id" : 49, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_11", + "id" : 16, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [50], + "actions" : ["act_10"], + "base_default_next" : "node_27", + "next_tables" : { + "act_10" : "node_27" + }, + "default_entry" : { + "action_id" : 50, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_12", + "id" : 17, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [51], + "actions" : ["act_11"], + "base_default_next" : "node_27", + "next_tables" : { + "act_11" : "node_27" + }, + "default_entry" : { + "action_id" : 51, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_13", + "id" : 18, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [53], + "actions" : ["act_13"], + "base_default_next" : "FabricIngress.filtering.ingress_port_vlan", + "next_tables" : { + "act_13" : "FabricIngress.filtering.ingress_port_vlan" + }, + "default_entry" : { + "action_id" : 53, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.filtering.ingress_port_vlan", + "id" : 19, + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 66, + "column" : 10, + "source_fragment" : "ingress_port_vlan" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "standard_metadata.ingress_port", + "target" : ["standard_metadata", "ingress_port"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "hdr.vlan_tag.is_valid", + "target" : ["vlan_tag", "$valid$"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "hdr.vlan_tag.vlan_id", + "target" : ["vlan_tag", "vlan_id"], + "mask" : null + } + ], + "match_type" : "ternary", + "type" : "simple", + "max_size" : 1024, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [16, 15, 14, 17], + "actions" : ["FabricIngress.filtering.push_internal_vlan", "FabricIngress.filtering.set_vlan", "FabricIngress.filtering.drop", "FabricIngress.filtering.nop_ingress_port_vlan"], + "base_default_next" : null, + "next_tables" : { + "__HIT__" : "tbl_act_14", + "__MISS__" : "tbl_act_15" + }, + "default_entry" : { + "action_id" : 16, + "action_const" : true, + "action_data" : ["0xffe"], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_14", + "id" : 20, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [54], + "actions" : ["act_14"], + "base_default_next" : "node_32", + "next_tables" : { + "act_14" : "node_32" + }, + "default_entry" : { + "action_id" : 54, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_15", + "id" : 21, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [55], + "actions" : ["act_15"], + "base_default_next" : "node_32", + "next_tables" : { + "act_15" : "node_32" + }, + "default_entry" : { + "action_id" : 55, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.filtering.fwd_classifier", + "id" : 22, + "source_info" : { + "filename" : "include/control/filtering.p4", + "line" : 103, + "column" : 10, + "source_fragment" : "fwd_classifier" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "standard_metadata.ingress_port", + "target" : ["standard_metadata", "ingress_port"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "hdr.ethernet.dst_addr", + "target" : ["ethernet", "dst_addr"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "hdr.vlan_tag.ether_type", + "target" : ["vlan_tag", "ether_type"], + "mask" : null + } + ], + "match_type" : "ternary", + "type" : "simple", + "max_size" : 1024, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [18], + "actions" : ["FabricIngress.filtering.set_forwarding_type"], + "base_default_next" : "node_35", + "next_tables" : { + "FabricIngress.filtering.set_forwarding_type" : "node_35" + }, + "default_entry" : { + "action_id" : 18, + "action_const" : true, + "action_data" : ["0x0"], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_16", + "id" : 23, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [56], + "actions" : ["act_16"], + "base_default_next" : "node_35", + "next_tables" : { + "act_16" : "node_35" + }, + "default_entry" : { + "action_id" : 56, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.forwarding.bridging", + "id" : 24, + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 41, + "column" : 10, + "source_fragment" : "bridging" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "hdr.vlan_tag.vlan_id", + "target" : ["vlan_tag", "vlan_id"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "hdr.ethernet.dst_addr", + "target" : ["ethernet", "dst_addr"], + "mask" : null + } + ], + "match_type" : "ternary", + "type" : "simple", + "max_size" : 1024, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [19, 3], + "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "NoAction"], + "base_default_next" : "FabricIngress.forwarding.acl", + "next_tables" : { + "FabricIngress.forwarding.set_next_id_bridging" : "FabricIngress.forwarding.acl", + "NoAction" : "FabricIngress.forwarding.acl" + }, + "default_entry" : { + "action_id" : 3, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "FabricIngress.forwarding.mpls", + "id" : 25, + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 65, + "column" : 10, + "source_fragment" : "mpls" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "hdr.mpls.label", + "target" : ["mpls", "label"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [20, 4], + "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "NoAction"], + "base_default_next" : "tbl_act_17", + "next_tables" : { + "FabricIngress.forwarding.pop_mpls_and_next" : "tbl_act_17", + "NoAction" : "tbl_act_17" + }, + "default_entry" : { + "action_id" : 4, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "tbl_act_17", + "id" : 26, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [57], + "actions" : ["act_17"], + "base_default_next" : "FabricIngress.forwarding.acl", + "next_tables" : { + "act_17" : "FabricIngress.forwarding.acl" + }, + "default_entry" : { + "action_id" : 57, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.forwarding.routing_v4", + "id" : 27, + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 91, + "column" : 10, + "source_fragment" : "routing_v4" + }, + "key" : [ + { + "match_type" : "lpm", + "name" : "hdr.ipv4.dst_addr", + "target" : ["ipv4", "dst_addr"], + "mask" : null + } + ], + "match_type" : "lpm", + "type" : "simple", + "max_size" : 1024, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [21, 22, 5], + "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "NoAction"], + "base_default_next" : "FabricIngress.forwarding.acl", + "next_tables" : { + "FabricIngress.forwarding.set_next_id_routing_v4" : "FabricIngress.forwarding.acl", + "FabricIngress.forwarding.nop_routing_v4" : "FabricIngress.forwarding.acl", + "NoAction" : "FabricIngress.forwarding.acl" + }, + "default_entry" : { + "action_id" : 5, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "FabricIngress.forwarding.acl", + "id" : 28, + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 136, + "column" : 10, + "source_fragment" : "acl" + }, + "key" : [ + { + "match_type" : "ternary", + "name" : "standard_metadata.ingress_port", + "target" : ["standard_metadata", "ingress_port"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "fabric_metadata.ip_proto", + "target" : ["scalars", "fabric_metadata_t.ip_proto"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "fabric_metadata.l4_src_port", + "target" : ["scalars", "fabric_metadata_t.l4_src_port"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "fabric_metadata.l4_dst_port", + "target" : ["scalars", "fabric_metadata_t.l4_dst_port"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "hdr.ethernet.dst_addr", + "target" : ["ethernet", "dst_addr"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "hdr.ethernet.src_addr", + "target" : ["ethernet", "src_addr"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "hdr.vlan_tag.vlan_id", + "target" : ["vlan_tag", "vlan_id"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "hdr.vlan_tag.ether_type", + "target" : ["vlan_tag", "ether_type"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "hdr.ipv4.src_addr", + "target" : ["ipv4", "src_addr"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "hdr.ipv4.dst_addr", + "target" : ["ipv4", "dst_addr"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "hdr.icmp.icmp_type", + "target" : ["icmp", "icmp_type"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "hdr.icmp.icmp_code", + "target" : ["icmp", "icmp_code"], + "mask" : null + } + ], + "match_type" : "ternary", + "type" : "simple", + "max_size" : 128, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [23, 24, 25, 26, 27], + "actions" : ["FabricIngress.forwarding.set_next_id_acl", "FabricIngress.forwarding.punt_to_cpu", "FabricIngress.forwarding.clone_to_cpu", "FabricIngress.forwarding.drop", "FabricIngress.forwarding.nop_acl"], + "base_default_next" : "tbl_act_18", + "next_tables" : { + "FabricIngress.forwarding.set_next_id_acl" : "tbl_act_18", + "FabricIngress.forwarding.punt_to_cpu" : "tbl_act_18", + "FabricIngress.forwarding.clone_to_cpu" : "tbl_act_18", + "FabricIngress.forwarding.drop" : "tbl_act_18", + "FabricIngress.forwarding.nop_acl" : "tbl_act_18" + }, + "default_entry" : { + "action_id" : 27, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_18", + "id" : 29, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [58], + "actions" : ["act_18"], + "base_default_next" : "FabricIngress.next.vlan_meta", + "next_tables" : { + "act_18" : "FabricIngress.next.vlan_meta" + }, + "default_entry" : { + "action_id" : 58, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.next.vlan_meta", + "id" : 30, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 65, + "column" : 10, + "source_fragment" : "vlan_meta" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "fabric_metadata.next_id", + "target" : ["scalars", "fabric_metadata_t.next_id"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [28, 9], + "actions" : ["FabricIngress.next.set_vlan", "nop"], + "base_default_next" : "FabricIngress.next.simple", + "next_tables" : { + "FabricIngress.next.set_vlan" : "FabricIngress.next.simple", + "nop" : "FabricIngress.next.simple" + }, + "default_entry" : { + "action_id" : 9, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "FabricIngress.next.simple", + "id" : 31, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 122, + "column" : 10, + "source_fragment" : "simple" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "fabric_metadata.next_id", + "target" : ["scalars", "fabric_metadata_t.next_id"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [29, 30, 31, 32, 33, 34, 6], + "actions" : ["FabricIngress.next.output_simple", "FabricIngress.next.set_vlan_output", "FabricIngress.next.l3_routing_simple", "FabricIngress.next.mpls_routing_v4_simple", "FabricIngress.next.mpls_routing_v6_simple", "FabricIngress.next.l3_routing_vlan", "NoAction"], + "base_default_next" : null, + "next_tables" : { + "__HIT__" : "tbl_act_19", + "__MISS__" : "tbl_act_20" + }, + "default_entry" : { + "action_id" : 6, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "tbl_act_19", + "id" : 32, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [59], + "actions" : ["act_19"], + "base_default_next" : "node_48", + "next_tables" : { + "act_19" : "node_48" + }, + "default_entry" : { + "action_id" : 59, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_20", + "id" : 33, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [60], + "actions" : ["act_20"], + "base_default_next" : "node_48", + "next_tables" : { + "act_20" : "node_48" + }, + "default_entry" : { + "action_id" : 60, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.next.hashed", + "id" : 34, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 175, + "column" : 10, + "source_fragment" : "hashed" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "fabric_metadata.next_id", + "target" : ["scalars", "fabric_metadata_t.next_id"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "indirect_ws", + "action_profile" : "FabricIngress.next.ecmp_selector", + "max_size" : 1024, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [35, 36, 37, 7], + "actions" : ["FabricIngress.next.l3_routing_hashed", "FabricIngress.next.mpls_routing_v4_hashed", "FabricIngress.next.mpls_routing_v6_hashed", "NoAction"], + "base_default_next" : null, + "next_tables" : { + "__HIT__" : "tbl_act_21", + "__MISS__" : "tbl_act_22" + } + }, + { + "name" : "tbl_act_21", + "id" : 35, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [61], + "actions" : ["act_21"], + "base_default_next" : "node_52", + "next_tables" : { + "act_21" : "node_52" + }, + "default_entry" : { + "action_id" : 61, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_22", + "id" : 36, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [62], + "actions" : ["act_22"], + "base_default_next" : "node_52", + "next_tables" : { + "act_22" : "node_52" + }, + "default_entry" : { + "action_id" : 62, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.next.multicast", + "id" : 37, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 207, + "column" : 10, + "source_fragment" : "multicast" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "fabric_metadata.next_id", + "target" : ["scalars", "fabric_metadata_t.next_id"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [38, 8], + "actions" : ["FabricIngress.next.set_mcast_group", "NoAction"], + "base_default_next" : null, + "next_tables" : { + "__HIT__" : "tbl_act_23", + "__MISS__" : "tbl_act_24" + }, + "default_entry" : { + "action_id" : 8, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "tbl_act_23", + "id" : 38, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [63], + "actions" : ["act_23"], + "base_default_next" : "node_56", + "next_tables" : { + "act_23" : "node_56" + }, + "default_entry" : { + "action_id" : 63, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_24", + "id" : 39, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [64], + "actions" : ["act_24"], + "base_default_next" : "node_56", + "next_tables" : { + "act_24" : "node_56" + }, + "default_entry" : { + "action_id" : 64, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_25", + "id" : 40, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [65], + "actions" : ["act_25"], + "base_default_next" : "node_58", + "next_tables" : { + "act_25" : "node_58" + }, + "default_entry" : { + "action_id" : 65, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_26", + "id" : 41, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [66], + "actions" : ["act_26"], + "base_default_next" : "node_62", + "next_tables" : { + "act_26" : "node_62" + }, + "default_entry" : { + "action_id" : 66, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_27", + "id" : 42, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [67], + "actions" : ["act_27"], + "base_default_next" : "node_64", + "next_tables" : { + "act_27" : "node_64" + }, + "default_entry" : { + "action_id" : 67, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_28", + "id" : 43, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [68], + "actions" : ["act_28"], + "base_default_next" : "FabricIngress.process_set_source_sink.tb_set_source", + "next_tables" : { + "act_28" : "FabricIngress.process_set_source_sink.tb_set_source" + }, + "default_entry" : { + "action_id" : 68, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.process_set_source_sink.tb_set_source", + "id" : 44, + "source_info" : { + "filename" : "include/int/int_main.p4", + "line" : 46, + "column" : 10, + "source_fragment" : "tb_set_source" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "standard_metadata.ingress_port", + "target" : ["standard_metadata", "ingress_port"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 511, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [13, 2], + "actions" : ["FabricIngress.process_set_source_sink.int_set_source", "NoAction"], + "base_default_next" : null, + "next_tables" : { + "FabricIngress.process_set_source_sink.int_set_source" : null, + "NoAction" : null + }, + "default_entry" : { + "action_id" : 2, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + } + ], + "action_profiles" : [ + { + "name" : "FabricIngress.next.ecmp_selector", + "id" : 0, + "max_size" : 64, + "selector" : { + "algo" : "crc16", + "input" : [ + { + "type" : "field", + "value" : ["ipv4", "dst_addr"] + }, + { + "type" : "field", + "value" : ["ipv4", "src_addr"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.ip_proto"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.l4_src_port"] + }, + { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.l4_dst_port"] + } + ] + } + } + ], + "conditionals" : [ + { + "name" : "node_3", + "id" : 0, + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 30, + "column" : 12, + "source_fragment" : "! is_gtpu_encapped" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["gtpu", "$valid$"] + } + } + } + } + }, + "true_next" : "tbl_act_0", + "false_next" : "node_5" + }, + { + "name" : "node_5", + "id" : 1, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "spgw_normalizer_hasReturned_0"] + } + } + } + } + }, + "true_next" : "tbl_act_1", + "false_next" : "node_10" + }, + { + "name" : "node_7", + "id" : 2, + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 34, + "column" : 12, + "source_fragment" : "inner_udp.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["inner_udp", "$valid$"] + } + } + }, + "true_next" : "tbl_act_2", + "false_next" : "tbl_act_3" + }, + { + "name" : "node_10", + "id" : 3, + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 25, + "column" : 12, + "source_fragment" : "hdr.packet_out.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["packet_out", "$valid$"] + } + } + }, + "true_next" : "tbl_act_4", + "false_next" : "tbl_act_5" + }, + { + "name" : "node_13", + "id" : 4, + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 139, + "column" : 12, + "source_fragment" : "gtpu.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["gtpu", "$valid$"] + } + } + }, + "true_next" : "FabricIngress.spgw_ingress.s1u_filter_table", + "false_next" : "FabricIngress.spgw_ingress.dl_sess_lookup" + }, + { + "name" : "node_17", + "id" : 5, + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 143, + "column" : 16, + "source_fragment" : "!s1u_filter_table.apply().hit" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "spgw_ingress_tmp_1"] + } + } + } + } + }, + "true_next" : "tbl_drop_now", + "false_next" : "tbl_act_8" + }, + { + "name" : "node_24", + "id" : 6, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "spgw_ingress_tmp_2"] + } + } + }, + "true_next" : "tbl_act_11", + "false_next" : "tbl_act_12" + }, + { + "name" : "node_27", + "id" : 7, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "spgw_ingress_hasReturned_0"] + } + } + } + } + }, + "true_next" : "tbl_act_13", + "false_next" : "FabricIngress.filtering.ingress_port_vlan" + }, + { + "name" : "node_32", + "id" : 8, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "filtering_tmp_0"] + } + } + }, + "true_next" : "FabricIngress.filtering.fwd_classifier", + "false_next" : "tbl_act_16" + }, + { + "name" : "node_35", + "id" : 9, + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 191, + "column" : 11, + "source_fragment" : "fabric_metadata.fwd_type == FWD_BRIDGING" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.fwd_type"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + }, + "true_next" : "FabricIngress.forwarding.bridging", + "false_next" : "node_37" + }, + { + "name" : "node_37", + "id" : 10, + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 192, + "column" : 17, + "source_fragment" : "fabric_metadata.fwd_type == FWD_MPLS" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.fwd_type"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "true_next" : "FabricIngress.forwarding.mpls", + "false_next" : "node_40" + }, + { + "name" : "node_40", + "id" : 11, + "source_info" : { + "filename" : "include/control/forwarding.p4", + "line" : 198, + "column" : 17, + "source_fragment" : "fabric_metadata.fwd_type == FWD_IPV4_UNICAST" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.fwd_type"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "true_next" : "FabricIngress.forwarding.routing_v4", + "false_next" : "FabricIngress.forwarding.acl" + }, + { + "name" : "node_48", + "id" : 12, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 219, + "column" : 12, + "source_fragment" : "!simple.apply().hit" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "next_tmp_4"] + } + } + } + } + }, + "true_next" : "FabricIngress.next.hashed", + "false_next" : "node_58" + }, + { + "name" : "node_52", + "id" : 13, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 220, + "column" : 16, + "source_fragment" : "!hashed.apply().hit" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "next_tmp_3"] + } + } + } + } + }, + "true_next" : "FabricIngress.next.multicast", + "false_next" : "node_58" + }, + { + "name" : "node_56", + "id" : 14, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 221, + "column" : 20, + "source_fragment" : "!multicast.apply().hit" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "next_tmp_2"] + } + } + } + } + }, + "true_next" : "tbl_act_25", + "false_next" : "node_58" + }, + { + "name" : "node_58", + "id" : 15, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "next_hasReturned_0"] + } + } + } + } + }, + "true_next" : "node_59", + "false_next" : "node_62" + }, + { + "name" : "node_59", + "id" : 16, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 228, + "column" : 12, + "source_fragment" : "!hdr.mpls.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["mpls", "$valid$"] + } + } + } + } + }, + "true_next" : "node_60", + "false_next" : "node_62" + }, + { + "name" : "node_60", + "id" : 17, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 229, + "column" : 15, + "source_fragment" : "hdr.ipv4.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["ipv4", "$valid$"] + } + } + }, + "true_next" : "tbl_act_26", + "false_next" : "node_62" + }, + { + "name" : "node_62", + "id" : 18, + "source_info" : { + "filename" : "include/control/port_counter.p4", + "line" : 27, + "column" : 12, + "source_fragment" : "standard_metadata.egress_spec < 511" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "<", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01ff" + } + } + }, + "true_next" : "tbl_act_27", + "false_next" : "node_64" + }, + { + "name" : "node_64", + "id" : 19, + "source_info" : { + "filename" : "include/control/port_counter.p4", + "line" : 30, + "column" : 12, + "source_fragment" : "standard_metadata.ingress_port < 511" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "<", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01ff" + } + } + }, + "true_next" : "tbl_act_28", + "false_next" : "FabricIngress.process_set_source_sink.tb_set_source" + } + ] + }, + { + "name" : "egress", + "id" : 1, + "source_info" : { + "filename" : "fabric.p4", + "line" : 79, + "column" : 8, + "source_fragment" : "FabricEgress" + }, + "init_table" : "node_69", + "tables" : [ + { + "name" : "tbl_pkt_io_egress_pop_vlan", + "id" : 45, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [111], + "actions" : ["FabricEgress.pkt_io_egress.pop_vlan"], + "base_default_next" : "node_73", + "next_tables" : { + "FabricEgress.pkt_io_egress.pop_vlan" : "node_73" + }, + "default_entry" : { + "action_id" : 111, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_drop_now_0", + "id" : 46, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [74], + "actions" : ["drop_now"], + "base_default_next" : "tbl_act_29", + "next_tables" : { + "drop_now" : "tbl_act_29" + }, + "default_entry" : { + "action_id" : 74, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_29", + "id" : 47, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [113], + "actions" : ["act_29"], + "base_default_next" : null, + "next_tables" : { + "act_29" : null + }, + "default_entry" : { + "action_id" : 113, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_drop_now_1", + "id" : 48, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [75], + "actions" : ["drop_now"], + "base_default_next" : "FabricEgress.egress_next.egress_vlan", + "next_tables" : { + "drop_now" : "FabricEgress.egress_next.egress_vlan" + }, + "default_entry" : { + "action_id" : 75, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.egress_next.egress_vlan", + "id" : 49, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 258, + "column" : 10, + "source_fragment" : "egress_vlan" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "hdr.vlan_tag.vlan_id", + "target" : ["vlan_tag", "vlan_id"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "standard_metadata.egress_port", + "target" : ["standard_metadata", "egress_port"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [112, 73], + "actions" : ["FabricEgress.egress_next.pop_vlan", "nop"], + "base_default_next" : "node_79", + "next_tables" : { + "FabricEgress.egress_next.pop_vlan" : "node_79", + "nop" : "node_79" + }, + "default_entry" : { + "action_id" : 73, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "tbl_spgw_egress_gtpu_encap", + "id" : 50, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [76], + "actions" : ["FabricEgress.spgw_egress.gtpu_encap"], + "base_default_next" : "node_81", + "next_tables" : { + "FabricEgress.spgw_egress.gtpu_encap" : "node_81" + }, + "default_entry" : { + "action_id" : 76, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.process_int_main.process_int_source.tb_int_source", + "id" : 51, + "source_info" : { + "filename" : "include/int/int_source.p4", + "line" : 65, + "column" : 10, + "source_fragment" : "tb_int_source" + }, + "key" : [ + { + "match_type" : "ternary", + "name" : "hdr.ipv4.src_addr", + "target" : ["ipv4", "src_addr"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "hdr.ipv4.dst_addr", + "target" : ["ipv4", "dst_addr"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "fabric_metadata.l4_src_port", + "target" : ["scalars", "fabric_metadata_t.l4_src_port"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "fabric_metadata.l4_dst_port", + "target" : ["scalars", "fabric_metadata_t.l4_dst_port"], + "mask" : null + } + ], + "match_type" : "ternary", + "type" : "simple", + "max_size" : 1024, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [77, 69], + "actions" : ["FabricEgress.process_int_main.process_int_source.int_source_dscp", "NoAction"], + "base_default_next" : "node_84", + "next_tables" : { + "FabricEgress.process_int_main.process_int_source.int_source_dscp" : "node_84", + "NoAction" : "node_84" + }, + "default_entry" : { + "action_id" : 69, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "tbl_act_30", + "id" : 52, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [114], + "actions" : ["act_30"], + "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", + "next_tables" : { + "act_30" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert" + }, + "default_entry" : { + "action_id" : 114, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_insert", + "id" : 53, + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 271, + "column" : 10, + "source_fragment" : "tb_int_insert" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "hdr.int_header.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" : [78, 72], + "actions" : ["FabricEgress.process_int_main.process_int_transit.init_metadata", "nop"], + "base_default_next" : "node_87", + "next_tables" : { + "FabricEgress.process_int_main.process_int_transit.init_metadata" : "node_87", + "nop" : "node_87" + }, + "default_entry" : { + "action_id" : 72, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_31", + "id" : 54, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [115], + "actions" : ["act_31"], + "base_default_next" : "node_89", + "next_tables" : { + "act_31" : "node_89" + }, + "default_entry" : { + "action_id" : 115, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003", + "id" : 55, + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 284, + "column" : 10, + "source_fragment" : "tb_int_inst_0003" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "hdr.int_header.instruction_mask_0003", + "target" : ["int_header", "instruction_mask_0003"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 16, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 70], + "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15", "NoAction"], + "base_default_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "next_tables" : { + "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" : 70, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + }, + "entries" : [ + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 79, + "action_data" : [] + }, + "priority" : 1 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x01" + } + ], + "action_entry" : { + "action_id" : 80, + "action_data" : [] + }, + "priority" : 2 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x02" + } + ], + "action_entry" : { + "action_id" : 81, + "action_data" : [] + }, + "priority" : 3 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x03" + } + ], + "action_entry" : { + "action_id" : 82, + "action_data" : [] + }, + "priority" : 4 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x04" + } + ], + "action_entry" : { + "action_id" : 83, + "action_data" : [] + }, + "priority" : 5 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x05" + } + ], + "action_entry" : { + "action_id" : 84, + "action_data" : [] + }, + "priority" : 6 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x06" + } + ], + "action_entry" : { + "action_id" : 85, + "action_data" : [] + }, + "priority" : 7 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x07" + } + ], + "action_entry" : { + "action_id" : 86, + "action_data" : [] + }, + "priority" : 8 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x08" + } + ], + "action_entry" : { + "action_id" : 87, + "action_data" : [] + }, + "priority" : 9 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x09" + } + ], + "action_entry" : { + "action_id" : 88, + "action_data" : [] + }, + "priority" : 10 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0a" + } + ], + "action_entry" : { + "action_id" : 89, + "action_data" : [] + }, + "priority" : 11 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0b" + } + ], + "action_entry" : { + "action_id" : 90, + "action_data" : [] + }, + "priority" : 12 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0c" + } + ], + "action_entry" : { + "action_id" : 91, + "action_data" : [] + }, + "priority" : 13 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0d" + } + ], + "action_entry" : { + "action_id" : 92, + "action_data" : [] + }, + "priority" : 14 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0e" + } + ], + "action_entry" : { + "action_id" : 93, + "action_data" : [] + }, + "priority" : 15 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0f" + } + ], + "action_entry" : { + "action_id" : 94, + "action_data" : [] + }, + "priority" : 16 + } + ] + }, + { + "name" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407", + "id" : 56, + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 328, + "column" : 10, + "source_fragment" : "tb_int_inst_0407" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "hdr.int_header.instruction_mask_0407", + "target" : ["int_header", "instruction_mask_0407"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 16, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 71], + "actions" : ["FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14", "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15", "NoAction"], + "base_default_next" : "tbl_act_32", + "next_tables" : { + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14" : "tbl_act_32", + "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15" : "tbl_act_32", + "NoAction" : "tbl_act_32" + }, + "default_entry" : { + "action_id" : 71, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + }, + "entries" : [ + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x00" + } + ], + "action_entry" : { + "action_id" : 95, + "action_data" : [] + }, + "priority" : 1 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x01" + } + ], + "action_entry" : { + "action_id" : 96, + "action_data" : [] + }, + "priority" : 2 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x02" + } + ], + "action_entry" : { + "action_id" : 97, + "action_data" : [] + }, + "priority" : 3 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x03" + } + ], + "action_entry" : { + "action_id" : 98, + "action_data" : [] + }, + "priority" : 4 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x04" + } + ], + "action_entry" : { + "action_id" : 99, + "action_data" : [] + }, + "priority" : 5 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x05" + } + ], + "action_entry" : { + "action_id" : 100, + "action_data" : [] + }, + "priority" : 6 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x06" + } + ], + "action_entry" : { + "action_id" : 101, + "action_data" : [] + }, + "priority" : 7 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x07" + } + ], + "action_entry" : { + "action_id" : 102, + "action_data" : [] + }, + "priority" : 8 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x08" + } + ], + "action_entry" : { + "action_id" : 103, + "action_data" : [] + }, + "priority" : 9 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x09" + } + ], + "action_entry" : { + "action_id" : 104, + "action_data" : [] + }, + "priority" : 10 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0a" + } + ], + "action_entry" : { + "action_id" : 105, + "action_data" : [] + }, + "priority" : 11 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0b" + } + ], + "action_entry" : { + "action_id" : 106, + "action_data" : [] + }, + "priority" : 12 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0c" + } + ], + "action_entry" : { + "action_id" : 107, + "action_data" : [] + }, + "priority" : 13 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0d" + } + ], + "action_entry" : { + "action_id" : 108, + "action_data" : [] + }, + "priority" : 14 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0e" + } + ], + "action_entry" : { + "action_id" : 109, + "action_data" : [] + }, + "priority" : 15 + }, + { + "match_key" : [ + { + "match_type" : "exact", + "key" : "0x0f" + } + ], + "action_entry" : { + "action_id" : 110, + "action_data" : [] + }, + "priority" : 16 + } + ] + }, + { + "name" : "tbl_act_32", + "id" : 57, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [117], + "actions" : ["act_33"], + "base_default_next" : "node_93", + "next_tables" : { + "act_33" : "node_93" + }, + "default_entry" : { + "action_id" : 117, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_33", + "id" : 58, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [116], + "actions" : ["act_32"], + "base_default_next" : "node_95", + "next_tables" : { + "act_32" : "node_95" + }, + "default_entry" : { + "action_id" : 116, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_34", + "id" : 59, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [118], + "actions" : ["act_34"], + "base_default_next" : "node_97", + "next_tables" : { + "act_34" : "node_97" + }, + "default_entry" : { + "action_id" : 118, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_act_35", + "id" : 60, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [119], + "actions" : ["act_35"], + "base_default_next" : null, + "next_tables" : { + "act_35" : null + }, + "default_entry" : { + "action_id" : 119, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + } + ], + "action_profiles" : [], + "conditionals" : [ + { + "name" : "node_69", + "id" : 20, + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 44, + "column" : 12, + "source_fragment" : "fabric_metadata.is_controller_packet_out == true" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.is_controller_packet_out"] + } + } + }, + "right" : { + "type" : "bool", + "value" : true + } + } + }, + "true_next" : null, + "false_next" : "node_70" + }, + { + "name" : "node_70", + "id" : 21, + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 48, + "column" : 12, + "source_fragment" : "standard_metadata.egress_port == 255" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x00ff" + } + } + }, + "true_next" : "node_71", + "false_next" : "node_76" + }, + { + "name" : "node_71", + "id" : 22, + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 49, + "column" : 16, + "source_fragment" : "hdr.vlan_tag.isValid() && fabric_metadata.pop_vlan_when_packet_in == true" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "and", + "left" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["vlan_tag", "$valid$"] + } + } + }, + "right" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.pop_vlan_when_packet_in"] + } + } + }, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + }, + "true_next" : "tbl_pkt_io_egress_pop_vlan", + "false_next" : "node_73" + }, + { + "name" : "node_73", + "id" : 23, + "source_info" : { + "filename" : "include/control/packetio.p4", + "line" : 52, + "column" : 16, + "source_fragment" : "fabric_metadata.is_multicast == true && ..." + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "and", + "left" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.is_multicast"] + } + } + }, + "right" : { + "type" : "bool", + "value" : true + } + } + }, + "right" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.clone_to_cpu"] + } + } + }, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + }, + "true_next" : "tbl_drop_now_0", + "false_next" : "tbl_act_29" + }, + { + "name" : "node_76", + "id" : 24, + "source_info" : { + "filename" : "include/control/next.p4", + "line" : 272, + "column" : 12, + "source_fragment" : "fabric_metadata.is_multicast == true ..." + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "and", + "left" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "fabric_metadata_t.is_multicast"] + } + } + }, + "right" : { + "type" : "bool", + "value" : true + } + } + }, + "right" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + } + } + } + } + }, + "true_next" : "tbl_drop_now_1", + "false_next" : "FabricEgress.egress_next.egress_vlan" + }, + { + "name" : "node_79", + "id" : 25, + "source_info" : { + "filename" : "include/spgw.p4", + "line" : 221, + "column" : 12, + "source_fragment" : "spgw_meta.direction == SPGW_DIR_DOWNLINK" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "field", + "value" : ["userMetadata.spgw", "direction"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x02" + } + } + }, + "true_next" : "tbl_spgw_egress_gtpu_encap", + "false_next" : "node_81" + }, + { + "name" : "node_81", + "id" : 26, + "source_info" : { + "filename" : "include/int/int_main.p4", + "line" : 98, + "column" : 12, + "source_fragment" : "standard_metadata.ingress_port != 255 && ..." + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "and", + "left" : { + "type" : "expression", + "value" : { + "op" : "and", + "left" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "ingress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x00ff" + } + } + }, + "right" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "field", + "value" : ["standard_metadata", "egress_port"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x00ff" + } + } + } + } + }, + "right" : { + "type" : "expression", + "value" : { + "op" : "or", + "left" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["udp", "$valid$"] + } + } + }, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["tcp", "$valid$"] + } + } + } + } + } + } + }, + "false_next" : null, + "true_next" : "node_82" + }, + { + "name" : "node_82", + "id" : 27, + "source_info" : { + "filename" : "include/int/int_main.p4", + "line" : 102, + "column" : 16, + "source_fragment" : "fabric_metadata.int_meta.source == true" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "source"] + } + } + }, + "right" : { + "type" : "bool", + "value" : true + } + } + }, + "true_next" : "FabricEgress.process_int_main.process_int_source.tb_int_source", + "false_next" : "node_84" + }, + { + "name" : "node_84", + "id" : 28, + "source_info" : { + "filename" : "include/int/int_main.p4", + "line" : 106, + "column" : 15, + "source_fragment" : "hdr.int_header.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["int_header", "$valid$"] + } + } + }, + "false_next" : null, + "true_next" : "tbl_act_30" + }, + { + "name" : "node_87", + "id" : 29, + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 373, + "column" : 12, + "source_fragment" : "fmeta.int_meta.transit == false" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["userMetadata.int_meta", "transit"] + } + } + }, + "right" : { + "type" : "bool", + "value" : false + } + } + }, + "true_next" : "tbl_act_31", + "false_next" : "node_89" + }, + { + "name" : "node_89", + "id" : 30, + "expression" : { + "type" : "expression", + "value" : { + "op" : "not", + "left" : null, + "right" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "process_int_main_process_int_transit_hasReturned_0"] + } + } + } + } + }, + "false_next" : null, + "true_next" : "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003" + }, + { + "name" : "node_93", + "id" : 31, + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 381, + "column" : 12, + "source_fragment" : "hdr.ipv4.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["ipv4", "$valid$"] + } + } + }, + "true_next" : "tbl_act_33", + "false_next" : "node_95" + }, + { + "name" : "node_95", + "id" : 32, + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 384, + "column" : 12, + "source_fragment" : "hdr.udp.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["udp", "$valid$"] + } + } + }, + "true_next" : "tbl_act_34", + "false_next" : "node_97" + }, + { + "name" : "node_97", + "id" : 33, + "source_info" : { + "filename" : "include/int/int_transit.p4", + "line" : 387, + "column" : 12, + "source_fragment" : "hdr.intl4_shim.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["intl4_shim", "$valid$"] + } + } + }, + "false_next" : null, + "true_next" : "tbl_act_35" + } + ] + } + ], + "checksums" : [ + { + "name" : "cksum", + "id" : 0, + "target" : ["ipv4", "hdr_checksum"], + "type" : "generic", + "calculation" : "calc", + "if_cond" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["ipv4", "$valid$"] + } + } + } + }, + { + "name" : "cksum_0", + "id" : 1, + "target" : ["gtpu_ipv4", "hdr_checksum"], + "type" : "generic", + "calculation" : "calc_0", + "if_cond" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["gtpu_ipv4", "$valid$"] + } + } + } + }, + { + "name" : "cksum_1", + "id" : 2, + "target" : ["ipv4", "hdr_checksum"], + "type" : "generic", + "calculation" : "calc_1", + "if_cond" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["ipv4", "$valid$"] + } + } + } + } + ], + "force_arith" : [], + "extern_instances" : [], + "field_aliases" : [ + [ + "queueing_metadata.enq_timestamp", + ["standard_metadata", "enq_timestamp"] + ], + [ + "queueing_metadata.enq_qdepth", + ["standard_metadata", "enq_qdepth"] + ], + [ + "queueing_metadata.deq_timedelta", + ["standard_metadata", "deq_timedelta"] + ], + [ + "queueing_metadata.deq_qdepth", + ["standard_metadata", "deq_qdepth"] + ], + [ + "intrinsic_metadata.ingress_global_timestamp", + ["standard_metadata", "ingress_global_timestamp"] + ], + [ + "intrinsic_metadata.egress_global_timestamp", + ["standard_metadata", "egress_global_timestamp"] + ], + [ + "intrinsic_metadata.lf_field_list", + ["standard_metadata", "lf_field_list"] + ], + [ + "intrinsic_metadata.mcast_grp", + ["standard_metadata", "mcast_grp"] + ], + [ + "intrinsic_metadata.resubmit_flag", + ["standard_metadata", "resubmit_flag"] + ], + [ + "intrinsic_metadata.egress_rid", + ["standard_metadata", "egress_rid"] + ], + [ + "intrinsic_metadata.recirculate_flag", + ["standard_metadata", "recirculate_flag"] + ] + ], + "program" : "fabric.p4", + "__meta__" : { + "version" : [2, 18], + "compiler" : "https://github.com/p4lang/p4c" + } +} \ No newline at end of file diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/cpu_port.txt b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/cpu_port.txt new file mode 100644 index 0000000000..ace9d03621 --- /dev/null +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/cpu_port.txt @@ -0,0 +1 @@ +255 diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt new file mode 100644 index 0000000000..be3e607438 --- /dev/null +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw-int/bmv2/default/p4info.txt @@ -0,0 +1,1584 @@ +tables { + preamble { + id: 33582731 + name: "FabricIngress.spgw_ingress.dl_sess_lookup" + alias: "dl_sess_lookup" + } + match_fields { + id: 1 + name: "ipv4.dst_addr" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 16804065 + } + action_refs { + id: 16800567 + annotations: "@defaultonly()" + } + direct_resource_ids: 318781522 + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33615906 + name: "FabricIngress.spgw_ingress.s1u_filter_table" + alias: "s1u_filter_table" + } + match_fields { + id: 1 + name: "gtpu_ipv4.dst_addr" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 16800567 + } + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33581620 + name: "FabricIngress.process_set_source_sink.tb_set_source" + alias: "tb_set_source" + } + match_fields { + id: 1 + name: "standard_metadata.ingress_port" + bitwidth: 9 + match_type: EXACT + } + action_refs { + id: 16778827 + } + action_refs { + id: 16800567 + annotations: "@defaultonly()" + } + direct_resource_ids: 318787614 + size: 511 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33611649 + name: "FabricIngress.filtering.ingress_port_vlan" + alias: "ingress_port_vlan" + } + match_fields { + id: 1 + name: "standard_metadata.ingress_port" + bitwidth: 9 + match_type: EXACT + } + match_fields { + id: 2 + name: "hdr.vlan_tag.is_valid" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 3 + name: "hdr.vlan_tag.vlan_id" + bitwidth: 12 + match_type: TERNARY + } + action_refs { + id: 16835546 + } + action_refs { + id: 16793253 + } + action_refs { + id: 16798734 + } + action_refs { + id: 16833700 + } + const_default_action_id: 16835546 + direct_resource_ids: 318815501 + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33596298 + name: "FabricIngress.filtering.fwd_classifier" + alias: "fwd_classifier" + } + match_fields { + id: 1 + name: "standard_metadata.ingress_port" + bitwidth: 9 + match_type: EXACT + } + match_fields { + id: 2 + name: "hdr.ethernet.dst_addr" + bitwidth: 48 + match_type: TERNARY + } + match_fields { + id: 3 + name: "hdr.vlan_tag.ether_type" + bitwidth: 16 + match_type: EXACT + } + action_refs { + id: 16840921 + } + const_default_action_id: 16840921 + direct_resource_ids: 318827326 + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33596749 + name: "FabricIngress.forwarding.bridging" + alias: "bridging" + } + match_fields { + id: 1 + name: "hdr.vlan_tag.vlan_id" + bitwidth: 12 + match_type: EXACT + } + match_fields { + id: 2 + name: "hdr.ethernet.dst_addr" + bitwidth: 48 + match_type: TERNARY + } + action_refs { + id: 16811012 + } + action_refs { + id: 16800567 + annotations: "@defaultonly()" + } + direct_resource_ids: 318770289 + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33574274 + name: "FabricIngress.forwarding.mpls" + alias: "mpls" + } + match_fields { + id: 1 + name: "hdr.mpls.label" + bitwidth: 20 + match_type: EXACT + } + action_refs { + id: 16827758 + } + action_refs { + id: 16800567 + annotations: "@defaultonly()" + } + direct_resource_ids: 318830507 + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33562650 + name: "FabricIngress.forwarding.routing_v4" + alias: "routing_v4" + } + match_fields { + id: 1 + name: "hdr.ipv4.dst_addr" + bitwidth: 32 + match_type: LPM + } + action_refs { + id: 16777434 + } + action_refs { + id: 16804187 + } + action_refs { + id: 16800567 + annotations: "@defaultonly()" + } + direct_resource_ids: 318811107 + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33574876 + name: "FabricIngress.forwarding.acl" + alias: "acl" + } + match_fields { + id: 1 + name: "standard_metadata.ingress_port" + bitwidth: 9 + match_type: TERNARY + } + match_fields { + id: 2 + name: "fabric_metadata.ip_proto" + bitwidth: 8 + match_type: TERNARY + } + match_fields { + id: 3 + name: "fabric_metadata.l4_src_port" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 4 + name: "fabric_metadata.l4_dst_port" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 5 + name: "hdr.ethernet.dst_addr" + bitwidth: 48 + match_type: TERNARY + } + match_fields { + id: 6 + name: "hdr.ethernet.src_addr" + bitwidth: 48 + match_type: TERNARY + } + match_fields { + id: 7 + name: "hdr.vlan_tag.vlan_id" + bitwidth: 12 + match_type: TERNARY + } + match_fields { + id: 8 + name: "hdr.vlan_tag.ether_type" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 9 + name: "hdr.ipv4.src_addr" + bitwidth: 32 + match_type: TERNARY + } + match_fields { + id: 10 + name: "hdr.ipv4.dst_addr" + bitwidth: 32 + match_type: TERNARY + } + match_fields { + id: 11 + name: "hdr.icmp.icmp_type" + bitwidth: 8 + match_type: TERNARY + } + match_fields { + id: 12 + name: "hdr.icmp.icmp_code" + bitwidth: 8 + match_type: TERNARY + } + action_refs { + id: 16785374 + } + action_refs { + id: 16801806 + } + action_refs { + id: 16784835 + } + action_refs { + id: 16833260 + } + action_refs { + id: 16842570 + } + const_default_action_id: 16842570 + direct_resource_ids: 318772272 + size: 128 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33562709 + name: "FabricIngress.next.vlan_meta" + alias: "vlan_meta" + } + match_fields { + id: 1 + name: "fabric_metadata.next_id" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 16790685 + } + action_refs { + id: 16819938 + annotations: "@defaultonly()" + } + direct_resource_ids: 318785328 + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33571723 + name: "FabricIngress.next.simple" + alias: "simple" + } + match_fields { + id: 1 + name: "fabric_metadata.next_id" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 16802668 + } + action_refs { + id: 16808391 + } + action_refs { + id: 16780007 + } + action_refs { + id: 16806134 + } + action_refs { + id: 16795970 + } + action_refs { + id: 16791579 + } + action_refs { + id: 16800567 + annotations: "@defaultonly()" + } + direct_resource_ids: 318769096 + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33608588 + name: "FabricIngress.next.hashed" + alias: "hashed" + } + match_fields { + id: 1 + name: "fabric_metadata.next_id" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 16800211 + } + action_refs { + id: 16779239 + } + action_refs { + id: 16819349 + } + action_refs { + id: 16800567 + annotations: "@defaultonly()" + } + implementation_id: 285233747 + direct_resource_ids: 318800532 + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33606828 + name: "FabricIngress.next.multicast" + alias: "multicast" + } + match_fields { + id: 1 + name: "fabric_metadata.next_id" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 16789575 + } + action_refs { + id: 16800567 + annotations: "@defaultonly()" + } + direct_resource_ids: 318801752 + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33612258 + name: "FabricEgress.process_int_main.process_int_source.tb_int_source" + alias: "tb_int_source" + } + match_fields { + id: 1 + name: "hdr.ipv4.src_addr" + bitwidth: 32 + match_type: TERNARY + } + match_fields { + id: 2 + name: "hdr.ipv4.dst_addr" + bitwidth: 32 + match_type: TERNARY + } + match_fields { + id: 3 + name: "fabric_metadata.l4_src_port" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 4 + name: "fabric_metadata.l4_dst_port" + bitwidth: 16 + match_type: TERNARY + } + action_refs { + id: 16785857 + } + action_refs { + id: 16800567 + annotations: "@defaultonly()" + } + direct_resource_ids: 318800047 + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33599867 + name: "FabricEgress.process_int_main.process_int_transit.tb_int_insert" + alias: "tb_int_insert" + } + match_fields { + id: 1 + name: "hdr.int_header.is_valid" + bitwidth: 1 + match_type: EXACT + } + action_refs { + id: 16780783 + } + action_refs { + id: 16819938 + annotations: "@defaultonly()" + } + const_default_action_id: 16819938 + size: 1 + idle_timeout_behavior: NO_TIMEOUT +} +tables { + preamble { + id: 33569467 + name: "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0003" + alias: "tb_int_inst_0003" + } + match_fields { + id: 1 + name: "hdr.int_header.instruction_mask_0003" + bitwidth: 4 + match_type: EXACT + } + action_refs { + id: 16809886 + } + action_refs { + id: 16783130 + } + action_refs { + id: 16809096 + } + action_refs { + id: 16834117 + } + action_refs { + id: 16825314 + } + action_refs { + id: 16811436 + } + action_refs { + id: 16802199 + } + action_refs { + id: 16796779 + } + action_refs { + id: 16787676 + } + action_refs { + id: 16825351 + } + action_refs { + id: 16793999 + } + action_refs { + id: 16786714 + } + action_refs { + id: 16814203 + } + action_refs { + id: 16807054 + } + action_refs { + id: 16800064 + } + action_refs { + id: 16792997 + } + action_refs { + id: 16800567 + annotations: "@defaultonly()" + } + size: 16 + idle_timeout_behavior: NO_TIMEOUT + is_const_table: true +} +tables { + preamble { + id: 33595914 + name: "FabricEgress.process_int_main.process_int_transit.tb_int_inst_0407" + alias: "tb_int_inst_0407" + } + match_fields { + id: 1 + name: "hdr.int_header.instruction_mask_0407" + bitwidth: 4 + match_type: EXACT + } + action_refs { + id: 16819022 + } + action_refs { + id: 16804144 + } + action_refs { + id: 16829117 + } + action_refs { + id: 16797781 + } + action_refs { + id: 16813543 + } + action_refs { + id: 16824974 + } + action_refs { + id: 16815362 + } + action_refs { + id: 16835399 + } + action_refs { + id: 16834505 + } + action_refs { + id: 16811493 + } + action_refs { + id: 16825476 + } + action_refs { + id: 16799777 + } + action_refs { + id: 16829592 + } + action_refs { + id: 16805877 + } + action_refs { + id: 16780182 + } + action_refs { + id: 16799476 + } + action_refs { + id: 16800567 + annotations: "@defaultonly()" + } + size: 16 + idle_timeout_behavior: NO_TIMEOUT + is_const_table: true +} +tables { + preamble { + id: 33599342 + name: "FabricEgress.egress_next.egress_vlan" + alias: "egress_vlan" + } + match_fields { + id: 1 + name: "hdr.vlan_tag.vlan_id" + bitwidth: 12 + match_type: EXACT + } + match_fields { + id: 2 + name: "standard_metadata.egress_port" + bitwidth: 9 + match_type: EXACT + } + action_refs { + id: 16790030 + } + action_refs { + id: 16819938 + annotations: "@defaultonly()" + } + direct_resource_ids: 318827144 + size: 1024 + idle_timeout_behavior: NO_TIMEOUT +} +actions { + preamble { + id: 16800567 + name: "NoAction" + alias: "NoAction" + } +} +actions { + preamble { + id: 16819938 + name: "nop" + alias: "nop" + } +} +actions { + preamble { + id: 16823970 + name: "drop_now" + alias: "drop_now" + } +} +actions { + preamble { + id: 16819909 + name: "FabricIngress.spgw_ingress.gtpu_decap" + alias: "gtpu_decap" + } +} +actions { + preamble { + id: 16804065 + name: "FabricIngress.spgw_ingress.set_dl_sess_info" + alias: "set_dl_sess_info" + } + params { + id: 1 + name: "teid" + bitwidth: 32 + } + params { + id: 2 + name: "s1u_enb_addr" + bitwidth: 32 + } + params { + id: 3 + name: "s1u_sgw_addr" + bitwidth: 32 + } +} +actions { + preamble { + id: 16778827 + name: "FabricIngress.process_set_source_sink.int_set_source" + alias: "int_set_source" + } +} +actions { + preamble { + id: 16798734 + name: "FabricIngress.filtering.drop" + alias: "filtering.drop" + } +} +actions { + preamble { + id: 16793253 + name: "FabricIngress.filtering.set_vlan" + alias: "filtering.set_vlan" + } + params { + id: 1 + name: "new_vlan_id" + bitwidth: 12 + } +} +actions { + preamble { + id: 16835546 + name: "FabricIngress.filtering.push_internal_vlan" + alias: "push_internal_vlan" + } + params { + id: 1 + name: "new_vlan_id" + bitwidth: 12 + } +} +actions { + preamble { + id: 16833700 + name: "FabricIngress.filtering.nop_ingress_port_vlan" + alias: "nop_ingress_port_vlan" + } +} +actions { + preamble { + id: 16840921 + name: "FabricIngress.filtering.set_forwarding_type" + alias: "set_forwarding_type" + } + params { + id: 1 + name: "fwd_type" + bitwidth: 3 + } +} +actions { + preamble { + id: 16811012 + name: "FabricIngress.forwarding.set_next_id_bridging" + alias: "set_next_id_bridging" + } + params { + id: 1 + name: "next_id" + bitwidth: 32 + } +} +actions { + preamble { + id: 16827758 + name: "FabricIngress.forwarding.pop_mpls_and_next" + alias: "pop_mpls_and_next" + } + params { + id: 1 + name: "next_id" + bitwidth: 32 + } +} +actions { + preamble { + id: 16777434 + name: "FabricIngress.forwarding.set_next_id_routing_v4" + alias: "set_next_id_routing_v4" + } + params { + id: 1 + name: "next_id" + bitwidth: 32 + } +} +actions { + preamble { + id: 16804187 + name: "FabricIngress.forwarding.nop_routing_v4" + alias: "nop_routing_v4" + } +} +actions { + preamble { + id: 16785374 + name: "FabricIngress.forwarding.set_next_id_acl" + alias: "set_next_id_acl" + } + params { + id: 1 + name: "next_id" + bitwidth: 32 + } +} +actions { + preamble { + id: 16801806 + name: "FabricIngress.forwarding.punt_to_cpu" + alias: "punt_to_cpu" + } +} +actions { + preamble { + id: 16784835 + name: "FabricIngress.forwarding.clone_to_cpu" + alias: "clone_to_cpu" + } +} +actions { + preamble { + id: 16833260 + name: "FabricIngress.forwarding.drop" + alias: "forwarding.drop" + } +} +actions { + preamble { + id: 16842570 + name: "FabricIngress.forwarding.nop_acl" + alias: "nop_acl" + } +} +actions { + preamble { + id: 16790685 + name: "FabricIngress.next.set_vlan" + alias: "next.set_vlan" + } + params { + id: 1 + name: "new_vlan_id" + bitwidth: 12 + } +} +actions { + preamble { + id: 16802668 + name: "FabricIngress.next.output_simple" + alias: "output_simple" + } + params { + id: 1 + name: "port_num" + bitwidth: 9 + } +} +actions { + preamble { + id: 16808391 + name: "FabricIngress.next.set_vlan_output" + alias: "set_vlan_output" + } + params { + id: 1 + name: "new_vlan_id" + bitwidth: 12 + } + params { + id: 2 + name: "port_num" + bitwidth: 9 + } +} +actions { + preamble { + id: 16780007 + name: "FabricIngress.next.l3_routing_simple" + alias: "l3_routing_simple" + } + params { + id: 1 + name: "port_num" + bitwidth: 9 + } + params { + id: 2 + name: "smac" + bitwidth: 48 + } + params { + id: 3 + name: "dmac" + bitwidth: 48 + } +} +actions { + preamble { + id: 16806134 + name: "FabricIngress.next.mpls_routing_v4_simple" + alias: "mpls_routing_v4_simple" + } + params { + id: 1 + name: "port_num" + bitwidth: 9 + } + params { + id: 2 + name: "smac" + bitwidth: 48 + } + params { + id: 3 + name: "dmac" + bitwidth: 48 + } + params { + id: 4 + name: "label" + bitwidth: 20 + } +} +actions { + preamble { + id: 16795970 + name: "FabricIngress.next.mpls_routing_v6_simple" + alias: "mpls_routing_v6_simple" + } + params { + id: 1 + name: "port_num" + bitwidth: 9 + } + params { + id: 2 + name: "smac" + bitwidth: 48 + } + params { + id: 3 + name: "dmac" + bitwidth: 48 + } + params { + id: 4 + name: "label" + bitwidth: 20 + } +} +actions { + preamble { + id: 16791579 + name: "FabricIngress.next.l3_routing_vlan" + alias: "l3_routing_vlan" + } + params { + id: 1 + name: "port_num" + bitwidth: 9 + } + params { + id: 2 + name: "smac" + bitwidth: 48 + } + params { + id: 3 + name: "dmac" + bitwidth: 48 + } + params { + id: 4 + name: "new_vlan_id" + bitwidth: 12 + } +} +actions { + preamble { + id: 16800211 + name: "FabricIngress.next.l3_routing_hashed" + alias: "l3_routing_hashed" + } + params { + id: 1 + name: "port_num" + bitwidth: 9 + } + params { + id: 2 + name: "smac" + bitwidth: 48 + } + params { + id: 3 + name: "dmac" + bitwidth: 48 + } +} +actions { + preamble { + id: 16779239 + name: "FabricIngress.next.mpls_routing_v4_hashed" + alias: "mpls_routing_v4_hashed" + } + params { + id: 1 + name: "port_num" + bitwidth: 9 + } + params { + id: 2 + name: "smac" + bitwidth: 48 + } + params { + id: 3 + name: "dmac" + bitwidth: 48 + } + params { + id: 4 + name: "label" + bitwidth: 20 + } +} +actions { + preamble { + id: 16819349 + name: "FabricIngress.next.mpls_routing_v6_hashed" + alias: "mpls_routing_v6_hashed" + } + params { + id: 1 + name: "port_num" + bitwidth: 9 + } + params { + id: 2 + name: "smac" + bitwidth: 48 + } + params { + id: 3 + name: "dmac" + bitwidth: 48 + } + params { + id: 4 + name: "label" + bitwidth: 20 + } +} +actions { + preamble { + id: 16789575 + name: "FabricIngress.next.set_mcast_group" + alias: "set_mcast_group" + } + params { + id: 1 + name: "gid" + bitwidth: 16 + } +} +actions { + preamble { + id: 16829135 + name: "FabricEgress.spgw_egress.gtpu_encap" + alias: "gtpu_encap" + } +} +actions { + preamble { + id: 16785857 + name: "FabricEgress.process_int_main.process_int_source.int_source_dscp" + alias: "int_source_dscp" + } + params { + id: 1 + name: "max_hop" + bitwidth: 8 + } + params { + id: 2 + name: "ins_cnt" + bitwidth: 5 + } + params { + id: 3 + name: "ins_mask0003" + bitwidth: 4 + } + params { + id: 4 + name: "ins_mask0407" + bitwidth: 4 + } +} +actions { + preamble { + id: 16780783 + name: "FabricEgress.process_int_main.process_int_transit.init_metadata" + alias: "init_metadata" + } + params { + id: 1 + name: "switch_id" + bitwidth: 32 + } +} +actions { + preamble { + id: 16809886 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i0" + alias: "int_set_header_0003_i0" + } +} +actions { + preamble { + id: 16783130 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i1" + alias: "int_set_header_0003_i1" + } +} +actions { + preamble { + id: 16809096 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i2" + alias: "int_set_header_0003_i2" + } +} +actions { + preamble { + id: 16834117 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i3" + alias: "int_set_header_0003_i3" + } +} +actions { + preamble { + id: 16825314 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i4" + alias: "int_set_header_0003_i4" + } +} +actions { + preamble { + id: 16811436 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i5" + alias: "int_set_header_0003_i5" + } +} +actions { + preamble { + id: 16802199 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i6" + alias: "int_set_header_0003_i6" + } +} +actions { + preamble { + id: 16796779 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i7" + alias: "int_set_header_0003_i7" + } +} +actions { + preamble { + id: 16787676 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i8" + alias: "int_set_header_0003_i8" + } +} +actions { + preamble { + id: 16825351 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i9" + alias: "int_set_header_0003_i9" + } +} +actions { + preamble { + id: 16793999 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i10" + alias: "int_set_header_0003_i10" + } +} +actions { + preamble { + id: 16786714 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i11" + alias: "int_set_header_0003_i11" + } +} +actions { + preamble { + id: 16814203 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i12" + alias: "int_set_header_0003_i12" + } +} +actions { + preamble { + id: 16807054 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i13" + alias: "int_set_header_0003_i13" + } +} +actions { + preamble { + id: 16800064 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i14" + alias: "int_set_header_0003_i14" + } +} +actions { + preamble { + id: 16792997 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0003_i15" + alias: "int_set_header_0003_i15" + } +} +actions { + preamble { + id: 16819022 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i0" + alias: "int_set_header_0407_i0" + } +} +actions { + preamble { + id: 16804144 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i1" + alias: "int_set_header_0407_i1" + } +} +actions { + preamble { + id: 16829117 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i2" + alias: "int_set_header_0407_i2" + } +} +actions { + preamble { + id: 16797781 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i3" + alias: "int_set_header_0407_i3" + } +} +actions { + preamble { + id: 16813543 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i4" + alias: "int_set_header_0407_i4" + } +} +actions { + preamble { + id: 16824974 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i5" + alias: "int_set_header_0407_i5" + } +} +actions { + preamble { + id: 16815362 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i6" + alias: "int_set_header_0407_i6" + } +} +actions { + preamble { + id: 16835399 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i7" + alias: "int_set_header_0407_i7" + } +} +actions { + preamble { + id: 16834505 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i8" + alias: "int_set_header_0407_i8" + } +} +actions { + preamble { + id: 16811493 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i9" + alias: "int_set_header_0407_i9" + } +} +actions { + preamble { + id: 16825476 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i10" + alias: "int_set_header_0407_i10" + } +} +actions { + preamble { + id: 16799777 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i11" + alias: "int_set_header_0407_i11" + } +} +actions { + preamble { + id: 16829592 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i12" + alias: "int_set_header_0407_i12" + } +} +actions { + preamble { + id: 16805877 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i13" + alias: "int_set_header_0407_i13" + } +} +actions { + preamble { + id: 16780182 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i14" + alias: "int_set_header_0407_i14" + } +} +actions { + preamble { + id: 16799476 + name: "FabricEgress.process_int_main.process_int_transit.int_set_header_0407_i15" + alias: "int_set_header_0407_i15" + } +} +actions { + preamble { + id: 16801047 + name: "FabricEgress.pkt_io_egress.pop_vlan" + alias: "pkt_io_egress.pop_vlan" + } +} +actions { + preamble { + id: 16790030 + name: "FabricEgress.egress_next.pop_vlan" + alias: "egress_next.pop_vlan" + } +} +action_profiles { + preamble { + id: 285233747 + name: "FabricIngress.next.ecmp_selector" + alias: "ecmp_selector" + } + table_ids: 33608588 + with_selector: true + size: 64 +} +counters { + preamble { + id: 302011205 + name: "FabricIngress.port_counters_control.egress_port_counter" + alias: "egress_port_counter" + } + spec { + unit: BOTH + } + size: 511 +} +counters { + preamble { + id: 302002771 + name: "FabricIngress.port_counters_control.ingress_port_counter" + alias: "ingress_port_counter" + } + spec { + unit: BOTH + } + size: 511 +} +direct_counters { + preamble { + id: 318781522 + name: "FabricIngress.spgw_ingress.ue_counter" + alias: "ue_counter" + } + spec { + unit: BOTH + } + direct_table_id: 33582731 +} +direct_counters { + preamble { + id: 318787614 + name: "FabricIngress.process_set_source_sink.counter_set_source" + alias: "counter_set_source" + } + spec { + unit: BOTH + } + direct_table_id: 33581620 +} +direct_counters { + preamble { + id: 318815501 + name: "FabricIngress.filtering.ingress_port_vlan_counter" + alias: "ingress_port_vlan_counter" + } + spec { + unit: BOTH + } + direct_table_id: 33611649 +} +direct_counters { + preamble { + id: 318827326 + name: "FabricIngress.filtering.fwd_classifier_counter" + alias: "fwd_classifier_counter" + } + spec { + unit: BOTH + } + direct_table_id: 33596298 +} +direct_counters { + preamble { + id: 318770289 + name: "FabricIngress.forwarding.bridging_counter" + alias: "bridging_counter" + } + spec { + unit: BOTH + } + direct_table_id: 33596749 +} +direct_counters { + preamble { + id: 318830507 + name: "FabricIngress.forwarding.mpls_counter" + alias: "mpls_counter" + } + spec { + unit: BOTH + } + direct_table_id: 33574274 +} +direct_counters { + preamble { + id: 318811107 + name: "FabricIngress.forwarding.routing_v4_counter" + alias: "routing_v4_counter" + } + spec { + unit: BOTH + } + direct_table_id: 33562650 +} +direct_counters { + preamble { + id: 318772272 + name: "FabricIngress.forwarding.acl_counter" + alias: "acl_counter" + } + spec { + unit: BOTH + } + direct_table_id: 33574876 +} +direct_counters { + preamble { + id: 318785328 + name: "FabricIngress.next.vlan_meta_counter" + alias: "vlan_meta_counter" + } + spec { + unit: BOTH + } + direct_table_id: 33562709 +} +direct_counters { + preamble { + id: 318769096 + name: "FabricIngress.next.simple_counter" + alias: "simple_counter" + } + spec { + unit: BOTH + } + direct_table_id: 33571723 +} +direct_counters { + preamble { + id: 318800532 + name: "FabricIngress.next.hashed_counter" + alias: "hashed_counter" + } + spec { + unit: BOTH + } + direct_table_id: 33608588 +} +direct_counters { + preamble { + id: 318801752 + name: "FabricIngress.next.multicast_counter" + alias: "multicast_counter" + } + spec { + unit: BOTH + } + direct_table_id: 33606828 +} +direct_counters { + preamble { + id: 318800047 + name: "FabricEgress.process_int_main.process_int_source.counter_int_source" + alias: "counter_int_source" + } + spec { + unit: BOTH + } + direct_table_id: 33612258 +} +direct_counters { + preamble { + id: 318827144 + name: "FabricEgress.egress_next.egress_vlan_counter" + alias: "egress_vlan_counter" + } + spec { + unit: BOTH + } + direct_table_id: 33599342 +} +controller_packet_metadata { + preamble { + id: 67146229 + name: "packet_in" + annotations: "@controller_header(\"packet_in\")" + } + metadata { + id: 1 + name: "ingress_port" + bitwidth: 9 + } + metadata { + id: 2 + name: "_pad" + bitwidth: 7 + } +} +controller_packet_metadata { + preamble { + id: 67121543 + name: "packet_out" + annotations: "@controller_header(\"packet_out\")" + } + metadata { + id: 1 + name: "egress_port" + bitwidth: 9 + } + metadata { + id: 2 + name: "_pad" + bitwidth: 7 + } +} +type_info { +} diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json index a34bcfbfd0..2d9749836e 100644 --- a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/bmv2.json @@ -930,7 +930,7 @@ "id" : 0, "source_info" : { "filename" : "include/parser.p4", - "line" : 223, + "line" : 228, "column" : 8, "source_fragment" : "FabricDeparser" }, @@ -1578,7 +1578,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 89, + "line" : 91, "column" : 31, "source_fragment" : "0x8100; ..." } @@ -2211,7 +2211,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -2287,7 +2287,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -2402,7 +2402,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -2478,7 +2478,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -2770,7 +2770,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -2846,7 +2846,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -2961,7 +2961,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -3037,7 +3037,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -3155,7 +3155,7 @@ ], "source_info" : { "filename" : "fabric.p4", - "line" : 52, + "line" : 54, "column" : 50, "source_fragment" : "hdr.gtpu_ipv4" } @@ -3170,7 +3170,7 @@ ], "source_info" : { "filename" : "fabric.p4", - "line" : 52, + "line" : 54, "column" : 65, "source_fragment" : "hdr.gtpu_udp" } @@ -3461,7 +3461,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 119, + "line" : 121, "column" : 36, "source_fragment" : "2w1; ..." } @@ -3547,7 +3547,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 120, + "line" : 122, "column" : 38, "source_fragment" : "2w2; ..." } @@ -3573,7 +3573,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 118, + "line" : 120, "column" : 37, "source_fragment" : "2w0; ..." } @@ -3744,7 +3744,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 109, + "line" : 111, "column" : 31, "source_fragment" : "7; ..." } @@ -3770,7 +3770,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 92, + "line" : 94, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -4301,7 +4301,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 101, + "line" : 103, "column" : 28, "source_fragment" : "5; ..." } @@ -4457,7 +4457,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 114, + "line" : 116, "column" : 32, "source_fragment" : "64; ..." } @@ -4476,7 +4476,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 98, + "line" : 100, "column" : 25, "source_fragment" : "17; ..." } @@ -4859,7 +4859,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 39, + "line" : 40, "column" : 8, "source_fragment" : "hdr.ethernet.ether_type = hdr.vlan_tag.ether_type" } @@ -4874,7 +4874,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 40, + "line" : 41, "column" : 8, "source_fragment" : "hdr.vlan_tag.setInvalid()" } @@ -4937,7 +4937,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 56, + "line" : 57, "column" : 12, "source_fragment" : "hdr.packet_in.setValid()" } @@ -4956,7 +4956,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 57, + "line" : 58, "column" : 12, "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port" } @@ -6799,7 +6799,7 @@ "id" : 1, "source_info" : { "filename" : "fabric.p4", - "line" : 80, + "line" : 79, "column" : 8, "source_fragment" : "FabricEgress" }, @@ -6971,7 +6971,7 @@ "id" : 20, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 43, + "line" : 44, "column" : 12, "source_fragment" : "fabric_metadata.is_controller_packet_out == true" }, @@ -7004,7 +7004,7 @@ "id" : 21, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 47, + "line" : 48, "column" : 12, "source_fragment" : "standard_metadata.egress_port == 255" }, @@ -7030,7 +7030,7 @@ "id" : 22, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 48, + "line" : 49, "column" : 16, "source_fragment" : "hdr.vlan_tag.isValid() && fabric_metadata.pop_vlan_when_packet_in == true" }, @@ -7080,7 +7080,7 @@ "id" : 23, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 51, + "line" : 52, "column" : 16, "source_fragment" : "fabric_metadata.is_multicast == true && ..." }, diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/cpu_port.txt b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/cpu_port.txt new file mode 100644 index 0000000000..ace9d03621 --- /dev/null +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric-spgw/bmv2/default/cpu_port.txt @@ -0,0 +1 @@ +255 diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json index 32e5f336a2..0623d6cb2c 100644 --- a/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json @@ -634,7 +634,12 @@ "next_state" : null } ], - "transition_key" : [] + "transition_key" : [ + { + "type" : "field", + "value" : ["udp", "dst_port"] + } + ] }, { "name" : "parse_icmp", @@ -669,7 +674,7 @@ "id" : 0, "source_info" : { "filename" : "include/parser.p4", - "line" : 223, + "line" : 228, "column" : 8, "source_fragment" : "FabricDeparser" }, @@ -1082,7 +1087,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 89, + "line" : 91, "column" : 31, "source_fragment" : "0x8100; ..." } @@ -1715,7 +1720,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -1791,7 +1796,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -1906,7 +1911,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -1982,7 +1987,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -2274,7 +2279,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -2350,7 +2355,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -2465,7 +2470,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 90, + "line" : 92, "column" : 31, "source_fragment" : "0x8847; ..." } @@ -2541,7 +2546,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 113, + "line" : 115, "column" : 32, "source_fragment" : "64; ..." } @@ -2757,7 +2762,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 109, + "line" : 111, "column" : 31, "source_fragment" : "7; ..." } @@ -2783,7 +2788,7 @@ ], "source_info" : { "filename" : "include/control/../define.p4", - "line" : 92, + "line" : 94, "column" : 31, "source_fragment" : "0x0800; ..." } @@ -3280,7 +3285,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 39, + "line" : 40, "column" : 8, "source_fragment" : "hdr.ethernet.ether_type = hdr.vlan_tag.ether_type" } @@ -3295,7 +3300,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 40, + "line" : 41, "column" : 8, "source_fragment" : "hdr.vlan_tag.setInvalid()" } @@ -3358,7 +3363,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 56, + "line" : 57, "column" : 12, "source_fragment" : "hdr.packet_in.setValid()" } @@ -3377,7 +3382,7 @@ ], "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 57, + "line" : 58, "column" : 12, "source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port" } @@ -4607,7 +4612,7 @@ "id" : 1, "source_info" : { "filename" : "fabric.p4", - "line" : 80, + "line" : 79, "column" : 8, "source_fragment" : "FabricEgress" }, @@ -4756,7 +4761,7 @@ "id" : 13, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 43, + "line" : 44, "column" : 12, "source_fragment" : "fabric_metadata.is_controller_packet_out == true" }, @@ -4789,7 +4794,7 @@ "id" : 14, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 47, + "line" : 48, "column" : 12, "source_fragment" : "standard_metadata.egress_port == 255" }, @@ -4815,7 +4820,7 @@ "id" : 15, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 48, + "line" : 49, "column" : 16, "source_fragment" : "hdr.vlan_tag.isValid() && fabric_metadata.pop_vlan_when_packet_in == true" }, @@ -4865,7 +4870,7 @@ "id" : 16, "source_info" : { "filename" : "include/control/packetio.p4", - "line" : 51, + "line" : 52, "column" : 16, "source_fragment" : "fabric_metadata.is_multicast == true && ..." }, diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/cpu_port.txt b/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/cpu_port.txt new file mode 100644 index 0000000000..ace9d03621 --- /dev/null +++ b/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/cpu_port.txt @@ -0,0 +1 @@ +255 diff --git a/protocols/p4runtime/api/src/main/java/org/onosproject/p4runtime/api/P4RuntimeClient.java b/protocols/p4runtime/api/src/main/java/org/onosproject/p4runtime/api/P4RuntimeClient.java index 886a39df08..8c1d7d9af0 100644 --- a/protocols/p4runtime/api/src/main/java/org/onosproject/p4runtime/api/P4RuntimeClient.java +++ b/protocols/p4runtime/api/src/main/java/org/onosproject/p4runtime/api/P4RuntimeClient.java @@ -24,6 +24,7 @@ import org.onosproject.net.pi.model.PiPipeconf; import org.onosproject.net.pi.model.PiTableId; import org.onosproject.net.pi.runtime.PiActionGroup; import org.onosproject.net.pi.runtime.PiActionGroupMember; +import org.onosproject.net.pi.runtime.PiActionGroupMemberId; import org.onosproject.net.pi.runtime.PiCounterCellData; import org.onosproject.net.pi.runtime.PiCounterCellId; import org.onosproject.net.pi.runtime.PiMeterCellConfig; @@ -33,7 +34,7 @@ import org.onosproject.net.pi.runtime.PiPacketOperation; import org.onosproject.net.pi.runtime.PiTableEntry; import java.nio.ByteBuffer; -import java.util.Collection; +import java.util.List; import java.util.Set; import java.util.concurrent.CompletableFuture; @@ -132,27 +133,31 @@ public interface P4RuntimeClient { * @return true if the operation was successful, false otherwise. */ CompletableFuture writeTableEntries( - Collection entries, WriteOperationType opType, + List entries, WriteOperationType opType, PiPipeconf pipeconf); /** - * Dumps all entries currently installed in the given table, for the given - * pipeconf. + * Dumps all entries currently installed in the given tables, for the given + * pipeconf. If defaultEntries is set to true only the default action + * entries will be returned, otherwise non-default entries will be + * considered. * - * @param tableId table identifier - * @param pipeconf pipeconf currently deployed on the device - * @return completable future of a collection of table entries + * @param tableIds table identifiers + * @param defaultEntries true to read default entries, false for + * non-default + * @param pipeconf pipeconf currently deployed on the device + * @return completable future of a list of table entries */ - CompletableFuture> dumpTable( - PiTableId tableId, PiPipeconf pipeconf); + CompletableFuture> dumpTables( + Set tableIds, boolean defaultEntries, PiPipeconf pipeconf); /** * Dumps entries from all tables, for the given pipeconf. * * @param pipeconf pipeconf currently deployed on the device - * @return completable future of a collection of table entries + * @return completable future of a list of table entries */ - CompletableFuture> dumpAllTables(PiPipeconf pipeconf); + CompletableFuture> dumpAllTables(PiPipeconf pipeconf); /** * Executes a packet-out operation for the given pipeconf. @@ -171,34 +176,33 @@ public interface P4RuntimeClient { * * @param counterIds counter identifiers * @param pipeconf pipeconf - * @return collection of counter data + * @return list of counter data */ - CompletableFuture> readAllCounterCells( + CompletableFuture> readAllCounterCells( Set counterIds, PiPipeconf pipeconf); /** - * Returns a collection of counter data corresponding to the given set of - * counter cell identifiers, for the given pipeconf. + * Returns a list of counter data corresponding to the given set of counter + * cell identifiers, for the given pipeconf. * * @param cellIds set of counter cell identifiers * @param pipeconf pipeconf - * @return collection of counter data + * @return list of counter data */ - CompletableFuture> readCounterCells( + CompletableFuture> readCounterCells( Set cellIds, PiPipeconf pipeconf); /** * Performs the given write operation for the given action group members and * pipeconf. * - * @param profileId action group profile ID - * @param members action group members - * @param opType write operation type - * @param pipeconf the pipeconf currently deployed on the device + * @param members action group members + * @param opType write operation type + * @param pipeconf the pipeconf currently deployed on the device * @return true if the operation was successful, false otherwise */ CompletableFuture writeActionGroupMembers( - PiActionProfileId profileId, Collection members, + List members, WriteOperationType opType, PiPipeconf pipeconf); /** @@ -218,31 +222,55 @@ public interface P4RuntimeClient { * * @param actionProfileId the action profile id * @param pipeconf the pipeconf currently deployed on the device - * @return completable future of a collection of groups + * @return completable future of a list of groups */ - CompletableFuture> dumpGroups( + CompletableFuture> dumpGroups( PiActionProfileId actionProfileId, PiPipeconf pipeconf); + /** + * Dumps all action profile member IDs for a given action profile. + * + * @param actionProfileId action profile ID + * @param pipeconf pipeconf + * @return future of list of action profile member ID + */ + CompletableFuture> dumpActionProfileMemberIds( + PiActionProfileId actionProfileId, PiPipeconf pipeconf); + + /** + * Removes the given members from the given action profile. Returns the list + * of successfully removed members. + * + * @param actionProfileId action profile ID + * @param memberIds member IDs + * @param pipeconf pipeconf + * @return list of member IDs that were successfully removed from the device + */ + CompletableFuture> removeActionProfileMembers( + PiActionProfileId actionProfileId, + List memberIds, + PiPipeconf pipeconf); + /** * Returns the configuration of all meter cells for the given set of meter * identifiers and pipeconf. * * @param meterIds meter identifiers * @param pipeconf pipeconf - * @return collection of meter configurations + * @return list of meter configurations */ - CompletableFuture> readAllMeterCells( + CompletableFuture> readAllMeterCells( Set meterIds, PiPipeconf pipeconf); /** - * Returns a collection of meter configurations corresponding to the given - * set of meter cell identifiers, for the given pipeconf. + * Returns a list of meter configurations corresponding to the given set of + * meter cell identifiers, for the given pipeconf. * * @param cellIds set of meter cell identifiers * @param pipeconf pipeconf - * @return collection of meter configrations + * @return list of meter configrations */ - CompletableFuture> readMeterCells( + CompletableFuture> readMeterCells( Set cellIds, PiPipeconf pipeconf); /** @@ -254,7 +282,7 @@ public interface P4RuntimeClient { * @return true if the operation was successful, false otherwise. */ CompletableFuture writeMeterCells( - Collection cellConfigs, PiPipeconf pipeconf); + List cellConfigs, PiPipeconf pipeconf); /** * Performs the given write operation for the given PI multicast groups @@ -265,7 +293,7 @@ public interface P4RuntimeClient { * @return true if the operation was successful, false otherwise */ CompletableFuture writePreMulticastGroupEntries( - Collection entries, + List entries, WriteOperationType opType); /** @@ -273,5 +301,5 @@ public interface P4RuntimeClient { * * @return multicast groups */ - CompletableFuture> readAllMulticastGroupEntries(); + CompletableFuture> readAllMulticastGroupEntries(); } diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/ActionProfileGroupEncoder.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/ActionProfileGroupEncoder.java index 20f39dfe84..709b92ea53 100644 --- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/ActionProfileGroupEncoder.java +++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/ActionProfileGroupEncoder.java @@ -21,10 +21,10 @@ import org.onosproject.net.pi.model.PiActionProfileId; import org.onosproject.net.pi.model.PiPipeconf; import org.onosproject.net.pi.runtime.PiActionGroup; import org.onosproject.net.pi.runtime.PiActionGroupId; +import p4.config.v1.P4InfoOuterClass; import p4.v1.P4RuntimeOuterClass.ActionProfileGroup; import p4.v1.P4RuntimeOuterClass.ActionProfileGroup.Member; import p4.v1.P4RuntimeOuterClass.ActionProfileMember; -import p4.config.v1.P4InfoOuterClass; import java.util.Collection; import java.util.Map; @@ -36,6 +36,8 @@ import static java.lang.String.format; */ final class ActionProfileGroupEncoder { + private static final int GROUP_SIZE_ADDITIONAL_MEMBERS = 10; + private ActionProfileGroupEncoder() { // hide default constructor } @@ -44,10 +46,12 @@ final class ActionProfileGroupEncoder { * Encode a PI action group to a action profile group. * * @param piActionGroup the action profile group - * @param pipeconf the pipeconf + * @param pipeconf the pipeconf * @return a action profile group encoded from PI action group - * @throws P4InfoBrowser.NotFoundException if can't find action profile from P4Info browser - * @throws EncodeException if can't find P4Info from pipeconf + * @throws P4InfoBrowser.NotFoundException if can't find action profile from + * P4Info browser + * @throws EncodeException if can't find P4Info from + * pipeconf */ static ActionProfileGroup encode(PiActionGroup piActionGroup, PiPipeconf pipeconf) throws P4InfoBrowser.NotFoundException, EncodeException { @@ -62,8 +66,8 @@ final class ActionProfileGroupEncoder { .getByName(piActionProfileId.id()); int actionProfileId = actionProfile.getPreamble().getId(); ActionProfileGroup.Builder actionProfileGroupBuilder = ActionProfileGroup.newBuilder() - .setGroupId(piActionGroup.id().id()) - .setActionProfileId(actionProfileId); + .setGroupId(piActionGroup.id().id()) + .setActionProfileId(actionProfileId); piActionGroup.members().forEach(m -> { // TODO: currently we don't set "watch" field of member @@ -74,20 +78,31 @@ final class ActionProfileGroupEncoder { actionProfileGroupBuilder.addMembers(member); }); - actionProfileGroupBuilder.setMaxSize(piActionGroup.members().size()); + // FIXME: ONOS-7797 Make this configurable, or find a different way of + // supporting group modify. In P4Runtime, group size cannot be modified + // once the group is created. To allow adding members to an existing + // group we set max_size to support an additional number of members + // other than the one already defined in the PI group. Clearly, this + // will break if we try to add more than GROUP_SIZE_ADDITIONAL_MEMBERS + // to the same group. + actionProfileGroupBuilder.setMaxSize( + piActionGroup.members().size() + GROUP_SIZE_ADDITIONAL_MEMBERS); return actionProfileGroupBuilder.build(); } /** - * Decode an action profile group with members information to a PI action group. + * Decode an action profile group with members information to a PI action + * group. * * @param actionProfileGroup the action profile group - * @param members members of the action profile group - * @param pipeconf the pipeconf + * @param members members of the action profile group + * @param pipeconf the pipeconf * @return decoded PI action group - * @throws P4InfoBrowser.NotFoundException if can't find action profile from P4Info browser - * @throws EncodeException if can't find P4Info from pipeconf + * @throws P4InfoBrowser.NotFoundException if can't find action profile from + * P4Info browser + * @throws EncodeException if can't find P4Info from + * pipeconf */ static PiActionGroup decode(ActionProfileGroup actionProfileGroup, Collection members, diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/ActionProfileMemberEncoder.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/ActionProfileMemberEncoder.java index 4dbcac38ed..e78aa97ca2 100644 --- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/ActionProfileMemberEncoder.java +++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/ActionProfileMemberEncoder.java @@ -39,16 +39,14 @@ final class ActionProfileMemberEncoder { /** * Encode a PiActionGroupMember to a ActionProfileMember. * - * @param profileId the PI action group profile ID of members - * @param member the member to encode - * @param pipeconf the pipeconf, as encode spec + * @param member the member to encode + * @param pipeconf the pipeconf, as encode spec * @return encoded member * @throws P4InfoBrowser.NotFoundException can't find action profile from * P4Info browser * @throws EncodeException can't find P4Info from pipeconf */ - static ActionProfileMember encode(PiActionProfileId profileId, - PiActionGroupMember member, + static ActionProfileMember encode(PiActionGroupMember member, PiPipeconf pipeconf) throws P4InfoBrowser.NotFoundException, EncodeException { @@ -66,7 +64,7 @@ final class ActionProfileMemberEncoder { // action profile id P4InfoOuterClass.ActionProfile actionProfile = - browser.actionProfiles().getByName(profileId.id()); + browser.actionProfiles().getByName(member.actionProfile().id()); int actionProfileId = actionProfile.getPreamble().getId(); actionProfileMemberBuilder.setActionProfileId(actionProfileId); @@ -95,11 +93,19 @@ final class ActionProfileMemberEncoder { PiPipeconf pipeconf) throws P4InfoBrowser.NotFoundException, EncodeException { P4InfoBrowser browser = PipeconfHelper.getP4InfoBrowser(pipeconf); - if (browser == null) { throw new EncodeException(format("Can't get P4 info browser from pipeconf %s", pipeconf)); } - return PiActionGroupMember.builder().withId(PiActionGroupMemberId.of(member.getMemberId())) + + final PiActionProfileId actionProfileId = PiActionProfileId.of( + browser.actionProfiles() + .getById(member.getActionProfileId()) + .getPreamble() + .getName()); + + return PiActionGroupMember.builder() + .forActionProfile(actionProfileId) + .withId(PiActionGroupMemberId.of(member.getMemberId())) .withWeight(weight) .withAction(decodeActionMsg(member.getAction(), browser)) .build(); diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/CounterEntryCodec.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/CounterEntryCodec.java index ec50c682c7..e88382183d 100644 --- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/CounterEntryCodec.java +++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/CounterEntryCodec.java @@ -30,8 +30,8 @@ import p4.v1.P4RuntimeOuterClass.CounterEntry; import p4.v1.P4RuntimeOuterClass.DirectCounterEntry; import p4.v1.P4RuntimeOuterClass.Entity; -import java.util.Collection; import java.util.Collections; +import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -65,7 +65,7 @@ final class CounterEntryCodec { * @return collection of entity messages describing both counter or direct * counter entries */ - static Collection encodePiCounterCellIds(Collection cellIds, + static List encodePiCounterCellIds(List cellIds, PiPipeconf pipeconf) { final P4InfoBrowser browser = PipeconfHelper.getP4InfoBrowser(pipeconf); @@ -100,7 +100,7 @@ final class CounterEntryCodec { * @param pipeconf pipeconf * @return collection of entity messages */ - static Collection readAllCellsEntities(Collection counterIds, + static List readAllCellsEntities(List counterIds, PiPipeconf pipeconf) { final P4InfoBrowser browser = PipeconfHelper.getP4InfoBrowser(pipeconf); @@ -135,8 +135,8 @@ final class CounterEntryCodec { * @param pipeconf pipeconf * @return collection of PI counter cell data */ - static Collection decodeCounterEntities(Collection entities, - PiPipeconf pipeconf) { + static List decodeCounterEntities(List entities, + PiPipeconf pipeconf) { final P4InfoBrowser browser = PipeconfHelper.getP4InfoBrowser(pipeconf); diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/MeterEntryCodec.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/MeterEntryCodec.java index 12379fdf5a..a8254889db 100644 --- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/MeterEntryCodec.java +++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/MeterEntryCodec.java @@ -31,8 +31,8 @@ import p4.v1.P4RuntimeOuterClass.Entity; import p4.v1.P4RuntimeOuterClass.MeterConfig; import p4.v1.P4RuntimeOuterClass.MeterEntry; -import java.util.Collection; import java.util.Collections; +import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -66,7 +66,7 @@ final class MeterEntryCodec { * @return collection of entity messages describing both meter or direct * meter entries */ - static Collection encodePiMeterCellConfigs(Collection cellConfigs, + static List encodePiMeterCellConfigs(List cellConfigs, PiPipeconf pipeconf) { final P4InfoBrowser browser = PipeconfHelper.getP4InfoBrowser(pipeconf); @@ -101,7 +101,7 @@ final class MeterEntryCodec { * @param pipeconf pipeconf * @return collection of entity messages */ - static Collection readAllCellsEntities(Collection meterIds, + static List readAllCellsEntities(List meterIds, PiPipeconf pipeconf) { final P4InfoBrowser browser = PipeconfHelper.getP4InfoBrowser(pipeconf); @@ -136,8 +136,8 @@ final class MeterEntryCodec { * @param pipeconf pipeconf * @return collection of PI meter cell data */ - static Collection decodeMeterEntities(Collection entities, - PiPipeconf pipeconf) { + static List decodeMeterEntities(List entities, + PiPipeconf pipeconf) { final P4InfoBrowser browser = PipeconfHelper.getP4InfoBrowser(pipeconf); if (browser == null) { diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java index 0bd45d3e0b..54d284dbc5 100644 --- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java +++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java @@ -20,6 +20,7 @@ import com.google.common.collect.HashMultimap; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import com.google.common.collect.Multimap; +import com.google.common.collect.Sets; import com.google.protobuf.ByteString; import com.google.protobuf.InvalidProtocolBufferException; import io.grpc.Context; @@ -30,7 +31,6 @@ import io.grpc.StatusRuntimeException; import io.grpc.protobuf.lite.ProtoLiteUtils; import io.grpc.stub.ClientCallStreamObserver; import io.grpc.stub.StreamObserver; -import org.apache.commons.lang3.tuple.ImmutablePair; import org.onlab.osgi.DefaultServiceDirectory; import org.onlab.util.SharedExecutors; import org.onlab.util.Tools; @@ -42,9 +42,9 @@ import org.onosproject.net.pi.model.PiPipeconf; import org.onosproject.net.pi.model.PiTableId; import org.onosproject.net.pi.runtime.PiActionGroup; import org.onosproject.net.pi.runtime.PiActionGroupMember; +import org.onosproject.net.pi.runtime.PiActionGroupMemberId; import org.onosproject.net.pi.runtime.PiCounterCellData; import org.onosproject.net.pi.runtime.PiCounterCellId; -import org.onosproject.net.pi.runtime.PiEntity; import org.onosproject.net.pi.runtime.PiMeterCellConfig; import org.onosproject.net.pi.runtime.PiMeterCellId; import org.onosproject.net.pi.runtime.PiMulticastGroupEntry; @@ -80,7 +80,6 @@ import p4.v1.P4RuntimeOuterClass.WriteRequest; import java.math.BigInteger; import java.net.ConnectException; import java.nio.ByteBuffer; -import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; @@ -101,6 +100,7 @@ import java.util.stream.StreamSupport; import static com.google.common.base.Preconditions.checkNotNull; import static java.lang.String.format; +import static java.util.Collections.singletonList; import static org.onlab.util.Tools.groupedThreads; import static org.slf4j.LoggerFactory.getLogger; import static p4.v1.P4RuntimeOuterClass.Entity.EntityCase.ACTION_PROFILE_GROUP; @@ -257,20 +257,22 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { } @Override - public CompletableFuture writeTableEntries(Collection piTableEntries, + public CompletableFuture writeTableEntries(List piTableEntries, WriteOperationType opType, PiPipeconf pipeconf) { return supplyInContext(() -> doWriteTableEntries(piTableEntries, opType, pipeconf), "writeTableEntries-" + opType.name()); } @Override - public CompletableFuture> dumpTable(PiTableId piTableId, PiPipeconf pipeconf) { - return supplyInContext(() -> doDumpTable(piTableId, pipeconf), "dumpTable-" + piTableId); + public CompletableFuture> dumpTables( + Set piTableIds, boolean defaultEntries, PiPipeconf pipeconf) { + return supplyInContext(() -> doDumpTables(piTableIds, defaultEntries, pipeconf), + "dumpTables-" + piTableIds.hashCode()); } @Override - public CompletableFuture> dumpAllTables(PiPipeconf pipeconf) { - return supplyInContext(() -> doDumpTable(null, pipeconf), "dumpAllTables"); + public CompletableFuture> dumpAllTables(PiPipeconf pipeconf) { + return supplyInContext(() -> doDumpTables(null, false, pipeconf), "dumpAllTables"); } @Override @@ -279,25 +281,24 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { } @Override - public CompletableFuture> readCounterCells(Set cellIds, - PiPipeconf pipeconf) { - return supplyInContext(() -> doReadCounterCells(cellIds, pipeconf), + public CompletableFuture> readCounterCells(Set cellIds, + PiPipeconf pipeconf) { + return supplyInContext(() -> doReadCounterCells(Lists.newArrayList(cellIds), pipeconf), "readCounterCells-" + cellIds.hashCode()); } @Override - public CompletableFuture> readAllCounterCells(Set counterIds, - PiPipeconf pipeconf) { - return supplyInContext(() -> doReadAllCounterCells(counterIds, pipeconf), + public CompletableFuture> readAllCounterCells(Set counterIds, + PiPipeconf pipeconf) { + return supplyInContext(() -> doReadAllCounterCells(Lists.newArrayList(counterIds), pipeconf), "readAllCounterCells-" + counterIds.hashCode()); } @Override - public CompletableFuture writeActionGroupMembers(PiActionProfileId profileId, - Collection members, + public CompletableFuture writeActionGroupMembers(List members, WriteOperationType opType, PiPipeconf pipeconf) { - return supplyInContext(() -> doWriteActionGroupMembers(profileId, members, opType, pipeconf), + return supplyInContext(() -> doWriteActionGroupMembers(members, opType, pipeconf), "writeActionGroupMembers-" + opType.name()); } @@ -311,14 +312,31 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { } @Override - public CompletableFuture> dumpGroups(PiActionProfileId actionProfileId, - PiPipeconf pipeconf) { + public CompletableFuture> dumpGroups(PiActionProfileId actionProfileId, + PiPipeconf pipeconf) { return supplyInContext(() -> doDumpGroups(actionProfileId, pipeconf), "dumpGroups-" + actionProfileId.id()); } @Override - public CompletableFuture writeMeterCells(Collection cellIds, PiPipeconf pipeconf) { + public CompletableFuture> dumpActionProfileMemberIds( + PiActionProfileId actionProfileId, PiPipeconf pipeconf) { + return supplyInContext(() -> doDumpActionProfileMemberIds(actionProfileId, pipeconf), + "dumpActionProfileMemberIds-" + actionProfileId.id()); + } + + @Override + public CompletableFuture> removeActionProfileMembers( + PiActionProfileId actionProfileId, + List memberIds, + PiPipeconf pipeconf) { + return supplyInContext( + () -> doRemoveActionProfileMembers(actionProfileId, memberIds, pipeconf), + "cleanupActionProfileMembers-" + actionProfileId.id()); + } + + @Override + public CompletableFuture writeMeterCells(List cellIds, PiPipeconf pipeconf) { return supplyInContext(() -> doWriteMeterCells(cellIds, pipeconf), "writeMeterCells"); @@ -326,29 +344,29 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { @Override public CompletableFuture writePreMulticastGroupEntries( - Collection entries, + List entries, WriteOperationType opType) { return supplyInContext(() -> doWriteMulticastGroupEntries(entries, opType), "writePreMulticastGroupEntries"); } @Override - public CompletableFuture> readAllMulticastGroupEntries() { + public CompletableFuture> readAllMulticastGroupEntries() { return supplyInContext(this::doReadAllMulticastGroupEntries, "readAllMulticastGroupEntries"); } @Override - public CompletableFuture> readMeterCells(Set cellIds, - PiPipeconf pipeconf) { - return supplyInContext(() -> doReadMeterCells(cellIds, pipeconf), + public CompletableFuture> readMeterCells(Set cellIds, + PiPipeconf pipeconf) { + return supplyInContext(() -> doReadMeterCells(Lists.newArrayList(cellIds), pipeconf), "readMeterCells-" + cellIds.hashCode()); } @Override - public CompletableFuture> readAllMeterCells(Set meterIds, - PiPipeconf pipeconf) { - return supplyInContext(() -> doReadAllMeterCells(meterIds, pipeconf), + public CompletableFuture> readAllMeterCells(Set meterIds, + PiPipeconf pipeconf) { + return supplyInContext(() -> doReadAllMeterCells(Lists.newArrayList(meterIds), pipeconf), "readAllMeterCells-" + meterIds.hashCode()); } @@ -488,13 +506,13 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { } } - private boolean doWriteTableEntries(Collection piTableEntries, WriteOperationType opType, + private boolean doWriteTableEntries(List piTableEntries, WriteOperationType opType, PiPipeconf pipeconf) { if (piTableEntries.size() == 0) { return true; } - Collection updateMsgs; + List updateMsgs; try { updateMsgs = TableEntryEncoder.encode(piTableEntries, pipeconf) .stream() @@ -515,43 +533,53 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { return write(updateMsgs, piTableEntries, opType, "table entry"); } - private Collection doDumpTable(PiTableId piTableId, PiPipeconf pipeconf) { + private List doDumpTables( + Set piTableIds, boolean defaultEntries, PiPipeconf pipeconf) { - log.debug("Dumping table {} from {} (pipeconf {})...", piTableId, deviceId, pipeconf.id()); + log.debug("Dumping tables {} from {} (pipeconf {})...", + piTableIds, deviceId, pipeconf.id()); - int tableId; - if (piTableId == null) { + Set tableIds = Sets.newHashSet(); + if (piTableIds == null) { // Dump all tables. - tableId = 0; + tableIds.add(0); } else { P4InfoBrowser browser = PipeconfHelper.getP4InfoBrowser(pipeconf); if (browser == null) { log.warn("Unable to get a P4Info browser for pipeconf {}", pipeconf); return Collections.emptyList(); } - try { - tableId = browser.tables().getByName(piTableId.id()).getPreamble().getId(); - } catch (P4InfoBrowser.NotFoundException e) { - log.warn("Unable to dump table: {}", e.getMessage()); - return Collections.emptyList(); - } + piTableIds.forEach(piTableId -> { + try { + tableIds.add(browser.tables().getByName(piTableId.id()).getPreamble().getId()); + } catch (P4InfoBrowser.NotFoundException e) { + log.warn("Unable to dump table {}: {}", piTableId, e.getMessage()); + } + }); } - ReadRequest requestMsg = ReadRequest.newBuilder() - .setDeviceId(p4DeviceId) - .addEntities(Entity.newBuilder() - .setTableEntry(TableEntry.newBuilder() - .setTableId(tableId) - .build()) - .build()) - .build(); + if (tableIds.isEmpty()) { + return Collections.emptyList(); + } + + ReadRequest.Builder requestMsgBuilder = ReadRequest.newBuilder() + .setDeviceId(p4DeviceId); + tableIds.forEach(tableId -> requestMsgBuilder.addEntities( + Entity.newBuilder() + .setTableEntry( + TableEntry.newBuilder() + .setTableId(tableId) + .setIsDefaultAction(defaultEntries) + .build()) + .build()) + .build()); Iterator responses; try { - responses = blockingStub.read(requestMsg); + responses = blockingStub.read(requestMsgBuilder.build()); } catch (StatusRuntimeException e) { checkGrpcException(e); - log.warn("Unable to dump table {} from {}: {}", piTableId, deviceId, e.getMessage()); + log.warn("Unable to dump tables from {}: {}", deviceId, e.getMessage()); return Collections.emptyList(); } @@ -564,7 +592,8 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { .map(Entity::getTableEntry) .collect(Collectors.toList()); - log.debug("Retrieved {} entries from table {} on {}...", tableEntryMsgs.size(), piTableId, deviceId); + log.debug("Retrieved {} entries from {} tables on {}...", + tableEntryMsgs.size(), tableIds.size(), deviceId); return TableEntryEncoder.decode(tableEntryMsgs, pipeconf); } @@ -633,22 +662,22 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { isClientMaster.set(isMaster); } - private Collection doReadAllCounterCells( - Collection counterIds, PiPipeconf pipeconf) { + private List doReadAllCounterCells( + List counterIds, PiPipeconf pipeconf) { return doReadCounterEntities( CounterEntryCodec.readAllCellsEntities(counterIds, pipeconf), pipeconf); } - private Collection doReadCounterCells( - Collection cellIds, PiPipeconf pipeconf) { + private List doReadCounterCells( + List cellIds, PiPipeconf pipeconf) { return doReadCounterEntities( CounterEntryCodec.encodePiCounterCellIds(cellIds, pipeconf), pipeconf); } - private Collection doReadCounterEntities( - Collection counterEntities, PiPipeconf pipeconf) { + private List doReadCounterEntities( + List counterEntities, PiPipeconf pipeconf) { if (counterEntities.size() == 0) { return Collections.emptyList(); @@ -676,13 +705,13 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { return CounterEntryCodec.decodeCounterEntities(entities, pipeconf); } - private boolean doWriteActionGroupMembers(PiActionProfileId profileId, Collection members, + private boolean doWriteActionGroupMembers(List members, WriteOperationType opType, PiPipeconf pipeconf) { - final Collection actionProfileMembers = Lists.newArrayList(); + final List actionProfileMembers = Lists.newArrayList(); for (PiActionGroupMember member : members) { try { - actionProfileMembers.add(ActionProfileMemberEncoder.encode(profileId, member, pipeconf)); + actionProfileMembers.add(ActionProfileMemberEncoder.encode(member, pipeconf)); } catch (EncodeException | P4InfoBrowser.NotFoundException e) { log.warn("Unable to encode group member, aborting {} operation: {} [{}]", opType.name(), e.getMessage(), member.toString()); @@ -690,7 +719,7 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { } } - final Collection updateMsgs = actionProfileMembers.stream() + final List updateMsgs = actionProfileMembers.stream() .map(actionProfileMember -> Update.newBuilder() .setEntity(Entity.newBuilder() @@ -708,14 +737,14 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { return write(updateMsgs, members, opType, "group member"); } - private Collection doDumpGroups(PiActionProfileId piActionProfileId, PiPipeconf pipeconf) { + private List doDumpGroups(PiActionProfileId piActionProfileId, PiPipeconf pipeconf) { log.debug("Dumping groups from action profile {} from {} (pipeconf {})...", piActionProfileId.id(), deviceId, pipeconf.id()); final P4InfoBrowser browser = PipeconfHelper.getP4InfoBrowser(pipeconf); if (browser == null) { log.warn("Unable to get a P4Info browser for pipeconf {}, aborting dump action profile", pipeconf); - return Collections.emptySet(); + return Collections.emptyList(); } final int actionProfileId; @@ -727,7 +756,7 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { .getId(); } catch (P4InfoBrowser.NotFoundException e) { log.warn("Unable to dump groups: {}", e.getMessage()); - return Collections.emptySet(); + return Collections.emptyList(); } // Prepare read request to read all groups from the given action profile. @@ -748,7 +777,7 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { } catch (StatusRuntimeException e) { checkGrpcException(e); log.warn("Unable to dump action profile {} from {}: {}", piActionProfileId, deviceId, e.getMessage()); - return Collections.emptySet(); + return Collections.emptyList(); } final List groupMsgs = Tools.stream(() -> groupResponses) @@ -833,6 +862,104 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { .collect(Collectors.toList()); } + private List doDumpActionProfileMemberIds( + PiActionProfileId actionProfileId, PiPipeconf pipeconf) { + + final P4InfoBrowser browser = PipeconfHelper.getP4InfoBrowser(pipeconf); + if (browser == null) { + log.warn("Unable to get a P4Info browser for pipeconf {}, " + + "aborting cleanup of action profile members", + pipeconf); + return Collections.emptyList(); + } + + final int p4ActProfId; + try { + p4ActProfId = browser + .actionProfiles() + .getByName(actionProfileId.id()) + .getPreamble() + .getId(); + } catch (P4InfoBrowser.NotFoundException e) { + log.warn("Unable to cleanup action profile members: {}", e.getMessage()); + return Collections.emptyList(); + } + + final ReadRequest memberRequestMsg = ReadRequest.newBuilder() + .setDeviceId(p4DeviceId) + .addEntities(Entity.newBuilder().setActionProfileMember( + ActionProfileMember.newBuilder() + .setActionProfileId(p4ActProfId) + .build()).build()) + .build(); + + // Read members. + final Iterator memberResponses; + try { + memberResponses = blockingStub.read(memberRequestMsg); + } catch (StatusRuntimeException e) { + checkGrpcException(e); + log.warn("Unable to read members of action profile {} from {}: {}", + actionProfileId, deviceId, e.getMessage()); + return Collections.emptyList(); + } + + return Tools.stream(() -> memberResponses) + .map(ReadResponse::getEntitiesList) + .flatMap(List::stream) + .filter(e -> e.getEntityCase() == ACTION_PROFILE_MEMBER) + .map(Entity::getActionProfileMember) + // Perhaps not needed, but better to double check to avoid + // removing members of other groups. + .filter(m -> m.getActionProfileId() == p4ActProfId) + .map(ActionProfileMember::getMemberId) + .map(PiActionGroupMemberId::of) + .collect(Collectors.toList()); + } + + private List doRemoveActionProfileMembers( + PiActionProfileId actionProfileId, + List memberIds, + PiPipeconf pipeconf) { + + if (memberIds.isEmpty()) { + return Collections.emptyList(); + } + + final P4InfoBrowser browser = PipeconfHelper.getP4InfoBrowser(pipeconf); + if (browser == null) { + log.warn("Unable to get a P4Info browser for pipeconf {}, " + + "aborting cleanup of action profile members", + pipeconf); + return Collections.emptyList(); + } + + final int p4ActProfId; + try { + p4ActProfId = browser.actionProfiles() + .getByName(actionProfileId.id()).getPreamble().getId(); + } catch (P4InfoBrowser.NotFoundException e) { + log.warn("Unable to cleanup action profile members: {}", e.getMessage()); + return Collections.emptyList(); + } + + final List updateMsgs = memberIds.stream() + .map(m -> ActionProfileMember.newBuilder() + .setActionProfileId(p4ActProfId) + .setMemberId(m.id()).build()) + .map(m -> Entity.newBuilder().setActionProfileMember(m).build()) + .map(e -> Update.newBuilder().setEntity(e) + .setType(Update.Type.DELETE).build()) + .collect(Collectors.toList()); + + log.debug("Removing {} members of action profile '{}'...", + memberIds.size(), actionProfileId); + + return writeAndReturnSuccessEntities( + updateMsgs, memberIds, WriteOperationType.DELETE, + "action profile members"); + } + private boolean doWriteActionGroup(PiActionGroup group, WriteOperationType opType, PiPipeconf pipeconf) { final ActionProfileGroup actionProfileGroup; try { @@ -849,20 +976,20 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { .setType(UPDATE_TYPES.get(opType)) .build(); - return write(Collections.singleton(updateMsg), Collections.singleton(group), + return write(singletonList(updateMsg), singletonList(group), opType, "group"); } - private Collection doReadAllMeterCells( - Collection meterIds, PiPipeconf pipeconf) { + private List doReadAllMeterCells( + List meterIds, PiPipeconf pipeconf) { return doReadMeterEntities(MeterEntryCodec.readAllCellsEntities( meterIds, pipeconf), pipeconf); } - private Collection doReadMeterCells( - Collection cellIds, PiPipeconf pipeconf) { + private List doReadMeterCells( + List cellIds, PiPipeconf pipeconf) { - final Collection piMeterCellConfigs = cellIds.stream() + final List piMeterCellConfigs = cellIds.stream() .map(cellId -> PiMeterCellConfig.builder() .withMeterCellId(cellId) .build()) @@ -872,8 +999,8 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { piMeterCellConfigs, pipeconf), pipeconf); } - private Collection doReadMeterEntities( - Collection entitiesToRead, PiPipeconf pipeconf) { + private List doReadMeterEntities( + List entitiesToRead, PiPipeconf pipeconf) { if (entitiesToRead.size() == 0) { return Collections.emptyList(); @@ -903,9 +1030,9 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { return MeterEntryCodec.decodeMeterEntities(responseEntities, pipeconf); } - private boolean doWriteMeterCells(Collection cellConfigs, PiPipeconf pipeconf) { + private boolean doWriteMeterCells(List cellConfigs, PiPipeconf pipeconf) { - Collection updateMsgs = MeterEntryCodec.encodePiMeterCellConfigs(cellConfigs, pipeconf) + List updateMsgs = MeterEntryCodec.encodePiMeterCellConfigs(cellConfigs, pipeconf) .stream() .map(meterEntryMsg -> Update.newBuilder() @@ -922,7 +1049,7 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { } private boolean doWriteMulticastGroupEntries( - Collection entries, + List entries, WriteOperationType opType) { final List updateMsgs = entries.stream() @@ -941,7 +1068,7 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { return write(updateMsgs, entries, opType, "multicast group entry"); } - private Collection doReadAllMulticastGroupEntries() { + private List doReadAllMulticastGroupEntries() { final Entity entity = Entity.newBuilder() .setPacketReplicationEngineEntry( @@ -985,18 +1112,24 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { return mcEntries; } - private boolean write(Collection updates, - Collection writeEntities, - WriteOperationType opType, - String entryType) { - try { + private boolean write(List updates, + List writeEntities, + WriteOperationType opType, + String entryType) { + // True if all entities were successfully written. + return writeAndReturnSuccessEntities(updates, writeEntities, opType, + entryType).size() == writeEntities.size(); + } + private List writeAndReturnSuccessEntities( + List updates, List writeEntities, + WriteOperationType opType, String entryType) { + try { //noinspection ResultOfMethodCallIgnored blockingStub.write(writeRequest(updates)); - return true; + return writeEntities; } catch (StatusRuntimeException e) { - checkAndLogWriteErrors(writeEntities, e, opType, entryType); - return false; + return checkAndLogWriteErrors(writeEntities, e, opType, entryType); } } @@ -1023,8 +1156,9 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { return null; } - private void checkAndLogWriteErrors( - Collection writeEntities, StatusRuntimeException ex, + // Returns the collection of succesfully write entities. + private List checkAndLogWriteErrors( + List writeEntities, StatusRuntimeException ex, WriteOperationType opType, String entryType) { checkGrpcException(ex); @@ -1034,33 +1168,35 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { if (errors.isEmpty()) { final String description = ex.getStatus().getDescription(); log.warn("Unable to {} {} {}(s) on {}: {}", - opType.name(), writeEntities.size(), entryType, deviceId, - ex.getStatus().getCode().name(), + opType.name(), writeEntities.size(), entryType, deviceId, + ex.getStatus().getCode().name(), description == null ? "" : " - " + description); - return; + return Collections.emptyList(); } - // FIXME: we are assuming entities is an ordered collection, e.g. a list, - // and that errors are reported in the same order as the corresponding - // written entity. Write RPC methods should be refactored to accept an - // ordered list of entities, instead of a collection. if (errors.size() == writeEntities.size()) { - Iterator entityIterator = writeEntities.iterator(); - errors.stream() - .map(e -> ImmutablePair.of(e, entityIterator.next())) - .filter(p -> p.left.getCanonicalCode() != Status.OK.getCode().value()) - .forEach(p -> log.warn("Unable to {} {} on {}: {} [{}]", - opType.name(), entryType, deviceId, - parseP4Error(p.getLeft()), - p.getRight().toString())); + List okEntities = Lists.newArrayList(); + Iterator entityIterator = writeEntities.iterator(); + for (P4RuntimeOuterClass.Error error : errors) { + T entity = entityIterator.next(); + if (error.getCanonicalCode() != Status.OK.getCode().value()) { + log.warn("Unable to {} {} on {}: {} [{}]", + opType.name(), entryType, deviceId, + parseP4Error(error), entity.toString()); + } else { + okEntities.add(entity); + } + } + return okEntities; } else { log.warn("Unable to reconcile error details to updates " + - "(sent {} updates, but device returned {} errors)", - entryType, writeEntities.size(), errors.size()); + "(sent {} updates, but device returned {} errors)", + entryType, writeEntities.size(), errors.size()); errors.stream() .filter(err -> err.getCanonicalCode() != Status.OK.getCode().value()) .forEach(err -> log.warn("Unable to {} {} (unknown): {}", opType.name(), entryType, parseP4Error(err))); + return Collections.emptyList(); } } @@ -1085,7 +1221,6 @@ final class P4RuntimeClientImpl implements P4RuntimeClient { }) .filter(Objects::nonNull) .collect(Collectors.toList()); - } private String parseP4Error(P4RuntimeOuterClass.Error err) { diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeControllerImpl.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeControllerImpl.java index 5d7fed39f5..953f1ff1c9 100644 --- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeControllerImpl.java +++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeControllerImpl.java @@ -59,6 +59,10 @@ public class P4RuntimeControllerImpl extends AbstractListenerManager implements P4RuntimeController { + // Getting the pipeline config from the device can take tens of MBs. + private static final int MAX_INBOUND_MSG_SIZE = 256; // Megabytes. + private static final int MEGABYTES = 1024 * 1024; + private final Logger log = getLogger(getClass()); private final Map clientKeys = Maps.newHashMap(); @@ -119,7 +123,7 @@ public class P4RuntimeControllerImpl final ClientKey existingKey = clientKeys.get(deviceId); if (clientKey.equals(existingKey)) { log.debug("Not creating client for {} as it already exists (server={}:{}, p4DeviceId={})...", - deviceId, serverAddr, serverPort, p4DeviceId); + deviceId, serverAddr, serverPort, p4DeviceId); return true; } else { log.info("Requested client for {} with new " + @@ -139,7 +143,8 @@ public class P4RuntimeControllerImpl ManagedChannelBuilder channelBuilder = NettyChannelBuilder .forAddress(serverAddr, serverPort) - .usePlaintext(true); + .maxInboundMessageSize(MAX_INBOUND_MSG_SIZE * MEGABYTES) + .usePlaintext(); ManagedChannel channel; try { diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/TableEntryEncoder.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/TableEntryEncoder.java index 505b4cbdb9..d5d909f1c9 100644 --- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/TableEntryEncoder.java +++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/TableEntryEncoder.java @@ -38,11 +38,11 @@ import org.onosproject.net.pi.runtime.PiTableAction; import org.onosproject.net.pi.runtime.PiTableEntry; import org.onosproject.net.pi.runtime.PiTernaryFieldMatch; import org.slf4j.Logger; +import p4.config.v1.P4InfoOuterClass; import p4.v1.P4RuntimeOuterClass.Action; import p4.v1.P4RuntimeOuterClass.FieldMatch; import p4.v1.P4RuntimeOuterClass.TableAction; import p4.v1.P4RuntimeOuterClass.TableEntry; -import p4.config.v1.P4InfoOuterClass; import java.util.Collection; import java.util.Collections; @@ -82,7 +82,7 @@ final class TableEntryEncoder { * @return collection of P4Runtime table entry protobuf messages * @throws EncodeException if a PI table entry cannot be encoded */ - static Collection encode(Collection piTableEntries, + static List encode(List piTableEntries, PiPipeconf pipeconf) throws EncodeException { @@ -137,7 +137,7 @@ final class TableEntryEncoder { * @param pipeconf PI pipeconf * @return collection of PI table entry objects */ - static Collection decode(Collection tableEntryMsgs, PiPipeconf pipeconf) { + static List decode(List tableEntryMsgs, PiPipeconf pipeconf) { P4InfoBrowser browser = PipeconfHelper.getP4InfoBrowser(pipeconf); @@ -263,7 +263,9 @@ final class TableEntryEncoder { piTableEntryBuilder.forTable(PiTableId.of(tableInfo.getPreamble().getName())); // Priority. - piTableEntryBuilder.withPriority(tableEntryMsg.getPriority()); + if (tableEntryMsg.getPriority() > 0) { + piTableEntryBuilder.withPriority(tableEntryMsg.getPriority()); + } // Controller metadata (cookie) piTableEntryBuilder.withCookie(tableEntryMsg.getControllerMetadata()); @@ -373,7 +375,7 @@ final class TableEntryEncoder { } } - private static PiMatchKey decodeFieldMatchMsgs(Collection fieldMatchs, P4InfoOuterClass.Table tableInfo, + private static PiMatchKey decodeFieldMatchMsgs(List fieldMatchs, P4InfoOuterClass.Table tableInfo, P4InfoBrowser browser) throws P4InfoBrowser.NotFoundException, EncodeException { // Match key for field matches. diff --git a/protocols/p4runtime/ctl/src/test/java/org/onosproject/p4runtime/ctl/P4RuntimeGroupTest.java b/protocols/p4runtime/ctl/src/test/java/org/onosproject/p4runtime/ctl/P4RuntimeGroupTest.java index 893049feec..60913eddd5 100644 --- a/protocols/p4runtime/ctl/src/test/java/org/onosproject/p4runtime/ctl/P4RuntimeGroupTest.java +++ b/protocols/p4runtime/ctl/src/test/java/org/onosproject/p4runtime/ctl/P4RuntimeGroupTest.java @@ -17,7 +17,6 @@ package org.onosproject.p4runtime.ctl; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.protobuf.ByteString; import io.grpc.ManagedChannel; @@ -84,8 +83,8 @@ public class P4RuntimeGroupTest { private static final PiActionParamId PORT_PARAM_ID = PiActionParamId.of("port"); private static final int BASE_MEM_ID = 65535; private static final List MEMBER_IDS = ImmutableList.of(65536, 65537, 65538); - private static final Collection GROUP_MEMBERS = - ImmutableSet.of( + private static final List GROUP_MEMBERS = + Lists.newArrayList( outputMember((short) 1), outputMember((short) 2), outputMember((short) 3) @@ -116,6 +115,7 @@ public class P4RuntimeGroupTest { .withParameter(param).build(); return PiActionGroupMember.builder() + .forActionProfile(ACT_PROF_ID) .withAction(piAction) .withId(PiActionGroupMemberId.of(BASE_MEM_ID + portNum)) .withWeight(DEFAULT_MEMBER_WEIGHT) @@ -139,7 +139,6 @@ public class P4RuntimeGroupTest { grpcServer = builder.build().start(); grpcChannel = InProcessChannelBuilder.forName(GRPC_SERVER_NAME) .directExecutor() - .usePlaintext(true) .build(); } @@ -191,7 +190,7 @@ public class P4RuntimeGroupTest { @Test public void testInsertPiActionMembers() throws Exception { CompletableFuture complete = p4RuntimeServerImpl.expectRequests(1); - client.writeActionGroupMembers(ACT_PROF_ID, GROUP_MEMBERS, INSERT, PIPECONF); + client.writeActionGroupMembers(GROUP_MEMBERS, INSERT, PIPECONF); complete.get(DEFAULT_TIMEOUT_TIME, TimeUnit.SECONDS); WriteRequest result = p4RuntimeServerImpl.getWriteReqs().get(0); assertEquals(1, result.getDeviceId()); @@ -246,6 +245,7 @@ public class P4RuntimeGroupTest { ActionProfileMember actProfMember = ActionProfileMember.newBuilder() + .setActionProfileId(P4_INFO_ACT_PROF_ID) .setMemberId(id) .setAction(action) .build(); @@ -260,13 +260,14 @@ public class P4RuntimeGroupTest { responses.add(ReadResponse.newBuilder() .addAllEntities(members.stream() - .map(m -> Entity.newBuilder().setActionProfileMember(m).build()) + .map(m -> Entity.newBuilder() + .setActionProfileMember(m).build()) .collect(Collectors.toList())) .build()); p4RuntimeServerImpl.willReturnReadResult(responses); CompletableFuture complete = p4RuntimeServerImpl.expectRequests(2); - CompletableFuture> groupsComplete = client.dumpGroups(ACT_PROF_ID, PIPECONF); + CompletableFuture> groupsComplete = client.dumpGroups(ACT_PROF_ID, PIPECONF); complete.get(DEFAULT_TIMEOUT_TIME, TimeUnit.SECONDS); Collection groups = groupsComplete.get(DEFAULT_TIMEOUT_TIME, TimeUnit.SECONDS); diff --git a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4TableModel.java b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4TableModel.java index 77f55ec399..5afad85b63 100644 --- a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4TableModel.java +++ b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4TableModel.java @@ -48,7 +48,7 @@ final class P4TableModel implements PiTableModel { private final boolean supportAging; private final ImmutableMap matchFields; private final ImmutableMap actions; - private final PiActionModel defaultAction; + private final PiActionModel constDefaultAction; private final boolean hasDefaultMutableParams; private final boolean isConstTable; @@ -58,7 +58,7 @@ final class P4TableModel implements PiTableModel { ImmutableMap meters, boolean supportAging, ImmutableMap matchFields, ImmutableMap actions, - PiActionModel defaultAction, boolean hasDefaultMutableParams, + PiActionModel constDefaultAction, boolean hasDefaultMutableParams, boolean isConstTable) { this.id = id; this.tableType = tableType; @@ -69,7 +69,7 @@ final class P4TableModel implements PiTableModel { this.supportAging = supportAging; this.matchFields = matchFields; this.actions = actions; - this.defaultAction = defaultAction; + this.constDefaultAction = constDefaultAction; this.hasDefaultMutableParams = hasDefaultMutableParams; this.isConstTable = isConstTable; } @@ -120,8 +120,8 @@ final class P4TableModel implements PiTableModel { } @Override - public Optional defaultAction() { - return Optional.ofNullable(defaultAction); + public Optional constDefaultAction() { + return Optional.ofNullable(constDefaultAction); } @Override @@ -148,7 +148,7 @@ final class P4TableModel implements PiTableModel { public int hashCode() { return Objects.hash(id, tableType, actionProfile, maxSize, counters, meters, supportAging, matchFields, actions, - defaultAction, hasDefaultMutableParams); + constDefaultAction, hasDefaultMutableParams); } @Override @@ -169,7 +169,7 @@ final class P4TableModel implements PiTableModel { && Objects.equals(this.supportAging, other.supportAging) && Objects.equals(this.matchFields, other.matchFields) && Objects.equals(this.actions, other.actions) - && Objects.equals(this.defaultAction, other.defaultAction) + && Objects.equals(this.constDefaultAction, other.constDefaultAction) && Objects.equals(this.hasDefaultMutableParams, other.hasDefaultMutableParams); } } diff --git a/protocols/p4runtime/model/src/test/java/org/onosproject/p4runtime/model/P4InfoParserTest.java b/protocols/p4runtime/model/src/test/java/org/onosproject/p4runtime/model/P4InfoParserTest.java index e23a49cfe0..3a803d43cd 100644 --- a/protocols/p4runtime/model/src/test/java/org/onosproject/p4runtime/model/P4InfoParserTest.java +++ b/protocols/p4runtime/model/src/test/java/org/onosproject/p4runtime/model/P4InfoParserTest.java @@ -193,7 +193,7 @@ public class P4InfoParserTest { wcmpTableModel.actions(), IsIterableContainingInAnyOrder.containsInAnyOrder( setEgressPortAction, noAction)); - PiActionModel table0DefaultAction = table0Model.defaultAction().orElse(null); + PiActionModel table0DefaultAction = table0Model.constDefaultAction().orElse(null); new EqualsTester().addEqualityGroup(table0DefaultAction, dropAction).testEquals(); diff --git a/tools/build/bazel/generate_workspace.bzl b/tools/build/bazel/generate_workspace.bzl index b8175374f7..fc53d94d20 100644 --- a/tools/build/bazel/generate_workspace.bzl +++ b/tools/build/bazel/generate_workspace.bzl @@ -1,4 +1,4 @@ -# ***** This file was auto-generated at Thu, 4 Oct 2018 21:19:54 GMT. Do not edit this file manually. ***** +# ***** This file was auto-generated at Tue, 9 Oct 2018 17:26:45 GMT. Do not edit this file manually. ***** # ***** Use onos-lib-gen ***** load("//tools/build/bazel:variables.bzl", "ONOS_GROUP_ID", "ONOS_VERSION") @@ -205,9 +205,9 @@ def generated_maven_jars(): if "classgraph" not in native.existing_rules(): java_import_external( name = "classgraph", - jar_sha256 = "b88663a3c775262afad6450d4670fc7c6afa64f4933db0d75e94d66f14230ef7", + jar_sha256 = "92a75236a6a30993895916b7eea4011c54d3182c9fa6734e8c23b30cc9500023", licenses = ["notice"], - jar_urls = ["http://repo1.maven.org/maven2/io/github/classgraph/classgraph/4.0.6/classgraph-4.0.6.jar"], ) + jar_urls = ["http://repo1.maven.org/maven2/io/github/classgraph/classgraph/4.2.3/classgraph-4.2.3.jar"], ) if "commons_codec" not in native.existing_rules(): java_import_external( name = "commons_codec", @@ -1003,9 +1003,9 @@ def generated_maven_jars(): if "libthrift" not in native.existing_rules(): java_import_external( name = "libthrift", - jar_sha256 = "bca5e8cdee1e0fbf563de7d41c452385e7bed69723fa28225a9ce718a8ee3419", + jar_sha256 = "65f1d191c3c97ec79e6d82e75f8af9d5265f4fbb605df4efc5614c222109cf36", licenses = ["notice"], - jar_urls = ["http://repo1.maven.org/maven2/org/apache/thrift/libthrift/0.9.3/libthrift-0.9.3.jar"], ) + jar_urls = ["http://repo1.maven.org/maven2/org/apache/thrift/libthrift/0.11.0/libthrift-0.11.0.jar"], ) if "qdox" not in native.existing_rules(): java_import_external( name = "qdox", @@ -1402,7 +1402,7 @@ artifact_map["@atomix_primitive//:atomix_primitive"] = "mvn:io.atomix:atomix-pri artifact_map["@atomix_raft//:atomix_raft"] = "mvn:io.atomix:atomix-raft:jar:3.0.5" artifact_map["@atomix_storage//:atomix_storage"] = "mvn:io.atomix:atomix-storage:jar:3.0.5" artifact_map["@atomix_utils//:atomix_utils"] = "mvn:io.atomix:atomix-utils:jar:3.0.5" -artifact_map["@classgraph//:classgraph"] = "mvn:io.github.classgraph:classgraph:jar:4.0.6" +artifact_map["@classgraph//:classgraph"] = "mvn:io.github.classgraph:classgraph:jar:4.2.3" artifact_map["@commons_codec//:commons_codec"] = "mvn:commons-codec:commons-codec:jar:1.10" artifact_map["@commons_cli//:commons_cli"] = "mvn:commons-cli:commons-cli:jar:1.3" artifact_map["@commons_collections//:commons_collections"] = "mvn:commons-collections:commons-collections:jar:3.2.2" @@ -1535,7 +1535,7 @@ artifact_map["@checkstyle//:checkstyle"] = "mvn:com.puppycrawl.tools:checkstyle: artifact_map["@apache_karaf//:apache_karaf"] = "http://repo1.maven.org/maven2/org/onosproject/apache-karaf-offline/4.2.1-base/apache-karaf-offline-4.2.1-base.tar.gz" artifact_map["@bndlib//:bndlib"] = "mvn:biz.aQute.bnd:biz.aQute.bndlib:jar:4.0.0" artifact_map["@bndexe//:bndexe"] = "mvn:biz.aQute.bnd:biz.aQute.bnd:jar:4.0.0" -artifact_map["@libthrift//:libthrift"] = "mvn:org.apache.thrift:libthrift:jar:0.9.3" +artifact_map["@libthrift//:libthrift"] = "mvn:org.apache.thrift:libthrift:jar:0.11.0" artifact_map["@qdox//:qdox"] = "mvn:com.thoughtworks.qdox:qdox:jar:NON-OSGI:2.0-M3" artifact_map["@snmp_core//:snmp_core"] = "mvn:org.onosproject:snmp-core:jar:1.3-20161021.1" artifact_map["@mibs_net_snmp//:mibs_net_snmp"] = "mvn:org.onosproject:mibbler-mibs-net-snmp:jar:1.0-20151221.1" diff --git a/tools/test/bin/atomix-install b/tools/test/bin/atomix-install index f6a04bf4b6..5a10413f13 100755 --- a/tools/test/bin/atomix-install +++ b/tools/test/bin/atomix-install @@ -47,7 +47,7 @@ ssh -tt $remote " [ -f $ATOMIX_INSTALL_DIR/bin/atomix-agent ] && echo \"Atomix is already installed\" && exit 1 sudo mkdir -p $ATOMIX_INSTALL_DIR && sudo chown ${ONOS_USER}:${ONOS_GROUP} $ATOMIX_INSTALL_DIR - sudo wget -O $ATOMIX_INSTALL_DIR/atomix-dist.tar.gz https://oss.sonatype.org/content/repositories/releases/io/atomix/atomix-dist/3.0.5/atomix-dist-3.0.5.tar.gz + sudo wget -O $ATOMIX_INSTALL_DIR/atomix-dist.tar.gz https://oss.sonatype.org/content/repositories/releases/io/atomix/atomix-dist/3.0.6/atomix-dist-3.0.6.tar.gz tar -xvf $ATOMIX_INSTALL_DIR/atomix-dist.tar.gz -C $ATOMIX_INSTALL_DIR "