Fixed some bugs
- Update br-int rather than do nothing if it already exists
- Make only the leader performs node bootstrap
- Check mastership on HOST event not flow rule populator
- Install/uninstall flow rules for vSG always from master, or the rules
stay in PENDING_ADDED state
Change-Id: I4bd5cf6f84bf36f2617288b2d843435819c76ba8
diff --git a/src/main/java/org/onosproject/cordvtn/CordVtnRuleInstaller.java b/src/main/java/org/onosproject/cordvtn/CordVtnRuleInstaller.java
index 4c67587..f3877e0 100644
--- a/src/main/java/org/onosproject/cordvtn/CordVtnRuleInstaller.java
+++ b/src/main/java/org/onosproject/cordvtn/CordVtnRuleInstaller.java
@@ -30,7 +30,6 @@
import org.onosproject.core.ApplicationId;
import org.onosproject.core.DefaultGroupId;
import org.onosproject.core.GroupId;
-import org.onosproject.mastership.MastershipService;
import org.onosproject.net.Device;
import org.onosproject.net.DeviceId;
import org.onosproject.net.Host;
@@ -120,13 +119,13 @@
private static final String PORT_NAME = "portName";
private static final String DATA_PLANE_INTF = "dataPlaneIntf";
private static final String S_TAG = "stag";
+ private static final String OVS_HW_VERSION = "Open vSwitch";
private final ApplicationId appId;
private final FlowRuleService flowRuleService;
private final DeviceService deviceService;
private final DriverService driverService;
private final GroupService groupService;
- private final MastershipService mastershipService;
private final String tunnelType;
/**
@@ -137,7 +136,6 @@
* @param deviceService device service
* @param driverService driver service
* @param groupService group service
- * @param mastershipService mastership service
* @param tunnelType tunnel type
*/
public CordVtnRuleInstaller(ApplicationId appId,
@@ -145,14 +143,12 @@
DeviceService deviceService,
DriverService driverService,
GroupService groupService,
- MastershipService mastershipService,
String tunnelType) {
this.appId = appId;
this.flowRuleService = flowRuleService;
this.deviceService = deviceService;
this.driverService = driverService;
this.groupService = groupService;
- this.mastershipService = mastershipService;
this.tunnelType = checkNotNull(tunnelType);
}
@@ -187,10 +183,6 @@
checkNotNull(vNet);
DeviceId deviceId = host.location().deviceId();
- if (!mastershipService.isLocalMaster(deviceId)) {
- return;
- }
-
PortNumber inPort = host.location().port();
MacAddress dstMac = host.mac();
IpAddress hostIp = host.ipAddresses().stream().findFirst().get();
@@ -225,10 +217,6 @@
PortNumber port = host.location().port();
IpAddress ip = host.ipAddresses().stream().findFirst().orElse(null);
- if (!mastershipService.isLocalMaster(deviceId)) {
- return;
- }
-
for (FlowRule flowRule : flowRuleService.getFlowRulesById(appId)) {
if (flowRule.deviceId().equals(deviceId)) {
PortNumber inPort = getInPort(flowRule);
@@ -284,6 +272,10 @@
Map<DeviceId, Set<PortNumber>> inPorts = Maps.newHashMap();
for (Device device : deviceService.getAvailableDevices(SWITCH)) {
+ if (!device.hwVersion().equals(OVS_HW_VERSION)) {
+ continue;
+ }
+
GroupId groupId = createServiceGroup(device.id(), pService);
outGroups.put(device.id(), groupId);
@@ -320,12 +312,16 @@
Map<DeviceId, GroupId> outGroups = Maps.newHashMap();
GroupKey groupKey = new DefaultGroupKey(pService.id().id().getBytes());
- deviceService.getAvailableDevices(SWITCH).forEach(device -> {
+ for (Device device : deviceService.getAvailableDevices(SWITCH)) {
+ if (!device.hwVersion().equals(OVS_HW_VERSION)) {
+ continue;
+ }
+
Group group = groupService.getGroup(device.id(), groupKey);
if (group != null) {
outGroups.put(device.id(), group.id());
}
- });
+ }
for (FlowRule flowRule : flowRuleService.getFlowRulesById(appId)) {
IpPrefix dstIp = getDstIpFromSelector(flowRule);
@@ -368,11 +364,11 @@
GroupKey groupKey = getGroupKey(service.id());
for (Device device : deviceService.getAvailableDevices(SWITCH)) {
- DeviceId deviceId = device.id();
- if (!mastershipService.isLocalMaster(deviceId)) {
+ if (!device.hwVersion().equals(OVS_HW_VERSION)) {
continue;
}
+ DeviceId deviceId = device.id();
Group group = groupService.getGroup(deviceId, groupKey);
if (group == null) {
log.trace("No group exists for service {} in {}, do nothing.", service.id(), deviceId);
@@ -421,10 +417,6 @@
DeviceId deviceId = host.location().deviceId();
IpAddress hostIp = host.ipAddresses().stream().findFirst().get();
- if (!mastershipService.isLocalMaster(deviceId)) {
- return;
- }
-
TrafficSelector selector = DefaultTrafficSelector.builder()
.matchEthType(Ethernet.TYPE_ARP)
.matchArpTpa(mService.serviceIp().getIp4Address())
@@ -520,10 +512,6 @@
*/
public void removeManagementNetworkRules(Host host, CordService mService) {
checkNotNull(mService);
-
- if (!mastershipService.isLocalMaster(host.location().deviceId())) {
- return;
- }
// TODO remove management network specific rules
}
@@ -980,6 +968,10 @@
.build();
for (Device device : deviceService.getAvailableDevices(SWITCH)) {
+ if (!device.hwVersion().equals(OVS_HW_VERSION)) {
+ continue;
+ }
+
FlowRule flowRuleDirect = DefaultFlowRule.builder()
.fromApp(appId)
.withSelector(selector)
@@ -1011,6 +1003,10 @@
.build();
for (Device device : deviceService.getAvailableDevices(SWITCH)) {
+ if (!device.hwVersion().equals(OVS_HW_VERSION)) {
+ continue;
+ }
+
FlowRule flowRuleDirect = DefaultFlowRule.builder()
.fromApp(appId)
.withSelector(selector)
@@ -1138,6 +1134,10 @@
processFlowRule(true, flowRule);
for (Device device : deviceService.getAvailableDevices(SWITCH)) {
+ if (!device.hwVersion().equals(OVS_HW_VERSION)) {
+ continue;
+ }
+
if (device.id().equals(deviceId)) {
continue;
}