svn commit: r215110 - head/sys/netinet

Randall Stewart rrs at FreeBSD.org
Thu Nov 11 05:40:39 UTC 2010


Author: rrs
Date: Thu Nov 11 05:40:39 2010
New Revision: 215110
URL: http://svn.freebsd.org/changeset/base/215110

Log:
  Fix so that a multicast packet can be sent
  even if there is no route out to that mcast address. The code in
  in_pcb inadvertantly would error (no route) even though
  the user may have specified the address with the
  proper socket option (to specify the egress interface).
  Thanks bz for reminding me I forgot to commit this ;-)
  
  Reviewed by:	bz
  MFC after:	1 week

Modified:
  head/sys/netinet/in_pcb.c

Modified: head/sys/netinet/in_pcb.c
==============================================================================
--- head/sys/netinet/in_pcb.c	Thu Nov 11 05:38:32 2010	(r215109)
+++ head/sys/netinet/in_pcb.c	Thu Nov 11 05:40:39 2010	(r215110)
@@ -874,10 +874,6 @@ in_pcbconnect_setup(struct inpcb *inp, s
 		}
 	}
 	if (laddr.s_addr == INADDR_ANY) {
-		error = in_pcbladdr(inp, &faddr, &laddr, cred);
-		if (error)
-			return (error);
-
 		/*
 		 * If the destination address is multicast and an outgoing
 		 * interface has been set as a multicast option, use the
@@ -902,9 +898,12 @@ in_pcbconnect_setup(struct inpcb *inp, s
 				laddr = ia->ia_addr.sin_addr;
 				IN_IFADDR_RUNLOCK();
 			}
+		} else {
+			error = in_pcbladdr(inp, &faddr, &laddr, cred);
+			if (error) 
+				return (error);
 		}
 	}
-
 	oinp = in_pcblookup_hash(inp->inp_pcbinfo, faddr, fport, laddr, lport,
 	    0, NULL);
 	if (oinp != NULL) {


More information about the svn-src-all mailing list