From: Steve Dickson <SteveD@redhat.com>
To: Chuck Lever <chuck.lever@oracle.com>
Cc: greearb@candelatech.com, linux-nfs@vger.kernel.org
Subject: Re: [PATCH v3 4/6] nfs-utils: Support srcaddr=n option for string mount.
Date: Mon, 13 Jun 2011 16:37:26 -0400 [thread overview]
Message-ID: <4DF67506.5050704@RedHat.com> (raw)
In-Reply-To: <D9DC610C-5620-403C-BF0A-CCD37AFAF4BB@oracle.com>
On 06/10/2011 06:07 PM, Chuck Lever wrote:
>
> On Jun 10, 2011, at 5:08 PM, greearb@candelatech.com wrote:
>
>> From: Ben Greear <greearb@candelatech.com>
>>
>> Look for and parse the srcaddr=n argument. If parsing
>> succeeds, pass this down the call chain. This fully
>> implements binding to a specified source address when
>> mounting.
>>
>> Signed-off-by: Ben Greear <greearb@candelatech.com>
>> ---
>> :100644 100644 71417df... aba4252... M utils/mount/stropts.c
>> utils/mount/stropts.c | 29 +++++++++++++++++++++++++----
>> 1 files changed, 25 insertions(+), 4 deletions(-)
>>
>> diff --git a/utils/mount/stropts.c b/utils/mount/stropts.c
>> index 71417df..aba4252 100644
>> --- a/utils/mount/stropts.c
>> +++ b/utils/mount/stropts.c
>> @@ -92,6 +92,7 @@ struct nfsmount_info {
>> int flags, /* MS_ flags */
>> fake, /* actually do the mount? */
>> child; /* forked bg child? */
>> + struct local_bind_info *local_ip; /* Local IP binding info */
>> };
>>
>> #ifdef MOUNT_CONFIG
>> @@ -345,6 +346,7 @@ static int nfs_validate_options(struct nfsmount_info *mi)
>> };
>> sa_family_t family;
>> int error;
>> + char *option;
>>
>> if (!nfs_parse_devname(mi->spec, &mi->hostname, NULL))
>> return 0;
>> @@ -371,6 +373,20 @@ static int nfs_validate_options(struct nfsmount_info *mi)
>> mi->address->ai_addrlen, mi->options))
>> return 0;
>>
>> + option = po_get(mi->options, "srcaddr");
>> + if (option) {
>> + struct local_bind_info *local_ip;
>> + local_ip = malloc(sizeof(*local_ip));
>> + memset(local_ip, 0, sizeof(*local_ip));
>> + parse_local_bind(local_ip, option);
>
> Nit: Steve may not agree with this, possibly, but it is better IMO if we name new functions like parse_local_bind() with an nfs_ prefix so that, when debugging, we can immediately tell in a backtrace what functions are in mount.nfs and which are in a system library.
I do agree... We might as well stay with the naming convention
that already been established...
steved.
>
>> +
>> + if (!local_ip->is_set) {
>> + free(local_ip);
>> + return 0;
>> + }
>> + mi->local_ip = local_ip;
>> + }
>
> I'm wondering what kind of sanity checking is done on the srcaddr value.
>
> 1. Do we verify that srcaddr == clientaddr?
>
> 2. Do we verify that srcaddr.sa_family == addr.sa_family ?
>
>> +
>> return 1;
>> }
>>
>> @@ -484,7 +500,8 @@ static int nfs_construct_new_options(struct mount_options *options,
>> * FALSE is returned if some failure occurred.
>> */
>> static int
>> -nfs_rewrite_pmap_mount_options(struct mount_options *options)
>> +nfs_rewrite_pmap_mount_options(struct mount_options *options,
>> + struct local_bind_info *local_ip)
>> {
>> union nfs_sockaddr nfs_address;
>> struct sockaddr *nfs_saddr = &nfs_address.sa;
>> @@ -534,7 +551,8 @@ nfs_rewrite_pmap_mount_options(struct mount_options *options)
>> * negotiate. Bail now if we can't contact it.
>> */
>> if (!nfs_probe_bothports(mnt_saddr, mnt_salen, &mnt_pmap,
>> - nfs_saddr, nfs_salen, &nfs_pmap, NULL)) {
>> + nfs_saddr, nfs_salen, &nfs_pmap,
>> + local_ip)) {
>> errno = ESPIPE;
>> if (rpc_createerr.cf_stat == RPC_PROGNOTREGISTERED)
>> errno = EOPNOTSUPP;
>> @@ -589,7 +607,7 @@ static int nfs_sys_mount(struct nfsmount_info *mi, struct mount_options *opts)
>> }
>>
>> static int nfs_do_mount_v3v2(struct nfsmount_info *mi,
>> - struct sockaddr *sap, socklen_t salen)
>> + struct sockaddr *sap, socklen_t salen)
>> {
>> struct mount_options *options = po_dup(mi->options);
>> int result = 0;
>> @@ -631,7 +649,7 @@ static int nfs_do_mount_v3v2(struct nfsmount_info *mi,
>> printf(_("%s: trying text-based options '%s'\n"),
>> progname, *mi->extra_opts);
>>
>> - if (!nfs_rewrite_pmap_mount_options(options))
>> + if (!nfs_rewrite_pmap_mount_options(options, mi->local_ip))
>> goto out_fail;
>>
>> result = nfs_sys_mount(mi, options);
>> @@ -1039,6 +1057,7 @@ int nfsmount_string(const char *spec, const char *node, const char *type,
>> .flags = flags,
>> .fake = fake,
>> .child = child,
>> + .local_ip = NULL,
>> };
>> int retval = EX_FAIL;
>>
>> @@ -1051,5 +1070,7 @@ int nfsmount_string(const char *spec, const char *node, const char *type,
>>
>> freeaddrinfo(mi.address);
>> free(mi.hostname);
>> + if (mi.local_ip)
>> + free(mi.local_ip);
>
> Nit: free(3) works when passed NULL, you don't need the extra "if (mi.local_ip)" in front of it.
>
>> return retval;
>> }
>> --
>> 1.7.3.4
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
next prev parent reply other threads:[~2011-06-13 20:37 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-10 21:08 [PATCH v3 0/6] nfs-utils: Support binding to source address greearb
2011-06-10 21:08 ` [PATCH v3 1/6] nfs-utils: Add structure for passing local binding info greearb
2011-06-10 21:08 ` [PATCH v3 2/6] nfs-utils: Add patch to parse srcaddr= option greearb
2011-06-10 21:08 ` [PATCH v3 3/6] nfs-utils: Implement srcaddr binding in rpc_socket greearb
2011-06-10 22:06 ` Chuck Lever
2011-06-10 22:19 ` Ben Greear
2011-06-10 22:37 ` Chuck Lever
2011-06-10 22:50 ` Ben Greear
2011-06-10 21:08 ` [PATCH v3 4/6] nfs-utils: Support srcaddr=n option for string mount greearb
2011-06-10 22:07 ` Chuck Lever
2011-06-10 22:30 ` Ben Greear
2011-06-10 22:35 ` Chuck Lever
2011-06-13 20:37 ` Steve Dickson [this message]
2011-06-10 21:08 ` [PATCH v3 5/6] nfs-utils: Implement srcaddr=n binding for unmount greearb
2011-06-10 21:08 ` [PATCH v3 6/6] nfs-utils: Update man page for srcaddr= option greearb
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=4DF67506.5050704@RedHat.com \
--to=steved@redhat.com \
--cc=chuck.lever@oracle.com \
--cc=greearb@candelatech.com \
--cc=linux-nfs@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.