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
Showing
2 changed files
with
40 additions
and
8 deletions
... | @@ -32,6 +32,7 @@ import org.onosproject.net.flow.criteria.Criterion; | ... | @@ -32,6 +32,7 @@ import org.onosproject.net.flow.criteria.Criterion; |
32 | import org.onosproject.net.intent.Intent; | 32 | import org.onosproject.net.intent.Intent; |
33 | import org.onosproject.net.intent.IntentService; | 33 | import org.onosproject.net.intent.IntentService; |
34 | import org.onosproject.net.intent.IntentState; | 34 | import org.onosproject.net.intent.IntentState; |
35 | +import org.onosproject.net.intent.Key; | ||
35 | import org.onosproject.net.intent.MultiPointToSinglePointIntent; | 36 | import org.onosproject.net.intent.MultiPointToSinglePointIntent; |
36 | import org.onosproject.net.intent.PointToPointIntent; | 37 | import org.onosproject.net.intent.PointToPointIntent; |
37 | import org.onosproject.routing.FibListener; | 38 | import org.onosproject.routing.FibListener; |
... | @@ -43,6 +44,7 @@ import org.slf4j.Logger; | ... | @@ -43,6 +44,7 @@ import org.slf4j.Logger; |
43 | import org.slf4j.LoggerFactory; | 44 | import org.slf4j.LoggerFactory; |
44 | 45 | ||
45 | import java.util.Collection; | 46 | import java.util.Collection; |
47 | +import java.util.Collections; | ||
46 | import java.util.HashMap; | 48 | import java.util.HashMap; |
47 | import java.util.HashSet; | 49 | import java.util.HashSet; |
48 | import java.util.LinkedList; | 50 | import java.util.LinkedList; |
... | @@ -62,6 +64,9 @@ import static com.google.common.base.Preconditions.checkArgument; | ... | @@ -62,6 +64,9 @@ import static com.google.common.base.Preconditions.checkArgument; |
62 | * IntentService. | 64 | * IntentService. |
63 | */ | 65 | */ |
64 | public class IntentSynchronizer implements FibListener { | 66 | public class IntentSynchronizer implements FibListener { |
67 | + private static final int PRIORITY_OFFSET = 100; | ||
68 | + private static final int PRIORITY_MULTIPLIER = 5; | ||
69 | + | ||
65 | private static final Logger log = | 70 | private static final Logger log = |
66 | LoggerFactory.getLogger(IntentSynchronizer.class); | 71 | LoggerFactory.getLogger(IntentSynchronizer.class); |
67 | 72 | ||
... | @@ -332,9 +337,14 @@ public class IntentSynchronizer implements FibListener { | ... | @@ -332,9 +337,14 @@ public class IntentSynchronizer implements FibListener { |
332 | selector.matchVlanId(VlanId.ANY); | 337 | selector.matchVlanId(VlanId.ANY); |
333 | } | 338 | } |
334 | 339 | ||
335 | - return new MultiPointToSinglePointIntent(appId, selector.build(), | 340 | + int priority = |
341 | + prefix.prefixLength() * PRIORITY_MULTIPLIER + PRIORITY_OFFSET; | ||
342 | + Key key = Key.of(prefix.toString(), appId); | ||
343 | + return new MultiPointToSinglePointIntent(appId, key, selector.build(), | ||
336 | treatment.build(), | 344 | treatment.build(), |
337 | - ingressPorts, egressPort); | 345 | + ingressPorts, egressPort, |
346 | + Collections.emptyList(), | ||
347 | + priority); | ||
338 | } | 348 | } |
339 | 349 | ||
340 | @Override | 350 | @Override | ... | ... |
... | @@ -37,12 +37,14 @@ import org.slf4j.LoggerFactory; | ... | @@ -37,12 +37,14 @@ import org.slf4j.LoggerFactory; |
37 | 37 | ||
38 | import java.util.ArrayList; | 38 | import java.util.ArrayList; |
39 | import java.util.Collection; | 39 | import java.util.Collection; |
40 | +import java.util.Collections; | ||
40 | import java.util.List; | 41 | import java.util.List; |
41 | 42 | ||
42 | /** | 43 | /** |
43 | * Manages the connectivity requirements between peers. | 44 | * Manages the connectivity requirements between peers. |
44 | */ | 45 | */ |
45 | public class PeerConnectivityManager { | 46 | public class PeerConnectivityManager { |
47 | + private static final int PRIORITY_OFFSET = 1000; | ||
46 | 48 | ||
47 | private static final Logger log = LoggerFactory.getLogger( | 49 | private static final Logger log = LoggerFactory.getLogger( |
48 | PeerConnectivityManager.class); | 50 | PeerConnectivityManager.class); |
... | @@ -188,8 +190,13 @@ public class PeerConnectivityManager { | ... | @@ -188,8 +190,13 @@ public class PeerConnectivityManager { |
188 | null, | 190 | null, |
189 | BGP_PORT); | 191 | BGP_PORT); |
190 | 192 | ||
193 | + int priority = PRIORITY_OFFSET; | ||
194 | + | ||
191 | intents.add(new PointToPointIntent(appId, selector, treatment, | 195 | intents.add(new PointToPointIntent(appId, selector, treatment, |
192 | - bgpdConnectPoint, bgpdPeerConnectPoint)); | 196 | + bgpdConnectPoint, |
197 | + bgpdPeerConnectPoint, | ||
198 | + Collections.emptyList(), | ||
199 | + priority)); | ||
193 | 200 | ||
194 | // Path from BGP speaker to BGP peer matching source TCP port 179 | 201 | // Path from BGP speaker to BGP peer matching source TCP port 179 |
195 | selector = buildSelector(tcpProtocol, | 202 | selector = buildSelector(tcpProtocol, |
... | @@ -199,7 +206,10 @@ public class PeerConnectivityManager { | ... | @@ -199,7 +206,10 @@ public class PeerConnectivityManager { |
199 | null); | 206 | null); |
200 | 207 | ||
201 | intents.add(new PointToPointIntent(appId, selector, treatment, | 208 | intents.add(new PointToPointIntent(appId, selector, treatment, |
202 | - bgpdConnectPoint, bgpdPeerConnectPoint)); | 209 | + bgpdConnectPoint, |
210 | + bgpdPeerConnectPoint, | ||
211 | + Collections.emptyList(), | ||
212 | + priority)); | ||
203 | 213 | ||
204 | // Path from BGP peer to BGP speaker matching destination TCP port 179 | 214 | // Path from BGP peer to BGP speaker matching destination TCP port 179 |
205 | selector = buildSelector(tcpProtocol, | 215 | selector = buildSelector(tcpProtocol, |
... | @@ -209,7 +219,10 @@ public class PeerConnectivityManager { | ... | @@ -209,7 +219,10 @@ public class PeerConnectivityManager { |
209 | BGP_PORT); | 219 | BGP_PORT); |
210 | 220 | ||
211 | intents.add(new PointToPointIntent(appId, selector, treatment, | 221 | intents.add(new PointToPointIntent(appId, selector, treatment, |
212 | - bgpdPeerConnectPoint, bgpdConnectPoint)); | 222 | + bgpdPeerConnectPoint, |
223 | + bgpdConnectPoint, | ||
224 | + Collections.emptyList(), | ||
225 | + priority)); | ||
213 | 226 | ||
214 | // Path from BGP peer to BGP speaker matching source TCP port 179 | 227 | // Path from BGP peer to BGP speaker matching source TCP port 179 |
215 | selector = buildSelector(tcpProtocol, | 228 | selector = buildSelector(tcpProtocol, |
... | @@ -219,7 +232,10 @@ public class PeerConnectivityManager { | ... | @@ -219,7 +232,10 @@ public class PeerConnectivityManager { |
219 | null); | 232 | null); |
220 | 233 | ||
221 | intents.add(new PointToPointIntent(appId, selector, treatment, | 234 | intents.add(new PointToPointIntent(appId, selector, treatment, |
222 | - bgpdPeerConnectPoint, bgpdConnectPoint)); | 235 | + bgpdPeerConnectPoint, |
236 | + bgpdConnectPoint, | ||
237 | + Collections.emptyList(), | ||
238 | + priority)); | ||
223 | 239 | ||
224 | // ICMP path from BGP speaker to BGP peer | 240 | // ICMP path from BGP speaker to BGP peer |
225 | selector = buildSelector(icmpProtocol, | 241 | selector = buildSelector(icmpProtocol, |
... | @@ -229,7 +245,10 @@ public class PeerConnectivityManager { | ... | @@ -229,7 +245,10 @@ public class PeerConnectivityManager { |
229 | null); | 245 | null); |
230 | 246 | ||
231 | intents.add(new PointToPointIntent(appId, selector, treatment, | 247 | intents.add(new PointToPointIntent(appId, selector, treatment, |
232 | - bgpdConnectPoint, bgpdPeerConnectPoint)); | 248 | + bgpdConnectPoint, |
249 | + bgpdPeerConnectPoint, | ||
250 | + Collections.emptyList(), | ||
251 | + priority)); | ||
233 | 252 | ||
234 | // ICMP path from BGP peer to BGP speaker | 253 | // ICMP path from BGP peer to BGP speaker |
235 | selector = buildSelector(icmpProtocol, | 254 | selector = buildSelector(icmpProtocol, |
... | @@ -239,7 +258,10 @@ public class PeerConnectivityManager { | ... | @@ -239,7 +258,10 @@ public class PeerConnectivityManager { |
239 | null); | 258 | null); |
240 | 259 | ||
241 | intents.add(new PointToPointIntent(appId, selector, treatment, | 260 | intents.add(new PointToPointIntent(appId, selector, treatment, |
242 | - bgpdPeerConnectPoint, bgpdConnectPoint)); | 261 | + bgpdPeerConnectPoint, |
262 | + bgpdConnectPoint, | ||
263 | + Collections.emptyList(), | ||
264 | + priority)); | ||
243 | 265 | ||
244 | return intents; | 266 | return intents; |
245 | } | 267 | } | ... | ... |
-
Please register or login to post a comment