blob: 2e34a4b8ebf89edb4a3898a8270e85e5d1769d82 [file] [log] [blame]
Andrea Campanella545edb42018-03-20 16:37:29 -07001/*
2 * Copyright 2018-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.mcast.api;
17
18import com.google.common.annotations.Beta;
19import org.onlab.packet.IpAddress;
20import org.onosproject.event.ListenerService;
21import org.onosproject.net.ConnectPoint;
22import org.onosproject.net.HostId;
23
Andrea Campanella545edb42018-03-20 16:37:29 -070024import java.util.Set;
25
26/**
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -070027 * A service interface for maintaining Multicast information.
Andrea Campanella545edb42018-03-20 16:37:29 -070028 */
29@Beta
30public interface MulticastRouteService
31 extends ListenerService<McastEvent, McastListener> {
32
33 /**
34 * Adds an empty route to the information base for the given group IP.
35 *
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -070036 * @param route a Multicast route
Andrea Campanella545edb42018-03-20 16:37:29 -070037 */
38 void add(McastRoute route);
39
40 /**
41 * Removes a route from the information base.
42 *
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -070043 * @param route a Multicast route
Andrea Campanella545edb42018-03-20 16:37:29 -070044 */
45 void remove(McastRoute route);
46
47 /**
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -070048 * Gets all Multicast routes in the system.
Andrea Campanella545edb42018-03-20 16:37:29 -070049 *
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -070050 * @return set of Multicast routes
Andrea Campanella545edb42018-03-20 16:37:29 -070051 */
52 Set<McastRoute> getRoutes();
53
54 /**
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -070055 * Gets a Multicast route in the system.
Andrea Campanella545edb42018-03-20 16:37:29 -070056 *
Andrea Campanella644a8a62018-03-21 19:08:21 -070057 * @param groupIp Multicast group IP address
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -070058 * @param sourceIp Multicasto source Ip address
59 * @return set of Multicast routes
Andrea Campanella545edb42018-03-20 16:37:29 -070060 */
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -070061 Set<McastRoute> getRoute(IpAddress groupIp, IpAddress sourceIp);
Andrea Campanella545edb42018-03-20 16:37:29 -070062
63 /**
Andrea Campanella0ddf9b82018-04-27 15:54:42 +020064 * Adds a host as a source to the route from where the
Andrea Campanella545edb42018-03-20 16:37:29 -070065 * data stream is originating.
66 *
Andrea Campanella0ddf9b82018-04-27 15:54:42 +020067 * @param route the Multicast route
68 * @param source a source host
69 */
70 void addSource(McastRoute route, HostId source);
71
72
73 /**
74 * Adds a set of source connect points for a given host source to the route to
75 * which a data stream should be sent to.
76 *
77 * @param route a Multicast route
78 * @param hostId a source host
79 * @param connectPoints the source for the specific host
80 */
81 void addSources(McastRoute route, HostId hostId, Set<ConnectPoint> connectPoints);
82
83 /**
84 * Adds a set of sources to the route from which a data stream should be
85 * sent to. If this method is used the connect points will all be
86 * used as different sources for that Mcast Tree. For dual-homed sources
87 * please use {@link #addSource(McastRoute route, HostId hostId) addSource}.
88 *
Ilayda Ozdemirad741712020-06-10 08:31:27 +000089 * @param route a Multicast route
Andrea Campanella0ddf9b82018-04-27 15:54:42 +020090 * @param sources a set of source connect points
Andrea Campanella545edb42018-03-20 16:37:29 -070091 */
92 void addSources(McastRoute route, Set<ConnectPoint> sources);
93
94 /**
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -070095 * Removes all the sources connect points from the route.
Andrea Campanella545edb42018-03-20 16:37:29 -070096 *
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -070097 * @param route the Multicast route
Andrea Campanella545edb42018-03-20 16:37:29 -070098 */
99 void removeSources(McastRoute route);
100
101 /**
Andrea Campanella0ddf9b82018-04-27 15:54:42 +0200102 * Removes a source host from the route.
Andrea Campanella545edb42018-03-20 16:37:29 -0700103 *
Andrea Campanella0ddf9b82018-04-27 15:54:42 +0200104 * @param route the Multicast route
105 * @param source a host source
Andrea Campanella545edb42018-03-20 16:37:29 -0700106 */
Andrea Campanella0ddf9b82018-04-27 15:54:42 +0200107 void removeSource(McastRoute route, HostId source);
Andrea Campanella545edb42018-03-20 16:37:29 -0700108
109 /**
Ilayda Ozdemirad741712020-06-10 08:31:27 +0000110 * Removes a set of sources from the route.
111 * If this method is used the connect points will all be
112 * used as different sources for that Mcast Tree. For dual-homed sources
113 * please use {@link #removeSource(McastRoute, HostId)}.
114 *
115 * @param route the multicast route
116 * @param sources set of sources
117 */
118 void removeSources(McastRoute route, Set<ConnectPoint> sources);
119
120 /**
121 * Removes a set of source connect points for a given host source from the route.
122 *
123 * @param route a multicast route
124 * @param hostId a source host
125 * @param connectPoints the source for the specific connect points
126 */
127 void removeSources(McastRoute route, HostId hostId, Set<ConnectPoint> connectPoints);
128
129 /**
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700130 * Adds a sink to the route to which a data stream should be
Andrea Campanella545edb42018-03-20 16:37:29 -0700131 * sent to.
132 *
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700133 * @param route a Multicast route
Andrea Campanella545edb42018-03-20 16:37:29 -0700134 * @param hostId a sink host
135 */
136 void addSink(McastRoute route, HostId hostId);
137
138 /**
Andrea Campanella644a8a62018-03-21 19:08:21 -0700139 * Adds a set of sink connect points for a given host sink to the route to
140 * which a data stream should be sent to.
141 *
142 * @param route a Multicast route
143 * @param hostId a sink host
144 * @param connectPoints the sink for the specific host
145 */
146 void addSinks(McastRoute route, HostId hostId, Set<ConnectPoint> connectPoints);
147
148 /**
Andrea Campanella545edb42018-03-20 16:37:29 -0700149 * Adds a set of sink to the route to which a data stream should be
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700150 * sent to. If this method is used the connect points will all be
151 * used as different sinks for that Mcast Tree. For dual-homed sinks
152 * please use {@link #addSink(McastRoute route, HostId hostId) addSink}.
Andrea Campanella545edb42018-03-20 16:37:29 -0700153 *
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700154 * @param route a Multicast route
Andrea Campanella545edb42018-03-20 16:37:29 -0700155 * @param sinks a set of sink connect point
156 */
Andrea Campanella0ddf9b82018-04-27 15:54:42 +0200157 void addSinks(McastRoute route, Set<ConnectPoint> sinks);
Andrea Campanella545edb42018-03-20 16:37:29 -0700158
159 /**
160 * Removes all the sinks from the route.
161 *
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700162 * @param route the Multicast route
Andrea Campanella545edb42018-03-20 16:37:29 -0700163 */
164 void removeSinks(McastRoute route);
165
166 /**
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700167 * Removes a sink from the route.
Andrea Campanella545edb42018-03-20 16:37:29 -0700168 *
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700169 * @param route the Multicast route
Andrea Campanella545edb42018-03-20 16:37:29 -0700170 * @param hostId a sink host
171 */
172 void removeSink(McastRoute route, HostId hostId);
173
174 /**
Andrea Campanella545edb42018-03-20 16:37:29 -0700175 * Removes a set of sinks to the route to which a data stream should be
176 * sent to. If this method is used the mcast tree does not work
177 * for any other sink until it's added. For dual-homed sinks please use
178 * {@link #removeSink(McastRoute route, HostId hostId) removeSink}.
179 *
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700180 * @param route a Multicast route
Andrea Campanella545edb42018-03-20 16:37:29 -0700181 * @param sink a sink connect point
182 */
183 void removeSinks(McastRoute route, Set<ConnectPoint> sink);
184
185 /**
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700186 * Return the Multicast data for this route.
Andrea Campanella545edb42018-03-20 16:37:29 -0700187 *
188 * @param route route
189 * @return the mcast route data
190 */
191 McastRouteData routeData(McastRoute route);
192
193 /**
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700194 * Find the data source association for this Multicast route.
Andrea Campanella545edb42018-03-20 16:37:29 -0700195 *
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700196 * @param route a Multicast route
Andrea Campanella545edb42018-03-20 16:37:29 -0700197 * @return a connect point
198 */
199 Set<ConnectPoint> sources(McastRoute route);
200
201 /**
Andrea Campanella0ddf9b82018-04-27 15:54:42 +0200202 * Find the set of connect points for a given source for this route.
203 *
204 * @param route a Multicast route
205 * @param hostId the host
206 * @return a list of connect points
207 */
208 Set<ConnectPoint> sources(McastRoute route, HostId hostId);
209
210 /**
Andrea Campanella545edb42018-03-20 16:37:29 -0700211 * Find the list of sinks for this route.
212 *
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700213 * @param route a Multicast route
Andrea Campanella545edb42018-03-20 16:37:29 -0700214 * @return a list of connect points
215 */
216 Set<ConnectPoint> sinks(McastRoute route);
217
218 /**
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700219 * Find the set of connect points for a given sink for this route.
Andrea Campanella545edb42018-03-20 16:37:29 -0700220 *
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700221 * @param route a Multicast route
Andrea Campanella545edb42018-03-20 16:37:29 -0700222 * @param hostId the host
223 * @return a list of connect points
224 */
225 Set<ConnectPoint> sinks(McastRoute route, HostId hostId);
226
227 /**
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700228 * Obtains all the non host specific sinks for a Multicast route.
Andrea Campanella545edb42018-03-20 16:37:29 -0700229 *
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700230 * @param route a Multicast route
Andrea Campanella545edb42018-03-20 16:37:29 -0700231 * @return a set of sinks
232 */
233 Set<ConnectPoint> nonHostSinks(McastRoute route);
234}