FD.io VPP  v18.07.1-19-g511ce25
Vector Packet Processing
igmp_config.c
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 #include <igmp/igmp_config.h>
19 #include <igmp/igmp.h>
20 
21 void
23 {
24  igmp_group_t *group;
25  u32 ii;
26 
27  IGMP_DBG ("clear-config: %U",
29  vnet_get_main (), config->sw_if_index);
30 
31  /* *INDENT-OFF* */
32  FOR_EACH_GROUP (group, config,
33  ({
34  igmp_group_clear (group);
35  }));
36  /* *INDENT-ON* */
37 
38  for (ii = 0; ii < IGMP_CONFIG_N_TIMERS; ii++)
39  {
40  igmp_timer_retire (&config->timers[ii]);
41  }
42 }
43 
45 igmp_config_lookup (u32 sw_if_index)
46 {
47  igmp_main_t *im;
48 
49  im = &igmp_main;
50 
51  if (vec_len (im->igmp_config_by_sw_if_index) > sw_if_index)
52  {
53  u32 index;
54 
55  index = im->igmp_config_by_sw_if_index[sw_if_index];
56 
57  if (~0 != index)
58  return (vec_elt_at_index (im->configs, index));
59  }
60  return NULL;
61 }
62 
63 u32
65 {
66  return (c - igmp_main.configs);
67 }
68 
71 {
72  return (pool_elt_at_index (igmp_main.configs, index));
73 }
74 
77 {
78  uword *p;
79  igmp_group_t *group = NULL;
80  if (!config)
81  return NULL;
82 
83  p = hash_get_mem (config->igmp_group_by_key, key);
84  if (p)
85  group = pool_elt_at_index (igmp_main.groups, p[0]);
86 
87  return group;
88 }
89 
90 /*
91  * fd.io coding-style-patch-verification: ON
92  *
93  * Local Variables:
94  * eval: (c-set-style "gnu")
95  * End:
96  */
igmp_timer_id_t timers[IGMP_CONFIG_N_TIMERS]
A vector of scheduled query-respone timers.
Definition: igmp_config.h:73
void igmp_timer_retire(igmp_timer_id_t *tid)
Definition: igmp_timer.c:222
igmp_group_t * igmp_group_lookup(igmp_config_t *config, const igmp_key_t *key)
igmp group lookup
Definition: igmp_config.c:76
vnet_main_t * vnet_get_main(void)
Definition: misc.c:47
igmp_main_t igmp_main
Definition: igmp.c:36
#define NULL
Definition: clib.h:55
igmp_config_t * configs
pool of configs
Definition: igmp.h:94
format_function_t format_vnet_sw_if_index_name
#define IGMP_DBG(...)
Definition: igmp.h:37
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
#define vec_elt_at_index(v, i)
Get vector value at index i checking that i is in bounds.
igmp_config_t * igmp_config_get(u32 index)
Get the config from the pool index.
Definition: igmp_config.c:70
#define FOR_EACH_GROUP(_group, _config, _body)
Definition: igmp_config.h:76
unsigned int u32
Definition: types.h:88
uword * igmp_group_by_key
Database of groups joined on the link.
Definition: igmp_config.h:68
igmp_config_t * igmp_config_lookup(u32 sw_if_index)
igmp config lookup
Definition: igmp_config.c:45
#define IGMP_CONFIG_N_TIMERS
Definition: igmp_config.h:38
#define pool_elt_at_index(p, i)
Returns pointer to element at given index.
Definition: pool.h:464
collection of data related to IGMP
Definition: igmp.h:62
svmdb_client_t * c
u32 * igmp_config_by_sw_if_index
per-interface DB of configs
Definition: igmp.h:79
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
IGMP interface configuration.
Definition: igmp_config.h:43
igmp_group_t * groups
pool of groups
Definition: igmp.h:99
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
IGMP group A multicast group address for which reception has been requested.
Definition: igmp_group.h:55
u64 uword
Definition: types.h:112
#define hash_get_mem(h, key)
Definition: hash.h:269
void igmp_group_clear(igmp_group_t *group)
Definition: igmp_group.c:68