ONOS-7066 ONOS-7067 PI abstractions refactoring and P4Info model parser
Includes changes previously reviewed in #15607, #15877, and #15955.
Change-Id: Ie2ff62e415f2099832ebfe05961a879b7b188fc3
diff --git a/apps/p4-tutorial/pipeconf/src/main/java/org/onosproject/p4tutorial/pipeconf/PipeconfFactory.java b/apps/p4-tutorial/pipeconf/src/main/java/org/onosproject/p4tutorial/pipeconf/PipeconfFactory.java
index b284eaa..79aa274 100644
--- a/apps/p4-tutorial/pipeconf/src/main/java/org/onosproject/p4tutorial/pipeconf/PipeconfFactory.java
+++ b/apps/p4-tutorial/pipeconf/src/main/java/org/onosproject/p4tutorial/pipeconf/PipeconfFactory.java
@@ -21,7 +21,6 @@
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.onosproject.bmv2.model.Bmv2PipelineModelParser;
import org.onosproject.driver.pipeline.DefaultSingleTablePipeline;
import org.onosproject.net.behaviour.Pipeliner;
import org.onosproject.net.device.PortStatisticsDiscovery;
@@ -31,6 +30,8 @@
import org.onosproject.net.pi.model.PiPipelineInterpreter;
import org.onosproject.net.pi.model.PiPipelineModel;
import org.onosproject.net.pi.runtime.PiPipeconfService;
+import org.onosproject.p4runtime.model.P4InfoParser;
+import org.onosproject.p4runtime.model.P4InfoParserException;
import java.net.URL;
@@ -46,18 +47,6 @@
public static final PiPipeconfId PIPECONF_ID = new PiPipeconfId("p4-tutorial-pipeconf");
private static final URL P4INFO_URL = PipeconfFactory.class.getResource("/main.p4info");
private static final URL BMV2_JSON_URL = PipeconfFactory.class.getResource("/main.json");
- private static final PiPipelineModel PIPELINE_MODEL = Bmv2PipelineModelParser.parse(BMV2_JSON_URL);
-
- private static final PiPipeconf PIPECONF = DefaultPiPipeconf.builder()
- .withId(PIPECONF_ID)
- .withPipelineModel(PIPELINE_MODEL)
- .addBehaviour(PiPipelineInterpreter.class, PipelineInterpreterImpl.class)
- .addBehaviour(PortStatisticsDiscovery.class, PortStatisticsDiscoveryImpl.class)
- // Since main.p4 defines only 1 table, we re-use the existing single-table pipeliner.
- .addBehaviour(Pipeliner.class, DefaultSingleTablePipeline.class)
- .addExtension(P4_INFO_TEXT, P4INFO_URL)
- .addExtension(BMV2_JSON, BMV2_JSON_URL)
- .build();
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
private PiPipeconfService piPipeconfService;
@@ -65,11 +54,31 @@
@Activate
public void activate() {
// Registers the pipeconf at component activation.
- piPipeconfService.register(PIPECONF);
+ piPipeconfService.register(buildPipeconf());
}
@Deactivate
public void deactivate() {
- piPipeconfService.remove(PIPECONF.id());
+ piPipeconfService.remove(PIPECONF_ID);
+ }
+
+ private PiPipeconf buildPipeconf() {
+ final PiPipelineModel pipelineModel;
+ try {
+ pipelineModel = P4InfoParser.parse(P4INFO_URL);
+ } catch (P4InfoParserException e) {
+ throw new RuntimeException(e);
+ }
+
+ return DefaultPiPipeconf.builder()
+ .withId(PIPECONF_ID)
+ .withPipelineModel(pipelineModel)
+ .addBehaviour(PiPipelineInterpreter.class, PipelineInterpreterImpl.class)
+ .addBehaviour(PortStatisticsDiscovery.class, PortStatisticsDiscoveryImpl.class)
+ // Since main.p4 defines only 1 table, we re-use the existing single-table pipeliner.
+ .addBehaviour(Pipeliner.class, DefaultSingleTablePipeline.class)
+ .addExtension(P4_INFO_TEXT, P4INFO_URL)
+ .addExtension(BMV2_JSON, BMV2_JSON_URL)
+ .build();
}
}