blob: d2162e7e1e29ee429ba626b33d91fa3be0ba1571 [file] [log] [blame]
Daniel Parka7d6e9f2016-01-18 17:54:14 +09001/*
Brian O'Connorce2a03d2017-08-03 19:21:03 -07002 * Copyright 2016-present Open Networking Foundation
Daniel Parka7d6e9f2016-01-18 17:54:14 +09003 *
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.openstacknode;
17
Hyunsun Moon34bbe172016-06-28 19:18:40 -070018import org.onlab.packet.IpAddress;
daniel parke49eb382017-04-05 16:48:28 +090019import org.onosproject.core.GroupId;
Hyunsun Moon05d9b262016-07-03 18:38:44 -070020import org.onosproject.event.ListenerService;
Hyunsun Moon34bbe172016-06-28 19:18:40 -070021import org.onosproject.net.DeviceId;
22import org.onosproject.net.PortNumber;
23
Daniel Parka7d6e9f2016-01-18 17:54:14 +090024import java.util.List;
Hyunsun Moon34bbe172016-06-28 19:18:40 -070025import java.util.Optional;
26import java.util.Set;
Daniel Parka7d6e9f2016-01-18 17:54:14 +090027
28/**
29 * Handles the bootstrap request for compute/gateway node.
30 */
Hyunsun Moon05d9b262016-07-03 18:38:44 -070031public interface OpenstackNodeService
32 extends ListenerService<OpenstackNodeEvent, OpenstackNodeListener> {
Daniel Parka7d6e9f2016-01-18 17:54:14 +090033
Hyunsun Moon34bbe172016-06-28 19:18:40 -070034 enum NodeType {
Daniel Parka7d6e9f2016-01-18 17:54:14 +090035 /**
36 * Compute or Gateway Node.
37 */
Hyunsun Moon34bbe172016-06-28 19:18:40 -070038 COMPUTE,
39 GATEWAY
Daniel Parka7d6e9f2016-01-18 17:54:14 +090040 }
Hyunsun Moon34bbe172016-06-28 19:18:40 -070041
daniel parkee8700b2017-05-11 15:50:03 +090042 enum NetworkMode {
43 /**
44 * VxLAN or VLAN mode.
45 */
46 VXLAN,
47 VLAN
48 }
49
Daniel Parka7d6e9f2016-01-18 17:54:14 +090050 /**
Hyunsun Moon34bbe172016-06-28 19:18:40 -070051 * Adds or updates a new node to the service.
Daniel Parka7d6e9f2016-01-18 17:54:14 +090052 *
53 * @param node openstack node
54 */
Hyunsun Moon34bbe172016-06-28 19:18:40 -070055 void addOrUpdateNode(OpenstackNode node);
Daniel Parka7d6e9f2016-01-18 17:54:14 +090056
57 /**
Hyunsun Moon05d9b262016-07-03 18:38:44 -070058 * Bootstraps node with INIT state.
59 *
60 * @param node openstack node
61 */
62 void processInitState(OpenstackNode node);
63
64 /**
65 * Bootstraps node with DEVICE_CREATED state.
66 *
67 * @param node openstack node
68 */
69 void processDeviceCreatedState(OpenstackNode node);
70
71 /**
72 * Bootstraps node with COMPLETE state.
73 *
74 * @param node openstack node
75 */
76 void processCompleteState(OpenstackNode node);
77
78 /**
79 * Bootstraps node with INCOMPLETE state.
80 *
81 * @param node openstack node
82 */
83 void processIncompleteState(OpenstackNode node);
84
85 /**
Daniel Parka7d6e9f2016-01-18 17:54:14 +090086 * Deletes a node from the service.
87 *
88 * @param node openstack node
89 */
90 void deleteNode(OpenstackNode node);
91
92 /**
Hyunsun Moon34bbe172016-06-28 19:18:40 -070093 * Returns all nodes known to the service.
Daniel Parka7d6e9f2016-01-18 17:54:14 +090094 *
Daniel Parka7d6e9f2016-01-18 17:54:14 +090095 * @return list of nodes
96 */
Hyunsun Moon34bbe172016-06-28 19:18:40 -070097 List<OpenstackNode> nodes();
Daniel Parka7d6e9f2016-01-18 17:54:14 +090098
99 /**
Hyunsun Moon34bbe172016-06-28 19:18:40 -0700100 * Returns all nodes in complete state.
Daniel Parka7d6e9f2016-01-18 17:54:14 +0900101 *
Hyunsun Moon34bbe172016-06-28 19:18:40 -0700102 * @return set of nodes
Daniel Parka7d6e9f2016-01-18 17:54:14 +0900103 */
Hyunsun Moon34bbe172016-06-28 19:18:40 -0700104 Set<OpenstackNode> completeNodes();
105
106 /**
Hyunsun Moon34bbe172016-06-28 19:18:40 -0700107 * Returns data network IP address of a given integration bridge device.
108 *
109 * @param intBridgeId integration bridge device id
110 * @return ip address; empty value otherwise
111 */
112 Optional<IpAddress> dataIp(DeviceId intBridgeId);
113
114 /**
115 * Returns tunnel port number of a given integration bridge device.
116 *
117 * @param intBridgeId integration bridge device id
118 * @return port number; or empty value
119 */
120 Optional<PortNumber> tunnelPort(DeviceId intBridgeId);
121
122 /**
daniel parka792cf72017-04-14 16:25:35 +0900123 * Returns vlan port number of a given integration bridge device.
124 *
125 * @param intBridgeId integration bridge device id
126 * @return port number; or empty value
127 */
128 Optional<PortNumber> vlanPort(DeviceId intBridgeId);
129
130 /**
Hyunsun Moon34bbe172016-06-28 19:18:40 -0700131 * Returns router bridge device ID connected to a given integration bridge.
132 * It returns valid value only if the node type is GATEWAY.
133 *
134 * @param intBridgeId device id of the integration bridge
135 * @return device id of a router bridge; or empty value
136 */
137 Optional<DeviceId> routerBridge(DeviceId intBridgeId);
138
139 /**
140 * Returns port number connected to the router bridge.
141 * It returns valid value only if the node type is GATEWAY.
142 *
143 * @param intBridgeId integration bridge device id
144 * @return port number; or empty value
145 */
146 Optional<PortNumber> externalPort(DeviceId intBridgeId);
daniel parka792cf72017-04-14 16:25:35 +0900147
daniel parke49eb382017-04-05 16:48:28 +0900148 /**
149 * Returns gateway node with the given device identifier.
150 *
151 * @param deviceId The gateway node deviceId
152 * @return The gateway node information
153 */
154 OpenstackNode gatewayNode(DeviceId deviceId);
155
156 /**
157 * Returns group id for gateway load balance.
158 * If the group does not exist in the supplied source device, creates one.
159 *
160 * @param srcDeviceId source device id
daniel parkee8700b2017-05-11 15:50:03 +0900161 * @param networkMode network mode
162 * @return group id
daniel parke49eb382017-04-05 16:48:28 +0900163 */
daniel parkee8700b2017-05-11 15:50:03 +0900164 GroupId gatewayGroupId(DeviceId srcDeviceId, NetworkMode networkMode);
daniel parke49eb382017-04-05 16:48:28 +0900165
166 /**
167 * Returns the list of gateway node information with the given device identifier.
168 *
169 * @return The list of gateway node information
170 */
171 List<OpenstackNode> gatewayNodes();
172
173 /**
174 * Returns the list of gateway`s device identifiers.
175 *
176 * @return The list of device identifier]
177 */
178 List<DeviceId> gatewayDeviceIds();
Daniel Parka7d6e9f2016-01-18 17:54:14 +0900179}