summaryrefslogtreecommitdiff
path: root/pimd/pim_igmpv3.c
diff options
context:
space:
mode:
Diffstat (limited to 'pimd/pim_igmpv3.c')
-rw-r--r--pimd/pim_igmpv3.c169
1 files changed, 84 insertions, 85 deletions
diff --git a/pimd/pim_igmpv3.c b/pimd/pim_igmpv3.c
index 13db11fa80..614213bfa5 100644
--- a/pimd/pim_igmpv3.c
+++ b/pimd/pim_igmpv3.c
@@ -33,11 +33,11 @@
#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 long igmp_source_timer_remain_msec(struct igmp_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_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 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,
@@ -57,10 +57,10 @@ 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;
+ struct gm_sock *igmp;
struct listnode *sock_node;
long qrv = 0, qqi = 0;
@@ -73,7 +73,7 @@ static inline long igmp_gmi_msec(struct igmp_group *group)
pim_ifp->igmp_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;
@@ -120,8 +120,8 @@ void igmp_group_reset_gmi(struct igmp_group *group)
static int igmp_source_timer(struct thread *t)
{
- struct igmp_source *source;
- struct igmp_group *group;
+ struct gm_source *source;
+ struct gm_group *group;
source = THREAD_ARG(t);
@@ -183,8 +183,7 @@ static int igmp_source_timer(struct thread *t)
return 0;
}
-static void source_timer_off(struct igmp_group *group,
- struct igmp_source *source)
+static void source_timer_off(struct gm_group *group, struct gm_source *source)
{
if (!source->t_source_timer)
return;
@@ -204,8 +203,8 @@ static void source_timer_off(struct igmp_group *group,
THREAD_OFF(source->t_source_timer);
}
-static void igmp_source_timer_on(struct igmp_group *group,
- struct igmp_source *source, long interval_msec)
+static void igmp_source_timer_on(struct gm_group *group,
+ struct gm_source *source, long interval_msec)
{
source_timer_off(group, source);
struct pim_interface *pim_ifp = group->interface->info;
@@ -234,7 +233,7 @@ static void igmp_source_timer_on(struct igmp_group *group,
igmp_source_forward_start(pim_ifp->pim, source);
}
-void igmp_source_reset_gmi(struct igmp_group *group, struct igmp_source *source)
+void igmp_source_reset_gmi(struct gm_group *group, struct gm_source *source)
{
long group_membership_interval_msec;
struct interface *ifp;
@@ -262,30 +261,30 @@ void igmp_source_reset_gmi(struct igmp_group *group, struct igmp_source *source)
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 igmp_source *src;
+ struct gm_source *src;
for (ALL_LIST_ELEMENTS_RO(group->group_source_list, src_node, src)) {
IGMP_SOURCE_DO_DELETE(src->source_flags);
}
}
-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 igmp_source *src;
+ struct gm_source *src;
for (ALL_LIST_ELEMENTS_RO(group->group_source_list, src_node, src)) {
IGMP_SOURCE_DO_SEND(src->source_flags);
}
}
-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 igmp_source *src;
+ struct gm_source *src;
int num_marked_sources = 0;
for (ALL_LIST_ELEMENTS_RO(group->group_source_list, src_node, src)) {
@@ -304,7 +303,7 @@ static int source_mark_send_flag_by_timer(struct igmp_group *group)
static void source_clear_send_flag(struct list *source_list)
{
struct listnode *src_node;
- struct igmp_source *src;
+ struct gm_source *src;
for (ALL_LIST_ELEMENTS_RO(source_list, src_node, src)) {
IGMP_SOURCE_DONT_SEND(src->source_flags);
@@ -314,7 +313,7 @@ static void source_clear_send_flag(struct list *source_list)
/*
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;
@@ -325,7 +324,7 @@ static void group_exclude_fwd_anysrc_ifempty(struct igmp_group *group)
}
}
-void igmp_source_free(struct igmp_source *source)
+void igmp_source_free(struct gm_source *source)
{
/* make sure there is no source timer running */
assert(!source->t_source_timer);
@@ -333,7 +332,7 @@ void igmp_source_free(struct igmp_source *source)
XFREE(MTYPE_PIM_IGMP_GROUP_SOURCE, source);
}
-static void source_channel_oil_detach(struct igmp_source *source)
+static void source_channel_oil_detach(struct gm_source *source)
{
if (source->source_channel_oil) {
pim_channel_oil_del(source->source_channel_oil, __func__);
@@ -345,9 +344,9 @@ static void source_channel_oil_detach(struct igmp_source *source)
igmp_source_delete: stop fowarding, and delete the source
igmp_source_forward_stop: stop fowarding, but keep the source
*/
-void igmp_source_delete(struct igmp_source *source)
+void igmp_source_delete(struct gm_source *source)
{
- struct igmp_group *group;
+ struct gm_group *group;
struct in_addr src;
group = source->source_group;
@@ -410,7 +409,7 @@ static void source_delete_by_flag(struct list *source_list)
{
struct listnode *src_node;
struct listnode *src_nextnode;
- struct igmp_source *src;
+ struct gm_source *src;
for (ALL_LIST_ELEMENTS(source_list, src_node, src_nextnode, src))
if (IGMP_SOURCE_TEST_DELETE(src->source_flags))
@@ -421,18 +420,18 @@ void igmp_source_delete_expired(struct list *source_list)
{
struct listnode *src_node;
struct listnode *src_nextnode;
- struct igmp_source *src;
+ struct gm_source *src;
for (ALL_LIST_ELEMENTS(source_list, src_node, src_nextnode, src))
if (!src->t_source_timer)
igmp_source_delete(src);
}
-struct igmp_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 igmp_source *src;
+ struct gm_source *src;
for (ALL_LIST_ELEMENTS_RO(group->group_source_list, src_node, src))
if (src_addr.s_addr == src->source_addr.s_addr)
@@ -441,10 +440,10 @@ struct igmp_source *igmp_find_source_by_addr(struct igmp_group *group,
return 0;
}
-struct igmp_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 igmp_source *src;
+ struct gm_source *src;
if (new)
*new = false;
@@ -482,12 +481,12 @@ struct igmp_source *igmp_get_source_by_addr(struct igmp_group *group,
return src;
}
-static void allow(struct igmp_sock *igmp, struct in_addr from,
+static void allow(struct gm_sock *igmp, struct in_addr from,
struct in_addr group_addr, int num_sources,
struct in_addr *sources)
{
- struct igmp_source *source;
- struct igmp_group *group;
+ struct gm_source *source;
+ struct gm_group *group;
int i;
if (num_sources == 0) {
@@ -549,7 +548,7 @@ static void allow(struct igmp_sock *igmp, struct in_addr from,
} /* scan received sources */
}
-void igmpv3_report_isin(struct igmp_sock *igmp, struct in_addr from,
+void igmpv3_report_isin(struct gm_sock *igmp, struct in_addr from,
struct in_addr group_addr, int num_sources,
struct in_addr *sources)
{
@@ -559,10 +558,10 @@ void igmpv3_report_isin(struct igmp_sock *igmp, struct in_addr from,
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 igmp_source *source;
+ struct gm_source *source;
int i;
/* EXCLUDE mode */
@@ -614,7 +613,7 @@ static void isex_excl(struct igmp_group *group, int num_sources,
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;
@@ -627,7 +626,7 @@ static void isex_incl(struct igmp_group *group, int num_sources,
/* scan received sources (B) */
for (i = 0; i < num_sources; ++i) {
- struct igmp_source *source;
+ struct gm_source *source;
struct in_addr *src_addr;
bool new;
@@ -659,12 +658,12 @@ static void isex_incl(struct igmp_group *group, int num_sources,
group_exclude_fwd_anysrc_ifempty(group);
}
-void igmpv3_report_isex(struct igmp_sock *igmp, struct in_addr from,
+void igmpv3_report_isex(struct gm_sock *igmp, struct in_addr from,
struct in_addr group_addr, int num_sources,
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);
@@ -696,7 +695,7 @@ void igmpv3_report_isex(struct igmp_sock *igmp, struct in_addr from,
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);
@@ -707,7 +706,7 @@ static void toin_incl(struct igmp_group *group, int num_sources,
/* Scan received sources (B) */
for (i = 0; i < num_sources; ++i) {
- struct igmp_source *source;
+ struct gm_source *source;
struct in_addr *src_addr;
bool new;
@@ -734,7 +733,7 @@ static void toin_incl(struct igmp_group *group, int num_sources,
}
}
-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;
@@ -745,7 +744,7 @@ static void toin_excl(struct igmp_group *group, int num_sources,
/* Scan received sources (A) */
for (i = 0; i < num_sources; ++i) {
- struct igmp_source *source;
+ struct gm_source *source;
struct in_addr *src_addr;
bool new;
@@ -776,12 +775,12 @@ static void toin_excl(struct igmp_group *group, int num_sources,
group_query_send(group);
}
-void igmpv3_report_toin(struct igmp_sock *igmp, struct in_addr from,
+void igmpv3_report_toin(struct gm_sock *igmp, struct in_addr from,
struct in_addr group_addr, int num_sources,
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);
@@ -812,7 +811,7 @@ void igmpv3_report_toin(struct igmp_sock *igmp, struct in_addr from,
}
}
-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;
@@ -828,7 +827,7 @@ static void toex_incl(struct igmp_group *group, int num_sources,
/* Scan received sources (B) */
for (i = 0; i < num_sources; ++i) {
- struct igmp_source *source;
+ struct gm_source *source;
struct in_addr *src_addr;
bool new;
@@ -861,7 +860,7 @@ static void toex_incl(struct igmp_group *group, int num_sources,
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;
@@ -874,7 +873,7 @@ static void toex_excl(struct igmp_group *group, int num_sources,
source_clear_send_flag(group->group_source_list);
if (num_sources == 0) {
- struct igmp_source *source;
+ struct gm_source *source;
struct in_addr any = {.s_addr = INADDR_ANY};
source = igmp_find_source_by_addr(group, any);
@@ -884,7 +883,7 @@ static void toex_excl(struct igmp_group *group, int num_sources,
/* scan received sources (A) */
for (i = 0; i < num_sources; ++i) {
- struct igmp_source *source;
+ struct gm_source *source;
struct in_addr *src_addr;
bool new;
@@ -937,12 +936,12 @@ static void toex_excl(struct igmp_group *group, int num_sources,
}
}
-void igmpv3_report_toex(struct igmp_sock *igmp, struct in_addr from,
+void igmpv3_report_toex(struct gm_sock *igmp, struct in_addr from,
struct in_addr group_addr, int num_sources,
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);
@@ -966,7 +965,7 @@ void igmpv3_report_toex(struct igmp_sock *igmp, struct in_addr from,
igmp_group_reset_gmi(group);
}
-void igmpv3_report_allow(struct igmp_sock *igmp, struct in_addr from,
+void igmpv3_report_allow(struct gm_sock *igmp, struct in_addr from,
struct in_addr group_addr, int num_sources,
struct in_addr *sources)
{
@@ -976,13 +975,13 @@ void igmpv3_report_allow(struct igmp_sock *igmp, struct in_addr from,
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)
{
struct interface *ifp = group->interface;
struct pim_interface *pim_ifp = ifp->info;
- struct igmp_sock *igmp;
+ struct gm_sock *igmp;
struct listnode *sock_node;
for (ALL_LIST_ELEMENTS_RO(pim_ifp->igmp_socket_list, sock_node, igmp)) {
@@ -1003,7 +1002,7 @@ static void igmp_send_query_group(struct igmp_group *group, char *query_buf,
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 */
@@ -1068,7 +1067,7 @@ static void group_retransmit_group(struct igmp_group *group)
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;
@@ -1084,7 +1083,7 @@ static int group_retransmit_sources(struct igmp_group *group,
int num_sources_tosend1;
int num_sources_tosend2;
struct listnode *src_node;
- struct igmp_source *src;
+ struct gm_source *src;
int num_retransmit_sources_left = 0;
source_addr1 = (struct in_addr *)(query_buf1 + IGMP_V3_SOURCES_OFFSET);
@@ -1215,7 +1214,7 @@ static int group_retransmit_sources(struct igmp_group *group,
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 */
@@ -1272,7 +1271,7 @@ static int igmp_group_retransmit(struct thread *t)
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 */
@@ -1301,12 +1300,12 @@ static void group_retransmit_timer_on(struct igmp_group *group)
&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);
}
-static long igmp_source_timer_remain_msec(struct igmp_source *source)
+static long igmp_source_timer_remain_msec(struct gm_source *source)
{
return pim_time_timer_remain_msec(source->t_source_timer);
}
@@ -1314,7 +1313,7 @@ static long igmp_source_timer_remain_msec(struct igmp_source *source)
/*
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 */
@@ -1339,12 +1338,12 @@ static void group_query_send(struct igmp_group *group)
/*
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;
struct listnode *src_node;
- struct igmp_source *src;
+ struct gm_source *src;
long lmqc; /* Last Member Query Count */
long lmqi_msec; /* Last Member Query Interval */
long lmqt_msec; /* Last Member Query Time */
@@ -1385,7 +1384,7 @@ static void source_query_send_by_flag(struct igmp_group *group,
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;
@@ -1396,7 +1395,7 @@ static void block_excl(struct igmp_group *group, int num_sources,
/* 2. scan received sources (A) */
for (i = 0; i < num_sources; ++i) {
- struct igmp_source *source;
+ struct gm_source *source;
struct in_addr *src_addr;
bool new;
@@ -1431,7 +1430,7 @@ static void block_excl(struct igmp_group *group, int num_sources,
}
}
-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;
@@ -1442,7 +1441,7 @@ static void block_incl(struct igmp_group *group, int num_sources,
/* 2. scan received sources (A) */
for (i = 0; i < num_sources; ++i) {
- struct igmp_source *source;
+ struct gm_source *source;
struct in_addr *src_addr;
src_addr = sources + i;
@@ -1462,12 +1461,12 @@ static void block_incl(struct igmp_group *group, int num_sources,
}
}
-void igmpv3_report_block(struct igmp_sock *igmp, struct in_addr from,
+void igmpv3_report_block(struct gm_sock *igmp, struct in_addr from,
struct in_addr group_addr, int num_sources,
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);
@@ -1486,7 +1485,7 @@ void igmpv3_report_block(struct igmp_sock *igmp, struct in_addr from,
}
}
-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;
@@ -1530,9 +1529,9 @@ void igmp_group_timer_lower_to_lmqt(struct igmp_group *group)
igmp_group_timer_on(group, lmqt_msec, ifname);
}
-void igmp_source_timer_lower_to_lmqt(struct igmp_source *source)
+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;
@@ -1566,7 +1565,7 @@ void igmp_source_timer_lower_to_lmqt(struct igmp_source *source)
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,
@@ -1691,7 +1690,7 @@ void igmp_v3_send_query(struct igmp_group *group, int fd, const char *ifname,
}
}
-void igmp_v3_recv_query(struct igmp_sock *igmp, const char *from_str,
+void igmp_v3_recv_query(struct gm_sock *igmp, const char *from_str,
char *igmp_msg)
{
struct interface *ifp;
@@ -1770,7 +1769,7 @@ void igmp_v3_recv_query(struct igmp_sock *igmp, const char *from_str,
"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 */
@@ -1804,7 +1803,7 @@ void igmp_v3_recv_query(struct igmp_sock *igmp, const char *from_str,
+ IGMP_V3_SOURCES_OFFSET);
for (i = 0; i < recv_num_sources; ++i) {
struct in_addr src_addr;
- struct igmp_source *src;
+ struct gm_source *src;
memcpy(&src_addr, sources + i,
sizeof(struct in_addr));
src = igmp_find_source_by_addr(
@@ -1827,7 +1826,7 @@ void igmp_v3_recv_query(struct igmp_sock *igmp, const char *from_str,
} /* s_flag is clear: timer updates */
}
-int igmp_v3_recv_report(struct igmp_sock *igmp, struct in_addr from,
+int igmp_v3_recv_report(struct gm_sock *igmp, struct in_addr from,
const char *from_str, char *igmp_msg, int igmp_msg_len)
{
int num_groups;