blob: 8f68ea570960538297db17371f5a07af02e1be11 [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;
6import java.util.LinkedList;
7import java.util.List;
8
alshabib010c31d2014-09-26 10:01:12 -07009import org.onlab.onos.net.PortNumber;
10import org.onlab.onos.net.flow.criteria.Criteria;
alshabib7b2748f2014-09-16 20:21:11 -070011import org.onlab.onos.net.flow.criteria.Criterion;
alshabib010c31d2014-09-26 10:01:12 -070012import org.onlab.packet.IpPrefix;
13import org.onlab.packet.MacAddress;
14import org.onlab.packet.VlanId;
alshabib7b2748f2014-09-16 20:21:11 -070015import org.slf4j.Logger;
16
17public final class DefaultTrafficSelector implements TrafficSelector {
18
19 private final List<Criterion> selector;
20
21 private DefaultTrafficSelector(List<Criterion> selector) {
22 this.selector = Collections.unmodifiableList(selector);
23 }
24
25 @Override
26 public List<Criterion> criteria() {
27 return selector;
28 }
29
30 public static class Builder implements TrafficSelector.Builder {
31
32 private final Logger log = getLogger(getClass());
33
34 private final List<Criterion> selector = new LinkedList<>();
35
36 @Override
alshabib010c31d2014-09-26 10:01:12 -070037 public Builder add(Criterion criterion) {
alshabib7b2748f2014-09-16 20:21:11 -070038 selector.add(criterion);
39 return this;
40 }
41
alshabib010c31d2014-09-26 10:01:12 -070042 public Builder matchInport(PortNumber port) {
43 return add(Criteria.matchInPort(port));
44 }
45
46 public Builder matchEthSrc(MacAddress addr) {
47 return add(Criteria.matchEthSrc(addr));
48 }
49
50 public Builder matchEthDst(MacAddress addr) {
51 return add(Criteria.matchEthDst(addr));
52 }
53
54 public Builder matchEthType(short ethType) {
55 return add(Criteria.matchEthType(ethType));
56 }
57
58 public Builder matchVlanId(VlanId vlanId) {
59 return add(Criteria.matchVlanId(vlanId));
60 }
61
62 public Builder matchVlanPcp(Byte vlanPcp) {
63 return add(Criteria.matchVlanPcp(vlanPcp));
64 }
65
66 public Builder matchIPProtocol(Byte proto) {
67 return add(Criteria.matchIPProtocol(proto));
68 }
69
70 public Builder matchIPSrc(IpPrefix ip) {
71 return add(Criteria.matchIPSrc(ip));
72 }
73
74 public Builder matchIPDst(IpPrefix ip) {
75 return add(Criteria.matchIPDst(ip));
76 }
77
alshabib7b2748f2014-09-16 20:21:11 -070078 @Override
79 public TrafficSelector build() {
80 return new DefaultTrafficSelector(selector);
81 }
82
83 }
84
85}