blob: ccd927d89a311218d3c71445ddae988b211aab5c [file] [log] [blame]
Jian Licaa03922021-02-26 18:15:20 +09001/*
2 * Copyright 2021-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.kubevirtnetworking.api;
17
Daniel Park5a3e9392021-03-23 08:00:00 +090018import org.onlab.packet.MacAddress;
Jian Licaa03922021-02-26 18:15:20 +090019import org.onosproject.event.AbstractEvent;
20
Jian Lib636f702021-03-03 14:46:50 +090021import java.util.Set;
22
Jian Li073f1ba2021-02-28 03:50:15 +090023import static com.google.common.base.MoreObjects.toStringHelper;
24
Jian Licaa03922021-02-26 18:15:20 +090025/**
26 * Kubevirt router event class.
27 */
28public class KubevirtRouterEvent extends AbstractEvent<KubevirtRouterEvent.Type, KubevirtRouter> {
29
Jian Li073f1ba2021-02-28 03:50:15 +090030 private final KubevirtFloatingIp floatingIp;
31 private final String podName;
Jian Lib636f702021-03-03 14:46:50 +090032 private final Set<String> internal;
33 private final String externalIp;
34 private final String externalNet;
35 private final String peerRouterIp;
Daniel Park2884b232021-03-04 18:58:47 +090036 private final String gateway;
Daniel Park5a3e9392021-03-23 08:00:00 +090037 private final MacAddress peerRouterMac;
Jian Li073f1ba2021-02-28 03:50:15 +090038
Jian Licaa03922021-02-26 18:15:20 +090039 /**
40 * Creates an event of a given type for the specified kubevirt router.
41 *
42 * @param type kubevirt router event type
43 * @param subject kubevirt router
44 */
Jian Li810f58c2021-02-27 01:10:50 +090045 public KubevirtRouterEvent(Type type, KubevirtRouter subject) {
Jian Licaa03922021-02-26 18:15:20 +090046 super(type, subject);
Jian Li073f1ba2021-02-28 03:50:15 +090047 this.floatingIp = null;
48 this.podName = null;
Jian Lib636f702021-03-03 14:46:50 +090049 this.internal = null;
50 this.externalIp = null;
51 this.externalNet = null;
52 this.peerRouterIp = null;
Daniel Park2884b232021-03-04 18:58:47 +090053 this.gateway = null;
Daniel Park5a3e9392021-03-23 08:00:00 +090054 this.peerRouterMac = null;
Jian Li073f1ba2021-02-28 03:50:15 +090055 }
56
57 /**
58 * Creates an event of a given type for the specified kubevirt router.
59 *
60 * @param type kubevirt router event type
61 * @param subject kubevirt router
62 * @param floatingIp kubevirt floating IP
63 */
64 public KubevirtRouterEvent(Type type, KubevirtRouter subject, KubevirtFloatingIp floatingIp) {
65 super(type, subject);
66 this.floatingIp = floatingIp;
67 this.podName = null;
Jian Lib636f702021-03-03 14:46:50 +090068 this.internal = null;
69 this.externalIp = null;
70 this.externalNet = null;
71 this.peerRouterIp = null;
Daniel Park2884b232021-03-04 18:58:47 +090072 this.gateway = null;
Daniel Park5a3e9392021-03-23 08:00:00 +090073 this.peerRouterMac = null;
Jian Li073f1ba2021-02-28 03:50:15 +090074 }
75
76 /**
77 * Creates an event of a given type for the specified kubevirt router.
78 *
79 * @param type kubevirt router event type
80 * @param subject kubevirt router
81 * @param floatingIp kubevirt floating IP
82 * @param podName kubevirt POD name
83 */
84 public KubevirtRouterEvent(Type type, KubevirtRouter subject, KubevirtFloatingIp floatingIp, String podName) {
85 super(type, subject);
86 this.floatingIp = floatingIp;
87 this.podName = podName;
Jian Lib636f702021-03-03 14:46:50 +090088 this.internal = null;
89 this.externalIp = null;
90 this.externalNet = null;
91 this.peerRouterIp = null;
Daniel Park2884b232021-03-04 18:58:47 +090092 this.gateway = null;
Daniel Park5a3e9392021-03-23 08:00:00 +090093 this.peerRouterMac = null;
Jian Lib636f702021-03-03 14:46:50 +090094 }
95
96 /**
97 * Creates an event of a given type for the specified kubevirt router.
98 *
99 * @param type kubevirt router event type
100 * @param subject kubevirt router
101 * @param internal internal networks attached to the router
102 */
103 public KubevirtRouterEvent(Type type, KubevirtRouter subject, Set<String> internal) {
104 super(type, subject);
105 this.internal = internal;
106 this.podName = null;
107 this.floatingIp = null;
108 this.externalIp = null;
109 this.externalNet = null;
110 this.peerRouterIp = null;
Daniel Park2884b232021-03-04 18:58:47 +0900111 this.gateway = null;
Daniel Park5a3e9392021-03-23 08:00:00 +0900112 this.peerRouterMac = null;
Jian Lib636f702021-03-03 14:46:50 +0900113 }
114
115 /**
116 * Creates an event of a given type for the specified kubevirt router.
117 *
118 * @param type kubevirt router event type
119 * @param subject kubevirt router
120 * @param externalIp virtual router's IP address included in external network
121 * @param externalNet external network name
122 * @param peerRouterIp external peer router IP address
Daniel Park5a3e9392021-03-23 08:00:00 +0900123 * @param peerRouterMac external peer router MAC address
Jian Lib636f702021-03-03 14:46:50 +0900124 */
125 public KubevirtRouterEvent(Type type, KubevirtRouter subject,
126 String externalIp, String externalNet,
Daniel Park5a3e9392021-03-23 08:00:00 +0900127 String peerRouterIp, MacAddress peerRouterMac) {
Jian Lib636f702021-03-03 14:46:50 +0900128 super(type, subject);
129 this.internal = null;
130 this.podName = null;
131 this.floatingIp = null;
132 this.externalIp = externalIp;
133 this.externalNet = externalNet;
134 this.peerRouterIp = peerRouterIp;
Daniel Park2884b232021-03-04 18:58:47 +0900135 this.gateway = null;
Daniel Park5a3e9392021-03-23 08:00:00 +0900136 this.peerRouterMac = peerRouterMac;
Daniel Park2884b232021-03-04 18:58:47 +0900137 }
138
139 public KubevirtRouterEvent(Type type, KubevirtRouter subject,
140 String gateway) {
141 super(type, subject);
142 this.gateway = gateway;
143 this.floatingIp = null;
144 this.podName = null;
145 this.internal = null;
146 this.externalIp = null;
147 this.externalNet = null;
148 this.peerRouterIp = null;
Daniel Park5a3e9392021-03-23 08:00:00 +0900149 this.peerRouterMac = null;
Jian Licaa03922021-02-26 18:15:20 +0900150 }
151
152 public enum Type {
153 /**
154 * Signifies that a new kubevirt router is created.
155 */
156 KUBEVIRT_ROUTER_CREATED,
157
158 /**
159 * Signifies that the kubevirt router is updated.
160 */
161 KUBEVIRT_ROUTER_UPDATED,
162
163 /**
164 * Signifies that the kubevirt router is removed.
165 */
166 KUBEVIRT_ROUTER_REMOVED,
Jian Li073f1ba2021-02-28 03:50:15 +0900167
168 /**
Jian Lib636f702021-03-03 14:46:50 +0900169 * Signifies that a new external network is added to the router.
170 */
171 KUBEVIRT_ROUTER_EXTERNAL_NETWORK_ATTACHED,
172
173 /**
174 * Signifies that the existing external network is removed from the router.
175 */
176 KUBEVIRT_ROUTER_EXTERNAL_NETWORK_DETACHED,
177
178 /**
179 * Signifies that a new internal network is added to the router.
180 */
181 KUBEVIRT_ROUTER_INTERNAL_NETWORKS_ATTACHED,
182
183 /**
184 * Signifies that the existing internal network is removed from the router.
185 */
186 KUBEVIRT_ROUTER_INTERNAL_NETWORKS_DETACHED,
187
188 /**
Jian Li073f1ba2021-02-28 03:50:15 +0900189 * Signifies that a new kubevirt floating IP is created.
190 */
191 KUBEVIRT_FLOATING_IP_CREATED,
192
193 /**
194 * Signifies that the kubevirt floating IP is updated.
195 */
196 KUBEVIRT_FLOATING_IP_UPDATED,
197
198 /**
199 * Signifies that the kubevirt floating IP is removed.
200 */
201 KUBEVIRT_FLOATING_IP_REMOVED,
202
203 /**
204 * Signifies that the floating IP is associated to a fixed IP.
205 */
206 KUBEVIRT_FLOATING_IP_ASSOCIATED,
207
208 /**
209 * Signifies that the floating IP disassociated from the fixed IP.
210 */
Daniel Park2884b232021-03-04 18:58:47 +0900211 KUBEVIRT_FLOATING_IP_DISASSOCIATED,
212
213 /**
214 * Signified that the gateway node associated for this router.
215 */
216 KUBEVIRT_GATEWAY_NODE_ATTACHED,
217 /**
218 * Signified that the gateway node disassociated for this router.
219 */
220 KUBEVIRT_GATEWAY_NODE_DETACHED,
221 /**
222 * Signified that the gateway node changed for this router.
223 */
Daniel Park8ad7c3b2021-04-09 15:45:59 +0900224 KUBEVIRT_GATEWAY_NODE_CHANGED,
225 /**
226 * Signified that the snat status disabled for this router.
227 */
228 KUBEVIRT_SNAT_STATUS_DISABLED
Jian Li073f1ba2021-02-28 03:50:15 +0900229 }
230
231 /**
232 * Returns the floating IP of the router event.
233 *
234 * @return kubevirt floating IP; null if the event is not relevant to the floating IP
235 */
236 public KubevirtFloatingIp floatingIp() {
237 return floatingIp;
238 }
239
240 /**
241 * Returns the pod name of the router event.
242 *
243 * @return kubevirt pod name; null if the event is not relevant to the pod name
244 */
245 public String podName() {
246 return podName;
247 }
248
Jian Lida7ec152021-03-05 12:21:50 +0900249 /**
250 * Returns the internal of the router event.
251 *
252 * @return kubevirt internal network set, null if the event is not relevant to the internal
253 */
254 public Set<String> internal() {
255 return internal;
256 }
257
258 /**
259 * Returns the external IP address of the router event.
260 *
261 * @return external IP address, null if the event is not relevant to the external
262 */
263 public String externalIp() {
264 return externalIp;
265 }
266
267 /**
268 * Returns the external network of the router event.
269 *
270 * @return external network, null if the event is not relevant ot the external
271 */
272 public String externalNet() {
273 return externalNet;
274 }
275
Daniel Park2884b232021-03-04 18:58:47 +0900276 /**
277 * Returns the gateway of the router event.
278 *
279 * @return gateway if exists, null otherwise
280 */
281 public String gateway() {
282 return gateway;
283 }
284
Daniel Park5a3e9392021-03-23 08:00:00 +0900285 /**
286 * Returns the external peer router IP address.
287 *
288 * @return external peer router IP if exists, null otherwise
289 */
290 public String externalPeerRouterIp() {
291 return peerRouterIp;
292 }
293 /**
294 * Returns the external peer router MAC address.
295 *
296 * @return external peer router MAC if exists, null otherwise
297 */
298 public MacAddress peerRouterMac() {
299 return peerRouterMac;
300 }
301
Jian Li073f1ba2021-02-28 03:50:15 +0900302 @Override
303 public String toString() {
304 if (floatingIp == null) {
305 return super.toString();
306 }
307 return toStringHelper(this)
308 .add("type", type())
309 .add("router", subject())
310 .add("floatingIp", floatingIp)
311 .add("podName", podName)
Jian Lib636f702021-03-03 14:46:50 +0900312 .add("internal", internal)
313 .add("externalIp", externalIp)
314 .add("externalNet", externalNet)
315 .add("peerRouterIp", peerRouterIp)
Daniel Park2884b232021-03-04 18:58:47 +0900316 .add("gatewayNodeHostName", gateway)
Jian Li073f1ba2021-02-28 03:50:15 +0900317 .toString();
Jian Licaa03922021-02-26 18:15:20 +0900318 }
319}