From owner-svn-src-all@FreeBSD.ORG Tue May 25 22:04:51 2010 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2DD69106564A; Tue, 25 May 2010 22:04:51 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from cyrus.watson.org (cyrus.watson.org [65.122.17.42]) by mx1.freebsd.org (Postfix) with ESMTP id CA4008FC12; Tue, 25 May 2010 22:04:50 +0000 (UTC) Received: from fledge.watson.org (fledge.watson.org [65.122.17.41]) by cyrus.watson.org (Postfix) with ESMTPS id 659EF46B89; Tue, 25 May 2010 18:04:50 -0400 (EDT) Date: Tue, 25 May 2010 23:04:50 +0100 (BST) From: Robert Watson X-X-Sender: robert@fledge.watson.org To: Qing Li In-Reply-To: <201005252042.o4PKgZdd032462@svn.freebsd.org> Message-ID: References: <201005252042.o4PKgZdd032462@svn.freebsd.org> User-Agent: Alpine 2.00 (BSF 1167 2008-08-23) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r208553 - in head/sys: net netinet X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 25 May 2010 22:04:51 -0000 On Tue, 25 May 2010, Qing Li wrote: > Author: qingli > Date: Tue May 25 20:42:35 2010 > New Revision: 208553 > URL: http://svn.freebsd.org/changeset/base/208553 > > Log: > This patch fixes the problem where proxy ARP entries cannot be added > over the if_ng interface. Hi Qing-- It may be worth checking network-related kernel modules in the ports tree to make sure none reference this symbol (i.e., the virtualbox network device parts). If they do, you may need to add a new symbol in the MFC so that existing modules continue to function, and existing kernel module code continues to compile. If not, shouldn't be an issue (none of the base system modules seem to use it, but we may care about external modules that do in -STABLE). Robert > > MFC after: 3 days > > Modified: > head/sys/net/if.c > head/sys/net/if_var.h > head/sys/net/route.c > head/sys/net/rtsock.c > head/sys/netinet/in.c > head/sys/netinet/in_pcb.c > head/sys/netinet/ip_options.c > head/sys/netinet/ip_output.c > > Modified: head/sys/net/if.c > ============================================================================== > --- head/sys/net/if.c Tue May 25 20:35:39 2010 (r208552) > +++ head/sys/net/if.c Tue May 25 20:42:35 2010 (r208553) > @@ -1607,7 +1607,7 @@ done: > * is most specific found. > */ > struct ifaddr * > -ifa_ifwithnet(struct sockaddr *addr) > +ifa_ifwithnet(struct sockaddr *addr, int ignore_ptp) > { > struct ifnet *ifp; > struct ifaddr *ifa; > @@ -1639,7 +1639,8 @@ ifa_ifwithnet(struct sockaddr *addr) > > if (ifa->ifa_addr->sa_family != af) > next: continue; > - if (af == AF_INET && ifp->if_flags & IFF_POINTOPOINT) { > + if (af == AF_INET && > + ifp->if_flags & IFF_POINTOPOINT && !ignore_ptp) { > /* > * This is a bit broken as it doesn't > * take into account that the remote end may > > Modified: head/sys/net/if_var.h > ============================================================================== > --- head/sys/net/if_var.h Tue May 25 20:35:39 2010 (r208552) > +++ head/sys/net/if_var.h Tue May 25 20:42:35 2010 (r208553) > @@ -873,7 +873,7 @@ struct ifaddr *ifa_ifwithaddr(struct soc > int ifa_ifwithaddr_check(struct sockaddr *); > struct ifaddr *ifa_ifwithbroadaddr(struct sockaddr *); > struct ifaddr *ifa_ifwithdstaddr(struct sockaddr *); > -struct ifaddr *ifa_ifwithnet(struct sockaddr *); > +struct ifaddr *ifa_ifwithnet(struct sockaddr *, int); > struct ifaddr *ifa_ifwithroute(int, struct sockaddr *, struct sockaddr *); > struct ifaddr *ifa_ifwithroute_fib(int, struct sockaddr *, struct sockaddr *, u_int); > > > Modified: head/sys/net/route.c > ============================================================================== > --- head/sys/net/route.c Tue May 25 20:35:39 2010 (r208552) > +++ head/sys/net/route.c Tue May 25 20:42:35 2010 (r208553) > @@ -519,7 +519,7 @@ rtredirect_fib(struct sockaddr *dst, > } > > /* verify the gateway is directly reachable */ > - if ((ifa = ifa_ifwithnet(gateway)) == NULL) { > + if ((ifa = ifa_ifwithnet(gateway, 0)) == NULL) { > error = ENETUNREACH; > goto out; > } > @@ -686,7 +686,7 @@ ifa_ifwithroute_fib(int flags, struct so > ifa = ifa_ifwithdstaddr(gateway); > } > if (ifa == NULL) > - ifa = ifa_ifwithnet(gateway); > + ifa = ifa_ifwithnet(gateway, 0); > if (ifa == NULL) { > struct rtentry *rt = rtalloc1_fib(gateway, 0, RTF_RNH_LOCKED, fibnum); > if (rt == NULL) > @@ -797,7 +797,7 @@ rt_getifa_fib(struct rt_addrinfo *info, > */ > if (info->rti_ifp == NULL && ifpaddr != NULL && > ifpaddr->sa_family == AF_LINK && > - (ifa = ifa_ifwithnet(ifpaddr)) != NULL) { > + (ifa = ifa_ifwithnet(ifpaddr, 0)) != NULL) { > info->rti_ifp = ifa->ifa_ifp; > ifa_free(ifa); > } > > Modified: head/sys/net/rtsock.c > ============================================================================== > --- head/sys/net/rtsock.c Tue May 25 20:35:39 2010 (r208552) > +++ head/sys/net/rtsock.c Tue May 25 20:42:35 2010 (r208553) > @@ -55,6 +55,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -673,12 +674,22 @@ route_output(struct mbuf *m, struct sock > * another search to retrieve the prefix route of > * the local end point of the PPP link. > */ > - if ((rtm->rtm_flags & RTF_ANNOUNCE) && > - (rt->rt_ifp->if_flags & IFF_POINTOPOINT)) { > + if (rtm->rtm_flags & RTF_ANNOUNCE) { > struct sockaddr laddr; > - rt_maskedcopy(rt->rt_ifa->ifa_addr, > - &laddr, > - rt->rt_ifa->ifa_netmask); > + > + if (rt->rt_ifp != NULL && > + rt->rt_ifp->if_type == IFT_PROPVIRTUAL) { > + struct ifaddr *ifa; > + > + ifa = ifa_ifwithnet(info.rti_info[RTAX_DST], 1); > + if (ifa != NULL) > + rt_maskedcopy(ifa->ifa_addr, > + &laddr, > + ifa->ifa_netmask); > + } else > + rt_maskedcopy(rt->rt_ifa->ifa_addr, > + &laddr, > + rt->rt_ifa->ifa_netmask); > /* > * refactor rt and no lock operation necessary > */ > > Modified: head/sys/netinet/in.c > ============================================================================== > --- head/sys/netinet/in.c Tue May 25 20:35:39 2010 (r208552) > +++ head/sys/netinet/in.c Tue May 25 20:42:35 2010 (r208553) > @@ -1379,8 +1379,9 @@ in_lltable_rtcheck(struct ifnet *ifp, u_ > > /* XXX rtalloc1 should take a const param */ > rt = rtalloc1(__DECONST(struct sockaddr *, l3addr), 0, 0); > - if (rt == NULL || (rt->rt_flags & RTF_GATEWAY) || > - ((rt->rt_ifp != ifp) && !(flags & LLE_PUB))) { > + if (rt == NULL || (!(flags & LLE_PUB) && > + ((rt->rt_flags & RTF_GATEWAY) || > + (rt->rt_ifp != ifp)))) { > #ifdef DIAGNOSTIC > log(LOG_INFO, "IPv4 address: \"%s\" is not on the network\n", > inet_ntoa(((const struct sockaddr_in *)l3addr)->sin_addr)); > > Modified: head/sys/netinet/in_pcb.c > ============================================================================== > --- head/sys/netinet/in_pcb.c Tue May 25 20:35:39 2010 (r208552) > +++ head/sys/netinet/in_pcb.c Tue May 25 20:42:35 2010 (r208553) > @@ -631,7 +631,7 @@ in_pcbladdr(struct inpcb *inp, struct in > > ia = ifatoia(ifa_ifwithdstaddr((struct sockaddr *)sin)); > if (ia == NULL) > - ia = ifatoia(ifa_ifwithnet((struct sockaddr *)sin)); > + ia = ifatoia(ifa_ifwithnet((struct sockaddr *)sin, 0)); > if (ia == NULL) { > error = ENETUNREACH; > goto done; > @@ -748,7 +748,7 @@ in_pcbladdr(struct inpcb *inp, struct in > > ia = ifatoia(ifa_ifwithdstaddr(sintosa(&sain))); > if (ia == NULL) > - ia = ifatoia(ifa_ifwithnet(sintosa(&sain))); > + ia = ifatoia(ifa_ifwithnet(sintosa(&sain), 0)); > if (ia == NULL) > ia = ifatoia(ifa_ifwithaddr(sintosa(&sain))); > > > Modified: head/sys/netinet/ip_options.c > ============================================================================== > --- head/sys/netinet/ip_options.c Tue May 25 20:35:39 2010 (r208552) > +++ head/sys/netinet/ip_options.c Tue May 25 20:42:35 2010 (r208553) > @@ -228,7 +228,7 @@ dropit: > #define INA struct in_ifaddr * > #define SA struct sockaddr * > if ((ia = (INA)ifa_ifwithdstaddr((SA)&ipaddr)) == NULL) > - ia = (INA)ifa_ifwithnet((SA)&ipaddr); > + ia = (INA)ifa_ifwithnet((SA)&ipaddr, 0); > } else > /* XXX MRT 0 for routing */ > ia = ip_rtaddr(ipaddr.sin_addr, M_GETFIB(m)); > > Modified: head/sys/netinet/ip_output.c > ============================================================================== > --- head/sys/netinet/ip_output.c Tue May 25 20:35:39 2010 (r208552) > +++ head/sys/netinet/ip_output.c Tue May 25 20:42:35 2010 (r208553) > @@ -244,7 +244,7 @@ again: > isbroadcast = 1; > } else if (flags & IP_ROUTETOIF) { > if ((ia = ifatoia(ifa_ifwithdstaddr(sintosa(dst)))) == NULL && > - (ia = ifatoia(ifa_ifwithnet(sintosa(dst)))) == NULL) { > + (ia = ifatoia(ifa_ifwithnet(sintosa(dst), 0))) == NULL) { > IPSTAT_INC(ips_noroute); > error = ENETUNREACH; > goto bad; >