From 429ac78cc64e0e29bab7cbc00ee991abcdec3f81 Mon Sep 17 00:00:00 2001 From: Paul Jakma Date: Thu, 15 Jun 2006 18:40:49 +0000 Subject: [ospfd] Fix multicast membership drop bug 2006-06-15 Paul Jakma * Reported by Milan Koci * ospf_interface.h: (struct ospf_if_info) Add reference counts for multicast group memberships. Add various macros to help manipulate/check membership state. * ospf_interface.c: (ospf_if_set_multicast) Maintain the ospf_if_info reference counts, and only actually drop memberships if it hits 0, to avoid losing membership when OSPF is disabled on an interface with multiple active OSPF interfaces. * ospf_packet.c: (ospf_{hello,read}) Use the new macros to check/set multicast membership. * ospf_vty.c: (show_ip_ospf_interface_sub) ditto. --- ospfd/ospf_packet.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'ospfd/ospf_packet.c') diff --git a/ospfd/ospf_packet.c b/ospfd/ospf_packet.c index a842ca68..569f2513 100644 --- a/ospfd/ospf_packet.c +++ b/ospfd/ospf_packet.c @@ -768,7 +768,7 @@ ospf_hello (struct ip *iph, struct ospf_header *ospfh, if (iph->ip_dst.s_addr == htonl(OSPF_ALLSPFROUTERS)) { /* Try to fix multicast membership. */ - SET_FLAG(oi->multicast_memberships, MEMBER_ALLROUTERS); + OI_MEMBER_JOINED(oi, MEMBER_ALLROUTERS); ospf_if_set_multicast(oi); } return; @@ -2390,9 +2390,9 @@ ospf_read (struct thread *thread) ifp->name, if_flag_dump(ifp->flags)); /* Fix multicast memberships? */ if (iph->ip_dst.s_addr == htonl(OSPF_ALLSPFROUTERS)) - SET_FLAG(oi->multicast_memberships, MEMBER_ALLROUTERS); + OI_MEMBER_JOINED(oi, MEMBER_ALLROUTERS); else if (iph->ip_dst.s_addr == htonl(OSPF_ALLDROUTERS)) - SET_FLAG(oi->multicast_memberships, MEMBER_DROUTERS); + OI_MEMBER_JOINED(oi, MEMBER_DROUTERS); if (oi->multicast_memberships) ospf_if_set_multicast(oi); return 0; -- cgit v1.2.1