blob: db62c77d95518d2f72b5c1670a6046a6772c3db9 [file] [log] [blame]
Jian Li70c32de2021-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
Jian Lic49017d2021-03-16 16:06:33 +090018import org.onlab.packet.MacAddress;
19
Jian Li70c32de2021-02-26 18:15:20 +090020import java.util.Map;
21import java.util.Set;
22
23/**
24 * Representation of virtual router.
25 */
26public interface KubevirtRouter {
27
28 /**
29 * Returns the router name.
30 *
31 * @return router name
32 */
33 String name();
34
35 /**
36 * Returns the router description.
37 *
38 * @return router description
39 */
40 String description();
41
42 /**
43 * Returns the SNAT enable flag.
44 *
45 * @return true if the router support SNAT, false otherwise
46 */
47 boolean enableSnat();
48
49 /**
Jian Lic49017d2021-03-16 16:06:33 +090050 * Returns the MAC address.
51 *
52 * @return mac address
53 */
54 MacAddress mac();
55
56 /**
Jian Li70c32de2021-02-26 18:15:20 +090057 * Returns a set of internal networks.
58 *
59 * @return a set of internal networks
60 */
61 Set<String> internal();
62
63 /**
64 * Returns external network along with external router IP address.
65 * We use IP address as the key, and external network name as the value.
66 *
67 * @return external network paired with external router IP address
68 */
Jian Li7eb20782021-02-27 01:10:50 +090069 Map<String, String> external();
Jian Li70c32de2021-02-26 18:15:20 +090070
71 /**
72 * Returns external peer router.
73 *
74 * @return peer router
75 */
76 KubevirtPeerRouter peerRouter();
77
Jian Li7eb20782021-02-27 01:10:50 +090078 /**
Daniel Parkb9a22022021-03-04 18:58:47 +090079 * Returns elected gateway node hostname.
80 *
81 * @return gateway node hostname.
82 */
83 String electedGateway();
84
85 /**
Jian Li7eb20782021-02-27 01:10:50 +090086 * Updates the peer router.
87 *
88 * @param updated updated peer router
Daniel Parkb9a22022021-03-04 18:58:47 +090089 * @return kubevirt router with updated peer router
Jian Li7eb20782021-02-27 01:10:50 +090090 */
91 KubevirtRouter updatePeerRouter(KubevirtPeerRouter updated);
92
Daniel Parkb9a22022021-03-04 18:58:47 +090093 /**
94 * Updates the elected gateway node host name.
95 *
96 * @param updated updated elected gateway node hostname
97 * @return kubevirt router with the updated gateway node hostname
98 */
99 KubevirtRouter updatedElectedGateway(String updated);
100
101
Jian Li70c32de2021-02-26 18:15:20 +0900102 interface Builder {
103
104 /**
Jian Lie48a6172021-02-28 03:50:15 +0900105 * Builds an immutable router instance.
Jian Li70c32de2021-02-26 18:15:20 +0900106 *
107 * @return kubevirt router
108 */
109 KubevirtRouter build();
110
111 /**
112 * Returns kubevirt router builder with supplied router name.
113 *
114 * @param name router name
115 * @return router builder
116 */
117 Builder name(String name);
118
119 /**
120 * Returns kubevirt router builder with supplied router description.
121 *
122 * @param description router description
123 * @return router builder
124 */
125 Builder description(String description);
126
127 /**
128 * Returns kubevirt router builder with supplied enable SNAT flag.
129 *
130 * @param flag router flag
131 * @return router builder
132 */
133 Builder enableSnat(boolean flag);
134
135 /**
Jian Lic49017d2021-03-16 16:06:33 +0900136 * Returns kubevirt router builder with supplied MAC address.
137 *
138 * @param mac MAC address
139 * @return router builder
140 */
141 Builder mac(MacAddress mac);
142
143 /**
Jian Li70c32de2021-02-26 18:15:20 +0900144 * Returns kubevirt router builder with supplied internal networks.
145 *
146 * @param internal internal network set
147 * @return router builder
148 */
149 Builder internal(Set<String> internal);
150
151 /**
152 * Returns kubevirt router builder with supplied external network with IP.
153 *
154 * @param external external network with IP
155 * @return router builder
156 */
Jian Li7eb20782021-02-27 01:10:50 +0900157 Builder external(Map<String, String> external);
Jian Li70c32de2021-02-26 18:15:20 +0900158
159 /**
160 * Returns kubevirt router builder with supplied peer router.
161 *
162 * @param router peer router
163 * @return router builder
164 */
165 Builder peerRouter(KubevirtPeerRouter router);
Daniel Parkb9a22022021-03-04 18:58:47 +0900166
167 /**
168 * Returns kubevirt router builder with supplied elected gateway node hostname.
169 *
170 * @param gateway gateway node hostname
171 * @return router builder
172 */
173 Builder electedGateway(String gateway);
Jian Li70c32de2021-02-26 18:15:20 +0900174 }
175}