blob: d792c7e8984efc15882597f10ffbafd5449abd27 [file] [log] [blame]
alshabib7b2748f2014-09-16 20:21:11 -07001package org.onlab.onos.net.flow;
2
3import static org.slf4j.LoggerFactory.getLogger;
4
5import java.util.Collections;
alshabibba5ac482014-10-02 17:15:20 -07006import java.util.HashSet;
7import java.util.Objects;
8import java.util.Set;
alshabib7b2748f2014-09-16 20:21:11 -07009
alshabib010c31d2014-09-26 10:01:12 -070010import org.onlab.onos.net.PortNumber;
11import org.onlab.onos.net.flow.criteria.Criteria;
alshabib7b2748f2014-09-16 20:21:11 -070012import org.onlab.onos.net.flow.criteria.Criterion;
alshabib010c31d2014-09-26 10:01:12 -070013import org.onlab.packet.IpPrefix;
14import org.onlab.packet.MacAddress;
15import org.onlab.packet.VlanId;
alshabib7b2748f2014-09-16 20:21:11 -070016import org.slf4j.Logger;
17
18public final class DefaultTrafficSelector implements TrafficSelector {
19
alshabibba5ac482014-10-02 17:15:20 -070020 private final Set<Criterion> selector;
alshabib7b2748f2014-09-16 20:21:11 -070021
alshabibba5ac482014-10-02 17:15:20 -070022 private DefaultTrafficSelector(Set<Criterion> selector) {
23 this.selector = Collections.unmodifiableSet(selector);
alshabib7b2748f2014-09-16 20:21:11 -070024 }
25
26 @Override
alshabibba5ac482014-10-02 17:15:20 -070027 public Set<Criterion> criteria() {
alshabib7b2748f2014-09-16 20:21:11 -070028 return selector;
29 }
30
alshabibba5ac482014-10-02 17:15:20 -070031 @Override
32 public int hashCode() {
33 return Objects.hash(selector);
34 }
35
36 @Override
37 public boolean equals(Object obj) {
38 if (this == obj) {
39 return true;
40 }
41 if (obj instanceof DefaultTrafficSelector) {
42 DefaultTrafficSelector that = (DefaultTrafficSelector) obj;
43 return Objects.equals(selector, that.selector);
44
45 }
46 return false;
47 }
48
49
50
alshabib7b2748f2014-09-16 20:21:11 -070051 public static class Builder implements TrafficSelector.Builder {
52
53 private final Logger log = getLogger(getClass());
54
alshabibba5ac482014-10-02 17:15:20 -070055 private final Set<Criterion> selector = new HashSet<>();
alshabib7b2748f2014-09-16 20:21:11 -070056
57 @Override
alshabib010c31d2014-09-26 10:01:12 -070058 public Builder add(Criterion criterion) {
alshabib7b2748f2014-09-16 20:21:11 -070059 selector.add(criterion);
60 return this;
61 }
62
alshabibba5ac482014-10-02 17:15:20 -070063 @Override
alshabib010c31d2014-09-26 10:01:12 -070064 public Builder matchInport(PortNumber port) {
65 return add(Criteria.matchInPort(port));
66 }
67
alshabibba5ac482014-10-02 17:15:20 -070068 @Override
alshabib010c31d2014-09-26 10:01:12 -070069 public Builder matchEthSrc(MacAddress addr) {
70 return add(Criteria.matchEthSrc(addr));
71 }
72
alshabibba5ac482014-10-02 17:15:20 -070073 @Override
alshabib010c31d2014-09-26 10:01:12 -070074 public Builder matchEthDst(MacAddress addr) {
75 return add(Criteria.matchEthDst(addr));
76 }
77
alshabibba5ac482014-10-02 17:15:20 -070078 @Override
alshabib010c31d2014-09-26 10:01:12 -070079 public Builder matchEthType(short ethType) {
80 return add(Criteria.matchEthType(ethType));
81 }
82
alshabibba5ac482014-10-02 17:15:20 -070083 @Override
alshabib010c31d2014-09-26 10:01:12 -070084 public Builder matchVlanId(VlanId vlanId) {
85 return add(Criteria.matchVlanId(vlanId));
86 }
87
alshabibba5ac482014-10-02 17:15:20 -070088 @Override
alshabib010c31d2014-09-26 10:01:12 -070089 public Builder matchVlanPcp(Byte vlanPcp) {
90 return add(Criteria.matchVlanPcp(vlanPcp));
91 }
92
alshabibba5ac482014-10-02 17:15:20 -070093 @Override
alshabib010c31d2014-09-26 10:01:12 -070094 public Builder matchIPProtocol(Byte proto) {
95 return add(Criteria.matchIPProtocol(proto));
96 }
97
alshabibba5ac482014-10-02 17:15:20 -070098 @Override
alshabib010c31d2014-09-26 10:01:12 -070099 public Builder matchIPSrc(IpPrefix ip) {
100 return add(Criteria.matchIPSrc(ip));
101 }
102
alshabibba5ac482014-10-02 17:15:20 -0700103 @Override
alshabib010c31d2014-09-26 10:01:12 -0700104 public Builder matchIPDst(IpPrefix ip) {
105 return add(Criteria.matchIPDst(ip));
106 }
107
alshabib7b2748f2014-09-16 20:21:11 -0700108 @Override
109 public TrafficSelector build() {
110 return new DefaultTrafficSelector(selector);
111 }
112
113 }
114
115}