forked from Mirror/frr
Merge pull request #16955 from anlancs/fix/pimd-add-v4v6-check
pimd: fix missing IPV4 check
This commit is contained in:
commit
01a1f3fb2a
|
@ -527,27 +527,22 @@ void pim_if_addr_add(struct connected *ifc)
|
|||
|
||||
detect_address_change(ifp, 0, __func__);
|
||||
|
||||
// if (ifc->address->family != AF_INET)
|
||||
// return;
|
||||
|
||||
#if PIM_IPV == 4
|
||||
if (ifc->address->family == AF_INET) {
|
||||
struct in_addr ifaddr = ifc->address->u.prefix4;
|
||||
|
||||
if (pim_ifp->gm_enable) {
|
||||
struct gm_sock *igmp;
|
||||
|
||||
/* lookup IGMP socket */
|
||||
igmp = pim_igmp_sock_lookup_ifaddr(pim_ifp->gm_socket_list,
|
||||
ifaddr);
|
||||
igmp = pim_igmp_sock_lookup_ifaddr(pim_ifp->gm_socket_list, ifaddr);
|
||||
if (!igmp) {
|
||||
/* if addr new, add IGMP socket */
|
||||
if (ifc->address->family == AF_INET)
|
||||
pim_igmp_sock_add(pim_ifp->gm_socket_list,
|
||||
ifaddr, ifp, false);
|
||||
} else if (igmp->mtrace_only) {
|
||||
igmp_sock_delete(igmp);
|
||||
pim_igmp_sock_add(pim_ifp->gm_socket_list, ifaddr, ifp,
|
||||
false);
|
||||
pim_igmp_sock_add(pim_ifp->gm_socket_list, ifaddr, ifp, false);
|
||||
}
|
||||
|
||||
/* Replay Static IGMP groups */
|
||||
|
@ -557,25 +552,21 @@ void pim_if_addr_add(struct connected *ifc)
|
|||
struct gm_join *ij;
|
||||
int join_fd;
|
||||
|
||||
for (ALL_LIST_ELEMENTS(pim_ifp->gm_join_list, node,
|
||||
nextnode, ij)) {
|
||||
for (ALL_LIST_ELEMENTS(pim_ifp->gm_join_list, node, nextnode, ij)) {
|
||||
/* Close socket and reopen with Source and Group
|
||||
*/
|
||||
close(ij->sock_fd);
|
||||
join_fd = gm_join_sock(
|
||||
ifp->name, ifp->ifindex, ij->group_addr,
|
||||
ij->source_addr, pim_ifp);
|
||||
join_fd = gm_join_sock(ifp->name, ifp->ifindex,
|
||||
ij->group_addr, ij->source_addr,
|
||||
pim_ifp);
|
||||
if (join_fd < 0) {
|
||||
char group_str[INET_ADDRSTRLEN];
|
||||
char source_str[INET_ADDRSTRLEN];
|
||||
pim_inet4_dump("<grp?>", ij->group_addr,
|
||||
group_str,
|
||||
pim_inet4_dump("<grp?>", ij->group_addr, group_str,
|
||||
sizeof(group_str));
|
||||
pim_inet4_dump(
|
||||
"<src?>", ij->source_addr,
|
||||
pim_inet4_dump("<src?>", ij->source_addr,
|
||||
source_str, sizeof(source_str));
|
||||
zlog_warn(
|
||||
"%s: gm_join_sock() failure for IGMP group %s source %s on interface %s",
|
||||
zlog_warn("%s: gm_join_sock() failure for IGMP group %s source %s on interface %s",
|
||||
__func__, group_str, source_str,
|
||||
ifp->name);
|
||||
/* warning only */
|
||||
|
@ -588,16 +579,14 @@ void pim_if_addr_add(struct connected *ifc)
|
|||
struct gm_sock *igmp;
|
||||
|
||||
/* lookup IGMP socket */
|
||||
igmp = pim_igmp_sock_lookup_ifaddr(pim_ifp->gm_socket_list,
|
||||
ifaddr);
|
||||
if (ifc->address->family == AF_INET) {
|
||||
igmp = pim_igmp_sock_lookup_ifaddr(pim_ifp->gm_socket_list, ifaddr);
|
||||
if (igmp)
|
||||
igmp_sock_delete(igmp);
|
||||
/* if addr new, add IGMP socket */
|
||||
pim_igmp_sock_add(pim_ifp->gm_socket_list, ifaddr, ifp,
|
||||
true);
|
||||
}
|
||||
} /* igmp mtrace only */
|
||||
}
|
||||
#endif
|
||||
|
||||
if (pim_ifp->pim_enable) {
|
||||
|
|
Loading…
Reference in a new issue