blob: 45cb87a0b13696ace0f34cb519e72eab9d06c814 [file] [log] [blame]
Jian Li4eb0cf42020-12-19 04:01:49 +09001/*
2 * Copyright 2020-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.kubevirtnode.api;
17
18import org.onlab.packet.IpAddress;
19import org.onosproject.net.DeviceId;
Jian Li858ccd72021-02-04 17:25:01 +090020import org.onosproject.net.PortNumber;
Jian Li4eb0cf42020-12-19 04:01:49 +090021
22import java.util.Collection;
Jian Lif89d9602021-04-27 19:05:49 +090023import java.util.Set;
Jian Li4eb0cf42020-12-19 04:01:49 +090024
25/**
26 * Representation of a KubeVirt node used in kubevirt networking service.
27 */
28public interface KubevirtNode {
29
30 /**
31 * Lists of kubernetes node types.
32 */
33 enum Type {
34 /**
35 * Signifies that this is a kubevirt master node.
36 */
37 MASTER,
38
39 /**
40 * Signifies that this is a kubevirt worker node.
41 */
42 WORKER,
Daniel Park515f5f32021-02-22 17:12:20 +090043
44 /**
45 * Signifies that this is a gateway which is running on master node.
46 */
47 GATEWAY,
Jian Li1e0f3e82021-06-17 11:06:36 +090048
49 /**
50 * Signifies that this is a unmanaged node.
51 */
52 OTHER,
Jian Li4eb0cf42020-12-19 04:01:49 +090053 }
54
55 /**
56 * Returns cluster name of the node.
57 *
58 * @return cluster name
59 */
60 String clusterName();
61
62 /**
63 * Returns hostname of the node.
64 *
65 * @return hostname
66 */
67 String hostname();
68
69 /**
70 * Returns the type of the node.
71 *
72 * @return node type
73 */
74 KubevirtNode.Type type();
75
76 /**
77 * Returns the OVSDB device ID of the node.
78 *
79 * @return ovsdb device id
80 */
81 DeviceId ovsdb();
82
83 /**
84 * Returns the device ID of the integration bridge at the node.
85 *
86 * @return device id
87 */
88 DeviceId intgBridge();
89
90 /**
Jian Li4fe40e52021-01-06 03:29:58 +090091 * Returns the device ID of the tunnel bridge at the node.
92 *
93 * @return device id
94 */
95 DeviceId tunBridge();
96
97 /**
Jian Li4eb0cf42020-12-19 04:01:49 +090098 * Returns the management network IP address of the node.
99 *
100 * @return ip address
101 */
102 IpAddress managementIp();
103
104 /**
105 * Returns the data network IP address used for tunneling.
106 *
107 * @return ip address; null if tunnel mode is not enabled
108 */
109 IpAddress dataIp();
110
111 /**
112 * Returns the initialization state of the node.
113 *
114 * @return node state
115 */
116 KubevirtNodeState state();
117
118 /**
119 * Returns new kubevirt node instance with given state.
120 *
121 * @param newState updated state
Jian Lib230e07c2020-12-21 11:25:12 +0900122 * @return updated kubevirt node
Jian Li4eb0cf42020-12-19 04:01:49 +0900123 */
124 KubevirtNode updateState(KubevirtNodeState newState);
125
126 /**
Jian Lib230e07c2020-12-21 11:25:12 +0900127 * Returns new kubevirt node instance with given integration bridge.
128 *
129 * @param deviceId integration bridge device ID
130 * @return updated kubevirt node
131 */
132 KubevirtNode updateIntgBridge(DeviceId deviceId);
133
134 /**
Jian Li4fe40e52021-01-06 03:29:58 +0900135 * Returns new kubevirt node instance with given tunnel bridge.
136 *
137 * @param deviceId tunnel bridge device ID
138 * @return updated kubevirt node
139 */
140 KubevirtNode updateTunBridge(DeviceId deviceId);
141
142 /**
Jian Li4eb0cf42020-12-19 04:01:49 +0900143 * Returns a collection of physical interfaces.
144 *
145 * @return physical interfaces
146 */
147 Collection<KubevirtPhyInterface> phyIntfs();
148
149 /**
Jian Lif89d9602021-04-27 19:05:49 +0900150 * Returns a set of integration to physnet patch port number.
151 *
152 * @return a set of patch port numbers
153 */
154 Set<PortNumber> physPatchPorts();
155
156 /**
Jian Li858ccd72021-02-04 17:25:01 +0900157 * Returns the VXLAN tunnel port.
158 *
159 * @return VXLAN port number; null if tunnel port does not exist
160 */
161 PortNumber vxlanPort();
162
163 /**
164 * Returns the GRE tunnel port.
165 *
166 * @return GRE port number; null if the GRE tunnel port does not exist
167 */
168 PortNumber grePort();
169
170 /**
171 * Returns the GENEVE tunnel port number.
172 *
173 * @return GENEVE port number; null if the GRE tunnel port does not exist
174 */
175 PortNumber genevePort();
176
177 /**
Daniel Park515f5f32021-02-22 17:12:20 +0900178 * Returns the name of the gateway bridge.
179 *
180 * @return gateway bridge name
181 */
182 String gatewayBridgeName();
183
184 /**
Jian Li4eb0cf42020-12-19 04:01:49 +0900185 * Builder of new node entity.
186 */
187 interface Builder {
188 /**
189 * Builds an immutable kubevirt node instance.
190 *
191 * @return kubevirt node instance
192 */
193 KubevirtNode build();
194
195 /**
196 * Returns kubevirt node builder with supplied cluster name.
197 *
198 * @param clusterName cluster name
199 * @return kubevirt node builder
200 */
201 KubevirtNode.Builder clusterName(String clusterName);
202
203 /**
204 * Returns kubevirt node builder with supplied hostname.
205 *
206 * @param hostname hostname of the node
207 * @return kubevirt node builder
208 */
209 KubevirtNode.Builder hostname(String hostname);
210
211 /**
212 * Returns kubevirt node builder with supplied type.
213 *
214 * @param type kubevirt node type
215 * @return kubevirt node builder
216 */
217 KubevirtNode.Builder type(KubevirtNode.Type type);
218
219 /**
220 * Returns kubevirt node builder with supplied integration bridge name.
221 *
222 * @param deviceId integration bridge device ID
223 * @return kubevirt node builder
224 */
225 KubevirtNode.Builder intgBridge(DeviceId deviceId);
226
227 /**
Jian Li4fe40e52021-01-06 03:29:58 +0900228 * Returns kubevirt node builder with supplied tunnel bridge name.
229 *
230 * @param deviceId tunnel bridge device ID
231 * @return kubevirt node builder
232 */
233 KubevirtNode.Builder tunBridge(DeviceId deviceId);
234
235 /**
Jian Li4eb0cf42020-12-19 04:01:49 +0900236 * Returns kubevirt node builder with supplied management IP address.
237 *
238 * @param managementIp management IP address
239 * @return kubevirt node builder
240 */
241 KubevirtNode.Builder managementIp(IpAddress managementIp);
242
243 /**
244 * Returns kubevirt node builder with supplied data IP address.
245 *
246 * @param dataIp data IP address
247 * @return kubevirt node builder
248 */
249 KubevirtNode.Builder dataIp(IpAddress dataIp);
250
251 /**
252 * Returns kubevirt node builder with supplied physical interfaces.
253 *
254 * @param phyIntfs a collection of physical interfaces
255 * @return kubevirt node builder
256 */
257 KubevirtNode.Builder phyIntfs(Collection<KubevirtPhyInterface> phyIntfs);
258
259 /**
260 * Returns kubevirt node builder with supplied node state.
261 *
262 * @param state kubevirt node state
263 * @return kubevirt node builder
264 */
265 KubevirtNode.Builder state(KubevirtNodeState state);
Daniel Park515f5f32021-02-22 17:12:20 +0900266
267 /**
268 * Returns kubevirt node builder with supplied gateway bridge name.
269 *
270 * @param gatewayBridgeName gateway bridge name
271 * @return kubevirt node builder
272 */
273 KubevirtNode.Builder gatewayBridgeName(String gatewayBridgeName);
Jian Li4eb0cf42020-12-19 04:01:49 +0900274 }
275}