Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 10 Apr 2010 12:05:31 +0000 (UTC)
From:      Bruce M Simpson <bms@FreeBSD.org>
To:        cvs-src-old@freebsd.org
Subject:   cvs commit: src/sys/netinet in_mcast.c
Message-ID:  <201004101205.o3AC5eRK034141@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
bms         2010-04-10 12:05:31 UTC

  FreeBSD src repository

  Modified files:
    sys/netinet          in_mcast.c 
  Log:
  SVN rev 206452 on 2010-04-10 12:05:31Z by bms
  
  Fix a few issues related to the legacy 4.4 BSD multicast APIs.
  
  IPv4 addresses can and do change during normal operation. Testing by
  pfSense developers exposed an issue where OpenOSPFD was using the IPv4
  address to leave the OSPF link-scope multicast groups on a dynamic
  OpenVPN tun interface, rather than using RFC 3678 with the interface
  index, which won't be raced when the interface's addresses change.
  
  In inp_join_group():
   If we are already a member of an ASM group, and IP_ADD_MEMBERSHIP or
   MCAST_JOIN_GROUP ioctls are re-issued, return EADDRINUSE as per the
   legacy 4.4BSD multicast API. This bends RFC 3678 slightly, but does
   not violate POLA for apps using the old API.
   It also stops us falling through to kicking IGMP state transactions
   in what is otherwise a no-op case.
   [This has already been dealt with in HEAD, but make it explicit before
    we MFC the change to 8.]
  
  In inp_leave_group():
   Fix a bogus conditional.
   Move the ifp null check to ioctls MCAST_LEAVE* in the switch..case
   where it actually belongs.
   If an interface was specified, by primary IPv4 address, for ioctl
   IP_DROP_MEMBERSHIP or MCAST_LEAVE_GROUP (an ASM full leave operation),
   then and only then should we look up the ifp from the IPv4 address in
   mreqs.imr_interface.
   If not, we fall through to imo_match_group() as before, but only in
   the IP_DROP_MEMBERSHIP case.
  
  With these changes, the legacy 4.4BSD multicast API idempotence should
  be mostly preserved in the SSM enabled IPv4 stack.
  
  Found by:       ermal (with pfSense)
  MFC after:      3 days
  
  Revision  Changes    Path
  1.36      +19 -7     src/sys/netinet/in_mcast.c



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201004101205.o3AC5eRK034141>