blob: 90d3400457c0330cdf055044ad6cbfae6600f60e [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;
23
24/**
25 * Representation of a KubeVirt node used in kubevirt networking service.
26 */
27public interface KubevirtNode {
28
29 /**
30 * Lists of kubernetes node types.
31 */
32 enum Type {
33 /**
34 * Signifies that this is a kubevirt master node.
35 */
36 MASTER,
37
38 /**
39 * Signifies that this is a kubevirt worker node.
40 */
41 WORKER,
Daniel Park515f5f32021-02-22 17:12:20 +090042
43 /**
44 * Signifies that this is a gateway which is running on master node.
45 */
46 GATEWAY,
Jian Li4eb0cf42020-12-19 04:01:49 +090047 }
48
49 /**
50 * Returns cluster name of the node.
51 *
52 * @return cluster name
53 */
54 String clusterName();
55
56 /**
57 * Returns hostname of the node.
58 *
59 * @return hostname
60 */
61 String hostname();
62
63 /**
64 * Returns the type of the node.
65 *
66 * @return node type
67 */
68 KubevirtNode.Type type();
69
70 /**
71 * Returns the OVSDB device ID of the node.
72 *
73 * @return ovsdb device id
74 */
75 DeviceId ovsdb();
76
77 /**
78 * Returns the device ID of the integration bridge at the node.
79 *
80 * @return device id
81 */
82 DeviceId intgBridge();
83
84 /**
Jian Li4fe40e52021-01-06 03:29:58 +090085 * Returns the device ID of the tunnel bridge at the node.
86 *
87 * @return device id
88 */
89 DeviceId tunBridge();
90
91 /**
Jian Li4eb0cf42020-12-19 04:01:49 +090092 * Returns the management network IP address of the node.
93 *
94 * @return ip address
95 */
96 IpAddress managementIp();
97
98 /**
99 * Returns the data network IP address used for tunneling.
100 *
101 * @return ip address; null if tunnel mode is not enabled
102 */
103 IpAddress dataIp();
104
105 /**
106 * Returns the initialization state of the node.
107 *
108 * @return node state
109 */
110 KubevirtNodeState state();
111
112 /**
113 * Returns new kubevirt node instance with given state.
114 *
115 * @param newState updated state
Jian Lib230e07c2020-12-21 11:25:12 +0900116 * @return updated kubevirt node
Jian Li4eb0cf42020-12-19 04:01:49 +0900117 */
118 KubevirtNode updateState(KubevirtNodeState newState);
119
120 /**
Jian Lib230e07c2020-12-21 11:25:12 +0900121 * Returns new kubevirt node instance with given integration bridge.
122 *
123 * @param deviceId integration bridge device ID
124 * @return updated kubevirt node
125 */
126 KubevirtNode updateIntgBridge(DeviceId deviceId);
127
128 /**
Jian Li4fe40e52021-01-06 03:29:58 +0900129 * Returns new kubevirt node instance with given tunnel bridge.
130 *
131 * @param deviceId tunnel bridge device ID
132 * @return updated kubevirt node
133 */
134 KubevirtNode updateTunBridge(DeviceId deviceId);
135
136 /**
Jian Li4eb0cf42020-12-19 04:01:49 +0900137 * Returns a collection of physical interfaces.
138 *
139 * @return physical interfaces
140 */
141 Collection<KubevirtPhyInterface> phyIntfs();
142
143 /**
Jian Li858ccd72021-02-04 17:25:01 +0900144 * Returns the VXLAN tunnel port.
145 *
146 * @return VXLAN port number; null if tunnel port does not exist
147 */
148 PortNumber vxlanPort();
149
150 /**
151 * Returns the GRE tunnel port.
152 *
153 * @return GRE port number; null if the GRE tunnel port does not exist
154 */
155 PortNumber grePort();
156
157 /**
158 * Returns the GENEVE tunnel port number.
159 *
160 * @return GENEVE port number; null if the GRE tunnel port does not exist
161 */
162 PortNumber genevePort();
163
164 /**
Daniel Park515f5f32021-02-22 17:12:20 +0900165 * Returns the name of the gateway bridge.
166 *
167 * @return gateway bridge name
168 */
169 String gatewayBridgeName();
170
171 /**
Jian Li4eb0cf42020-12-19 04:01:49 +0900172 * Builder of new node entity.
173 */
174 interface Builder {
175 /**
176 * Builds an immutable kubevirt node instance.
177 *
178 * @return kubevirt node instance
179 */
180 KubevirtNode build();
181
182 /**
183 * Returns kubevirt node builder with supplied cluster name.
184 *
185 * @param clusterName cluster name
186 * @return kubevirt node builder
187 */
188 KubevirtNode.Builder clusterName(String clusterName);
189
190 /**
191 * Returns kubevirt node builder with supplied hostname.
192 *
193 * @param hostname hostname of the node
194 * @return kubevirt node builder
195 */
196 KubevirtNode.Builder hostname(String hostname);
197
198 /**
199 * Returns kubevirt node builder with supplied type.
200 *
201 * @param type kubevirt node type
202 * @return kubevirt node builder
203 */
204 KubevirtNode.Builder type(KubevirtNode.Type type);
205
206 /**
207 * Returns kubevirt node builder with supplied integration bridge name.
208 *
209 * @param deviceId integration bridge device ID
210 * @return kubevirt node builder
211 */
212 KubevirtNode.Builder intgBridge(DeviceId deviceId);
213
214 /**
Jian Li4fe40e52021-01-06 03:29:58 +0900215 * Returns kubevirt node builder with supplied tunnel bridge name.
216 *
217 * @param deviceId tunnel bridge device ID
218 * @return kubevirt node builder
219 */
220 KubevirtNode.Builder tunBridge(DeviceId deviceId);
221
222 /**
Jian Li4eb0cf42020-12-19 04:01:49 +0900223 * Returns kubevirt node builder with supplied management IP address.
224 *
225 * @param managementIp management IP address
226 * @return kubevirt node builder
227 */
228 KubevirtNode.Builder managementIp(IpAddress managementIp);
229
230 /**
231 * Returns kubevirt node builder with supplied data IP address.
232 *
233 * @param dataIp data IP address
234 * @return kubevirt node builder
235 */
236 KubevirtNode.Builder dataIp(IpAddress dataIp);
237
238 /**
239 * Returns kubevirt node builder with supplied physical interfaces.
240 *
241 * @param phyIntfs a collection of physical interfaces
242 * @return kubevirt node builder
243 */
244 KubevirtNode.Builder phyIntfs(Collection<KubevirtPhyInterface> phyIntfs);
245
246 /**
247 * Returns kubevirt node builder with supplied node state.
248 *
249 * @param state kubevirt node state
250 * @return kubevirt node builder
251 */
252 KubevirtNode.Builder state(KubevirtNodeState state);
Daniel Park515f5f32021-02-22 17:12:20 +0900253
254 /**
255 * Returns kubevirt node builder with supplied gateway bridge name.
256 *
257 * @param gatewayBridgeName gateway bridge name
258 * @return kubevirt node builder
259 */
260 KubevirtNode.Builder gatewayBridgeName(String gatewayBridgeName);
Jian Li4eb0cf42020-12-19 04:01:49 +0900261 }
262}