From: Ben Greear <greearb@candelatech.com>
To: Trond Myklebust <trond.myklebust@fys.uio.no>
Cc: "linux-nfs@vger.kernel.org" <linux-nfs@vger.kernel.org>
Subject: Re: RFC: support srcaddr= option to bind to local IPs.
Date: Tue, 07 Sep 2010 13:41:18 -0700 [thread overview]
Message-ID: <4C86A36E.9010906@candelatech.com> (raw)
In-Reply-To: <1283882166.2788.48.camel@heimdal.trondhjem.org>
On 09/07/2010 10:56 AM, Trond Myklebust wrote:
> On Fri, 2010-09-03 at 11:55 -0700, Ben Greear wrote:
>> This patch lets one bind the local side of NFS sockets to a particular
>> IP address. This can be useful for users on multi-homed systems.
>>
>> This patch must be on top of the previous patch to fix the IPv6 address
>> comparison or it will not work.
>>
>> Comments and suggestions welcome...I'll incorporate those and post an
>> official signed-off patch after that.
>>
>> Thanks,
>> Ben
>>
>
> The code in nfs_callback_authenticate is going to break NFSv4 callbacks.
> Callbacks are sent to the -oclientaddr address, not srcaddr (btw, I
> really dislike that new boolean argument to nfs_find_client(). If you
> don't want to compare the source address, then have the caller pass a
> NULL pointer).
Would this fix the callback issue you speak of? The idea is to
use source and dest to match if it exists, but if we find one
where server address matches and srcaddr isn't specified,
then we will use that.
@@ -384,10 +390,30 @@ struct nfs_client *nfs_find_client(const struct sockaddr *addr, u32 nfsversion)
if (!nfs_sockaddr_match_ipaddr(addr, clap))
continue;
+ if (srcaddr) {
+ const struct sockaddr *sa;
+ sa = (const struct sockaddr *)&clp->srcaddr;
+ if (!nfs_sockaddr_match_ipaddr(srcaddr, sa)) {
+ /* If clp doesn't bind to srcaddr, then
+ * it is a potential match if we don't find
+ * a better one.
+ */
+ if (sa->sa_family == AF_UNSPEC && !ok_fit)
+ ok_fit = clp;
+ continue;
+ }
+ }
+found_one:
atomic_inc(&clp->cl_count);
spin_unlock(&nfs_client_lock);
return clp;
}
+
+ if (ok_fit) {
+ clp = ok_fit;
+ goto found_one;
+ }
+
spin_unlock(&nfs_client_lock);
return NULL;
}
Thanks,
Ben
--
Ben Greear <greearb@candelatech.com>
Candela Technologies Inc http://www.candelatech.com
next prev parent reply other threads:[~2010-09-07 20:41 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-03 18:55 RFC: support srcaddr= option to bind to local IPs Ben Greear
2010-09-07 17:56 ` Trond Myklebust
2010-09-07 18:33 ` Ben Greear
2010-09-07 20:41 ` Ben Greear [this message]
2010-09-07 20:54 ` Trond Myklebust
2010-09-07 21:10 ` Ben Greear
2010-09-07 21:12 ` Trond Myklebust
2010-09-07 23:18 ` Ben Greear
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4C86A36E.9010906@candelatech.com \
--to=greearb@candelatech.com \
--cc=linux-nfs@vger.kernel.org \
--cc=trond.myklebust@fys.uio.no \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox