blob: fae1fe3e9c82207e62d5550d435598ca8c30811e [file] [log] [blame]
alshabib7b2748f2014-09-16 20:21:11 -07001package org.onlab.onos.net.flow;
2
Ayaka Koshibed4e53e12014-09-18 14:24:55 -07003import static com.google.common.base.MoreObjects.toStringHelper;
4
alshabib6b5cfec2014-09-18 17:42:18 -07005import java.util.Objects;
6
alshabib7b2748f2014-09-16 20:21:11 -07007import org.onlab.onos.net.DeviceId;
8
9public class DefaultFlowRule implements FlowRule {
10
Ayaka Koshibed4e53e12014-09-18 14:24:55 -070011 private final DeviceId deviceId;
12 private final int priority;
alshabib7b2748f2014-09-16 20:21:11 -070013 private final TrafficSelector selector;
14 private final TrafficTreatment treatment;
Ayaka Koshibed4e53e12014-09-18 14:24:55 -070015 private final FlowId id;
16 private final long created;
alshabib6b5cfec2014-09-18 17:42:18 -070017 private final long life;
18 private final long idle;
19 private final long packets;
20 private final long bytes;
Ayaka Koshibed4e53e12014-09-18 14:24:55 -070021
alshabib7b2748f2014-09-16 20:21:11 -070022
23 public DefaultFlowRule(DeviceId deviceId,
Ayaka Koshibed4e53e12014-09-18 14:24:55 -070024 TrafficSelector selector, TrafficTreatment treatment, int priority) {
alshabib7b2748f2014-09-16 20:21:11 -070025 this.deviceId = deviceId;
Ayaka Koshibed4e53e12014-09-18 14:24:55 -070026 this.priority = priority;
27 this.selector = selector;
28 this.treatment = treatment;
alshabib97044902014-09-18 14:52:16 -070029 this.life = 0;
30 this.idle = 0;
31 this.packets = 0;
32 this.bytes = 0;
Ayaka Koshibed4e53e12014-09-18 14:24:55 -070033 this.id = FlowId.valueOf(this.hashCode());
34 this.created = System.currentTimeMillis();
35 }
36
alshabib97044902014-09-18 14:52:16 -070037 public DefaultFlowRule(DeviceId deviceId, TrafficSelector selector,
38 TrafficTreatment treatment, int priority,
alshabib6b5cfec2014-09-18 17:42:18 -070039 long life, long idle, long packets, long bytes, Integer flowId) {
40 this.deviceId = deviceId;
41 this.priority = priority;
42 this.selector = selector;
43 this.treatment = treatment;
44
45 this.id = FlowId.valueOf(flowId);
46
alshabib97044902014-09-18 14:52:16 -070047 this.life = life;
48 this.idle = idle;
49 this.packets = packets;
50 this.bytes = bytes;
alshabib6b5cfec2014-09-18 17:42:18 -070051 this.created = System.currentTimeMillis();
alshabib97044902014-09-18 14:52:16 -070052 }
53
54
Ayaka Koshibed4e53e12014-09-18 14:24:55 -070055 @Override
56 public FlowId id() {
57 return id;
alshabib7b2748f2014-09-16 20:21:11 -070058 }
59
60 @Override
61 public int priority() {
Ayaka Koshibed4e53e12014-09-18 14:24:55 -070062 return priority;
alshabib7b2748f2014-09-16 20:21:11 -070063 }
64
65 @Override
66 public DeviceId deviceId() {
67 return deviceId;
68 }
69
70 @Override
71 public TrafficSelector selector() {
72 return selector;
73 }
74
75 @Override
76 public TrafficTreatment treatment() {
77 return treatment;
78 }
79
Ayaka Koshibe08eabaa2014-09-17 14:59:25 -070080 @Override
Ayaka Koshibed4e53e12014-09-18 14:24:55 -070081 public long lifeMillis() {
alshabib97044902014-09-18 14:52:16 -070082 return life;
Ayaka Koshibed4e53e12014-09-18 14:24:55 -070083 }
84
85 @Override
86 public long idleMillis() {
alshabib97044902014-09-18 14:52:16 -070087 return idle;
Ayaka Koshibed4e53e12014-09-18 14:24:55 -070088 }
89
90 @Override
91 public long packets() {
alshabib97044902014-09-18 14:52:16 -070092 return packets;
Ayaka Koshibed4e53e12014-09-18 14:24:55 -070093 }
94
95 @Override
96 public long bytes() {
alshabib97044902014-09-18 14:52:16 -070097 return bytes;
Ayaka Koshibed4e53e12014-09-18 14:24:55 -070098 }
99
100 @Override
101 /*
102 * The priority and statistics can change on a given treatment and selector
103 *
104 * (non-Javadoc)
105 * @see java.lang.Object#equals(java.lang.Object)
106 */
Ayaka Koshibe08eabaa2014-09-17 14:59:25 -0700107 public int hashCode() {
alshabib6b5cfec2014-09-18 17:42:18 -0700108 return Objects.hash(deviceId, selector, treatment);
Ayaka Koshibe08eabaa2014-09-17 14:59:25 -0700109 }
110
111 @Override
112 /*
113 * The priority and statistics can change on a given treatment and selector
114 *
115 * (non-Javadoc)
116 * @see java.lang.Object#equals(java.lang.Object)
117 */
118 public boolean equals(Object obj) {
119 if (obj instanceof FlowRule) {
120 DefaultFlowRule that = (DefaultFlowRule) obj;
121 if (!this.deviceId().equals(that.deviceId())) {
122 return false;
123 }
124 if (!this.treatment().equals(that.treatment())) {
125 return false;
126 }
127 if (!this.selector().equals(that.selector())) {
128 return false;
129 }
Ayaka Koshibeb55524f2014-09-18 09:59:24 -0700130 return true;
Ayaka Koshibe08eabaa2014-09-17 14:59:25 -0700131 }
Ayaka Koshibeb55524f2014-09-18 09:59:24 -0700132 return false;
Ayaka Koshibe08eabaa2014-09-17 14:59:25 -0700133 }
134
Ayaka Koshibed4e53e12014-09-18 14:24:55 -0700135 @Override
136 public String toString() {
137 return toStringHelper(this)
138 .add("id", id)
139 .add("deviceId", deviceId)
140 .add("priority", priority)
141 .add("selector", selector)
142 .add("treatment", treatment)
143 .add("created", created)
144 .toString();
145 }
Ayaka Koshibe08eabaa2014-09-17 14:59:25 -0700146
alshabib6b5cfec2014-09-18 17:42:18 -0700147
alshabib7b2748f2014-09-16 20:21:11 -0700148}