diff options
author | Ashlee Young <ashlee@onosfw.com> | 2015-09-09 22:15:21 -0700 |
---|---|---|
committer | Ashlee Young <ashlee@onosfw.com> | 2015-09-09 22:15:21 -0700 |
commit | 13d05bc8458758ee39cb829098241e89616717ee (patch) | |
tree | 22a4d1ce65f15952f07a3df5af4b462b4697cb3a /framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MplsPathIntent.java | |
parent | 6139282e1e93c2322076de4b91b1c85d0bc4a8b3 (diff) |
ONOS checkin based on commit tag e796610b1f721d02f9b0e213cf6f7790c10ecd60
Change-Id: Ife8810491034fe7becdba75dda20de4267bd15cd
Diffstat (limited to 'framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MplsPathIntent.java')
-rw-r--r-- | framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MplsPathIntent.java | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MplsPathIntent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MplsPathIntent.java new file mode 100644 index 00000000..3c3c45ce --- /dev/null +++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MplsPathIntent.java @@ -0,0 +1,167 @@ +package org.onosproject.net.intent; + +import java.util.List; +import java.util.Optional; + +import com.google.common.annotations.Beta; +import org.onlab.packet.MplsLabel; +import org.onosproject.core.ApplicationId; +import org.onosproject.net.Path; +import org.onosproject.net.flow.TrafficSelector; +import org.onosproject.net.flow.TrafficTreatment; + +import static com.google.common.base.Preconditions.checkNotNull; + + +/** + * Abstraction of explicit MPLS label-switched path. + */ +@Beta +public final class MplsPathIntent extends PathIntent { + + private final Optional<MplsLabel> ingressLabel; + private final Optional<MplsLabel> egressLabel; + + /** + * Creates a new point-to-point intent with the supplied ingress/egress + * ports and using the specified explicit path. + * + * @param appId application identifier + * @param selector traffic selector + * @param treatment treatment + * @param path traversed links + * @param ingressLabel MPLS egress label + * @param egressLabel MPLS ingress label + * @param constraints optional list of constraints + * @param priority priority to use for flows generated by this intent + * @throws NullPointerException {@code path} is null + */ + private MplsPathIntent(ApplicationId appId, TrafficSelector selector, + TrafficTreatment treatment, Path path, Optional<MplsLabel> ingressLabel, + Optional<MplsLabel> egressLabel, List<Constraint> constraints, + int priority) { + super(appId, selector, treatment, path, constraints, + priority); + + this.ingressLabel = checkNotNull(ingressLabel); + this.egressLabel = checkNotNull(egressLabel); + } + + /** + * Returns a new host to host intent builder. + * + * @return host to host intent builder + */ + public static Builder builder() { + return new Builder(); + } + + /** + * Builder of a host to host intent. + */ + public static final class Builder extends PathIntent.Builder { + private Optional<MplsLabel> ingressLabel = Optional.empty(); + private Optional<MplsLabel> egressLabel = Optional.empty(); + + private Builder() { + // Hide constructor + } + + @Override + public Builder appId(ApplicationId appId) { + return (Builder) super.appId(appId); + } + + @Override + public Builder key(Key key) { + return (Builder) super.key(key); + } + + @Override + public Builder selector(TrafficSelector selector) { + return (Builder) super.selector(selector); + } + + @Override + public Builder treatment(TrafficTreatment treatment) { + return (Builder) super.treatment(treatment); + } + + @Override + public Builder constraints(List<Constraint> constraints) { + return (Builder) super.constraints(constraints); + } + + @Override + public Builder priority(int priority) { + return (Builder) super.priority(priority); + } + + @Override + public Builder path(Path path) { + return (Builder) super.path(path); + } + + /** + * Sets the ingress label of the intent that will be built. + * + * @param ingressLabel ingress label + * @return this builder + */ + public Builder ingressLabel(Optional<MplsLabel> ingressLabel) { + this.ingressLabel = ingressLabel; + return this; + } + + /** + * Sets the ingress label of the intent that will be built. + * + * @param egressLabel ingress label + * @return this builder + */ + public Builder egressLabel(Optional<MplsLabel> egressLabel) { + this.egressLabel = egressLabel; + return this; + } + + + /** + * Builds a host to host intent from the accumulated parameters. + * + * @return point to point intent + */ + public MplsPathIntent build() { + + return new MplsPathIntent( + appId, + selector, + treatment, + path, + ingressLabel, + egressLabel, + constraints, + priority + ); + } + } + + + /** + * Returns the MPLS label which the ingress traffic should tagged. + * + * @return ingress MPLS label + */ + public Optional<MplsLabel> ingressLabel() { + return ingressLabel; + } + + /** + * Returns the MPLS label which the egress traffic should tagged. + * + * @return egress MPLS label + */ + public Optional<MplsLabel> egressLabel() { + return egressLabel; + } + +} |