blob: 18e943af1a884cac8bbf729126e23683ca8384e4 [file] [log] [blame]
Jian Li9e43ec12019-01-21 23:04:23 +09001/*
2 * Copyright 2019-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.k8snode.api;
17
18import org.onlab.packet.IpAddress;
Jian Li7d111d72019-04-12 13:58:44 +090019import org.onlab.packet.MacAddress;
Jian Li9e43ec12019-01-21 23:04:23 +090020import org.onosproject.net.DeviceId;
21import org.onosproject.net.PortNumber;
22
23/**
24 * Representation of a node used in k8s-networking service.
25 */
26public interface K8sNode {
27
28 /**
29 * Lists of kubernetes node types.
30 */
31 enum Type {
32 /**
33 * Signifies that this is a kubernetes master node.
34 */
35 MASTER,
36
37 /**
38 * Signifies that this is a kubernetes minion node.
39 */
40 MINION
41 }
42
43 /**
44 * Returns hostname of the node.
45 *
46 * @return hostname
47 */
48 String hostname();
49
50 /**
51 * Returns the type of the node.
52 *
53 * @return node type
54 */
55 Type type();
56
57 /**
58 * Returns the OVSDB device ID of the node.
59 *
60 * @return ovsdb device id
61 */
62 DeviceId ovsdb();
63
64 /**
65 * Returns the device ID of the integration bridge at the node.
66 *
67 * @return device id
68 */
69 DeviceId intgBridge();
70
71 /**
Jian Libf562c22019-04-15 18:07:14 +090072 * Returns the device ID of the external bridge at the node.
73 *
74 * @return device id
75 */
76 DeviceId extBridge();
77
78 /**
Jian Li0c632722019-05-08 15:58:04 +090079 * Returns the external interface name.
80 *
81 * @return external interface name
82 */
83 String extIntf();
84
85 /**
Jian Li1cee9882019-02-13 11:25:25 +090086 * Returns new kubernetes node instance with given integration bridge.
87 *
88 * @param deviceId integration bridge device ID
89 * @return updated kubernetes node
90 */
91 K8sNode updateIntgBridge(DeviceId deviceId);
92
93 /**
Jian Libf562c22019-04-15 18:07:14 +090094 * Returns new kubernetes node instance with given external bridge.
95 *
96 * @param deviceId external bridge device ID
97 * @return updated kubernetes node
98 */
99 K8sNode updateExtBridge(DeviceId deviceId);
100
101 /**
Jian Li9e43ec12019-01-21 23:04:23 +0900102 * Returns the management network IP address of the node.
103 *
104 * @return ip address
105 */
106 IpAddress managementIp();
107
108 /**
109 * Returns the data network IP address used for tunneling.
110 *
111 * @return ip address; null if vxlan mode is not enabled
112 */
113 IpAddress dataIp();
114
115 /**
116 * Returns the initialization state of the node.
117 *
118 * @return node state
119 */
120 K8sNodeState state();
121
122 /**
Jian Li0c632722019-05-08 15:58:04 +0900123 * Returns the POD CIDR of the node.
124 *
125 * @return POD CIDR (e.g., 10.10.0.0/24)
126 */
127 String podCidr();
128
129 /**
Jian Li49109b52019-01-22 00:17:28 +0900130 * Returns new kubernetes node instance with given state.
131 *
132 * @param newState updated state
133 * @return updated kubernetes node
134 */
135 K8sNode updateState(K8sNodeState newState);
136
137 /**
Jian Li1b08d652019-05-02 17:28:09 +0900138 * Returns new kubernetes node instance with given external gateway MAC address.
139 *
140 * @param macAddress updated MAC address
141 * @return updated kubernetes node
142 */
143 K8sNode updateExtGatewayMac(MacAddress macAddress);
144
145 /**
Jian Li9e43ec12019-01-21 23:04:23 +0900146 * Returns the GRE tunnel port number.
147 *
148 * @return GRE port number; null if the GRE tunnel port does not exist
149 */
150 PortNumber grePortNum();
151
152 /**
153 * Returns the VXLAN tunnel port number.
154 *
155 * @return VXLAN port number; null if tunnel port does not exist
156 */
157 PortNumber vxlanPortNum();
158
159 /**
160 * Returns the GENEVE tunnel port number.
161 *
162 * @return GENEVE port number; null if the GRE tunnel port does not exist
163 */
164 PortNumber genevePortNum();
165
166 /**
Jian Li4aa17642019-01-30 00:01:11 +0900167 * Returns the host port number.
168 *
169 * @return host port number; null if the host port does not exist
170 */
Jian Lieb488ea2019-04-16 01:50:02 +0900171 PortNumber intgBridgePortNum();
Jian Li4aa17642019-01-30 00:01:11 +0900172
173 /**
Jian Li2778ffa2019-05-07 13:21:52 +0900174 * Returns the integration to external patch port number.
175 *
176 * @return patch port number
177 */
178 PortNumber intgToExtPatchPortNum();
179
180 /**
181 * Returns the external to integration patch port number.
182 *
183 * @return patch port number
184 */
185 PortNumber extToIntgPatchPortNum();
186
187 /**
188 * Returns the external bridge to router port number.
189 *
190 * @return port number, null if the port does not exist
191 */
192 PortNumber extBridgePortNum();
193
194 /**
Jian Li7d111d72019-04-12 13:58:44 +0900195 * Returns the integration bridge's MAC address.
196 *
197 * @return MAC address; null if the MAC address does not exist
198 */
Jian Lieb488ea2019-04-16 01:50:02 +0900199 MacAddress intgBridgeMac();
200
201 /**
202 * Returns the external bridge's IP address.
203 *
204 * @return IP address; null if the IP address does not exist
205 */
206 IpAddress extBridgeIp();
207
208 /**
209 * Returns the external bridge's MAC address.
210 *
211 * @return MAC address; null if the MAC address does not exist
212 */
213 MacAddress extBridgeMac();
214
215 /**
216 * Returns the external gateway IP address.
217 *
218 * @return IP address; null if the IP address does not exist
219 */
220 IpAddress extGatewayIp();
221
222 /**
223 * Returns the external gateway MAC address.
224 *
225 * @return MAC address; null if the MAC address does not exist
226 */
227 MacAddress extGatewayMac();
228
229 /**
Jian Li9e43ec12019-01-21 23:04:23 +0900230 * Builder of new node entity.
231 */
232 interface Builder {
233
234 /**
235 * Builds an immutable kubernetes node instance.
236 *
237 * @return kubernetes node instance
238 */
239 K8sNode build();
240
241 /**
242 * Returns kubernetes node builder with supplied hostname.
243 *
244 * @param hostname hostname of the node
245 * @return kubernetes node builder
246 */
247 Builder hostname(String hostname);
248
249 /**
250 * Returns kubernetes node builder with supplied type.
251 *
252 * @param type kubernetes node type
253 * @return kubernetes node builder
254 */
255 Builder type(Type type);
256
257 /**
Jian Libf562c22019-04-15 18:07:14 +0900258 * Returns kubernetes node builder with supplied integration bridge name.
Jian Li9e43ec12019-01-21 23:04:23 +0900259 *
260 * @param deviceId integration bridge device ID
261 * @return kubernetes node builder
262 */
263 Builder intgBridge(DeviceId deviceId);
264
265 /**
Jian Libf562c22019-04-15 18:07:14 +0900266 * Returns kubernetes node builder with supplied external bridge name.
267 *
268 * @param deviceId external bridge deviceID
269 * @return kubernetes node builder
270 */
271 Builder extBridge(DeviceId deviceId);
272
273 /**
Jian Li0c632722019-05-08 15:58:04 +0900274 * Returns kubernetes node builder with supplied external interface.
275 *
276 * @param intf external interface
277 * @return kubernetes node builder
278 */
279 Builder extIntf(String intf);
280
281 /**
Jian Li9e43ec12019-01-21 23:04:23 +0900282 * Returns kubernetes node builder with supplied management IP address.
283 *
284 * @param managementIp management IP address
285 * @return kubernetes node builder
286 */
287 Builder managementIp(IpAddress managementIp);
288
289 /**
290 * Returns kubernetes node builder with supplied data IP address.
291 *
292 * @param dataIp data IP address
293 * @return kubernetes node builder
294 */
295 Builder dataIp(IpAddress dataIp);
296
297 /**
298 * Returns kubernetes node builder with supplied node state.
299 *
300 * @param state kubernetes node state
301 * @return kubernetes node builder
302 */
303 Builder state(K8sNodeState state);
Jian Li1b08d652019-05-02 17:28:09 +0900304
305 /**
Jian Li0c632722019-05-08 15:58:04 +0900306 * Returns kubernetes node builder with supplied external bridge IP.
307 *
308 * @param extBridgeIp external bridge IP
309 * @return kubernetes node builder
310 */
311 Builder extBridgeIp(IpAddress extBridgeIp);
312
313 /**
314 * Returns kubernetes node builder with supplied gateway IP.
315 *
316 * @param extGatewayIp external gateway IP
317 * @return kubernetes node builder
318 */
319 Builder extGatewayIp(IpAddress extGatewayIp);
320
321 /**
Jian Li1b08d652019-05-02 17:28:09 +0900322 * Returns kubernetes node builder with supplied external gateway MAC.
323 *
324 * @param extGatewayMac external gateway MAC address
325 * @return kubernetes node builder
326 */
327 Builder extGatewayMac(MacAddress extGatewayMac);
Jian Li0c632722019-05-08 15:58:04 +0900328
329 /**
330 * Returns kubernetes node builder with supplied POD CIDR.
331 *
332 * @param podCidr POD CIDR
333 * @return kubernetes node builder
334 */
335 Builder podCidr(String podCidr);
Jian Li9e43ec12019-01-21 23:04:23 +0900336 }
337}