blob: eb733e18fd1b0ccb74ce76fd2c2681f371997573 [file] [log] [blame]
Srikanth Vavilapalli56db94f2015-01-22 22:30:17 -08001/*
2 * Copyright 2015 Open Networking Laboratory
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.net.group;
17
18import org.onosproject.core.ApplicationId;
19import org.onosproject.net.Device;
20import org.onosproject.net.DeviceId;
21
22/**
23 * Service for create/update/delete "group" in the devices.
24 * Flow entries can point to a "group" defined in the devices that enables
25 * to represent additional methods of forwarding like load-balancing or
26 * failover among different group of ports or multicast to all ports
27 * specified in a group.
28 * "group" can also be used for grouping common actions of different flows,
29 * so that in some scenarios only one group entry required to be modified
30 * for all the referencing flow entries instead of modifying all of them
31 *
32 * This implements semantics of a distributed authoritative group store
33 * where the master copy of the groups lies with the controller and
34 * the devices hold only the 'cached' copy.
35 */
36public interface GroupService {
37
38 /**
39 * Create a group in the specified device with the provided buckets.
40 * This API provides an option for application to associate a cookie
41 * while creating a group, so that applications can look-up the
42 * groups based on the cookies. These Groups will be retained by
43 * the core system and re-applied if any groups found missing in the
44 * device when it reconnects. This API would immediately return after
45 * submitting the request locally or to a remote Master controller
46 * instance. As a response to this API invocation, GROUP_ADDED or
47 * GROUP_ADD_FAILED notifications would be provided along with cookie
48 * depending on the result of the operation on the device in the
49 * data plane. The caller may also use "getGroup" API to get the
50 * Group object created as part of this request.
51 *
52 * @param groupDesc group creation parameters
53 *
54 */
55 void addGroup(GroupDescription groupDesc);
56
57 /**
58 * Return a group object associated to an application cookie.
59 *
60 * NOTE1: The presence of group object in the system does not
61 * guarantee that the "group" is actually created in device.
62 * GROUP_ADDED notification would confirm the creation of
63 * this group in data plane
64 *
65 * @param deviceId device identifier
66 * @param appCookie application cookie to be used for lookup
67 *
68 * @return group associated with the application cookie or
69 * NULL if Group is not found for the provided cookie
70 */
71 Group getGroup(DeviceId deviceId, GroupKey appCookie);
72
73 /**
74 * Append buckets to existing group. The caller can optionally
75 * associate a new cookie during this updation. GROUP_UPDATED or
76 * GROUP_UPDATE_FAILED notifications would be provided along with
77 * cookie depending on the result of the operation on the device
78 *
79 * @param deviceId device identifier
80 * @param oldCookie cookie to be used to retrieve the existing group
81 * @param buckets immutable list of group bucket to be added
82 * @param newCookie immutable cookie to be used post update operation
83 * @param appId Application Id
84 */
85 void addBucketsToGroup(DeviceId deviceId,
86 GroupKey oldCookie,
87 GroupBuckets buckets,
88 GroupKey newCookie,
89 ApplicationId appId);
90
91 /**
92 * Remove buckets from existing group. The caller can optionally
93 * associate a new cookie during this updation. GROUP_UPDATED or
94 * GROUP_UPDATE_FAILED notifications would be provided along with
95 * cookie depending on the result of the operation on the device
96 *
97 * @param deviceId device identifier
98 * @param oldCookie cookie to be used to retrieve the existing group
99 * @param buckets immutable list of group bucket to be removed
100 * @param newCookie immutable cookie to be used post update operation
101 * @param appId Application Id
102 */
103 void removeBucketsFromGroup(Device deviceId,
104 GroupKey oldCookie,
105 GroupBuckets buckets,
106 GroupKey newCookie,
107 ApplicationId appId);
108
109 /**
110 * Delete a group associated to an application cookie.
111 * GROUP_DELETED or GROUP_DELETE_FAILED notifications would be
112 * provided along with cookie depending on the result of the
113 * operation on the device
114 *
115 * @param deviceId device identifier
116 * @param appCookie application cookie to be used for lookup
117 * @param appId Application Id
118 */
119 void removeGroup(Device deviceId, GroupKey appCookie, ApplicationId appId);
120
121 /**
122 * Retrieve all groups created by an application in the specified device
123 * as seen by current controller instance.
124 *
125 * @param deviceId device identifier
126 * @param appId application id
127 *
128 * @return collection of immutable group objects created by the application
129 */
130 Iterable<Group> getGroups(Device deviceId, ApplicationId appId);
131
132 /**
133 * Adds the specified group listener.
134 *
135 * @param listener group listener
136 */
137 void addListener(GroupListener listener);
138
139 /**
140 * Removes the specified group listener.
141 *
142 * @param listener group listener
143 */
144 void removeListener(GroupListener listener);
145}