FOR_ALL_INTERFACES (pim->vrf, ifp) {
struct pim_interface *pim_ifp = ifp->info;
struct listnode *grpnode;
- struct igmp_group *grp;
+ struct gm_group *grp;
if (!pim_ifp)
continue;
FOR_ALL_INTERFACES (pim->vrf, ifp) {
struct pim_interface *pim_ifp = ifp->info;
struct listnode *grpnode;
- struct igmp_group *grp;
+ struct gm_group *grp;
if (!pim_ifp)
continue;
FOR_ALL_INTERFACES (pim->vrf, ifp) {
struct pim_interface *pim_ifp = ifp->info;
struct listnode *grpnode;
- struct igmp_group *grp;
+ struct gm_group *grp;
if (!pim_ifp)
continue;
FOR_ALL_INTERFACES (pim->vrf, ifp) {
struct pim_interface *pim_ifp = ifp->info;
struct listnode *grpnode;
- struct igmp_group *grp;
+ struct gm_group *grp;
if (!pim_ifp)
continue;
/* scan interfaces */
FOR_ALL_INTERFACES (pim->vrf, ifp) {
struct pim_interface *pim_ifp = ifp->info;
- struct igmp_group *grp;
+ struct gm_group *grp;
struct pim_ifchannel *ch;
if (!pim_ifp)
#include "pim_time.h"
#include "pim_zebra.h"
-static void group_timer_off(struct igmp_group *group);
+static void group_timer_off(struct gm_group *group);
static int pim_igmp_general_query(struct thread *t);
/* This socket is used for TXing IGMP packets only, IGMP RX happens
int igmp_msg_len)
{
struct interface *ifp = igmp->interface;
- struct igmp_group *group;
+ struct gm_group *group;
struct in_addr group_addr;
on_trace(__func__, igmp->interface, from);
igmp->querier_query_interval = pim_ifp->default_query_interval;
}
-static void igmp_group_free(struct igmp_group *group)
+static void igmp_group_free(struct gm_group *group)
{
list_delete(&group->group_source_list);
--pim_ifp->pim->igmp_group_count;
}
-void igmp_group_delete(struct igmp_group *group)
+void igmp_group_delete(struct gm_group *group)
{
struct listnode *src_node;
struct listnode *src_nextnode;
igmp_group_free(group);
}
-void igmp_group_delete_empty_include(struct igmp_group *group)
+void igmp_group_delete_empty_include(struct gm_group *group)
{
assert(!group->group_filtermode_isexcl);
assert(!listcount(group->group_source_list));
static unsigned int igmp_group_hash_key(const void *arg)
{
- const struct igmp_group *group = arg;
+ const struct gm_group *group = arg;
return jhash_1word(group->group_addr.s_addr, 0);
}
static bool igmp_group_hash_equal(const void *arg1, const void *arg2)
{
- const struct igmp_group *g1 = (const struct igmp_group *)arg1;
- const struct igmp_group *g2 = (const struct igmp_group *)arg2;
+ const struct gm_group *g1 = (const struct gm_group *)arg1;
+ const struct gm_group *g2 = (const struct gm_group *)arg2;
if (g1->group_addr.s_addr == g2->group_addr.s_addr)
return true;
void pim_igmp_if_reset(struct pim_interface *pim_ifp)
{
struct listnode *grp_node, *grp_nextnode;
- struct igmp_group *grp;
+ struct gm_group *grp;
for (ALL_LIST_ELEMENTS(pim_ifp->group_list, grp_node, grp_nextnode,
grp)) {
*/
static int igmp_group_timer(struct thread *t)
{
- struct igmp_group *group;
+ struct gm_group *group;
group = THREAD_ARG(t);
return 0;
}
-static void group_timer_off(struct igmp_group *group)
+static void group_timer_off(struct gm_group *group)
{
if (!group->t_group_timer)
return;
THREAD_OFF(group->t_group_timer);
}
-void igmp_group_timer_on(struct igmp_group *group, long interval_msec,
+void igmp_group_timer_on(struct gm_group *group, long interval_msec,
const char *ifname)
{
group_timer_off(group);
interval_msec, &group->t_group_timer);
}
-struct igmp_group *find_group_by_addr(struct igmp_sock *igmp,
- struct in_addr group_addr)
+struct gm_group *find_group_by_addr(struct igmp_sock *igmp,
+ struct in_addr group_addr)
{
- struct igmp_group lookup;
+ struct gm_group lookup;
struct pim_interface *pim_ifp = igmp->interface->info;
lookup.group_addr.s_addr = group_addr.s_addr;
return hash_lookup(pim_ifp->group_hash, &lookup);
}
-struct igmp_group *igmp_add_group_by_addr(struct igmp_sock *igmp,
- struct in_addr group_addr)
+struct gm_group *igmp_add_group_by_addr(struct igmp_sock *igmp,
+ struct in_addr group_addr)
{
- struct igmp_group *group;
+ struct gm_group *group;
struct pim_interface *pim_ifp = igmp->interface->info;
group = find_group_by_addr(igmp, group_addr);
return group;
}
-void igmp_send_query(int igmp_version, struct igmp_group *group, int fd,
+void igmp_send_query(int igmp_version, struct gm_group *group, int fd,
const char *ifname, char *query_buf, int query_buf_size,
int num_sources, struct in_addr dst_addr,
struct in_addr group_addr,
struct gm_source {
struct in_addr source_addr;
struct thread *t_source_timer;
- struct igmp_group *source_group; /* back pointer */
+ struct gm_group *source_group; /* back pointer */
time_t source_creation;
uint32_t source_flags;
struct channel_oil *source_channel_oil;
int source_query_retransmit_count;
};
-struct igmp_group {
+struct gm_group {
/*
RFC 3376: 6.2.2. Definition of Group Timers
int64_t last_igmp_v2_report_dsec;
};
-struct igmp_group *find_group_by_addr(struct igmp_sock *igmp,
- struct in_addr group_addr);
-struct igmp_group *igmp_add_group_by_addr(struct igmp_sock *igmp,
- struct in_addr group_addr);
+struct gm_group *find_group_by_addr(struct igmp_sock *igmp,
+ struct in_addr group_addr);
+struct gm_group *igmp_add_group_by_addr(struct igmp_sock *igmp,
+ struct in_addr group_addr);
-struct gm_source *igmp_get_source_by_addr(struct igmp_group *group,
- struct in_addr src_addr,
- bool *created);
+struct gm_source *igmp_get_source_by_addr(struct gm_group *group,
+ struct in_addr src_addr,
+ bool *created);
-void igmp_group_delete_empty_include(struct igmp_group *group);
+void igmp_group_delete_empty_include(struct gm_group *group);
void igmp_startup_mode_on(struct igmp_sock *igmp);
-void igmp_group_timer_on(struct igmp_group *group, long interval_msec,
+void igmp_group_timer_on(struct gm_group *group, long interval_msec,
const char *ifname);
-void igmp_send_query(int igmp_version, struct igmp_group *group, int fd,
+void igmp_send_query(int igmp_version, struct gm_group *group, int fd,
const char *ifname, char *query_buf, int query_buf_size,
int num_sources, struct in_addr dst_addr,
struct in_addr group_addr,
int query_max_response_time_dsec, uint8_t s_flag,
uint8_t querier_robustness_variable,
uint16_t querier_query_interval);
-void igmp_group_delete(struct igmp_group *group);
+void igmp_group_delete(struct gm_group *group);
void igmp_send_query_on_intf(struct interface *ifp, int igmp_ver);
#endif /* PIM_IGMP_H */
}
}
-void igmp_v2_send_query(struct igmp_group *group, int fd, const char *ifname,
+void igmp_v2_send_query(struct gm_group *group, int fd, const char *ifname,
char *query_buf, struct in_addr dst_addr,
struct in_addr group_addr,
int query_max_response_time_dsec)
#ifndef PIM_IGMPV2_H
#define PIM_IGMPV2_H
-void igmp_v2_send_query(struct igmp_group *group, int fd, const char *ifname,
+void igmp_v2_send_query(struct gm_group *group, int fd, const char *ifname,
char *query_buf, struct in_addr dst_addr,
struct in_addr group_addr,
int query_max_response_time_dsec);
#include "pim_zebra.h"
#include "pim_oil.h"
-static void group_retransmit_timer_on(struct igmp_group *group);
-static long igmp_group_timer_remain_msec(struct igmp_group *group);
+static void group_retransmit_timer_on(struct gm_group *group);
+static long igmp_group_timer_remain_msec(struct gm_group *group);
static long igmp_source_timer_remain_msec(struct gm_source *source);
-static void group_query_send(struct igmp_group *group);
-static void source_query_send_by_flag(struct igmp_group *group,
+static void group_query_send(struct gm_group *group);
+static void source_query_send_by_flag(struct gm_group *group,
int num_sources_tosend);
static void on_trace(const char *label, struct interface *ifp,
}
}
-static inline long igmp_gmi_msec(struct igmp_group *group)
+static inline long igmp_gmi_msec(struct gm_group *group)
{
struct pim_interface *pim_ifp = group->interface->info;
struct igmp_sock *igmp;
pim_ifp->query_max_response_time_dsec);
}
-void igmp_group_reset_gmi(struct igmp_group *group)
+void igmp_group_reset_gmi(struct gm_group *group)
{
long group_membership_interval_msec;
struct interface *ifp;
static int igmp_source_timer(struct thread *t)
{
struct gm_source *source;
- struct igmp_group *group;
+ struct gm_group *group;
source = THREAD_ARG(t);
return 0;
}
-static void source_timer_off(struct igmp_group *group,
- struct gm_source *source)
+static void source_timer_off(struct gm_group *group, struct gm_source *source)
{
if (!source->t_source_timer)
return;
THREAD_OFF(source->t_source_timer);
}
-static void igmp_source_timer_on(struct igmp_group *group,
+static void igmp_source_timer_on(struct gm_group *group,
struct gm_source *source, long interval_msec)
{
source_timer_off(group, source);
igmp_source_forward_start(pim_ifp->pim, source);
}
-void igmp_source_reset_gmi(struct igmp_group *group, struct gm_source *source)
+void igmp_source_reset_gmi(struct gm_group *group, struct gm_source *source)
{
long group_membership_interval_msec;
struct interface *ifp;
igmp_source_timer_on(group, source, group_membership_interval_msec);
}
-static void source_mark_delete_flag(struct igmp_group *group)
+static void source_mark_delete_flag(struct gm_group *group)
{
struct listnode *src_node;
struct gm_source *src;
}
}
-static void source_mark_send_flag(struct igmp_group *group)
+static void source_mark_send_flag(struct gm_group *group)
{
struct listnode *src_node;
struct gm_source *src;
}
}
-static int source_mark_send_flag_by_timer(struct igmp_group *group)
+static int source_mark_send_flag_by_timer(struct gm_group *group)
{
struct listnode *src_node;
struct gm_source *src;
/*
Any source (*,G) is forwarded only if mode is EXCLUDE {empty}
*/
-static void group_exclude_fwd_anysrc_ifempty(struct igmp_group *group)
+static void group_exclude_fwd_anysrc_ifempty(struct gm_group *group)
{
struct pim_interface *pim_ifp = group->interface->info;
*/
void igmp_source_delete(struct gm_source *source)
{
- struct igmp_group *group;
+ struct gm_group *group;
struct in_addr src;
group = source->source_group;
igmp_source_delete(src);
}
-struct gm_source *igmp_find_source_by_addr(struct igmp_group *group,
- struct in_addr src_addr)
+struct gm_source *igmp_find_source_by_addr(struct gm_group *group,
+ struct in_addr src_addr)
{
struct listnode *src_node;
struct gm_source *src;
return 0;
}
-struct gm_source *igmp_get_source_by_addr(struct igmp_group *group,
- struct in_addr src_addr, bool *new)
+struct gm_source *igmp_get_source_by_addr(struct gm_group *group,
+ struct in_addr src_addr, bool *new)
{
struct gm_source *src;
struct in_addr *sources)
{
struct gm_source *source;
- struct igmp_group *group;
+ struct gm_group *group;
int i;
if (num_sources == 0) {
allow(igmp, from, group_addr, num_sources, sources);
}
-static void isex_excl(struct igmp_group *group, int num_sources,
+static void isex_excl(struct gm_group *group, int num_sources,
struct in_addr *sources)
{
struct gm_source *source;
source_delete_by_flag(group->group_source_list);
}
-static void isex_incl(struct igmp_group *group, int num_sources,
+static void isex_incl(struct gm_group *group, int num_sources,
struct in_addr *sources)
{
int i;
struct in_addr *sources, int from_igmp_v2_report)
{
struct interface *ifp = igmp->interface;
- struct igmp_group *group;
+ struct gm_group *group;
on_trace(__func__, ifp, from, group_addr, num_sources, sources);
igmp_group_reset_gmi(group);
}
-static void toin_incl(struct igmp_group *group, int num_sources,
+static void toin_incl(struct gm_group *group, int num_sources,
struct in_addr *sources)
{
int num_sources_tosend = listcount(group->group_source_list);
}
}
-static void toin_excl(struct igmp_group *group, int num_sources,
+static void toin_excl(struct gm_group *group, int num_sources,
struct in_addr *sources)
{
int num_sources_tosend;
struct in_addr *sources)
{
struct interface *ifp = igmp->interface;
- struct igmp_group *group;
+ struct gm_group *group;
on_trace(__func__, ifp, from, group_addr, num_sources, sources);
}
}
-static void toex_incl(struct igmp_group *group, int num_sources,
+static void toex_incl(struct gm_group *group, int num_sources,
struct in_addr *sources)
{
int num_sources_tosend = 0;
group_exclude_fwd_anysrc_ifempty(group);
}
-static void toex_excl(struct igmp_group *group, int num_sources,
+static void toex_excl(struct gm_group *group, int num_sources,
struct in_addr *sources)
{
int num_sources_tosend = 0;
struct in_addr *sources)
{
struct interface *ifp = igmp->interface;
- struct igmp_group *group;
+ struct gm_group *group;
on_trace(__func__, ifp, from, group_addr, num_sources, sources);
allow(igmp, from, group_addr, num_sources, sources);
}
-static void igmp_send_query_group(struct igmp_group *group, char *query_buf,
+static void igmp_send_query_group(struct gm_group *group, char *query_buf,
size_t query_buf_size, int num_sources,
int s_flag)
{
larger than LMQT, the "Suppress Router-Side Processing" bit is set
in the query message.
*/
-static void group_retransmit_group(struct igmp_group *group)
+static void group_retransmit_group(struct gm_group *group)
{
struct pim_interface *pim_ifp;
long lmqc; /* Last Member Query Count */
or equal to LMQT. If either of the two calculated messages does not
contain any sources, then its transmission is suppressed.
*/
-static int group_retransmit_sources(struct igmp_group *group,
+static int group_retransmit_sources(struct gm_group *group,
int send_with_sflag_set)
{
struct pim_interface *pim_ifp;
static int igmp_group_retransmit(struct thread *t)
{
- struct igmp_group *group;
+ struct gm_group *group;
int num_retransmit_sources_left;
int send_with_sflag_set; /* boolean */
if group retransmit timer isn't running, starts it;
otherwise, do nothing
*/
-static void group_retransmit_timer_on(struct igmp_group *group)
+static void group_retransmit_timer_on(struct gm_group *group)
{
struct pim_interface *pim_ifp;
long lmqi_msec; /* Last Member Query Interval */
&group->t_group_query_retransmit_timer);
}
-static long igmp_group_timer_remain_msec(struct igmp_group *group)
+static long igmp_group_timer_remain_msec(struct gm_group *group)
{
return pim_time_timer_remain_msec(group->t_group_timer);
}
/*
RFC3376: 6.6.3.1. Building and Sending Group Specific Queries
*/
-static void group_query_send(struct igmp_group *group)
+static void group_query_send(struct gm_group *group)
{
struct pim_interface *pim_ifp;
long lmqc; /* Last Member Query Count */
/*
RFC3376: 6.6.3.2. Building and Sending Group and Source Specific Queries
*/
-static void source_query_send_by_flag(struct igmp_group *group,
+static void source_query_send_by_flag(struct gm_group *group,
int num_sources_tosend)
{
struct pim_interface *pim_ifp;
group_retransmit_timer_on(group);
}
-static void block_excl(struct igmp_group *group, int num_sources,
+static void block_excl(struct gm_group *group, int num_sources,
struct in_addr *sources)
{
int num_sources_tosend = 0;
}
}
-static void block_incl(struct igmp_group *group, int num_sources,
+static void block_incl(struct gm_group *group, int num_sources,
struct in_addr *sources)
{
int num_sources_tosend = 0;
struct in_addr *sources)
{
struct interface *ifp = igmp->interface;
- struct igmp_group *group;
+ struct gm_group *group;
on_trace(__func__, ifp, from, group_addr, num_sources, sources);
}
}
-void igmp_group_timer_lower_to_lmqt(struct igmp_group *group)
+void igmp_group_timer_lower_to_lmqt(struct gm_group *group)
{
struct interface *ifp;
struct pim_interface *pim_ifp;
void igmp_source_timer_lower_to_lmqt(struct gm_source *source)
{
- struct igmp_group *group;
+ struct gm_group *group;
struct interface *ifp;
struct pim_interface *pim_ifp;
char *ifname;
igmp_source_timer_on(group, source, lmqt_msec);
}
-void igmp_v3_send_query(struct igmp_group *group, int fd, const char *ifname,
+void igmp_v3_send_query(struct gm_group *group, int fd, const char *ifname,
char *query_buf, int query_buf_size, int num_sources,
struct in_addr dst_addr, struct in_addr group_addr,
int query_max_response_time_dsec, uint8_t s_flag,
"General IGMP query v3 from %s on %s: Suppress Router-Side Processing flag is clear",
from_str, ifp->name);
} else {
- struct igmp_group *group;
+ struct gm_group *group;
/* this is a non-general query: perform timer updates */
/* OHPI: Older Host Present Interval */
#define PIM_IGMP_OHPI_DSEC(qrv,qqi,qri_dsec) ((qrv) * (10 * (qqi)) + (qri_dsec))
-void igmp_group_reset_gmi(struct igmp_group *group);
-void igmp_source_reset_gmi(struct igmp_group *group,
- struct gm_source *source);
+void igmp_group_reset_gmi(struct gm_group *group);
+void igmp_source_reset_gmi(struct gm_group *group, struct gm_source *source);
void igmp_source_free(struct gm_source *source);
void igmp_source_delete(struct gm_source *source);
struct in_addr group_addr, int num_sources,
struct in_addr *sources);
-void igmp_group_timer_lower_to_lmqt(struct igmp_group *group);
+void igmp_group_timer_lower_to_lmqt(struct gm_group *group);
void igmp_source_timer_lower_to_lmqt(struct gm_source *source);
-struct gm_source *igmp_find_source_by_addr(struct igmp_group *group,
- struct in_addr src_addr);
+struct gm_source *igmp_find_source_by_addr(struct gm_group *group,
+ struct in_addr src_addr);
-void igmp_v3_send_query(struct igmp_group *group, int fd, const char *ifname,
+void igmp_v3_send_query(struct gm_group *group, int fd, const char *ifname,
char *query_buf, int query_buf_size, int num_sources,
struct in_addr dst_addr, struct in_addr group_addr,
int query_max_response_time_dsec, uint8_t s_flag,
{
struct pim_interface *pim_ifp;
struct listnode *grpnode;
- struct igmp_group *grp;
+ struct gm_group *grp;
pim_ifp = ifp->info;
struct listnode *sock_node;
struct igmp_sock *igmp;
struct listnode *grp_node;
- struct igmp_group *grp;
+ struct gm_group *grp;
if (pim_ifp->query_max_response_time_dsec
== query_max_response_time_dsec)
}
void igmp_anysource_forward_start(struct pim_instance *pim,
- struct igmp_group *group)
+ struct gm_group *group)
{
struct gm_source *source;
struct in_addr src_addr = {.s_addr = 0};
igmp_source_forward_start(pim, source);
}
-void igmp_anysource_forward_stop(struct igmp_group *group)
+void igmp_anysource_forward_stop(struct gm_group *group)
{
struct gm_source *source;
struct in_addr star = {.s_addr = 0};
struct gm_source *source)
{
struct prefix_sg sg;
- struct igmp_group *group = source->source_group;
+ struct gm_group *group = source->source_group;
struct pim_ifchannel *ch;
if ((source->source_addr.s_addr != INADDR_ANY)
FOR_ALL_INTERFACES (pim->vrf, ifp) {
struct pim_interface *pim_ifp = ifp->info;
struct listnode *grpnode;
- struct igmp_group *grp;
+ struct gm_group *grp;
struct pim_ifchannel *ch, *ch_temp;
if (!pim_ifp)
struct gm_source *source)
{
struct pim_interface *pim_oif;
- struct igmp_group *group;
+ struct gm_group *group;
struct prefix_sg sg;
int result;
int input_iface_vif_index = 0;
*/
void igmp_source_forward_stop(struct gm_source *source)
{
- struct igmp_group *group;
+ struct gm_group *group;
struct prefix_sg sg;
int result;
void pim_scan_oil(struct pim_instance *pim_matcher);
void igmp_anysource_forward_start(struct pim_instance *pim,
- struct igmp_group *group);
-void igmp_anysource_forward_stop(struct igmp_group *group);
+ struct gm_group *group);
+void igmp_anysource_forward_stop(struct gm_group *group);
void igmp_source_forward_start(struct pim_instance *pim,
struct gm_source *source);