sangho
Committed by Gerrit Code Review

Pushes flow rules to the control switch when the switch is connected and available.

Change-Id: I7cc03a44e21b9dd67d40139ceea7a9b44201d7a8
...@@ -381,6 +381,7 @@ public class BgpRouter { ...@@ -381,6 +381,7 @@ public class BgpRouter {
381 case DEVICE_AVAILABILITY_CHANGED: 381 case DEVICE_AVAILABILITY_CHANGED:
382 if (deviceService.isAvailable(event.subject().id())) { 382 if (deviceService.isAvailable(event.subject().id())) {
383 log.info("Device connected {}", event.subject().id()); 383 log.info("Device connected {}", event.subject().id());
384 + if (event.subject().id().equals(deviceId)) {
384 processIntfFilters(true, configService.getInterfaces()); 385 processIntfFilters(true, configService.getInterfaces());
385 386
386 /* For test only - will be removed before Cardinal release */ 387 /* For test only - will be removed before Cardinal release */
...@@ -391,6 +392,11 @@ public class BgpRouter { ...@@ -391,6 +392,11 @@ public class BgpRouter {
391 FibUpdate fibUpdate = new FibUpdate(FibUpdate.Type.UPDATE, fibEntry); 392 FibUpdate fibUpdate = new FibUpdate(FibUpdate.Type.UPDATE, fibEntry);
392 updateFibEntry(Collections.singletonList(fibUpdate)); 393 updateFibEntry(Collections.singletonList(fibUpdate));
393 } 394 }
395 +
396 + if (event.subject().id().equals(ctrlDeviceId)) {
397 + connectivityManager.notifySwitchAvailable();
398 + }
399 + }
394 break; 400 break;
395 401
396 // TODO other cases 402 // TODO other cases
......
...@@ -81,6 +81,23 @@ public class TunnellingConnectivityManager { ...@@ -81,6 +81,23 @@ public class TunnellingConnectivityManager {
81 81
82 this.bgpSpeaker = bgpSpeaker; 82 this.bgpSpeaker = bgpSpeaker;
83 83
84 + }
85 +
86 + public void start() {
87 + packetService.addProcessor(processor, PacketProcessor.ADVISOR_MAX + 3);
88 + }
89 +
90 + public void stop() {
91 + packetService.removeProcessor(processor);
92 + // Should revoke packet requests in the future
93 + }
94 +
95 + /**
96 + * Pushes the flow rules for forwarding BGP TCP packets to controller.
97 + * It is called when switches are connected and available.
98 + */
99 + public void notifySwitchAvailable() {
100 + // control plane OVS is available, push default flows
84 TrafficSelector selectorDst = DefaultTrafficSelector.builder() 101 TrafficSelector selectorDst = DefaultTrafficSelector.builder()
85 .matchEthType(Ethernet.TYPE_IPV4) 102 .matchEthType(Ethernet.TYPE_IPV4)
86 .matchIPProtocol(IPv4.PROTOCOL_TCP) 103 .matchIPProtocol(IPv4.PROTOCOL_TCP)
...@@ -117,16 +134,6 @@ public class TunnellingConnectivityManager { ...@@ -117,16 +134,6 @@ public class TunnellingConnectivityManager {
117 flowObjectiveService.forward(bgpSpeaker.connectPoint().deviceId(), 134 flowObjectiveService.forward(bgpSpeaker.connectPoint().deviceId(),
118 puntDst); 135 puntDst);
119 log.info("Sent punt forwarding objective to {}", bgpSpeaker.connectPoint().deviceId()); 136 log.info("Sent punt forwarding objective to {}", bgpSpeaker.connectPoint().deviceId());
120 -
121 - }
122 -
123 - public void start() {
124 - packetService.addProcessor(processor, PacketProcessor.ADVISOR_MAX + 3);
125 - }
126 -
127 - public void stop() {
128 - packetService.removeProcessor(processor);
129 - // Should revoke packet requests in the future
130 } 137 }
131 138
132 /** 139 /**
......