Better handling of extensions in PiPipeconf
Now built using a URL, while input streams are generated on-demand.
Before it could happen that the input stream was completelly read by
someone, leaving it unusable by others.
Change-Id: I61a76bf8b8c1d2f6e2d987661025e0323d59e1c7
diff --git a/drivers/bmv2/BUCK b/drivers/bmv2/BUCK
index b406b08..3726829 100644
--- a/drivers/bmv2/BUCK
+++ b/drivers/bmv2/BUCK
@@ -27,6 +27,7 @@
'//incubator/bmv2/model:onos-incubator-bmv2-model',
'//incubator/grpc-dependencies:grpc-core-repkg-1.3.0',
'//lib:grpc-netty-1.3.0',
+ '//drivers/default:onos-drivers-default',
]
TEST_DEPS = [
@@ -43,6 +44,7 @@
'//protocols/grpc/ctl:onos-protocols-grpc-ctl',
'//protocols/grpc/proto:onos-protocols-grpc-proto',
'//incubator/bmv2/model:onos-incubator-bmv2-model',
+ '//drivers/default:onos-drivers-default',
] + GRPC_DEPS
osgi_jar_with_tests(
diff --git a/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/Bmv2DefaultPipeconfFactory.java b/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/Bmv2DefaultPipeconfFactory.java
index 4903c3e..3004627 100644
--- a/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/Bmv2DefaultPipeconfFactory.java
+++ b/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/Bmv2DefaultPipeconfFactory.java
@@ -17,12 +17,14 @@
package org.onosproject.drivers.bmv2;
import org.onosproject.bmv2.model.Bmv2PipelineModelParser;
+import org.onosproject.driver.pipeline.DefaultSingleTablePipeline;
+import org.onosproject.net.behaviour.Pipeliner;
import org.onosproject.net.pi.model.DefaultPiPipeconf;
import org.onosproject.net.pi.model.PiPipeconf;
import org.onosproject.net.pi.model.PiPipeconfId;
import org.onosproject.net.pi.model.PiPipelineInterpreter;
-import java.io.InputStream;
+import java.net.URL;
import static org.onosproject.net.pi.model.PiPipeconf.ExtensionType.BMV2_JSON;
import static org.onosproject.net.pi.model.PiPipeconf.ExtensionType.P4_INFO_TEXT;
@@ -42,16 +44,16 @@
static PiPipeconf get() {
- final InputStream jsonConfigStream = Bmv2DefaultPipeconfFactory.class.getResourceAsStream(JSON_PATH);
- final InputStream p4InfoStream = Bmv2DefaultPipeconfFactory.class.getResourceAsStream(P4INFO_PATH);
+ final URL jsonUrl = Bmv2DefaultPipeconfFactory.class.getResource(JSON_PATH);
+ final URL p4InfoUrl = Bmv2DefaultPipeconfFactory.class.getResource(P4INFO_PATH);
return DefaultPiPipeconf.builder()
.withId(new PiPipeconfId(PIPECONF_ID))
- .withPipelineModel(Bmv2PipelineModelParser.parse(jsonConfigStream))
- // TODO: reuse default single table pipeliner.
+ .withPipelineModel(Bmv2PipelineModelParser.parse(jsonUrl))
.addBehaviour(PiPipelineInterpreter.class, Bmv2DefaultInterpreter.class)
- .addExtension(P4_INFO_TEXT, p4InfoStream)
- .addExtension(BMV2_JSON, jsonConfigStream)
+ .addBehaviour(Pipeliner.class, DefaultSingleTablePipeline.class)
+ .addExtension(P4_INFO_TEXT, p4InfoUrl)
+ .addExtension(BMV2_JSON, jsonUrl)
.build();
}
}