diff options
Diffstat (limited to 'pimd/pim_igmpv3.c')
| -rw-r--r-- | pimd/pim_igmpv3.c | 169 |
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; |
