igmp.api revision 4a7fc4cf
1/* Hey Emacs use -*- mode: C -*- */
2/*
3 *------------------------------------------------------------------
4 * Copyright (c) 2017 Cisco and/or its affiliates.
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at:
8 *
9 *     http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *------------------------------------------------------------------
17 */
18
19option version = "1.0.0";
20import "vnet/ip/ip_types.api";
21import "vnet/interface_types.api";
22
23/**
24 * @brief Filter mode
25 */
26enum filter_mode {
27  EXCLUDE = 0,
28  INCLUDE = 1,
29};
30
31
32/**
33 * @brief
34 *   Used by a 'host' to enable the reception/listening of packets for a specific
35 *   multicast group
36 *
37 *  For each socket on which IPMulticastListen has been invoked, the
38 *  system records the desired multicast reception state for that socket.
39 *  That state conceptually consists of a set of records of the form:
40 *
41 *     (interface, multicast-address, filter-mode, source-list)
42 *
43 *  The socket state evolves in response to each invocation of
44 *  IPMulticastListen on the socket, as follows:
45 *
46 *  o If the requested filter mode is INCLUDE *and* the requested source
47 *    list is empty, then the entry corresponding to the requested
48 *    interface and multicast address is deleted if present.  If no such
49 *    entry is present, the request is ignored.
50 *
51 *  o If the requested filter mode is EXCLUDE *or* the requested source
52 *    list is non-empty, then the entry corresponding to the requested
53 *    interface and multicast address, if present, is changed to contain
54 *    the requested filter mode and source list.  If no such entry is
55 *    present, a new entry is created, using the parameters specified in
56 *    the request.
57 *
58 *   @param client_index - opaque cookie to identify the sender
59 *   @param context - sender context, to match reply w/ request
60 *   @param sw_if_index - interface sw index
61 *   @param filter - filter mode
62 *   @param saddr - source address
63 *   @param gaddr - group address
64 */
65typedef igmp_group
66{
67  vl_api_filter_mode_t filter;
68  u8 n_srcs;
69  vl_api_interface_index_t sw_if_index;
70  vl_api_ip4_address_t gaddr;
71  vl_api_ip4_address_t saddrs[n_srcs];
72};
73autoreply define igmp_listen
74{
75  u32 client_index;
76  u32 context;
77
78  vl_api_igmp_group_t group;
79};
80
81/**
82 * @brief
83 *   Used by a 'router' and 'host' to enable the reception of IGMP packets.
84 *   For hosts this must be called once before igmp_listen.
85 *
86 *   @param client_index - opaque cookie to identify the sender
87 *   @param context - sender context, to match reply w/ request
88 *   @param enable - if set, enable igmp messages on configuration
89 *   @param mode - Host (1) or router (0) mode
90 *   @param sw_if_index - interface sw index
91 */
92autoreply define igmp_enable_disable
93{
94  u32 client_index;
95  u32 context;
96
97  bool enable;
98  u8 mode;
99  vl_api_interface_index_t sw_if_index;
100};
101
102/**
103 * @brief
104 *  Add/del proxy device on specified VRF.
105 *  Interface must be IGMP enabled in HOST mode.
106 *
107 *   @param client_index - opaque cookie to identify the sender
108 *   @param context - sender context, to match reply w/ request
109 *   @param add - add (1) del (0)
110 *   @param vrf_id - VRF id
111 *   @param sw_if_index - upstream interface sw index
112 */
113autoreply define igmp_proxy_device_add_del
114{
115  u32 client_index;
116  u32 context;
117
118  u8 add;
119  u32 vrf_id;
120  vl_api_interface_index_t sw_if_index;
121};
122
123/**
124 * @brief
125 *  Add/del downstream interface to/from proxy device.
126 *  Interface must be IGMP enabled in ROUTER mode.
127 *
128 *   @param client_index - opaque cookie to identify the sender
129 *   @param context - sender context, to match reply w/ request
130 *   @param add - add (1) del (0)
131 *   @param vrf_id - VRF id
132 *   @param sw_if_index - downstream interface sw index
133 */
134autoreply define igmp_proxy_device_add_del_interface
135{
136  u32 client_index;
137  u32 context;
138
139  bool add;
140  u32 vrf_id;
141  vl_api_interface_index_t sw_if_index;
142};
143
144/**
145 * @brief dump (S,G)s from interface
146 * @param client_index - opaque cookie to identify the sender
147 * @param context - sender context, to match reply w/ request
148 * @param sw_if_index - interface sw index (~0 for all)
149*/
150define igmp_dump
151{
152  u32 client_index;
153  u32 context;
154
155  vl_api_interface_index_t sw_if_index;
156};
157
158/**
159 * @brief igmp details
160 * @param context - sender context, to match reply w/ request
161 * @param sw_if_index - interface sw index
162 * @param saddr - source address
163 * @param gaddr - group address
164 */
165define igmp_details
166{
167  u32 context;
168
169  vl_api_interface_index_t sw_if_index;
170  vl_api_ip4_address_t saddr;
171  vl_api_ip4_address_t gaddr;
172};
173
174/** \brief remove all (S,G)s from an interface
175    @param client_index - opaque cookie to identify the sender
176    @param context - sender context, to match reply w/ request
177    @param sw_if_index - interface sw index
178*/
179autoreply define igmp_clear_interface
180{
181  u32 client_index;
182  u32 context;
183
184  vl_api_interface_index_t sw_if_index;
185};
186
187/**
188 * @brief register for igmp events
189 * @param client_index - opaque cookie to identify the sender
190 * @param context - sender context, to match reply w/ request
191 * @param pid - sender's pid
192 * @param enable - 1 enable, 0 disable igmp events
193 */
194autoreply define want_igmp_events
195{
196  u32 client_index;
197  u32 context;
198
199  u32 enable;
200  u32 pid;
201};
202
203service {
204  rpc want_igmp_events returns want_igmp_events_reply
205    events igmp_event;
206};
207
208/**
209 * @brief igmp event details
210 * @param client_index - opaque cookie to identify the sender
211 * @param context - sender context, to match reply w/ request
212 * @param sw_if_index - interface sw index
213 * @param saddr - source address
214 * @param gaddr - group address
215 *@param filter - filter mode
216 */
217define igmp_event
218{
219  vl_api_interface_index_t sw_if_index;
220  vl_api_filter_mode_t filter;
221  vl_api_ip4_address_t saddr;
222  vl_api_ip4_address_t gaddr;
223};
224
225/**
226 * @brief enum to specify either ASM or SSM semantics
227 */
228enum group_prefix_type
229{
230  ASM = 0,
231  SSM = 1,
232};
233
234/**
235 * @brief Definition of a Group prefix and its type
236 */
237typedef group_prefix
238{
239  vl_api_group_prefix_type_t type;
240  vl_api_prefix_t prefix;
241};
242
243/**
244 * @brief Configure a prefix for SSM or ASM semantics
245 * @param address - Prefix address
246 * @param address_length - Prefix length
247 */
248autoreply define igmp_group_prefix_set
249{
250  u32 client_index;
251  u32 context;
252
253  vl_api_group_prefix_t gp;
254};
255
256define igmp_group_prefix_dump
257{
258  u32 client_index;
259  u32 context;
260};
261
262define igmp_group_prefix_details
263{
264  u32 context;
265
266  vl_api_group_prefix_t gp;
267};
268
269
270/*
271 * Local Variables:
272 * eval: (c-set-style "gnu")
273 * End:
274 */
275