Fixes bug where driver gets initialized only when device is available.
More explict handling of versatile forwarding flows in corsa driver.
Moving TunnelConnectivityManager to use flowObjectives instead of flowRules.
Change-Id: If43023f30a6e7a028dfdefbe1ffbcc710a1c7be3
diff --git a/apps/bgprouter/src/main/java/org/onosproject/bgprouter/BgpRouter.java b/apps/bgprouter/src/main/java/org/onosproject/bgprouter/BgpRouter.java
index e196fe5..1c1a74a 100644
--- a/apps/bgprouter/src/main/java/org/onosproject/bgprouter/BgpRouter.java
+++ b/apps/bgprouter/src/main/java/org/onosproject/bgprouter/BgpRouter.java
@@ -161,7 +161,7 @@
connectivityManager = new TunnellingConnectivityManager(appId,
configService,
packetService,
- flowService);
+ flowObjectiveService);
icmpHandler = new IcmpHandler(configService, packetService);
@@ -252,7 +252,7 @@
flowObjectiveService.forward(deviceId,
generateRibFlowRule(fibEntry.prefix(), nextId).add());
- log.trace("Sending flow forwarding objective {}->{}", fibEntry, nextId);
+ log.trace("Sending forwarding objective {} -> nextId:{}", fibEntry, nextId);
}
}
@@ -282,8 +282,6 @@
.matchIPDst(prefix)
.build();
-
-
int priority = prefix.prefixLength() * PRIORITY_MULTIPLIER + PRIORITY_OFFSET;
ForwardingObjective.Builder fwdBuilder = DefaultForwardingObjective.builder()
diff --git a/apps/bgprouter/src/main/java/org/onosproject/bgprouter/TunnellingConnectivityManager.java b/apps/bgprouter/src/main/java/org/onosproject/bgprouter/TunnellingConnectivityManager.java
index d76b353..7d8ca7c 100644
--- a/apps/bgprouter/src/main/java/org/onosproject/bgprouter/TunnellingConnectivityManager.java
+++ b/apps/bgprouter/src/main/java/org/onosproject/bgprouter/TunnellingConnectivityManager.java
@@ -15,19 +15,21 @@
*/
package org.onosproject.bgprouter;
+import static org.slf4j.LoggerFactory.getLogger;
+
import org.onlab.packet.Ethernet;
import org.onlab.packet.IPv4;
import org.onlab.packet.IpAddress;
import org.onlab.packet.TCP;
import org.onosproject.core.ApplicationId;
import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.flow.DefaultFlowRule;
import org.onosproject.net.flow.DefaultTrafficSelector;
import org.onosproject.net.flow.DefaultTrafficTreatment;
-import org.onosproject.net.flow.FlowRuleOperations;
-import org.onosproject.net.flow.FlowRuleService;
import org.onosproject.net.flow.TrafficSelector;
import org.onosproject.net.flow.TrafficTreatment;
+import org.onosproject.net.flowobjective.DefaultForwardingObjective;
+import org.onosproject.net.flowobjective.FlowObjectiveService;
+import org.onosproject.net.flowobjective.ForwardingObjective;
import org.onosproject.net.packet.DefaultOutboundPacket;
import org.onosproject.net.packet.OutboundPacket;
import org.onosproject.net.packet.PacketContext;
@@ -37,6 +39,7 @@
import org.onosproject.routing.config.BgpSpeaker;
import org.onosproject.routing.config.InterfaceAddress;
import org.onosproject.routing.config.RoutingConfigurationService;
+import org.slf4j.Logger;
/**
@@ -46,23 +49,25 @@
public class TunnellingConnectivityManager {
private static final short BGP_PORT = 179;
-
+ private final Logger log = getLogger(getClass());
private final ApplicationId appId;
private final BgpSpeaker bgpSpeaker;
private final PacketService packetService;
private final RoutingConfigurationService configService;
+ private final FlowObjectiveService flowObjectiveService;
private final BgpProcessor processor = new BgpProcessor();
public TunnellingConnectivityManager(ApplicationId appId,
RoutingConfigurationService configService,
PacketService packetService,
- FlowRuleService flowService) {
+ FlowObjectiveService flowObjectiveService) {
this.appId = appId;
this.configService = configService;
this.packetService = packetService;
+ this.flowObjectiveService = flowObjectiveService;
BgpSpeaker bgpSpeaker = null;
for (BgpSpeaker speaker : configService.getBgpSpeakers().values()) {
@@ -92,12 +97,27 @@
.punt()
.build();
- FlowRuleOperations.Builder builder = FlowRuleOperations.builder();
- builder.add(new DefaultFlowRule(bgpSpeaker.connectPoint().deviceId(),
- selectorSrc, treatment, 0, appId, 0, true));
- builder.add(new DefaultFlowRule(bgpSpeaker.connectPoint().deviceId(),
- selectorDst, treatment, 0, appId, 0, true));
- flowService.apply(builder.build());
+ ForwardingObjective puntSrc = DefaultForwardingObjective.builder()
+ .fromApp(appId)
+ .makePermanent()
+ .withSelector(selectorSrc)
+ .withTreatment(treatment)
+ .withFlag(ForwardingObjective.Flag.VERSATILE)
+ .add();
+ flowObjectiveService.forward(bgpSpeaker.connectPoint().deviceId(),
+ puntSrc);
+
+ ForwardingObjective puntDst = DefaultForwardingObjective.builder()
+ .fromApp(appId)
+ .makePermanent()
+ .withSelector(selectorDst)
+ .withTreatment(treatment)
+ .withFlag(ForwardingObjective.Flag.VERSATILE)
+ .add();
+ flowObjectiveService.forward(bgpSpeaker.connectPoint().deviceId(),
+ puntDst);
+ log.info("Sent punt forwarding objective to {}", bgpSpeaker.connectPoint().deviceId());
+
}
public void start() {