blob: bcee070f068b52491c3f19a9b7940f86e140f013 [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 Campanella7c8bcdf2018-03-26 23:29:11 -070064 * Adds a set of sources connect points to the route from where the
Andrea Campanella545edb42018-03-20 16:37:29 -070065 * data stream is originating.
66 *
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -070067 * @param route the Multicast route
Andrea Campanella545edb42018-03-20 16:37:29 -070068 * @param sources a set of sources
69 */
70 void addSources(McastRoute route, Set<ConnectPoint> sources);
71
72 /**
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -070073 * Removes all the sources connect points from the route.
Andrea Campanella545edb42018-03-20 16:37:29 -070074 *
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -070075 * @param route the Multicast route
Andrea Campanella545edb42018-03-20 16:37:29 -070076 */
77 void removeSources(McastRoute route);
78
79 /**
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -070080 * Removes a set of sources connect points from the route.
Andrea Campanella545edb42018-03-20 16:37:29 -070081 *
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -070082 * @param route the Multicast route
Andrea Campanella545edb42018-03-20 16:37:29 -070083 * @param sources a set of sources
84 */
85 void removeSources(McastRoute route, Set<ConnectPoint> sources);
86
87 /**
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -070088 * Adds a sink to the route to which a data stream should be
Andrea Campanella545edb42018-03-20 16:37:29 -070089 * sent to.
90 *
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -070091 * @param route a Multicast route
Andrea Campanella545edb42018-03-20 16:37:29 -070092 * @param hostId a sink host
93 */
94 void addSink(McastRoute route, HostId hostId);
95
96 /**
Andrea Campanella644a8a62018-03-21 19:08:21 -070097 * Adds a set of sink connect points for a given host sink to the route to
98 * which a data stream should be sent to.
99 *
100 * @param route a Multicast route
101 * @param hostId a sink host
102 * @param connectPoints the sink for the specific host
103 */
104 void addSinks(McastRoute route, HostId hostId, Set<ConnectPoint> connectPoints);
105
106 /**
Andrea Campanella545edb42018-03-20 16:37:29 -0700107 * Adds a set of sink to the route to which a data stream should be
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700108 * sent to. If this method is used the connect points will all be
109 * used as different sinks for that Mcast Tree. For dual-homed sinks
110 * please use {@link #addSink(McastRoute route, HostId hostId) addSink}.
Andrea Campanella545edb42018-03-20 16:37:29 -0700111 *
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700112 * @param route a Multicast route
Andrea Campanella545edb42018-03-20 16:37:29 -0700113 * @param sinks a set of sink connect point
114 */
115 void addSink(McastRoute route, Set<ConnectPoint> sinks);
116
117 /**
118 * Removes all the sinks from the route.
119 *
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700120 * @param route the Multicast route
Andrea Campanella545edb42018-03-20 16:37:29 -0700121 */
122 void removeSinks(McastRoute route);
123
124 /**
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700125 * Removes a sink from the route.
Andrea Campanella545edb42018-03-20 16:37:29 -0700126 *
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700127 * @param route the Multicast route
Andrea Campanella545edb42018-03-20 16:37:29 -0700128 * @param hostId a sink host
129 */
130 void removeSink(McastRoute route, HostId hostId);
131
132 /**
Andrea Campanella545edb42018-03-20 16:37:29 -0700133 * Removes a set of sinks to the route to which a data stream should be
134 * sent to. If this method is used the mcast tree does not work
135 * for any other sink until it's added. For dual-homed sinks please use
136 * {@link #removeSink(McastRoute route, HostId hostId) removeSink}.
137 *
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700138 * @param route a Multicast route
Andrea Campanella545edb42018-03-20 16:37:29 -0700139 * @param sink a sink connect point
140 */
141 void removeSinks(McastRoute route, Set<ConnectPoint> sink);
142
143 /**
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700144 * Return the Multicast data for this route.
Andrea Campanella545edb42018-03-20 16:37:29 -0700145 *
146 * @param route route
147 * @return the mcast route data
148 */
149 McastRouteData routeData(McastRoute route);
150
151 /**
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700152 * Find the data source association for this Multicast route.
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 * @return a connect point
156 */
157 Set<ConnectPoint> sources(McastRoute route);
158
159 /**
160 * Find the list of sinks for this route.
161 *
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700162 * @param route a Multicast route
Andrea Campanella545edb42018-03-20 16:37:29 -0700163 * @return a list of connect points
164 */
165 Set<ConnectPoint> sinks(McastRoute route);
166
167 /**
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700168 * Find the set of connect points for a given sink for this route.
Andrea Campanella545edb42018-03-20 16:37:29 -0700169 *
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700170 * @param route a Multicast route
Andrea Campanella545edb42018-03-20 16:37:29 -0700171 * @param hostId the host
172 * @return a list of connect points
173 */
174 Set<ConnectPoint> sinks(McastRoute route, HostId hostId);
175
176 /**
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700177 * Obtains all the non host specific sinks for a Multicast route.
Andrea Campanella545edb42018-03-20 16:37:29 -0700178 *
Andrea Campanella7c8bcdf2018-03-26 23:29:11 -0700179 * @param route a Multicast route
Andrea Campanella545edb42018-03-20 16:37:29 -0700180 * @return a set of sinks
181 */
182 Set<ConnectPoint> nonHostSinks(McastRoute route);
183}