Merge pull request #16955 from anlancs/fix/pimd-add-v4v6-check

pimd: fix missing IPV4 check
This commit is contained in:
Jafar Al-Gharaibeh 2024-10-01 14:28:28 -05:00 committed by GitHub
commit 01a1f3fb2a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -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) {