Refactor CordVtn to use device projection feature instead of driver
Change-Id: I8220806f7933a4603c02a96212a4d8812a2bd284
Showing
3 changed files
with
34 additions
and
38 deletions
| ... | @@ -51,7 +51,6 @@ import org.onosproject.net.config.NetworkConfigRegistry; | ... | @@ -51,7 +51,6 @@ import org.onosproject.net.config.NetworkConfigRegistry; |
| 51 | import org.onosproject.net.config.NetworkConfigService; | 51 | import org.onosproject.net.config.NetworkConfigService; |
| 52 | import org.onosproject.net.config.basics.SubjectFactories; | 52 | import org.onosproject.net.config.basics.SubjectFactories; |
| 53 | import org.onosproject.net.device.DeviceService; | 53 | import org.onosproject.net.device.DeviceService; |
| 54 | -import org.onosproject.net.driver.DriverService; | ||
| 55 | import org.onosproject.net.flow.FlowRuleService; | 54 | import org.onosproject.net.flow.FlowRuleService; |
| 56 | import org.onosproject.net.group.GroupService; | 55 | import org.onosproject.net.group.GroupService; |
| 57 | import org.onosproject.net.host.DefaultHostDescription; | 56 | import org.onosproject.net.host.DefaultHostDescription; |
| ... | @@ -67,7 +66,6 @@ import org.onosproject.net.packet.PacketProcessor; | ... | @@ -67,7 +66,6 @@ import org.onosproject.net.packet.PacketProcessor; |
| 67 | import org.onosproject.net.packet.PacketService; | 66 | import org.onosproject.net.packet.PacketService; |
| 68 | import org.onosproject.net.provider.AbstractProvider; | 67 | import org.onosproject.net.provider.AbstractProvider; |
| 69 | import org.onosproject.net.provider.ProviderId; | 68 | import org.onosproject.net.provider.ProviderId; |
| 70 | - | ||
| 71 | import org.openstack4j.api.OSClient; | 69 | import org.openstack4j.api.OSClient; |
| 72 | import org.openstack4j.api.exceptions.AuthenticationException; | 70 | import org.openstack4j.api.exceptions.AuthenticationException; |
| 73 | import org.openstack4j.model.identity.Access; | 71 | import org.openstack4j.model.identity.Access; |
| ... | @@ -118,9 +116,6 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro | ... | @@ -118,9 +116,6 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro |
| 118 | protected HostService hostService; | 116 | protected HostService hostService; |
| 119 | 117 | ||
| 120 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 118 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
| 121 | - protected DriverService driverService; | ||
| 122 | - | ||
| 123 | - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
| 124 | protected FlowRuleService flowRuleService; | 119 | protected FlowRuleService flowRuleService; |
| 125 | 120 | ||
| 126 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 121 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
| ... | @@ -181,7 +176,6 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro | ... | @@ -181,7 +176,6 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro |
| 181 | appId = coreService.registerApplication("org.onosproject.cordvtn"); | 176 | appId = coreService.registerApplication("org.onosproject.cordvtn"); |
| 182 | ruleInstaller = new CordVtnRuleInstaller(appId, flowRuleService, | 177 | ruleInstaller = new CordVtnRuleInstaller(appId, flowRuleService, |
| 183 | deviceService, | 178 | deviceService, |
| 184 | - driverService, | ||
| 185 | groupService, | 179 | groupService, |
| 186 | configRegistry, | 180 | configRegistry, |
| 187 | DEFAULT_TUNNEL); | 181 | DEFAULT_TUNNEL); | ... | ... |
| ... | @@ -59,8 +59,6 @@ import org.onosproject.net.device.DeviceAdminService; | ... | @@ -59,8 +59,6 @@ import org.onosproject.net.device.DeviceAdminService; |
| 59 | import org.onosproject.net.device.DeviceEvent; | 59 | import org.onosproject.net.device.DeviceEvent; |
| 60 | import org.onosproject.net.device.DeviceListener; | 60 | import org.onosproject.net.device.DeviceListener; |
| 61 | import org.onosproject.net.device.DeviceService; | 61 | import org.onosproject.net.device.DeviceService; |
| 62 | -import org.onosproject.net.driver.DriverHandler; | ||
| 63 | -import org.onosproject.net.driver.DriverService; | ||
| 64 | import org.onosproject.net.flow.FlowRuleService; | 62 | import org.onosproject.net.flow.FlowRuleService; |
| 65 | import org.onosproject.net.group.GroupService; | 63 | import org.onosproject.net.group.GroupService; |
| 66 | import org.onosproject.net.host.HostService; | 64 | import org.onosproject.net.host.HostService; |
| ... | @@ -148,9 +146,6 @@ public class CordVtnNodeManager { | ... | @@ -148,9 +146,6 @@ public class CordVtnNodeManager { |
| 148 | protected ClusterService clusterService; | 146 | protected ClusterService clusterService; |
| 149 | 147 | ||
| 150 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 148 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
| 151 | - protected DriverService driverService; | ||
| 152 | - | ||
| 153 | - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
| 154 | protected DeviceService deviceService; | 149 | protected DeviceService deviceService; |
| 155 | 150 | ||
| 156 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 151 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
| ... | @@ -241,7 +236,6 @@ public class CordVtnNodeManager { | ... | @@ -241,7 +236,6 @@ public class CordVtnNodeManager { |
| 241 | 236 | ||
| 242 | ruleInstaller = new CordVtnRuleInstaller(appId, flowRuleService, | 237 | ruleInstaller = new CordVtnRuleInstaller(appId, flowRuleService, |
| 243 | deviceService, | 238 | deviceService, |
| 244 | - driverService, | ||
| 245 | groupService, | 239 | groupService, |
| 246 | configRegistry, | 240 | configRegistry, |
| 247 | DEFAULT_TUNNEL); | 241 | DEFAULT_TUNNEL); |
| ... | @@ -583,9 +577,13 @@ public class CordVtnNodeManager { | ... | @@ -583,9 +577,13 @@ public class CordVtnNodeManager { |
| 583 | String dpid = node.intBrId().toString().substring(DPID_BEGIN); | 577 | String dpid = node.intBrId().toString().substring(DPID_BEGIN); |
| 584 | 578 | ||
| 585 | try { | 579 | try { |
| 586 | - DriverHandler handler = driverService.createHandler(node.ovsdbId()); | 580 | + Device device = deviceService.getDevice(node.ovsdbId()); |
| 587 | - BridgeConfig bridgeConfig = handler.behaviour(BridgeConfig.class); | 581 | + if (device.is(BridgeConfig.class)) { |
| 588 | - bridgeConfig.addBridge(BridgeName.bridgeName(DEFAULT_BRIDGE), dpid, controllers); | 582 | + BridgeConfig bridgeConfig = device.as(BridgeConfig.class); |
| 583 | + bridgeConfig.addBridge(BridgeName.bridgeName(DEFAULT_BRIDGE), dpid, controllers); | ||
| 584 | + } else { | ||
| 585 | + log.warn("The bridging behaviour is not supported in device {}", device.id().toString()); | ||
| 586 | + } | ||
| 589 | } catch (ItemNotFoundException e) { | 587 | } catch (ItemNotFoundException e) { |
| 590 | log.warn("Failed to create integration bridge on {}", node.hostname()); | 588 | log.warn("Failed to create integration bridge on {}", node.hostname()); |
| 591 | } | 589 | } |
| ... | @@ -611,9 +609,13 @@ public class CordVtnNodeManager { | ... | @@ -611,9 +609,13 @@ public class CordVtnNodeManager { |
| 611 | optionBuilder.build()); | 609 | optionBuilder.build()); |
| 612 | 610 | ||
| 613 | try { | 611 | try { |
| 614 | - DriverHandler handler = driverService.createHandler(node.ovsdbId()); | 612 | + Device device = deviceService.getDevice(node.ovsdbId()); |
| 615 | - TunnelConfig tunnelConfig = handler.behaviour(TunnelConfig.class); | 613 | + if (device.is(TunnelConfig.class)) { |
| 616 | - tunnelConfig.createTunnelInterface(BridgeName.bridgeName(DEFAULT_BRIDGE), description); | 614 | + TunnelConfig tunnelConfig = device.as(TunnelConfig.class); |
| 615 | + tunnelConfig.createTunnelInterface(BridgeName.bridgeName(DEFAULT_BRIDGE), description); | ||
| 616 | + } else { | ||
| 617 | + log.warn("The tunneling behaviour is not supported in device {}", device.id().toString()); | ||
| 618 | + } | ||
| 617 | } catch (ItemNotFoundException e) { | 619 | } catch (ItemNotFoundException e) { |
| 618 | log.warn("Failed to create tunnel interface on {}", node.hostname()); | 620 | log.warn("Failed to create tunnel interface on {}", node.hostname()); |
| 619 | } | 621 | } |
| ... | @@ -630,9 +632,13 @@ public class CordVtnNodeManager { | ... | @@ -630,9 +632,13 @@ public class CordVtnNodeManager { |
| 630 | } | 632 | } |
| 631 | 633 | ||
| 632 | try { | 634 | try { |
| 633 | - DriverHandler handler = driverService.createHandler(node.ovsdbId()); | 635 | + Device device = deviceService.getDevice(node.ovsdbId()); |
| 634 | - BridgeConfig bridgeConfig = handler.behaviour(BridgeConfig.class); | 636 | + if (device.is(BridgeConfig.class)) { |
| 635 | - bridgeConfig.addPort(BridgeName.bridgeName(DEFAULT_BRIDGE), node.dpIntf()); | 637 | + BridgeConfig bridgeConfig = device.as(BridgeConfig.class); |
| 638 | + bridgeConfig.addPort(BridgeName.bridgeName(DEFAULT_BRIDGE), node.dpIntf()); | ||
| 639 | + } else { | ||
| 640 | + log.warn("The bridging behaviour is not supported in device {}", device.id().toString()); | ||
| 641 | + } | ||
| 636 | } catch (ItemNotFoundException e) { | 642 | } catch (ItemNotFoundException e) { |
| 637 | log.warn("Failed to add {} on {}", node.dpIntf(), node.hostname()); | 643 | log.warn("Failed to add {} on {}", node.dpIntf(), node.hostname()); |
| 638 | } | 644 | } | ... | ... |
| ... | @@ -35,6 +35,7 @@ import org.onosproject.cordvtn.api.CordVtnNode; | ... | @@ -35,6 +35,7 @@ import org.onosproject.cordvtn.api.CordVtnNode; |
| 35 | import org.onosproject.core.ApplicationId; | 35 | import org.onosproject.core.ApplicationId; |
| 36 | import org.onosproject.core.DefaultGroupId; | 36 | import org.onosproject.core.DefaultGroupId; |
| 37 | import org.onosproject.core.GroupId; | 37 | import org.onosproject.core.GroupId; |
| 38 | +import org.onosproject.net.Device; | ||
| 38 | import org.onosproject.net.DeviceId; | 39 | import org.onosproject.net.DeviceId; |
| 39 | import org.onosproject.net.Host; | 40 | import org.onosproject.net.Host; |
| 40 | import org.onosproject.net.Port; | 41 | import org.onosproject.net.Port; |
| ... | @@ -42,11 +43,6 @@ import org.onosproject.net.PortNumber; | ... | @@ -42,11 +43,6 @@ import org.onosproject.net.PortNumber; |
| 42 | import org.onosproject.net.behaviour.ExtensionTreatmentResolver; | 43 | import org.onosproject.net.behaviour.ExtensionTreatmentResolver; |
| 43 | import org.onosproject.net.config.NetworkConfigRegistry; | 44 | import org.onosproject.net.config.NetworkConfigRegistry; |
| 44 | import org.onosproject.net.device.DeviceService; | 45 | import org.onosproject.net.device.DeviceService; |
| 45 | -import org.onosproject.net.driver.DefaultDriverData; | ||
| 46 | -import org.onosproject.net.driver.DefaultDriverHandler; | ||
| 47 | -import org.onosproject.net.driver.Driver; | ||
| 48 | -import org.onosproject.net.driver.DriverHandler; | ||
| 49 | -import org.onosproject.net.driver.DriverService; | ||
| 50 | import org.onosproject.net.flow.DefaultFlowRule; | 46 | import org.onosproject.net.flow.DefaultFlowRule; |
| 51 | import org.onosproject.net.flow.DefaultTrafficSelector; | 47 | import org.onosproject.net.flow.DefaultTrafficSelector; |
| 52 | import org.onosproject.net.flow.DefaultTrafficTreatment; | 48 | import org.onosproject.net.flow.DefaultTrafficTreatment; |
| ... | @@ -127,7 +123,6 @@ public class CordVtnRuleInstaller { | ... | @@ -127,7 +123,6 @@ public class CordVtnRuleInstaller { |
| 127 | private final ApplicationId appId; | 123 | private final ApplicationId appId; |
| 128 | private final FlowRuleService flowRuleService; | 124 | private final FlowRuleService flowRuleService; |
| 129 | private final DeviceService deviceService; | 125 | private final DeviceService deviceService; |
| 130 | - private final DriverService driverService; | ||
| 131 | private final GroupService groupService; | 126 | private final GroupService groupService; |
| 132 | private final NetworkConfigRegistry configRegistry; | 127 | private final NetworkConfigRegistry configRegistry; |
| 133 | private final String tunnelType; | 128 | private final String tunnelType; |
| ... | @@ -138,7 +133,6 @@ public class CordVtnRuleInstaller { | ... | @@ -138,7 +133,6 @@ public class CordVtnRuleInstaller { |
| 138 | * @param appId application id | 133 | * @param appId application id |
| 139 | * @param flowRuleService flow rule service | 134 | * @param flowRuleService flow rule service |
| 140 | * @param deviceService device service | 135 | * @param deviceService device service |
| 141 | - * @param driverService driver service | ||
| 142 | * @param groupService group service | 136 | * @param groupService group service |
| 143 | * @param configRegistry config registry | 137 | * @param configRegistry config registry |
| 144 | * @param tunnelType tunnel type | 138 | * @param tunnelType tunnel type |
| ... | @@ -146,14 +140,12 @@ public class CordVtnRuleInstaller { | ... | @@ -146,14 +140,12 @@ public class CordVtnRuleInstaller { |
| 146 | public CordVtnRuleInstaller(ApplicationId appId, | 140 | public CordVtnRuleInstaller(ApplicationId appId, |
| 147 | FlowRuleService flowRuleService, | 141 | FlowRuleService flowRuleService, |
| 148 | DeviceService deviceService, | 142 | DeviceService deviceService, |
| 149 | - DriverService driverService, | ||
| 150 | GroupService groupService, | 143 | GroupService groupService, |
| 151 | NetworkConfigRegistry configRegistry, | 144 | NetworkConfigRegistry configRegistry, |
| 152 | String tunnelType) { | 145 | String tunnelType) { |
| 153 | this.appId = appId; | 146 | this.appId = appId; |
| 154 | this.flowRuleService = flowRuleService; | 147 | this.flowRuleService = flowRuleService; |
| 155 | this.deviceService = deviceService; | 148 | this.deviceService = deviceService; |
| 156 | - this.driverService = driverService; | ||
| 157 | this.groupService = groupService; | 149 | this.groupService = groupService; |
| 158 | this.configRegistry = configRegistry; | 150 | this.configRegistry = configRegistry; |
| 159 | this.tunnelType = checkNotNull(tunnelType); | 151 | this.tunnelType = checkNotNull(tunnelType); |
| ... | @@ -1504,16 +1496,20 @@ public class CordVtnRuleInstaller { | ... | @@ -1504,16 +1496,20 @@ public class CordVtnRuleInstaller { |
| 1504 | */ | 1496 | */ |
| 1505 | private ExtensionTreatment getTunnelDst(DeviceId deviceId, Ip4Address remoteIp) { | 1497 | private ExtensionTreatment getTunnelDst(DeviceId deviceId, Ip4Address remoteIp) { |
| 1506 | try { | 1498 | try { |
| 1507 | - Driver driver = driverService.getDriver(deviceId); | 1499 | + Device device = deviceService.getDevice(deviceId); |
| 1508 | - DefaultDriverData driverData = new DefaultDriverData(driver, deviceId); | ||
| 1509 | - DriverHandler handler = new DefaultDriverHandler(driverData); | ||
| 1510 | - ExtensionTreatmentResolver resolver = handler.behaviour(ExtensionTreatmentResolver.class); | ||
| 1511 | 1500 | ||
| 1512 | - ExtensionTreatment treatment = | 1501 | + if (device.is(ExtensionTreatmentResolver.class)) { |
| 1513 | - resolver.getExtensionInstruction(NICIRA_SET_TUNNEL_DST.type()); | 1502 | + ExtensionTreatmentResolver resolver = device.as(ExtensionTreatmentResolver.class); |
| 1514 | - treatment.setPropertyValue("tunnelDst", remoteIp); | 1503 | + ExtensionTreatment treatment = |
| 1504 | + resolver.getExtensionInstruction(NICIRA_SET_TUNNEL_DST.type()); | ||
| 1505 | + treatment.setPropertyValue("tunnelDst", remoteIp); | ||
| 1515 | 1506 | ||
| 1516 | - return treatment; | 1507 | + return treatment; |
| 1508 | + } else { | ||
| 1509 | + log.warn("The extension treatment resolving behaviour is not supported in device {}", | ||
| 1510 | + device.id().toString()); | ||
| 1511 | + return null; | ||
| 1512 | + } | ||
| 1517 | } catch (ItemNotFoundException | UnsupportedOperationException | | 1513 | } catch (ItemNotFoundException | UnsupportedOperationException | |
| 1518 | ExtensionPropertyException e) { | 1514 | ExtensionPropertyException e) { |
| 1519 | log.error("Failed to get extension instruction {}", deviceId); | 1515 | log.error("Failed to get extension instruction {}", deviceId); | ... | ... |
-
Please register or login to post a comment