Few core changes in preparation of P4Runtime subsystem refactoring
Refactoring aims at providing a more robust connection procedure of
P4Runtime-based devices.
Refactoring requires devices to be registered to the core with
available=false (i.e. offline), and marked online only when the P4
pipeline has been deployed to the device. Also, it leaves the duty of
handling pipeconf-specific drivers to the driver subsystem, instead of
having the GeneralDeviceProvider take care of it, which resulted to be
brittle.
Changes include:
- Choose not to mark device online when re-asserting mastership role by
declaring special device annotation.
- Lookup drivers in device projectable model unsing driver service
device-based method, which is consistent with the way other subsystems
look for device drivers.
- In DriverManager, when looking for device drivers, consider the case
of pipeconf-programmable devices, in which case a special "merged"
driver needs to instantiated at runtime.
- In PacketManager, push flow objectives only if device is available
(i.e. after pipeline has been deployed).
Change-Id: I80f78a4f40730a06cb82fa55fefab08a91a89268
diff --git a/core/net/src/test/java/org/onosproject/net/pi/impl/PiPipeconfManagerTest.java b/core/net/src/test/java/org/onosproject/net/pi/impl/PiPipeconfManagerTest.java
index a418461..20ded6a 100644
--- a/core/net/src/test/java/org/onosproject/net/pi/impl/PiPipeconfManagerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/pi/impl/PiPipeconfManagerTest.java
@@ -42,8 +42,6 @@
import org.onosproject.net.driver.DriverAdminService;
import org.onosproject.net.driver.DriverAdminServiceAdapter;
import org.onosproject.net.driver.DriverProvider;
-import org.onosproject.net.driver.DriverService;
-import org.onosproject.net.driver.DriverServiceAdapter;
import org.onosproject.net.pi.model.PiPipeconf;
import org.onosproject.net.pi.model.PiPipeconfId;
import org.onosproject.net.pi.service.PiPipeconfConfig;
@@ -72,7 +70,6 @@
//Mock util sets and classes
private final NetworkConfigRegistry cfgService = new MockNetworkConfigRegistry();
- private final DriverService driverService = new MockDriverService();
private final DriverAdminService driverAdminService = new MockDriverAdminService();
private Driver baseDriver = new MockDriver();
@@ -97,7 +94,6 @@
piPipeconfService = new PiPipeconfManager();
piPipeconf = BASIC_PIPECONF;
piPipeconfService.cfgService = cfgService;
- piPipeconfService.driverService = driverService;
piPipeconfService.driverAdminService = driverAdminService;
String key = "piPipeconf";
ObjectMapper mapper = new ObjectMapper();
@@ -112,7 +108,7 @@
@Test
public void activate() {
- assertEquals("Incorrect driver service", driverService, piPipeconfService.driverService);
+ assertEquals("Incorrect driver admin service", driverAdminService, piPipeconfService.driverAdminService);
assertEquals("Incorrect driverAdminService service", driverAdminService, piPipeconfService.driverAdminService);
assertEquals("Incorrect configuration service", cfgService, piPipeconfService.cfgService);
assertTrue("Incorrect config factory", cfgFactories.contains(piPipeconfService.configFactory));
@@ -121,7 +117,7 @@
@Test
public void deactivate() {
piPipeconfService.deactivate();
- assertEquals("Incorrect driver service", null, piPipeconfService.driverService);
+ assertEquals("Incorrect driver admin service", null, piPipeconfService.driverAdminService);
assertEquals("Incorrect driverAdminService service", null, piPipeconfService.driverAdminService);
assertEquals("Incorrect configuration service", null, piPipeconfService.cfgService);
assertFalse("Config factory should be unregistered", cfgFactories.contains(piPipeconfService.configFactory));
@@ -153,7 +149,10 @@
assertEquals("Returned PiPipeconf is not correct", piPipeconf,
piPipeconfService.getPipeconf(piPipeconf.id()).get());
- String mergedDriverName = piPipeconfService.mergeDriver(DEVICE_ID, piPipeconfId);
+ String mergedDriverName = piPipeconfService.getMergedDriver(DEVICE_ID, piPipeconfId);
+
+ String expectedName = BASE_DRIVER + ":" + piPipeconfId.id();
+ assertEquals(expectedName, mergedDriverName);
//we assume that the provider is 1 and that it contains 1 driver
//we also assume that everything after driverAdminService.registerProvider(provider); has been tested.
@@ -208,7 +207,8 @@
}
}
- private class MockDriverService extends DriverServiceAdapter {
+ private class MockDriverAdminService extends DriverAdminServiceAdapter {
+
@Override
public Driver getDriver(String driverName) {
if (driverName.equals(BASE_DRIVER)) {
@@ -216,9 +216,6 @@
}
throw new ItemNotFoundException("Driver not found");
}
- }
-
- private class MockDriverAdminService extends DriverAdminServiceAdapter {
@Override
public void registerProvider(DriverProvider provider) {