1 /* Hey Emacs use -*- mode: C -*- */
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:
9 * http://www.apache.org/licenses/LICENSE-2.0
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 *------------------------------------------------------------------
19 option version = "1.0.0";
20 import "vnet/ip/ip_types.api";
21 import "vnet/interface_types.api";
34 * Used by a 'host' to enable the reception/listening of packets for a specific
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:
41 * (interface, multicast-address, filter-mode, source-list)
43 * The socket state evolves in response to each invocation of
44 * IPMulticastListen on the socket, as follows:
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.
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
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
67 vl_api_filter_mode_t filter;
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];
73 autoreply define igmp_listen
78 vl_api_igmp_group_t group;
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.
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
92 autoreply define igmp_enable_disable
99 vl_api_interface_index_t sw_if_index;
104 * Add/del proxy device on specified VRF.
105 * Interface must be IGMP enabled in HOST mode.
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
113 autoreply define igmp_proxy_device_add_del
120 vl_api_interface_index_t sw_if_index;
125 * Add/del downstream interface to/from proxy device.
126 * Interface must be IGMP enabled in ROUTER mode.
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
134 autoreply define igmp_proxy_device_add_del_interface
141 vl_api_interface_index_t sw_if_index;
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)
155 vl_api_interface_index_t sw_if_index;
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
169 vl_api_interface_index_t sw_if_index;
170 vl_api_ip4_address_t saddr;
171 vl_api_ip4_address_t gaddr;
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
179 autoreply define igmp_clear_interface
184 vl_api_interface_index_t sw_if_index;
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
194 autoreply define want_igmp_events
204 rpc want_igmp_events returns want_igmp_events_reply
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
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;
226 * @brief enum to specify either ASM or SSM semantics
228 enum group_prefix_type
235 * @brief Definition of a Group prefix and its type
239 vl_api_group_prefix_type_t type;
240 vl_api_prefix_t prefix;
244 * @brief Configure a prefix for SSM or ASM semantics
245 * @param address - Prefix address
246 * @param address_length - Prefix length
248 autoreply define igmp_group_prefix_set
253 vl_api_group_prefix_t gp;
256 define igmp_group_prefix_dump
262 define igmp_group_prefix_details
266 vl_api_group_prefix_t gp;
272 * eval: (c-set-style "gnu")