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