[ONOS-7154] Add Interpreter for int.p4
Change-Id: If489987565452ce3fc25f48b3a54220a5c0d4f60
diff --git a/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/PipeconfLoader.java b/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/PipeconfLoader.java
index 9b33883..1a5d4d2 100644
--- a/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/PipeconfLoader.java
+++ b/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/PipeconfLoader.java
@@ -52,7 +52,13 @@
public static final PiPipeconf BASIC_PIPECONF = buildBasicPipeconf();
- private static final Collection<PiPipeconf> ALL_PIPECONFS = ImmutableList.of(BASIC_PIPECONF);
+ private static final PiPipeconfId INT_PIPECONF_ID = new PiPipeconfId("org.onosproject.pipelines.int");
+ private static final String INT_JSON_PATH = "/p4c-out/bmv2/int.json";
+ private static final String INT_P4INFO = "/p4c-out/bmv2/int.p4info";
+
+ public static final PiPipeconf INT_PIPECONF = buildIntPipeconf();
+
+ private static final Collection<PiPipeconf> ALL_PIPECONFS = ImmutableList.of(BASIC_PIPECONF, INT_PIPECONF);
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
private PiPipeconfService piPipeconfService;
@@ -85,6 +91,23 @@
.build();
}
+ private static PiPipeconf buildIntPipeconf() {
+ final URL jsonUrl = PipeconfLoader.class.getResource(INT_JSON_PATH);
+ final URL p4InfoUrl = PipeconfLoader.class.getResource(INT_P4INFO);
+
+ // INT behavior is controlled using pipeline-specific flow rule,
+ // not using flow objectives, so we just borrow pipeliner to basic pipeconf.
+ return DefaultPiPipeconf.builder()
+ .withId(INT_PIPECONF_ID)
+ .withPipelineModel(parseP4Info(p4InfoUrl))
+ .addBehaviour(PiPipelineInterpreter.class, IntInterpreterImpl.class)
+ .addBehaviour(Pipeliner.class, DefaultSingleTablePipeline.class)
+ .addBehaviour(PortStatisticsDiscovery.class, PortStatisticsDiscoveryImpl.class)
+ .addExtension(P4_INFO_TEXT, p4InfoUrl)
+ .addExtension(BMV2_JSON, jsonUrl)
+ .build();
+ }
+
private static PiPipelineModel parseP4Info(URL p4InfoUrl) {
try {
return P4InfoParser.parse(p4InfoUrl);