sangho
Committed by Gerrit Code Review

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

Change-Id: I7cc03a44e21b9dd67d40139ceea7a9b44201d7a8
...@@ -381,15 +381,21 @@ public class BgpRouter { ...@@ -381,15 +381,21 @@ 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 - processIntfFilters(true, configService.getInterfaces()); 384 + if (event.subject().id().equals(deviceId)) {
385 - 385 + processIntfFilters(true, configService.getInterfaces());
386 - /* For test only - will be removed before Cardinal release */ 386 +
387 - delay(1000); 387 + /* For test only - will be removed before Cardinal release */
388 - FibEntry fibEntry = new FibEntry(Ip4Prefix.valueOf("10.1.0.0/16"), 388 + delay(1000);
389 - Ip4Address.valueOf("192.168.10.1"), 389 + FibEntry fibEntry = new FibEntry(Ip4Prefix.valueOf("10.1.0.0/16"),
390 - MacAddress.valueOf("DE:AD:BE:EF:FE:ED")); 390 + Ip4Address.valueOf("192.168.10.1"),
391 - FibUpdate fibUpdate = new FibUpdate(FibUpdate.Type.UPDATE, fibEntry); 391 + MacAddress.valueOf("DE:AD:BE:EF:FE:ED"));
392 - updateFibEntry(Collections.singletonList(fibUpdate)); 392 + FibUpdate fibUpdate = new FibUpdate(FibUpdate.Type.UPDATE, fibEntry);
393 + updateFibEntry(Collections.singletonList(fibUpdate));
394 + }
395 +
396 + if (event.subject().id().equals(ctrlDeviceId)) {
397 + connectivityManager.notifySwitchAvailable();
398 + }
393 } 399 }
394 break; 400 break;
395 401
......
...@@ -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)
...@@ -105,7 +122,7 @@ public class TunnellingConnectivityManager { ...@@ -105,7 +122,7 @@ public class TunnellingConnectivityManager {
105 .withFlag(ForwardingObjective.Flag.VERSATILE) 122 .withFlag(ForwardingObjective.Flag.VERSATILE)
106 .add(); 123 .add();
107 flowObjectiveService.forward(bgpSpeaker.connectPoint().deviceId(), 124 flowObjectiveService.forward(bgpSpeaker.connectPoint().deviceId(),
108 - puntSrc); 125 + puntSrc);
109 126
110 ForwardingObjective puntDst = DefaultForwardingObjective.builder() 127 ForwardingObjective puntDst = DefaultForwardingObjective.builder()
111 .fromApp(appId) 128 .fromApp(appId)
...@@ -115,18 +132,8 @@ public class TunnellingConnectivityManager { ...@@ -115,18 +132,8 @@ public class TunnellingConnectivityManager {
115 .withFlag(ForwardingObjective.Flag.VERSATILE) 132 .withFlag(ForwardingObjective.Flag.VERSATILE)
116 .add(); 133 .add();
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 /**
......