From owner-svn-src-all@FreeBSD.ORG Mon Apr 20 14:38:48 2009 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 D6AB61065670; Mon, 20 Apr 2009 14:38:48 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C53628FC0A; Mon, 20 Apr 2009 14:38:48 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n3KEcms9048992; Mon, 20 Apr 2009 14:38:48 GMT (envelope-from bz@svn.freebsd.org) Received: (from bz@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n3KEcmL2048988; Mon, 20 Apr 2009 14:38:48 GMT (envelope-from bz@svn.freebsd.org) Message-Id: <200904201438.n3KEcmL2048988@svn.freebsd.org> From: "Bjoern A. Zeeb" Date: Mon, 20 Apr 2009 14:38:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r191316 - head/usr.sbin/ppp 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: Mon, 20 Apr 2009 14:38:49 -0000 Author: bz Date: Mon Apr 20 14:38:48 2009 New Revision: 191316 URL: http://svn.freebsd.org/changeset/base/191316 Log: Conditionally add the interface name and address if available so that a ppp running in `receiver' (server) mode can properly update routes, for example to update the MTU. Submitted by: loos.br gmail.com (Luiz Otavio O Souza) PR: bin/130159 PR: kern/125079, kern/122068, bin/126892 MFC after: 3 days Modified: head/usr.sbin/ppp/ipcp.c head/usr.sbin/ppp/ipv6cp.c head/usr.sbin/ppp/route.c head/usr.sbin/ppp/route.h Modified: head/usr.sbin/ppp/ipcp.c ============================================================================== --- head/usr.sbin/ppp/ipcp.c Mon Apr 20 14:36:01 2009 (r191315) +++ head/usr.sbin/ppp/ipcp.c Mon Apr 20 14:38:48 2009 (r191316) @@ -692,7 +692,7 @@ ipcp_SetIPaddress(struct ipcp *ipcp, str if (bundle->ncp.cfg.sendpipe > 0 || bundle->ncp.cfg.recvpipe > 0) { ncprange_getsa(&myrange, &ssgw, &ssmask); ncpaddr_getsa(&hisncpaddr, &ssdst); - rt_Update(bundle, sadst, sagw, samask); + rt_Update(bundle, sadst, sagw, samask, NULL, NULL); } if (Enabled(bundle, OPT_SROUTES)) Modified: head/usr.sbin/ppp/ipv6cp.c ============================================================================== --- head/usr.sbin/ppp/ipv6cp.c Mon Apr 20 14:36:01 2009 (r191315) +++ head/usr.sbin/ppp/ipv6cp.c Mon Apr 20 14:38:48 2009 (r191316) @@ -245,7 +245,7 @@ ipcp_SetIPv6address(struct ipv6cp *ipv6c ncpaddr_getsa(&ipv6cp->hisaddr, &ssdst); else sadst = NULL; - rt_Update(bundle, sadst, sagw, samask); + rt_Update(bundle, sadst, sagw, samask, NULL, NULL); } if (Enabled(bundle, OPT_SROUTES)) Modified: head/usr.sbin/ppp/route.c ============================================================================== --- head/usr.sbin/ppp/route.c Mon Apr 20 14:36:01 2009 (r191315) +++ head/usr.sbin/ppp/route.c Mon Apr 20 14:38:48 2009 (r191316) @@ -532,7 +532,8 @@ route_UpdateMTU(struct bundle *bundle) " mtu %lu\n", rtm->rtm_index, Index2Nam(rtm->rtm_index), ncprange_ntoa(&dst), bundle->iface->mtu); } - rt_Update(bundle, sa[RTAX_DST], sa[RTAX_GATEWAY], sa[RTAX_NETMASK]); + rt_Update(bundle, sa[RTAX_DST], sa[RTAX_GATEWAY], sa[RTAX_NETMASK], + sa[RTAX_IFP], sa[RTAX_IFA]); } } @@ -870,7 +871,8 @@ failed: void rt_Update(struct bundle *bundle, const struct sockaddr *dst, - const struct sockaddr *gw, const struct sockaddr *mask) + const struct sockaddr *gw, const struct sockaddr *mask, + const struct sockaddr *ifp, const struct sockaddr *ifa) { struct ncprange ncpdst; struct rtmsg rtmes; @@ -920,6 +922,13 @@ rt_Update(struct bundle *bundle, const s p += memcpy_roundup(p, mask, mask->sa_len); } + if (ifa && ifp && ifp->sa_family == AF_LINK) { + rtmes.m_rtm.rtm_addrs |= RTA_IFP; + p += memcpy_roundup(p, ifp, ifp->sa_len); + rtmes.m_rtm.rtm_addrs |= RTA_IFA; + p += memcpy_roundup(p, ifa, ifa->sa_len); + } + rtmes.m_rtm.rtm_msglen = p - (char *)&rtmes; wb = ID0write(s, &rtmes, rtmes.m_rtm.rtm_msglen); Modified: head/usr.sbin/ppp/route.h ============================================================================== --- head/usr.sbin/ppp/route.h Mon Apr 20 14:36:01 2009 (r191315) +++ head/usr.sbin/ppp/route.h Mon Apr 20 14:38:48 2009 (r191316) @@ -70,4 +70,5 @@ extern void route_ParseHdr(struct rt_msg extern int rt_Set(struct bundle *, int, const struct ncprange *, const struct ncpaddr *, int, int); extern void rt_Update(struct bundle *, const struct sockaddr *, + const struct sockaddr *, const struct sockaddr *, const struct sockaddr *, const struct sockaddr *);