Changes related to the "LinkCollectionIntent" type of intents
(e.g., Multipoint-to-singlepoint and Singlepoint-to-multipoint)
* Apply the Intent-defined traffic treatment only on the flowmods
on the ingress switch with ingress inport for a flowmod.
Previously, the traffic treatments were applied on each switch,
and semantically it is not the correct (default) behavior.
* Express the flowmods by explicitly specifying the expected inport
in the matching conditions for each flowmod.
Previously, the inport was not included in the matching conditions.
[Merge from branch onos-1.0 - manually]
Change-Id: Ic378b6e8be033a70b016f4ba5550d91fe08ddd9a
diff --git a/core/api/src/main/java/org/onosproject/net/intent/LinkCollectionIntent.java b/core/api/src/main/java/org/onosproject/net/intent/LinkCollectionIntent.java
index 852e143..55c0cfb 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/LinkCollectionIntent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/LinkCollectionIntent.java
@@ -36,16 +36,19 @@
private final Set<Link> links;
+ private final Set<ConnectPoint> ingressPoints;
private final Set<ConnectPoint> egressPoints;
/**
- * Creates a new actionable intent capable of funneling the selected traffic
- * along the specified convergent tree and out the given egress point.
+ * Creates a new actionable intent capable of funneling the selected
+ * traffic along the specified convergent tree and out the given egress
+ * point.
*
* @param appId application identifier
* @param selector traffic match
* @param treatment action
* @param links traversed links
+ * @param ingressPoint ingress point
* @param egressPoint egress point
* @throws NullPointerException {@code path} is null
*/
@@ -53,19 +56,22 @@
TrafficSelector selector,
TrafficTreatment treatment,
Set<Link> links,
+ ConnectPoint ingressPoint,
ConnectPoint egressPoint) {
- this(appId, selector, treatment, links, egressPoint, Collections.emptyList());
+ this(appId, selector, treatment, links, ingressPoint, egressPoint,
+ Collections.emptyList());
}
/**
* Creates a new actionable intent capable of funneling the selected
- * traffic along the specified convergent tree and out the given egress point
- * satisfying the specified constraints.
+ * traffic along the specified convergent tree and out the given egress
+ * point satisfying the specified constraints.
*
* @param appId application identifier
* @param selector traffic match
* @param treatment action
* @param links traversed links
+ * @param ingressPoint ingress point
* @param egressPoint egress point
* @param constraints optional list of constraints
* @throws NullPointerException {@code path} is null
@@ -74,22 +80,26 @@
TrafficSelector selector,
TrafficTreatment treatment,
Set<Link> links,
+ ConnectPoint ingressPoint,
ConnectPoint egressPoint,
List<Constraint> constraints) {
super(appId, resources(links), selector, treatment, constraints);
this.links = links;
+ this.ingressPoints = ImmutableSet.of(ingressPoint);
this.egressPoints = ImmutableSet.of(egressPoint);
}
/**
- * Creates a new actionable intent capable of funneling the selected traffic
- * along the specified convergent tree and out the given egress point.
+ * Creates a new actionable intent capable of funneling the selected
+ * traffic along the specified convergent tree and out the given egress
+ * point.
*
* @param appId application identifier
* @param selector traffic match
* @param treatment action
* @param links traversed links
- * @param egressPoints Set of egress point
+ * @param ingressPoints Set of ingress points
+ * @param egressPoints Set of egress points
* @param constraints the constraints
* @throws NullPointerException {@code path} is null
*/
@@ -97,11 +107,13 @@
TrafficSelector selector,
TrafficTreatment treatment,
Set<Link> links,
+ Set<ConnectPoint> ingressPoints,
Set<ConnectPoint> egressPoints,
List<Constraint> constraints) {
super(appId, resources(links), selector, treatment, constraints);
this.links = links;
+ this.ingressPoints = ImmutableSet.copyOf(ingressPoints);
this.egressPoints = ImmutableSet.copyOf(egressPoints);
}
@@ -111,6 +123,7 @@
protected LinkCollectionIntent() {
super();
this.links = null;
+ this.ingressPoints = null;
this.egressPoints = null;
}
@@ -125,9 +138,18 @@
}
/**
- * Returns the egress point of the intent.
+ * Returns the ingress points of the intent.
*
- * @return the egress point
+ * @return the ingress points
+ */
+ public Set<ConnectPoint> ingressPoints() {
+ return ingressPoints;
+ }
+
+ /**
+ * Returns the egress points of the intent.
+ *
+ * @return the egress points
*/
public Set<ConnectPoint> egressPoints() {
return egressPoints;
@@ -148,6 +170,7 @@
.add("selector", selector())
.add("treatment", treatment())
.add("links", links())
+ .add("ingress", ingressPoints())
.add("egress", egressPoints())
.toString();
}
diff --git a/core/api/src/test/java/org/onosproject/net/intent/LinkCollectionIntentTest.java b/core/api/src/test/java/org/onosproject/net/intent/LinkCollectionIntentTest.java
index 9282f0f..0327390 100644
--- a/core/api/src/test/java/org/onosproject/net/intent/LinkCollectionIntentTest.java
+++ b/core/api/src/test/java/org/onosproject/net/intent/LinkCollectionIntentTest.java
@@ -45,6 +45,7 @@
*/
public class LinkCollectionIntentTest extends IntentTest {
+ final ConnectPoint ingress = NetTestTools.connectPoint("ingress", 2);
final ConnectPoint egress = NetTestTools.connectPoint("egress", 3);
final TrafficSelector selector = new IntentTestsMocks.MockSelector();
final IntentTestsMocks.MockTreatment treatment = new IntentTestsMocks.MockTreatment();
@@ -70,6 +71,7 @@
selector,
treatment,
links1,
+ ingress,
egress);
final HashSet<Link> links2 = new HashSet<>();
@@ -79,6 +81,7 @@
selector,
treatment,
links2,
+ ingress,
egress);
new EqualsTester()
@@ -99,6 +102,7 @@
selector,
treatment,
links1,
+ ingress,
egress);
final Set<Link> createdLinks = collectionIntent.links();
@@ -106,6 +110,7 @@
assertThat(collectionIntent.isInstallable(), is(true));
assertThat(collectionIntent.treatment(), is(treatment));
assertThat(collectionIntent.selector(), is(selector));
+ assertThat(collectionIntent.ingressPoints(), is(ImmutableSet.of(ingress)));
assertThat(collectionIntent.egressPoints(), is(ImmutableSet.of(egress)));
assertThat(collectionIntent.resources(), hasSize(1));
final List<Constraint> createdConstraints = collectionIntent.constraints();
@@ -127,6 +132,7 @@
selector,
treatment,
links1,
+ ingress,
egress,
constraints);
@@ -135,6 +141,7 @@
assertThat(collectionIntent.isInstallable(), is(true));
assertThat(collectionIntent.treatment(), is(treatment));
assertThat(collectionIntent.selector(), is(selector));
+ assertThat(collectionIntent.ingressPoints(), is(ImmutableSet.of(ingress)));
assertThat(collectionIntent.egressPoints(), is(ImmutableSet.of(egress)));
final List<Constraint> createdConstraints = collectionIntent.constraints();
@@ -156,6 +163,7 @@
assertThat(collectionIntent.isInstallable(), is(true));
assertThat(collectionIntent.treatment(), nullValue());
assertThat(collectionIntent.selector(), nullValue());
+ assertThat(collectionIntent.ingressPoints(), nullValue());
assertThat(collectionIntent.egressPoints(), nullValue());
final List<Constraint> createdConstraints = collectionIntent.constraints();
@@ -170,6 +178,7 @@
selector,
treatment,
links1,
+ ingress,
egress);
}
@@ -181,6 +190,7 @@
selector,
treatment,
links2,
+ ingress,
egress);
}
}