blob: 9ee84f8d3d648fb70d9870cd5f01a4045f0c1159 [file] [log] [blame]
Boyoung Jeong9e8faec2018-06-17 21:19:23 +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 com.google.common.base.MoreObjects;
19import org.onlab.packet.IpPrefix;
20import org.onlab.packet.TpPort;
21import org.onosproject.openstacktelemetry.api.StatsFlowRule;
22
Jian Liae3fcff2018-07-30 11:55:44 +090023import java.util.Objects;
24
Boyoung Jeong9e8faec2018-06-17 21:19:23 +090025import static com.google.common.base.Preconditions.checkArgument;
26
Jian Li69600e02018-12-24 13:21:18 +090027/**
28 * Implementation of StatsFlowRule.
29 */
Boyoung Jeong9e8faec2018-06-17 21:19:23 +090030public final class DefaultStatsFlowRule implements StatsFlowRule {
31 private final IpPrefix srcIpPrefix;
32 private final IpPrefix dstIpPrefix;
33 private final byte ipProtocol;
Boyoung Jeong4d1c9d12018-07-20 17:09:20 +090034 private final TpPort srcTpPort;
Boyoung Jeong9e8faec2018-06-17 21:19:23 +090035 private final TpPort dstTpPort;
36
37 private static final String NOT_NULL_MSG = "Element % cannot be null";
38
39 protected DefaultStatsFlowRule(IpPrefix srcIpPrefix,
40 IpPrefix dstIpPrefix,
41 byte ipProtoco,
42 TpPort srcTpPort,
43 TpPort dstTpPort) {
44 this.srcIpPrefix = srcIpPrefix;
45 this.dstIpPrefix = dstIpPrefix;
46 this.ipProtocol = ipProtoco;
47 this.srcTpPort = srcTpPort;
48 this.dstTpPort = dstTpPort;
49 }
50
51 @Override
52 public IpPrefix srcIpPrefix() {
53 return srcIpPrefix;
54 }
55
56 @Override
57 public IpPrefix dstIpPrefix() {
58 return dstIpPrefix;
59 }
60
61 @Override
62 public byte ipProtocol() {
63 return ipProtocol;
64 }
65
66 @Override
67 public TpPort srcTpPort() {
68 return srcTpPort;
69 }
70
71 @Override
72 public TpPort dstTpPort() {
73 return dstTpPort;
74 }
75
76 @Override
77 public String toString() {
78 return MoreObjects.toStringHelper(getClass())
79 .add("srcIpPrefix", srcIpPrefix)
80 .add("dstIpPrefix", dstIpPrefix)
81 .add("ipProtocol", ipProtocol)
82 .add("srcTpPort", srcTpPort)
83 .add("dstTpPort", dstTpPort)
84 .toString();
85 }
86
Jian Liae3fcff2018-07-30 11:55:44 +090087 @Override
88 public boolean equals(Object obj) {
89 if (this == obj) {
90 return true;
91 }
92
93 if (obj instanceof DefaultStatsFlowRule) {
94 final DefaultStatsFlowRule other = (DefaultStatsFlowRule) obj;
95 return Objects.equals(this.srcIpPrefix, other.srcIpPrefix) &&
96 Objects.equals(this.dstIpPrefix, other.dstIpPrefix) &&
97 Objects.equals(this.srcTpPort, other.srcTpPort) &&
98 Objects.equals(this.dstTpPort, other.dstTpPort) &&
99 Objects.equals(this.ipProtocol, other.ipProtocol);
100 }
101 return false;
102 }
103
104 @Override
105 public int hashCode() {
106 return Objects.hash(srcIpPrefix, dstIpPrefix, srcTpPort, dstTpPort, ipProtocol);
107 }
108
109 /**
110 * Obtains a default stats flow rule builder object.
111 *
112 * @return flow rule builder object
113 */
Boyoung Jeong9e8faec2018-06-17 21:19:23 +0900114 public static Builder builder() {
115 return new Builder();
116 }
117
Jian Liae3fcff2018-07-30 11:55:44 +0900118 /**
119 * Obtains the builder object existing flow rule.
120 *
121 * @param flowRule flow rule
122 * @return builder object
123 */
Boyoung Jeong9e8faec2018-06-17 21:19:23 +0900124 public static Builder from(StatsFlowRule flowRule) {
125 return new Builder()
126 .srcIpPrefix(flowRule.srcIpPrefix())
127 .dstIpPrefix(flowRule.dstIpPrefix())
128 .ipProtocol(flowRule.ipProtocol())
129 .srcTpPort(flowRule.srcTpPort())
130 .dstTpPort(flowRule.dstTpPort());
131 }
132
133 /**
134 * A builder class for openstack flow rule.
135 */
136 public static final class Builder implements StatsFlowRule.Builder {
137 private IpPrefix srcIpPrefix;
138 private IpPrefix dstIpPrefix;
139 private byte ipProtocol;
140 private TpPort srcTpPort;
141 private TpPort dstTpPort;
142
143 // private constructor not intended to use from external
144 private Builder() {
145 }
146
147 @Override
148 public DefaultStatsFlowRule build() {
149 checkArgument(srcIpPrefix != null, NOT_NULL_MSG, "Source IP Prefix");
150 checkArgument(dstIpPrefix != null, NOT_NULL_MSG, "Destination IP Prefix");
151
152 return new DefaultStatsFlowRule(srcIpPrefix,
153 dstIpPrefix,
154 ipProtocol,
155 srcTpPort,
156 dstTpPort);
157 }
158
159 @Override
160 public Builder srcIpPrefix(IpPrefix srcIpPrefix) {
161 this.srcIpPrefix = srcIpPrefix;
162 return this;
163 }
164
165 @Override
166 public Builder dstIpPrefix(IpPrefix dstIpPrefix) {
167 this.dstIpPrefix = dstIpPrefix;
168 return this;
169 }
170
171 @Override
172 public Builder ipProtocol(byte ipProtocol) {
173 this.ipProtocol = ipProtocol;
174 return this;
175 }
176
177 @Override
178 public Builder srcTpPort(TpPort srcTpPort) {
179 this.srcTpPort = srcTpPort;
180 return this;
181 }
182
183 @Override
184 public Builder dstTpPort(TpPort dstTpPort) {
185 this.dstTpPort = dstTpPort;
186 return this;
187 }
188 }
189}