Fixes related to SDN-IP intents:
* Use intent priority when installing multipoint-to-singlepoint intents:
the loinger the routing prefix match, the higher the intent priority.
This is needed to perform correctly the equivalent of longest prefix
match in the switch.
* Use intent priority for the point-to-point intents: the priority for
this BGP-related control traffic is higher than the
multipoint-to-singlepoint intents.
* Use the appropriate Key when installing multipoint-to-singlepoint intents.
The key is the network (destination routing) prefix address represented
as a string.
Change-Id: Ic489a1e5f31adceb4c9d1dcea52293a2b3db0b79
diff --git a/apps/sdnip/src/main/java/org/onosproject/sdnip/IntentSynchronizer.java b/apps/sdnip/src/main/java/org/onosproject/sdnip/IntentSynchronizer.java
index cc65ccc..badad7f 100644
--- a/apps/sdnip/src/main/java/org/onosproject/sdnip/IntentSynchronizer.java
+++ b/apps/sdnip/src/main/java/org/onosproject/sdnip/IntentSynchronizer.java
@@ -32,6 +32,7 @@
import org.onosproject.net.intent.Intent;
import org.onosproject.net.intent.IntentService;
import org.onosproject.net.intent.IntentState;
+import org.onosproject.net.intent.Key;
import org.onosproject.net.intent.MultiPointToSinglePointIntent;
import org.onosproject.net.intent.PointToPointIntent;
import org.onosproject.routing.FibListener;
@@ -43,6 +44,7 @@
import org.slf4j.LoggerFactory;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
@@ -62,6 +64,9 @@
* IntentService.
*/
public class IntentSynchronizer implements FibListener {
+ private static final int PRIORITY_OFFSET = 100;
+ private static final int PRIORITY_MULTIPLIER = 5;
+
private static final Logger log =
LoggerFactory.getLogger(IntentSynchronizer.class);
@@ -332,9 +337,14 @@
selector.matchVlanId(VlanId.ANY);
}
- return new MultiPointToSinglePointIntent(appId, selector.build(),
+ int priority =
+ prefix.prefixLength() * PRIORITY_MULTIPLIER + PRIORITY_OFFSET;
+ Key key = Key.of(prefix.toString(), appId);
+ return new MultiPointToSinglePointIntent(appId, key, selector.build(),
treatment.build(),
- ingressPorts, egressPort);
+ ingressPorts, egressPort,
+ Collections.emptyList(),
+ priority);
}
@Override
diff --git a/apps/sdnip/src/main/java/org/onosproject/sdnip/PeerConnectivityManager.java b/apps/sdnip/src/main/java/org/onosproject/sdnip/PeerConnectivityManager.java
index c9f9606..9f34945 100644
--- a/apps/sdnip/src/main/java/org/onosproject/sdnip/PeerConnectivityManager.java
+++ b/apps/sdnip/src/main/java/org/onosproject/sdnip/PeerConnectivityManager.java
@@ -37,12 +37,14 @@
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
/**
* Manages the connectivity requirements between peers.
*/
public class PeerConnectivityManager {
+ private static final int PRIORITY_OFFSET = 1000;
private static final Logger log = LoggerFactory.getLogger(
PeerConnectivityManager.class);
@@ -188,8 +190,13 @@
null,
BGP_PORT);
+ int priority = PRIORITY_OFFSET;
+
intents.add(new PointToPointIntent(appId, selector, treatment,
- bgpdConnectPoint, bgpdPeerConnectPoint));
+ bgpdConnectPoint,
+ bgpdPeerConnectPoint,
+ Collections.emptyList(),
+ priority));
// Path from BGP speaker to BGP peer matching source TCP port 179
selector = buildSelector(tcpProtocol,
@@ -199,7 +206,10 @@
null);
intents.add(new PointToPointIntent(appId, selector, treatment,
- bgpdConnectPoint, bgpdPeerConnectPoint));
+ bgpdConnectPoint,
+ bgpdPeerConnectPoint,
+ Collections.emptyList(),
+ priority));
// Path from BGP peer to BGP speaker matching destination TCP port 179
selector = buildSelector(tcpProtocol,
@@ -209,7 +219,10 @@
BGP_PORT);
intents.add(new PointToPointIntent(appId, selector, treatment,
- bgpdPeerConnectPoint, bgpdConnectPoint));
+ bgpdPeerConnectPoint,
+ bgpdConnectPoint,
+ Collections.emptyList(),
+ priority));
// Path from BGP peer to BGP speaker matching source TCP port 179
selector = buildSelector(tcpProtocol,
@@ -219,7 +232,10 @@
null);
intents.add(new PointToPointIntent(appId, selector, treatment,
- bgpdPeerConnectPoint, bgpdConnectPoint));
+ bgpdPeerConnectPoint,
+ bgpdConnectPoint,
+ Collections.emptyList(),
+ priority));
// ICMP path from BGP speaker to BGP peer
selector = buildSelector(icmpProtocol,
@@ -229,7 +245,10 @@
null);
intents.add(new PointToPointIntent(appId, selector, treatment,
- bgpdConnectPoint, bgpdPeerConnectPoint));
+ bgpdConnectPoint,
+ bgpdPeerConnectPoint,
+ Collections.emptyList(),
+ priority));
// ICMP path from BGP peer to BGP speaker
selector = buildSelector(icmpProtocol,
@@ -239,7 +258,10 @@
null);
intents.add(new PointToPointIntent(appId, selector, treatment,
- bgpdPeerConnectPoint, bgpdConnectPoint));
+ bgpdPeerConnectPoint,
+ bgpdConnectPoint,
+ Collections.emptyList(),
+ priority));
return intents;
}