summaryrefslogtreecommitdiff
path: root/pimd/pim_iface.c
diff options
context:
space:
mode:
authorpaulzlabn <paulz@labn.net>2018-03-14 13:31:58 -0700
committerGitHub <noreply@github.com>2018-03-14 13:31:58 -0700
commit3f1224cd1a9408bdad6aca8c0c205211cb548d5c (patch)
tree87e6a52a3e7ad7b09caa3207f081fd92bc8fd018 /pimd/pim_iface.c
parentfd9b55a2b77c187730600d429b3f290ab58fa035 (diff)
parent6ca96cc6ada990d052fcfc48cffeef454ae64a10 (diff)
Merge branch 'master' into working/master/bgp-vpn-vrf-leaking
Diffstat (limited to 'pimd/pim_iface.c')
-rw-r--r--pimd/pim_iface.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/pimd/pim_iface.c b/pimd/pim_iface.c
index 998f8fc2ca..ff7238ae97 100644
--- a/pimd/pim_iface.c
+++ b/pimd/pim_iface.c
@@ -574,7 +574,11 @@ void pim_if_addr_add(struct connected *ifc)
/* if addr new, add IGMP socket */
if (ifc->address->family == AF_INET)
pim_igmp_sock_add(pim_ifp->igmp_socket_list,
- ifaddr, ifp);
+ ifaddr, ifp, false);
+ } else if (igmp->mtrace_only) {
+ igmp_sock_delete(igmp);
+ pim_igmp_sock_add(pim_ifp->igmp_socket_list, ifaddr,
+ ifp, false);
}
/* Replay Static IGMP groups */
@@ -611,6 +615,20 @@ void pim_if_addr_add(struct connected *ifc)
}
}
} /* igmp */
+ else {
+ struct igmp_sock *igmp;
+
+ /* lookup IGMP socket */
+ igmp = pim_igmp_sock_lookup_ifaddr(pim_ifp->igmp_socket_list,
+ ifaddr);
+ if (ifc->address->family == AF_INET) {
+ if (igmp)
+ igmp_sock_delete(igmp);
+ /* if addr new, add IGMP socket */
+ pim_igmp_sock_add(pim_ifp->igmp_socket_list, ifaddr,
+ ifp, true);
+ }
+ } /* igmp mtrace only */
if (PIM_IF_TEST_PIM(pim_ifp->options)) {