Jonathan Hart
Committed by Gerrit Code Review

Minor BgpRouter tweaks to make deactivating and reactivating easier:

  * Push filters and default flows on activate if switch is already connected
  * Don't try and push filters for interfaces on other switches

Change-Id: Idf1582c168439aa06d8efa0ab4b7352e96ef3712
...@@ -160,6 +160,15 @@ public class BgpRouter { ...@@ -160,6 +160,15 @@ public class BgpRouter {
160 connectivityManager.start(); 160 connectivityManager.start();
161 icmpHandler.start(); 161 icmpHandler.start();
162 162
163 + // Initialize devices now if they are already connected
164 + if (deviceService.isAvailable(deviceId)) {
165 + processIntfFilters(true, configService.getInterfaces());
166 + }
167 +
168 + if (deviceService.isAvailable(ctrlDeviceId)) {
169 + connectivityManager.notifySwitchAvailable();
170 + }
171 +
163 log.info("BgpRouter started"); 172 log.info("BgpRouter started");
164 } 173 }
165 174
...@@ -352,6 +361,11 @@ public class BgpRouter { ...@@ -352,6 +361,11 @@ public class BgpRouter {
352 private void processIntfFilters(boolean install, Set<Interface> intfs) { 361 private void processIntfFilters(boolean install, Set<Interface> intfs) {
353 log.info("Processing {} router interfaces", intfs.size()); 362 log.info("Processing {} router interfaces", intfs.size());
354 for (Interface intf : intfs) { 363 for (Interface intf : intfs) {
364 + if (!intf.connectPoint().deviceId().equals(deviceId)) {
365 + // Ignore interfaces if they are not on the router switch
366 + continue;
367 + }
368 +
355 FilteringObjective.Builder fob = DefaultFilteringObjective.builder(); 369 FilteringObjective.Builder fob = DefaultFilteringObjective.builder();
356 fob.withKey(Criteria.matchInPort(intf.connectPoint().port())) 370 fob.withKey(Criteria.matchInPort(intf.connectPoint().port()))
357 .addCondition(Criteria.matchEthDst(intf.mac())) 371 .addCondition(Criteria.matchEthDst(intf.mac()))
......