diff options
Diffstat (limited to 'pimd/pim_igmp.c')
| -rw-r--r-- | pimd/pim_igmp.c | 113 |
1 files changed, 50 insertions, 63 deletions
diff --git a/pimd/pim_igmp.c b/pimd/pim_igmp.c index 795c96c838..49ec804df5 100644 --- a/pimd/pim_igmp.c +++ b/pimd/pim_igmp.c @@ -39,7 +39,7 @@ #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 @@ -115,7 +115,7 @@ static void igmp_sock_dump(array_t *igmp_sock_array) int size = array_size(igmp_sock_array); for (int i = 0; i < size; ++i) { - struct igmp_sock *igmp = array_get(igmp_sock_array, i); + struct gm_sock *igmp = array_get(igmp_sock_array, i); zlog_debug("%s %s: [%d/%d] igmp_addr=%pI4 fd=%d", __FILE__, __func__, i, size, &igmp->ifaddr, @@ -124,11 +124,11 @@ static void igmp_sock_dump(array_t *igmp_sock_array) } #endif -struct igmp_sock *pim_igmp_sock_lookup_ifaddr(struct list *igmp_sock_list, - struct in_addr ifaddr) +struct gm_sock *pim_igmp_sock_lookup_ifaddr(struct list *igmp_sock_list, + struct in_addr ifaddr) { struct listnode *sock_node; - struct igmp_sock *igmp; + struct gm_sock *igmp; #ifdef IGMP_SOCK_DUMP igmp_sock_dump(igmp_sock_list); @@ -141,21 +141,9 @@ struct igmp_sock *pim_igmp_sock_lookup_ifaddr(struct list *igmp_sock_list, return NULL; } -struct igmp_sock *igmp_sock_lookup_by_fd(struct list *igmp_sock_list, int fd) -{ - struct listnode *sock_node; - struct igmp_sock *igmp; - - for (ALL_LIST_ELEMENTS_RO(igmp_sock_list, sock_node, igmp)) - if (fd == igmp->fd) - return igmp; - - return NULL; -} - static int pim_igmp_other_querier_expire(struct thread *t) { - struct igmp_sock *igmp; + struct gm_sock *igmp; igmp = THREAD_ARG(t); @@ -182,7 +170,7 @@ static int pim_igmp_other_querier_expire(struct thread *t) return 0; } -void pim_igmp_other_querier_timer_on(struct igmp_sock *igmp) +void pim_igmp_other_querier_timer_on(struct gm_sock *igmp) { long other_querier_present_interval_msec; struct pim_interface *pim_ifp; @@ -255,7 +243,7 @@ void pim_igmp_other_querier_timer_on(struct igmp_sock *igmp) &igmp->t_other_querier_timer); } -void pim_igmp_other_querier_timer_off(struct igmp_sock *igmp) +void pim_igmp_other_querier_timer_off(struct gm_sock *igmp) { assert(igmp); @@ -293,7 +281,7 @@ int igmp_validate_checksum(char *igmp_msg, int igmp_msg_len) return 0; } -static int igmp_recv_query(struct igmp_sock *igmp, int query_version, +static int igmp_recv_query(struct gm_sock *igmp, int query_version, int max_resp_code, struct in_addr from, const char *from_str, char *igmp_msg, int igmp_msg_len) @@ -324,7 +312,7 @@ static int igmp_recv_query(struct igmp_sock *igmp, int query_version, return 0; } - if (if_lookup_exact_address(&from, AF_INET, ifp->vrf_id)) { + if (if_address_is_local(&from, AF_INET, ifp->vrf->vrf_id)) { if (PIM_DEBUG_IGMP_PACKETS) zlog_debug("Recv IGMP query on interface: %s from ourself %s", ifp->name, from_str); @@ -423,12 +411,12 @@ static void on_trace(const char *label, struct interface *ifp, } } -static int igmp_v1_recv_report(struct igmp_sock *igmp, struct in_addr from, +static int igmp_v1_recv_report(struct gm_sock *igmp, struct in_addr from, const char *from_str, char *igmp_msg, 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); @@ -530,7 +518,7 @@ bool pim_igmp_verify_header(struct ip *ip_hdr, size_t len, size_t *hlen) return true; } -int pim_igmp_packet(struct igmp_sock *igmp, char *buf, size_t len) +int pim_igmp_packet(struct gm_sock *igmp, char *buf, size_t len) { struct ip *ip_hdr = (struct ip *)buf; size_t ip_hlen; /* ip header length in bytes */ @@ -619,7 +607,7 @@ int pim_igmp_packet(struct igmp_sock *igmp, char *buf, size_t len) return -1; } -void pim_igmp_general_query_on(struct igmp_sock *igmp) +void pim_igmp_general_query_on(struct gm_sock *igmp) { struct pim_interface *pim_ifp; int startup_mode; @@ -675,7 +663,7 @@ void pim_igmp_general_query_on(struct igmp_sock *igmp) query_interval, &igmp->t_igmp_query_timer); } -void pim_igmp_general_query_off(struct igmp_sock *igmp) +void pim_igmp_general_query_off(struct gm_sock *igmp) { assert(igmp); @@ -695,7 +683,7 @@ void pim_igmp_general_query_off(struct igmp_sock *igmp) /* Issue IGMP general query */ static int pim_igmp_general_query(struct thread *t) { - struct igmp_sock *igmp; + struct gm_sock *igmp; struct in_addr dst_addr; struct in_addr group_addr; struct pim_interface *pim_ifp; @@ -751,7 +739,7 @@ static int pim_igmp_general_query(struct thread *t) return 0; } -static void sock_close(struct igmp_sock *igmp) +static void sock_close(struct gm_sock *igmp) { pim_igmp_other_querier_timer_off(igmp); pim_igmp_general_query_off(igmp); @@ -781,7 +769,7 @@ static void sock_close(struct igmp_sock *igmp) } } -void igmp_startup_mode_on(struct igmp_sock *igmp) +void igmp_startup_mode_on(struct gm_sock *igmp) { struct pim_interface *pim_ifp; @@ -802,7 +790,7 @@ void igmp_startup_mode_on(struct igmp_sock *igmp) igmp->querier_query_interval = pim_ifp->igmp_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); @@ -832,11 +820,11 @@ static void igmp_group_count_decr(struct pim_interface *pim_ifp) --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; - struct igmp_source *src; + struct gm_source *src; struct pim_interface *pim_ifp = group->interface->info; if (PIM_DEBUG_IGMP_TRACE) { @@ -862,7 +850,7 @@ void igmp_group_delete(struct igmp_group *group) 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)); @@ -870,7 +858,7 @@ void igmp_group_delete_empty_include(struct igmp_group *group) igmp_group_delete(group); } -void igmp_sock_free(struct igmp_sock *igmp) +void igmp_sock_free(struct gm_sock *igmp) { assert(!igmp->t_igmp_read); assert(!igmp->t_igmp_query_timer); @@ -879,7 +867,7 @@ void igmp_sock_free(struct igmp_sock *igmp) XFREE(MTYPE_PIM_IGMP_SOCKET, igmp); } -void igmp_sock_delete(struct igmp_sock *igmp) +void igmp_sock_delete(struct gm_sock *igmp) { struct pim_interface *pim_ifp; @@ -899,7 +887,7 @@ void igmp_sock_delete_all(struct interface *ifp) { struct pim_interface *pim_ifp; struct listnode *igmp_node, *igmp_nextnode; - struct igmp_sock *igmp; + struct gm_sock *igmp; pim_ifp = ifp->info; @@ -911,15 +899,15 @@ void igmp_sock_delete_all(struct interface *ifp) 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; @@ -945,7 +933,7 @@ void pim_igmp_if_init(struct pim_interface *pim_ifp, struct interface *ifp) 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->igmp_group_list, grp_node, grp_nextnode, grp)) { @@ -966,11 +954,11 @@ void pim_igmp_if_fini(struct pim_interface *pim_ifp) list_delete(&pim_ifp->igmp_socket_list); } -static struct igmp_sock *igmp_sock_new(int fd, struct in_addr ifaddr, - struct interface *ifp, int mtrace_only) +static struct gm_sock *igmp_sock_new(int fd, struct in_addr ifaddr, + struct interface *ifp, int mtrace_only) { struct pim_interface *pim_ifp; - struct igmp_sock *igmp; + struct gm_sock *igmp; pim_ifp = ifp->info; @@ -1013,12 +1001,12 @@ static struct igmp_sock *igmp_sock_new(int fd, struct in_addr ifaddr, return igmp; } -static void igmp_read_on(struct igmp_sock *igmp); +static void igmp_read_on(struct gm_sock *igmp); static int pim_igmp_read(struct thread *t) { uint8_t buf[10000]; - struct igmp_sock *igmp = (struct igmp_sock *)THREAD_ARG(t); + struct gm_sock *igmp = (struct gm_sock *)THREAD_ARG(t); struct sockaddr_in from; struct sockaddr_in to; socklen_t fromlen = sizeof(from); @@ -1044,7 +1032,7 @@ done: return 0; } -static void igmp_read_on(struct igmp_sock *igmp) +static void igmp_read_on(struct gm_sock *igmp) { if (PIM_DEBUG_IGMP_TRACE_DETAIL) { @@ -1055,13 +1043,12 @@ static void igmp_read_on(struct igmp_sock *igmp) &igmp->t_igmp_read); } -struct igmp_sock *pim_igmp_sock_add(struct list *igmp_sock_list, - struct in_addr ifaddr, - struct interface *ifp, - bool mtrace_only) +struct gm_sock *pim_igmp_sock_add(struct list *igmp_sock_list, + struct in_addr ifaddr, struct interface *ifp, + bool mtrace_only) { struct pim_interface *pim_ifp; - struct igmp_sock *igmp; + struct gm_sock *igmp; struct sockaddr_in sin; int fd; @@ -1114,7 +1101,7 @@ struct igmp_sock *pim_igmp_sock_add(struct list *igmp_sock_list, */ static int igmp_group_timer(struct thread *t) { - struct igmp_group *group; + struct gm_group *group; group = THREAD_ARG(t); @@ -1150,7 +1137,7 @@ static int igmp_group_timer(struct thread *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; @@ -1165,7 +1152,7 @@ static void group_timer_off(struct igmp_group *group) 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); @@ -1193,10 +1180,10 @@ void igmp_group_timer_on(struct igmp_group *group, long interval_msec, 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 gm_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; @@ -1204,10 +1191,10 @@ struct igmp_group *find_group_by_addr(struct igmp_sock *igmp, return hash_lookup(pim_ifp->igmp_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 gm_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); @@ -1289,7 +1276,7 @@ struct igmp_group *igmp_add_group_by_addr(struct igmp_sock *igmp, 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, @@ -1313,7 +1300,7 @@ void igmp_send_query_on_intf(struct interface *ifp, int igmp_ver) { struct pim_interface *pim_ifp = ifp->info; struct listnode *sock_node = NULL; - struct igmp_sock *igmp = NULL; + struct gm_sock *igmp = NULL; struct in_addr dst_addr; struct in_addr group_addr; int query_buf_size; |
