From owner-svn-src-projects@FreeBSD.ORG Fri Nov 7 00:28:07 2014 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 305CA629; Fri, 7 Nov 2014 00:28:07 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 1C5708C9; Fri, 7 Nov 2014 00:28:07 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id sA70S6Mn067431; Fri, 7 Nov 2014 00:28:06 GMT (envelope-from melifaro@FreeBSD.org) Received: (from melifaro@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id sA70S63H067429; Fri, 7 Nov 2014 00:28:06 GMT (envelope-from melifaro@FreeBSD.org) Message-Id: <201411070028.sA70S63H067429@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: melifaro set sender to melifaro@FreeBSD.org using -f From: "Alexander V. Chernikov" Date: Fri, 7 Nov 2014 00:28:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r274207 - in projects/routing/sys/fs: nfs nfsclient X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 07 Nov 2014 00:28:07 -0000 Author: melifaro Date: Fri Nov 7 00:28:06 2014 New Revision: 274207 URL: https://svnweb.freebsd.org/changeset/base/274207 Log: Convert nfsclient SAS to use new routing API. Btw original code should be rewritten not to use static variables. Modified: projects/routing/sys/fs/nfs/nfsport.h projects/routing/sys/fs/nfsclient/nfs_clport.c Modified: projects/routing/sys/fs/nfs/nfsport.h ============================================================================== --- projects/routing/sys/fs/nfs/nfsport.h Fri Nov 7 00:10:07 2014 (r274206) +++ projects/routing/sys/fs/nfs/nfsport.h Fri Nov 7 00:28:06 2014 (r274207) @@ -80,9 +80,7 @@ #include #include #include -#include #include -#include #include #include #include Modified: projects/routing/sys/fs/nfsclient/nfs_clport.c ============================================================================== --- projects/routing/sys/fs/nfsclient/nfs_clport.c Fri Nov 7 00:10:07 2014 (r274206) +++ projects/routing/sys/fs/nfsclient/nfs_clport.c Fri Nov 7 00:28:06 2014 (r274207) @@ -45,7 +45,10 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include +#include #include +#include #include @@ -969,8 +972,6 @@ nfscl_loadfsinfo(struct nfsmount *nmp, s u_int8_t * nfscl_getmyip(struct nfsmount *nmp, int *isinet6p) { - struct sockaddr_in sad, *sin; - struct rtentry *rt; u_int8_t *retp = NULL; static struct in_addr laddr; @@ -979,52 +980,30 @@ nfscl_getmyip(struct nfsmount *nmp, int * Loop up a route for the destination address. */ if (nmp->nm_nam->sa_family == AF_INET) { - bzero(&sad, sizeof (sad)); - sin = (struct sockaddr_in *)nmp->nm_nam; - sad.sin_family = AF_INET; - sad.sin_len = sizeof (struct sockaddr_in); - sad.sin_addr.s_addr = sin->sin_addr.s_addr; + struct in_addr dst; + struct nhop4_extended nh4; + dst = ((struct sockaddr_in *)nmp->nm_nam)->sin_addr; + CURVNET_SET(CRED_TO_VNET(nmp->nm_sockreq.nr_cred)); - rt = rtalloc1_fib((struct sockaddr *)&sad, 0, 0UL, - curthread->td_proc->p_fibnum); - if (rt != NULL) { - if (rt->rt_ifp != NULL && - rt->rt_ifa != NULL && - ((rt->rt_ifp->if_flags & IFF_LOOPBACK) == 0) && - rt->rt_ifa->ifa_addr->sa_family == AF_INET) { - sin = (struct sockaddr_in *) - rt->rt_ifa->ifa_addr; - laddr.s_addr = sin->sin_addr.s_addr; - retp = (u_int8_t *)&laddr; - } - RTFREE_LOCKED(rt); + if (fib4_lookup_nh_ext(curthread->td_proc->p_fibnum, + dst, 0, 0, &nh4) == 0) { + laddr = nh4.nh_src; + retp = (u_int8_t *)&laddr; } CURVNET_RESTORE(); #ifdef INET6 } else if (nmp->nm_nam->sa_family == AF_INET6) { - struct sockaddr_in6 sad6, *sin6; static struct in6_addr laddr6; + struct in6_addr dst; + uint32_t scopeid; - bzero(&sad6, sizeof (sad6)); - sin6 = (struct sockaddr_in6 *)nmp->nm_nam; - sad6.sin6_family = AF_INET6; - sad6.sin6_len = sizeof (struct sockaddr_in6); - sad6.sin6_addr = sin6->sin6_addr; CURVNET_SET(CRED_TO_VNET(nmp->nm_sockreq.nr_cred)); - rt = rtalloc1_fib((struct sockaddr *)&sad6, 0, 0UL, - curthread->td_proc->p_fibnum); - if (rt != NULL) { - if (rt->rt_ifp != NULL && - rt->rt_ifa != NULL && - ((rt->rt_ifp->if_flags & IFF_LOOPBACK) == 0) && - rt->rt_ifa->ifa_addr->sa_family == AF_INET6) { - sin6 = (struct sockaddr_in6 *) - rt->rt_ifa->ifa_addr; - laddr6 = sin6->sin6_addr; - retp = (u_int8_t *)&laddr6; - *isinet6p = 1; - } - RTFREE_LOCKED(rt); + in6_splitscope(&((struct sockaddr_in6 *)nmp->nm_nam)->sin6_addr, + &dst, &scopeid); + if (in6_selectsrc_addr(curthread->td_proc->p_fibnum, + &dst, scopeid, &laddr6) == 0) { + retp = (u_int8_t *)&laddr6; + *isinet6p = 1; } CURVNET_RESTORE(); #endif