FD.io VPP  v19.08.2-294-g37e99c22d
Vector Packet Processing
igmp_config.h
Go to the documentation of this file.
1 /*
2  *------------------------------------------------------------------
3  * Copyright (c) 2018 Cisco and/or its affiliates.
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  *------------------------------------------------------------------
16  */
17 
18 #ifndef __IGMP_CONFIG_H__
19 #define __IGMP_CONFIG_H__
20 
21 #include <igmp/igmp_types.h>
22 #include <igmp/igmp_timer.h>
23 #include <igmp/igmp_group.h>
24 
25 /**
26  * GENERAL_REPORT = On expiry send a general report
27  * GENERAL_QUERY = On expiry send a general query
28  */
29 #define foreach_igmp_config_timer_type \
30  _(GENERAL_REPORT, "general-report") \
31  _(GENERAL_QUERY, "general-query")
32 
34 {
35 #define _(v,s) IGMP_CONFIG_TIMER_##v,
37 #undef _
39 
40 #define IGMP_CONFIG_N_TIMERS (IGMP_CONFIG_TIMER_GENERAL_QUERY + 1)
41 
42 extern u8 *format_igmp_config_timer_type (u8 * s, va_list * args);
43 
44 /**
45  * @brief IGMP interface configuration
46 */
47 typedef struct igmp_config_t_
48 {
49  /**
50  * @param sw_if_index - interface sw_if_index
51  */
53 
54  /**
55  * @param adj_index - multicast adjacency index on the link
56  */
58 
59  /**
60  * @param mode - host or router
61  */
63 
64  /**
65  * Robustness variable (section 5.1)
66  */
68 
69  /**
70  * Database of groups joined on the link
71  */
73 
74  /**
75  * A vector of scheduled query-response timers
76  */
78 
79  /**
80  * ID of a proxy device this configuration is on
81  */
84 
85 #define FOR_EACH_GROUP(_group, _config, _body) \
86 do { \
87  igmp_key_t *__key__; \
88  u32 __gid__; \
89  hash_foreach_mem(__key__, __gid__, _config->igmp_group_by_key, \
90  ({ \
91  _group = pool_elt_at_index(igmp_main.groups, __gid__); \
92  do { _body; } while (0); \
93  })); \
94  } while (0);
95 
96 /**
97  * @brief igmp clear config
98  * @param config - igmp configuration
99  *
100  * Clear all (S,G)s on specified config and remove this config from pool.
101  */
102 extern void igmp_clear_config (igmp_config_t * config);
103 
104 /**
105  * @brief igmp config lookup
106  * @param im - igmp main
107  * @param sw_if_index - interface sw_if_index
108  */
110 
111 /**
112  * Get the pool index for a config
113  */
114 extern u32 igmp_config_index (const igmp_config_t * c);
115 
116 /**
117  * Get the config from the pool index
118  */
119 extern igmp_config_t *igmp_config_get (u32 index);
120 
121 /**
122  * @brief igmp group lookup
123  * @param config - igmp configuration
124  * @param key - igmp key
125 */
127  const igmp_key_t * key);
128 
129 extern u8 *format_igmp_config (u8 * s, va_list * args);
130 
131 #endif
132 
133 /*
134  * fd.io coding-style-patch-verification: ON
135  *
136  * Local Variables:
137  * eval: (c-set-style "gnu")
138  * End:
139  */
igmp_timer_id_t timers[IGMP_CONFIG_N_TIMERS]
A vector of scheduled query-response timers.
Definition: igmp_config.h:77
u8 * format_igmp_config_timer_type(u8 *s, va_list *args)
Definition: igmp_config.c:91
igmp_group_t * igmp_group_lookup(igmp_config_t *config, const igmp_key_t *key)
igmp group lookup
Definition: igmp_config.c:76
struct igmp_config_t_ igmp_config_t
IGMP interface configuration.
adj_index_t adj_index
Definition: igmp_config.h:57
unsigned char u8
Definition: types.h:56
enum igmp_config_timer_type_t_ igmp_config_timer_type_t
#define foreach_igmp_config_timer_type
GENERAL_REPORT = On expiry send a general report GENERAL_QUERY = On expiry send a general query...
Definition: igmp_config.h:29
unsigned int u32
Definition: types.h:88
uword * igmp_group_by_key
Database of groups joined on the link.
Definition: igmp_config.h:72
#define IGMP_CONFIG_N_TIMERS
Definition: igmp_config.h:40
u32 igmp_timer_id_t
The id of a running timer.
Definition: igmp_timer.h:26
svmdb_client_t * c
u32 adj_index_t
An index for adjacencies.
Definition: adj_types.h:30
void igmp_clear_config(igmp_config_t *config)
igmp clear config
Definition: igmp_config.c:22
u32 igmp_config_index(const igmp_config_t *c)
Get the pool index for a config.
Definition: igmp_config.c:64
ip46_address_t igmp_key_t
IGMP Key Used to index groups within an interface config and sources within a list.
Definition: igmp_types.h:49
u8 robustness_var
Robustness variable (section 5.1)
Definition: igmp_config.h:67
IGMP interface configuration.
Definition: igmp_config.h:47
u32 proxy_device_id
ID of a proxy device this configuration is on.
Definition: igmp_config.h:82
igmp_config_t * igmp_config_lookup(u32 sw_if_index)
igmp config lookup
Definition: igmp_config.c:45
IGMP group A multicast group address for which reception has been requested.
Definition: igmp_group.h:56
u64 uword
Definition: types.h:112
typedef key
Definition: ipsec.api:247
igmp_config_timer_type_t_
Definition: igmp_config.h:33
enum igmp_mode_t_ igmp_mode_t
igmp_mode_t mode
Definition: igmp_config.h:62
igmp_config_t * igmp_config_get(u32 index)
Get the config from the pool index.
Definition: igmp_config.c:70
u8 * format_igmp_config(u8 *s, va_list *args)
Definition: igmp_config.c:106