blob: b7a954520d7d0465f47d31c74d2fb6bc1459286b [file] [log] [blame]
Jian Li0a5d4d22018-06-08 14:06:56 +09001/*
2 * Copyright 2018-present Open Networking Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.openstacktelemetry.impl;
17
18import org.onlab.packet.IpPrefix;
19import org.onlab.packet.MacAddress;
20import org.onlab.packet.VlanId;
21import org.onosproject.net.DeviceId;
22import org.onosproject.net.PortNumber;
23import org.onosproject.openstacktelemetry.api.FlowInfo;
24import org.onosproject.openstacktelemetry.api.StatsInfo;
25
26import java.util.Objects;
27
28import static com.google.common.base.MoreObjects.toStringHelper;
29import static com.google.common.base.Preconditions.checkNotNull;
30
31/**
32 * Implementation class of FlowInfo.
33 */
34public final class DefaultFlowInfo implements FlowInfo {
35
36 private final byte flowType;
37 private final DeviceId deviceId;
38 private final int inputInterfaceId;
39 private final int outputInterfaceId;
40 private final VlanId vlanId;
41 private final short vxlanId;
42 private final IpPrefix srcIp;
43 private final IpPrefix dstIp;
44 private final PortNumber srcPort;
45 private final PortNumber dstPort;
46 private final byte protocol;
47 private final MacAddress srcMac;
48 private final MacAddress dstMac;
49 private final StatsInfo statsInfo;
50
51 private DefaultFlowInfo(byte flowType, DeviceId deviceId,
52 int inputInterfaceId, int outputInterfaceId,
53 VlanId vlanId, short vxlanId, IpPrefix srcIp,
54 IpPrefix dstIp, PortNumber srcPort, PortNumber dstPort,
55 byte protocol, MacAddress srcMac, MacAddress dstMac,
56 StatsInfo statsInfo) {
57 this.flowType = flowType;
58 this.deviceId = deviceId;
59 this.inputInterfaceId = inputInterfaceId;
60 this.outputInterfaceId = outputInterfaceId;
61 this.vlanId = vlanId;
62 this.vxlanId = vxlanId;
63 this.srcIp = srcIp;
64 this.dstIp = dstIp;
65 this.srcPort = srcPort;
66 this.dstPort = dstPort;
67 this.protocol = protocol;
68 this.srcMac = srcMac;
69 this.dstMac = dstMac;
70 this.statsInfo = statsInfo;
71 }
72
73 @Override
74 public byte flowType() {
75 return flowType;
76 }
77
78 @Override
79 public DeviceId deviceId() {
80 return deviceId;
81 }
82
83 @Override
84 public int inputInterfaceId() {
85 return inputInterfaceId;
86 }
87
88 @Override
89 public int outputInterfaceId() {
90 return outputInterfaceId;
91 }
92
93 @Override
94 public VlanId vlanId() {
95 return vlanId;
96 }
97
98 @Override
99 public short vxlanId() {
100 return vxlanId;
101 }
102
103 @Override
104 public IpPrefix srcIp() {
105 return srcIp;
106 }
107
108 @Override
109 public IpPrefix dstIp() {
110 return dstIp;
111 }
112
113 @Override
114 public PortNumber srcPort() {
115 return srcPort;
116 }
117
118 @Override
119 public PortNumber dstPort() {
120 return dstPort;
121 }
122
123 @Override
124 public byte protocol() {
125 return protocol;
126 }
127
128 @Override
129 public MacAddress srcMac() {
130 return srcMac;
131 }
132
133 @Override
134 public MacAddress dstMac() {
135 return dstMac;
136 }
137
138 @Override
139 public StatsInfo statsInfo() {
140 return statsInfo;
141 }
142
143 @Override
144 public boolean equals(Object obj) {
145 if (this == obj) {
146 return true;
147 }
148
149 if (obj instanceof DefaultFlowInfo) {
150 final DefaultFlowInfo other = (DefaultFlowInfo) obj;
151 return Objects.equals(this.flowType, other.flowType) &&
152 Objects.equals(this.deviceId, other.deviceId) &&
153 Objects.equals(this.inputInterfaceId, other.inputInterfaceId) &&
154 Objects.equals(this.outputInterfaceId, other.outputInterfaceId) &&
155 Objects.equals(this.vlanId, other.vlanId) &&
156 Objects.equals(this.vxlanId, other.vxlanId) &&
157 Objects.equals(this.srcIp, other.srcIp) &&
158 Objects.equals(this.dstIp, other.dstIp) &&
159 Objects.equals(this.srcPort, other.srcPort) &&
160 Objects.equals(this.dstPort, other.dstPort) &&
161 Objects.equals(this.protocol, other.protocol) &&
162 Objects.equals(this.srcMac, other.srcMac) &&
163 Objects.equals(this.dstMac, other.dstMac) &&
164 Objects.equals(this.statsInfo, other.statsInfo);
165 }
166 return false;
167 }
168
169 @Override
170 public int hashCode() {
171 return Objects.hash(flowType, deviceId, inputInterfaceId,
172 outputInterfaceId, vlanId, vxlanId, srcIp, dstIp, srcPort, dstPort,
173 protocol, srcMac, dstMac, statsInfo);
174 }
175
176 @Override
177 public String toString() {
178 return toStringHelper(this)
179 .add("flowType", flowType)
180 .add("deviceId", deviceId)
181 .add("inputInterfaceId", inputInterfaceId)
182 .add("outputInterfaceId", outputInterfaceId)
183 .add("vlanId", vlanId)
184 .add("vxlanId", vxlanId)
185 .add("srcIp", srcIp)
186 .add("dstIp", dstIp)
187 .add("srcPort", srcPort)
188 .add("dstPort", dstPort)
189 .add("protocol", protocol)
190 .add("srcMac", srcMac)
191 .add("dstMac", dstMac)
192 .add("statsInfo", statsInfo)
193 .toString();
194 }
195
196 /**
197 * Builder class of DefaultFlowInfo.
198 */
199 public static final class DefaultBuilder implements FlowInfo.Builder {
200
201 private byte flowType;
202 private DeviceId deviceId;
203 private int inputInterfaceId;
204 private int outputInterfaceId;
205 private VlanId vlanId;
206 private short vxlanId;
207 private IpPrefix srcIp;
208 private IpPrefix dstIp;
209 private PortNumber srcPort;
210 private PortNumber dstPort;
211 private byte protocol;
212 private MacAddress srcMac;
213 private MacAddress dstMac;
214 private StatsInfo statsInfo;
215
216 @Override
217 public Builder withFlowType(byte flowType) {
218 this.flowType = flowType;
219 return this;
220 }
221
222 @Override
223 public Builder withDeviceId(DeviceId deviceId) {
224 this.deviceId = deviceId;
225 return this;
226 }
227
228 @Override
229 public Builder withInputInterfaceId(int inputInterfaceId) {
230 this.inputInterfaceId = inputInterfaceId;
231 return this;
232 }
233
234 @Override
235 public Builder withOutputInterfaceId(int outputInterfaceId) {
236 this.outputInterfaceId = outputInterfaceId;
237 return this;
238 }
239
240 @Override
241 public Builder withVlanId(VlanId vlanId) {
242 this.vlanId = vlanId;
243 return this;
244 }
245
246 @Override
247 public Builder withVxlanId(short vxlanId) {
248 this.vxlanId = vxlanId;
249 return this;
250 }
251
252 @Override
253 public Builder withSrcIp(IpPrefix srcIp) {
254 this.srcIp = srcIp;
255 return this;
256 }
257
258 @Override
259 public Builder withDstIp(IpPrefix dstIp) {
260 this.dstIp = dstIp;
261 return this;
262 }
263
264 @Override
265 public Builder withSrcPort(PortNumber srcPort) {
266 this.srcPort = srcPort;
267 return this;
268 }
269
270 @Override
271 public Builder withDstPort(PortNumber dstPort) {
272 this.dstPort = dstPort;
273 return this;
274 }
275
276 @Override
277 public Builder withProtocol(byte protocol) {
278 this.protocol = protocol;
279 return this;
280 }
281
282 @Override
283 public Builder withSrcMac(MacAddress srcMac) {
284 this.srcMac = srcMac;
285 return this;
286 }
287
288 @Override
289 public Builder withDstMac(MacAddress dstMac) {
290 this.dstMac = dstMac;
291 return this;
292 }
293
294 @Override
295 public Builder withStatsInfo(StatsInfo statsInfo) {
296 this.statsInfo = statsInfo;
297 return this;
298 }
299
300 @Override
301 public FlowInfo build() {
302
303 // TODO: need to check the null value for more properties
304 checkNotNull(srcIp, "Source IP address cannot be null");
305 checkNotNull(dstIp, "Destination IP address cannot be null");
306 checkNotNull(statsInfo, "StatsInfo cannot be null");
307
308 return new DefaultFlowInfo(flowType, deviceId, inputInterfaceId,
309 outputInterfaceId, vlanId, vxlanId, srcIp, dstIp, srcPort, dstPort,
310 protocol, srcMac, dstMac, statsInfo);
311 }
312 }
313}