blob: a09291faf9a872a84f67c165cf03eebc487cb2cf [file] [log] [blame]
Brian O'Connorb876bf12014-10-02 14:59:37 -07001package org.onlab.onos.net.intent;
2
tom85258ee2014-10-07 00:10:02 -07003import com.google.common.base.MoreObjects;
4import com.google.common.collect.Sets;
Thomas Vachuskac96058a2014-10-20 23:00:16 -07005import org.onlab.onos.ApplicationId;
Brian O'Connorb876bf12014-10-02 14:59:37 -07006import org.onlab.onos.net.ConnectPoint;
7import org.onlab.onos.net.flow.TrafficSelector;
8import org.onlab.onos.net.flow.TrafficTreatment;
9
tom85258ee2014-10-07 00:10:02 -070010import java.util.Set;
11
12import static com.google.common.base.Preconditions.checkArgument;
13import static com.google.common.base.Preconditions.checkNotNull;
Brian O'Connorb876bf12014-10-02 14:59:37 -070014
15/**
16 * Abstraction of multiple source to single destination connectivity intent.
17 */
Ray Milkeye6684082014-10-16 16:59:47 -070018public final class MultiPointToSinglePointIntent extends ConnectivityIntent {
Brian O'Connorb876bf12014-10-02 14:59:37 -070019
tom85258ee2014-10-07 00:10:02 -070020 private final Set<ConnectPoint> ingressPoints;
21 private final ConnectPoint egressPoint;
Brian O'Connorb876bf12014-10-02 14:59:37 -070022
23 /**
24 * Creates a new multi-to-single point connectivity intent for the specified
Thomas Vachuskac96058a2014-10-20 23:00:16 -070025 * traffic selector and treatment.
Brian O'Connorb876bf12014-10-02 14:59:37 -070026 *
Thomas Vachuskac96058a2014-10-20 23:00:16 -070027 * @param appId application identifier
28 * @param selector traffic selector
29 * @param treatment treatment
tom85258ee2014-10-07 00:10:02 -070030 * @param ingressPoints set of ports from which ingress traffic originates
31 * @param egressPoint port to which traffic will egress
32 * @throws NullPointerException if {@code ingressPoints} or
33 * {@code egressPoint} is null.
34 * @throws IllegalArgumentException if the size of {@code ingressPoints} is
toma1d16b62014-10-02 23:45:11 -070035 * not more than 1
Brian O'Connorb876bf12014-10-02 14:59:37 -070036 */
Thomas Vachuskac96058a2014-10-20 23:00:16 -070037 public MultiPointToSinglePointIntent(ApplicationId appId,
38 TrafficSelector selector,
39 TrafficTreatment treatment,
tom85258ee2014-10-07 00:10:02 -070040 Set<ConnectPoint> ingressPoints,
41 ConnectPoint egressPoint) {
Thomas Vachuskac96058a2014-10-20 23:00:16 -070042 super(id(MultiPointToSinglePointIntent.class, selector, treatment,
43 ingressPoints, egressPoint), appId, null, selector, treatment);
Brian O'Connorb876bf12014-10-02 14:59:37 -070044
tom85258ee2014-10-07 00:10:02 -070045 checkNotNull(ingressPoints);
Thomas Vachuskac96058a2014-10-20 23:00:16 -070046 checkArgument(!ingressPoints.isEmpty(), "Ingress point set cannot be empty");
Brian O'Connorb876bf12014-10-02 14:59:37 -070047
tom85258ee2014-10-07 00:10:02 -070048 this.ingressPoints = Sets.newHashSet(ingressPoints);
49 this.egressPoint = checkNotNull(egressPoint);
Brian O'Connorb876bf12014-10-02 14:59:37 -070050 }
51
52 /**
53 * Constructor for serializer.
54 */
55 protected MultiPointToSinglePointIntent() {
56 super();
tom85258ee2014-10-07 00:10:02 -070057 this.ingressPoints = null;
58 this.egressPoint = null;
Brian O'Connorb876bf12014-10-02 14:59:37 -070059 }
60
61 /**
62 * Returns the set of ports on which ingress traffic should be connected to
63 * the egress port.
64 *
65 * @return set of ingress ports
66 */
tom85258ee2014-10-07 00:10:02 -070067 public Set<ConnectPoint> ingressPoints() {
68 return ingressPoints;
Brian O'Connorb876bf12014-10-02 14:59:37 -070069 }
70
71 /**
72 * Returns the port on which the traffic should egress.
73 *
74 * @return egress port
75 */
tom85258ee2014-10-07 00:10:02 -070076 public ConnectPoint egressPoint() {
77 return egressPoint;
Brian O'Connorb876bf12014-10-02 14:59:37 -070078 }
79
80 @Override
Brian O'Connorb876bf12014-10-02 14:59:37 -070081 public String toString() {
82 return MoreObjects.toStringHelper(getClass())
tom85258ee2014-10-07 00:10:02 -070083 .add("id", id())
84 .add("match", selector())
85 .add("action", treatment())
86 .add("ingressPoints", ingressPoints())
87 .add("egressPoint", egressPoint())
Brian O'Connorb876bf12014-10-02 14:59:37 -070088 .toString();
89 }
90}