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/flow/DefaultTrafficSelector.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/flow/DefaultTrafficSelector.java')
-rw-r--r-- | framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficSelector.java | 365 |
1 files changed, 365 insertions, 0 deletions
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficSelector.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficSelector.java new file mode 100644 index 00000000..f88c6bc3 --- /dev/null +++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficSelector.java @@ -0,0 +1,365 @@ +/* + * Copyright 2014-2015 Open Networking Laboratory + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onosproject.net.flow; + +import com.google.common.base.MoreObjects; +import com.google.common.collect.ImmutableSet; +import org.onlab.packet.Ip6Address; +import org.onlab.packet.IpPrefix; +import org.onlab.packet.MacAddress; +import org.onlab.packet.MplsLabel; +import org.onlab.packet.TpPort; +import org.onlab.packet.VlanId; +import org.onosproject.net.IndexedLambda; +import org.onosproject.net.PortNumber; +import org.onosproject.net.flow.criteria.Criteria; +import org.onosproject.net.flow.criteria.Criterion; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.Set; + +/** + * Default traffic selector implementation. + */ +public final class DefaultTrafficSelector implements TrafficSelector { + + private final Set<Criterion> criteria; + + private static final TrafficSelector EMPTY + = new DefaultTrafficSelector(Collections.emptySet()); + + /** + * Creates a new traffic selector with the specified criteria. + * + * @param criteria criteria + */ + private DefaultTrafficSelector(Set<Criterion> criteria) { + this.criteria = ImmutableSet.copyOf(criteria); + } + + @Override + public Set<Criterion> criteria() { + return criteria; + } + + @Override + public Criterion getCriterion(Criterion.Type type) { + for (Criterion c : criteria) { + if (c.type() == type) { + return c; + } + } + return null; + } + + @Override + public int hashCode() { + return criteria.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj instanceof DefaultTrafficSelector) { + DefaultTrafficSelector that = (DefaultTrafficSelector) obj; + return Objects.equals(criteria, that.criteria); + + } + return false; + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(getClass()) + .add("criteria", criteria) + .toString(); + } + + /** + * Returns a new traffic selector builder. + * + * @return traffic selector builder + */ + public static TrafficSelector.Builder builder() { + return new Builder(); + } + + /** + * Returns an empty traffic selector. + * + * @return empty traffic selector + */ + public static TrafficSelector emptySelector() { + return EMPTY; + } + + /** + * Returns a new traffic selector builder primed to produce entities + * patterned after the supplied selector. + * + * @param selector base selector + * @return traffic selector builder + */ + public static TrafficSelector.Builder builder(TrafficSelector selector) { + return new Builder(selector); + } + + /** + * Builder of traffic selector entities. + */ + public static final class Builder implements TrafficSelector.Builder { + + private final Map<Criterion.Type, Criterion> selector = new HashMap<>(); + + private Builder() { + } + + private Builder(TrafficSelector selector) { + for (Criterion c : selector.criteria()) { + add(c); + } + } + + @Override + public Builder add(Criterion criterion) { + selector.put(criterion.type(), criterion); + return this; + } + + @Override + public Builder matchInPort(PortNumber port) { + return add(Criteria.matchInPort(port)); + } + + @Override + public Builder matchInPhyPort(PortNumber port) { + return add(Criteria.matchInPhyPort(port)); + } + + @Override + public Builder matchMetadata(long metadata) { + return add(Criteria.matchMetadata(metadata)); + } + + @Override + public Builder matchEthDst(MacAddress addr) { + return add(Criteria.matchEthDst(addr)); + } + + @Override + public Builder matchEthSrc(MacAddress addr) { + return add(Criteria.matchEthSrc(addr)); + } + + @Override + public Builder matchEthType(short ethType) { + return add(Criteria.matchEthType(ethType)); + } + + @Override + public Builder matchVlanId(VlanId vlanId) { + return add(Criteria.matchVlanId(vlanId)); + } + + @Override + public Builder matchVlanPcp(byte vlanPcp) { + return add(Criteria.matchVlanPcp(vlanPcp)); + } + + @Override + public Builder matchIPDscp(byte ipDscp) { + return add(Criteria.matchIPDscp(ipDscp)); + } + + @Override + public Builder matchIPEcn(byte ipEcn) { + return add(Criteria.matchIPEcn(ipEcn)); + } + + @Override + public Builder matchIPProtocol(byte proto) { + return add(Criteria.matchIPProtocol(proto)); + } + + @Override + public Builder matchIPSrc(IpPrefix ip) { + return add(Criteria.matchIPSrc(ip)); + } + + @Override + public Builder matchIPDst(IpPrefix ip) { + return add(Criteria.matchIPDst(ip)); + } + + @Deprecated + @Override + public Builder matchTcpSrc(short tcpPort) { + return matchTcpSrc(TpPort.tpPort(tcpPort)); + } + + @Override + public Builder matchTcpSrc(TpPort tcpPort) { + return add(Criteria.matchTcpSrc(tcpPort)); + } + + @Deprecated + @Override + public Builder matchTcpDst(short tcpPort) { + return matchTcpDst(TpPort.tpPort(tcpPort)); + } + + @Override + public Builder matchTcpDst(TpPort tcpPort) { + return add(Criteria.matchTcpDst(tcpPort)); + } + + @Deprecated + @Override + public Builder matchUdpSrc(short udpPort) { + return matchUdpSrc(TpPort.tpPort(udpPort)); + } + + @Override + public Builder matchUdpSrc(TpPort udpPort) { + return add(Criteria.matchUdpSrc(udpPort)); + } + + @Deprecated + @Override + public Builder matchUdpDst(short udpPort) { + return matchUdpDst(TpPort.tpPort(udpPort)); + } + + @Override + public Builder matchUdpDst(TpPort udpPort) { + return add(Criteria.matchUdpDst(udpPort)); + } + + @Deprecated + @Override + public Builder matchSctpSrc(short sctpPort) { + return matchSctpSrc(TpPort.tpPort(sctpPort)); + } + + @Override + public Builder matchSctpSrc(TpPort sctpPort) { + return add(Criteria.matchSctpSrc(sctpPort)); + } + + @Deprecated + @Override + public Builder matchSctpDst(short sctpPort) { + return matchSctpDst(TpPort.tpPort(sctpPort)); + } + + @Override + public Builder matchSctpDst(TpPort sctpPort) { + return add(Criteria.matchSctpDst(sctpPort)); + } + + @Override + public Builder matchIcmpType(byte icmpType) { + return add(Criteria.matchIcmpType(icmpType)); + } + + @Override + public Builder matchIcmpCode(byte icmpCode) { + return add(Criteria.matchIcmpCode(icmpCode)); + } + + @Override + public Builder matchIPv6Src(IpPrefix ip) { + return add(Criteria.matchIPv6Src(ip)); + } + + @Override + public Builder matchIPv6Dst(IpPrefix ip) { + return add(Criteria.matchIPv6Dst(ip)); + } + + @Override + public Builder matchIPv6FlowLabel(int flowLabel) { + return add(Criteria.matchIPv6FlowLabel(flowLabel)); + } + + @Override + public Builder matchIcmpv6Type(byte icmpv6Type) { + return add(Criteria.matchIcmpv6Type(icmpv6Type)); + } + + @Override + public Builder matchIcmpv6Code(byte icmpv6Code) { + return add(Criteria.matchIcmpv6Code(icmpv6Code)); + } + + @Override + public Builder matchIPv6NDTargetAddress(Ip6Address targetAddress) { + return add(Criteria.matchIPv6NDTargetAddress(targetAddress)); + } + + @Override + public Builder matchIPv6NDSourceLinkLayerAddress(MacAddress mac) { + return add(Criteria.matchIPv6NDSourceLinkLayerAddress(mac)); + } + + @Override + public Builder matchIPv6NDTargetLinkLayerAddress(MacAddress mac) { + return add(Criteria.matchIPv6NDTargetLinkLayerAddress(mac)); + } + + @Override + public Builder matchMplsLabel(MplsLabel mplsLabel) { + return add(Criteria.matchMplsLabel(mplsLabel)); + } + + @Override + public Builder matchMplsBos(boolean mplsBos) { + return add(Criteria.matchMplsLabel(mplsBos)); + } + + @Override + public TrafficSelector.Builder matchTunnelId(long tunnelId) { + return add(Criteria.matchTunnelId(tunnelId)); + } + + @Override + public Builder matchIPv6ExthdrFlags(short exthdrFlags) { + return add(Criteria.matchIPv6ExthdrFlags(exthdrFlags)); + } + + @Deprecated + @Override + public Builder matchLambda(short lambda) { + return add(Criteria.matchLambda(new IndexedLambda(lambda))); + } + + @Deprecated + @Override + public Builder matchOpticalSignalType(short signalType) { + return add(Criteria.matchOpticalSignalType(signalType)); + } + + @Override + public TrafficSelector build() { + return new DefaultTrafficSelector(ImmutableSet.copyOf(selector.values())); + } + } +} |