diff mbox

Should "mount -o proto=udp" be usable against an IPv6 only server?

Message ID 20121003131103.57f299a4@notabene.brown (mailing list archive)
State New, archived
Headers show

Commit Message

NeilBrown Oct. 3, 2012, 3:11 a.m. UTC
On Tue, 2 Oct 2012 07:24:23 -0700 Chuck Lever <chuck.lever@oracle.com> wrote:

> 
> On Oct 1, 2012, at 10:24 PM, NeilBrown wrote:
> 
> > On Tue, 18 Sep 2012 21:00:01 -0400 Chuck Lever <chuck.lever@oracle.com> wrote:
> >>> +A
> >>> +.I netid
> >>> +determines both the
> >>> +.I transport
> >>> +and
> >>> +.I network
> >>> +protocols, so for example
> >> 
> >> "determines both the protocol family and transport" are closer to how these terms are defined in netconfig(5), and I prefer that formulation.  I still believe a citation of netconfig(5) would be correct and helpful.  A citation in the SEE ALSO section should also be added.
> > 
> > (SEE ALSO already mentions netconfig(5).)
> > 
> > Don't you love standards....
> > 
> > ISO OSI seems to use "network" for layer 3 and "transport" for layer 4, which
> > is where I got that names I used.
> > 
> > netconfig(5) uses "protocol family" and "protocol" respectively, and
> > "transport" to identify the combination of the two (which is also the
> > network_id).
> > 
> > socket(2) also uses "protocol family" and "protocol", but uses AF as the
> > prefix for "protocol family" aka "address family" :-)
> > 
> > This does serve to highlight the inappropriateness of using "proto=" to
> > specify the "transport", and the netconfig usage treats the "protocol" as a
> > just part of the "transport" (but allows e.g. "udp" to be both a protocol and
> > a transport depending on context).
> > 
> > It looks like  "protocol" and "protocol family" are the most appropriate
> > terms in the Unix world, and the examples can clear up any uncertainty:
> > 
> > ------------
> > A
> > .I netid
> > determines both the
> > .I protocol
> > and
> > .IR "protocol family" .
> > So for example
> > .B udp
> > selects UDP over IPv4 while
> > .B tcp6
> > selects TCP over IPv6.
> > -----------------
> >> 
> >> As a matter of word smithing, I think starting a new sentence at "so for example" would be easier to read.
> > 
> > Agreed.
> > 
> > So how about this.
> > 
> > Thanks,
> > NeilBrown
> > 
> > 
> > From: Neil Brown <neilb@suse.de>
> > Date: Tue, 2 Oct 2012 15:21:46 +1000
> > Subject: [PATCH] mount.nfs mapage: clear up confusion between 'proto' and
> > 'transport'
> > 
> > The mount option "proto=" actually set the "transport" which in
> > netconfig usage is the paring of a protocol (e.g. UDP, TCP) with
> > a protocol family (e.g. INET, INET6).
> > 
> > This can cause confusion if people naively except "proto=udp" to work
> > equally well on IPv6.
> > 
> > So add some text to both nfs(5) and nfsmount.conf(5) to hopefully
> > clarify this.
> > 
> > Signed-off-by: NeilBrown <neilb@suse.de>
> > 
> > diff --git a/utils/mount/nfs.man b/utils/mount/nfs.man
> > index da6d6d3..2741a60 100644
> > --- a/utils/mount/nfs.man
> > +++ b/utils/mount/nfs.man
> > @@ -1,5 +1,5 @@
> > .\"@(#)nfs.5"
> > -.TH NFS 5 "2 November 2007"
> > +.TH NFS 5 "19 September 2012"
> > .SH NAME
> > nfs \- fstab format and options for the
> > .B nfs
> > @@ -474,9 +474,17 @@ for NFS versions 2 and 3 only.
> > .BI proto= netid
> > The transport protocol name and protocol family the NFS client uses
> > to transmit requests to the NFS server for this mount point.
> > -If an NFS server has both an IPv4 and an IPv6 address, using a specific
> > -netid will force the use of IPv4 or IPv6 networking to communicate
> > -with that server.
> > +A
> > +.I netid
> > +determines both the
> > +.I protocol
> > +and
> > +.IR "protocol family" .
> 
> Looking at this addition in context, the new sentence simply repeats the existing first sentence in the paragraph.  How about we clarify the existing first sentence, and just add your example:

Good point!

> 
> > proto=netid
> > 
> > The protocol and protocol family the NFS client uses to transmit requests to the NFS server for this mount point.  For example, udp selects UDP over IPv4, while tcp6 selects TCP over IPv6.  If an NFS server has both an IPv4 and an IPv6 address, using a specific netid forces the use of IPv4 or IPv6 networking to communicate with that server.

I still don't like that last sentence.

> 
> We have a slightly sticky problem, then.  TI-RPC brings more to the table than udp/udp6 and tcp/tcp6.  For instance, we also now have rdma/rdma6 netids (not mentioned anywhere, ha) and there is a local transport netid.  If there ever is support for RPC over SCTP, that would also get its own pair of netids.  The problem is that not all of these netids are supported by NFS right now.  I think nfs(5) might benefit by providing a list of supported netid values.
> 
> This could make the above paragraph perhaps too long.  We should consider adding a section to nfs(5) that discusses this in a little more detail.  That can be a separate patch, of course.
>

The current kernel only supports:

static const match_table_t nfs_xprt_protocol_tokens = {
	{ Opt_xprt_udp, "udp" },
	{ Opt_xprt_udp6, "udp6" },
	{ Opt_xprt_tcp, "tcp" },
	{ Opt_xprt_tcp6, "tcp6" },
	{ Opt_xprt_rdma, "rdma" },

	{ Opt_xprt_err, NULL }
};


So it seems reasonably just to list those.  nfs-tuils seems to support rdma6
too, so I assume that is coming soon to a kernel near me.

So how about we drop the reference to netconfig (though leave it in SEE ALSO)
and just be explicit about the short list.  That means 'rdma' is no longer a
special case.
??

Thanks,
NeilBrown

From 3d2fb5a4a091f00494c0f655e4a02041c1f05aa3 Mon Sep 17 00:00:00 2001
From: Neil Brown <neilb@suse.de>
Date: Tue, 2 Oct 2012 15:21:46 +1000
Subject: [PATCH] mount.nfs mapage: clear up confusion between 'proto' and
 'transport'

The mount option "proto=" actually set the "transport" which in
netconfig usage is the paring of a protocol (e.g. UDP, TCP) with
a protocol family (e.g. INET, INET6).

This can cause confusion if people naively except "proto=udp" to work
equally well on IPv6.

So add some text to both nfs(5) and nfsmount.conf(5) to hopefully
clarify this.

Signed-off-by: NeilBrown <neilb@suse.de>
diff mbox

Patch

diff --git a/utils/mount/nfs.man b/utils/mount/nfs.man
index da6d6d3..11bbfc6 100644
--- a/utils/mount/nfs.man
+++ b/utils/mount/nfs.man
@@ -1,5 +1,5 @@ 
 .\"@(#)nfs.5"
-.TH NFS 5 "2 November 2007"
+.TH NFS 5 "19 September 2012"
 .SH NAME
 nfs \- fstab format and options for the
 .B nfs
@@ -472,24 +472,15 @@  Use these options, along with the options in the above subsection,
 for NFS versions 2 and 3 only.
 .TP 1.5i
 .BI proto= netid
-The transport protocol name and protocol family the NFS client uses
-to transmit requests to the NFS server for this mount point.
-If an NFS server has both an IPv4 and an IPv6 address, using a specific
-netid will force the use of IPv4 or IPv6 networking to communicate
-with that server.
-.IP
-If support for TI-RPC is built into the
-.B mount.nfs
-command,
-.I netid
-is a valid netid listed in
-.IR /etc/netconfig .
-The value "rdma" may also be specified.
-If the
-.B mount.nfs
-command does not have TI-RPC support, then
+The
 .I netid
-is one of "tcp," "udp," or "rdma," and only IPv4 may be used.
+determines the transport that is used to communicate with the NFS
+server.  Available options are
+.BR udp ", " udp6 ", "tcp ", " tcp6 ", " rdma ", and " rdma6 .
+Those which end in
+.B 6
+use IPv6 addresses and are only available if support for TI-RPC is
+built in. Others use IPv4 addresses.
 .IP
 Each transport protocol uses different default
 .B retrans
@@ -573,15 +564,14 @@  The transport protocol name and protocol family the NFS client uses
 to transmit requests to the NFS server's mountd service when performing
 this mount request, and when later unmounting this mount point.
 .IP
-If support for TI-RPC is built into the
+.I netid
+may be one of
+.BR udp ", " tcp ", and " rdma
+which use IPv4 address or, if TI-RPC is built into the
 .B mount.nfs
 command,
-.I netid
-is a valid netid listed in
-.IR /etc/netconfig .
-Otherwise,
-.I netid
-is one of "tcp" or "udp," and only IPv4 may be used.
+.BR udp6 ", " tcp6 ", and " rdma6
+which use IPv6 addresses.
 .IP
 This option can be used when mounting an NFS server
 through a firewall that blocks a particular transport.
@@ -773,21 +763,15 @@  Use these options, along with the options in the first subsection above,
 for NFS version 4 and newer.
 .TP 1.5i
 .BI proto= netid
-The transport protocol name and protocol family the NFS client uses
-to transmit requests to the NFS server for this mount point.
-If an NFS server has both an IPv4 and an IPv6 address, using a specific
-netid will force the use of IPv4 or IPv6 networking to communicate
-with that server.
-.IP
-If support for TI-RPC is built into the
-.B mount.nfs
-command,
-.I netid
-is a valid netid listed in
-.IR /etc/netconfig .
-Otherwise,
+The
 .I netid
-is one of "tcp" or "udp," and only IPv4 may be used.
+determines the transport that is used to communicate with the NFS
+server.  Available options are
+.BR udp ", " udp6 ", "tcp ", " tcp6 ", " rdma ", and " rdma6 .
+Those which end in
+.B 6
+use IPv6 addresses and are only available if support for TI-RPC is
+built in. Others use IPv4 addresses.
 .IP
 All NFS version 4 servers are required to support TCP,
 so if this mount option is not specified, the NFS version 4 client
@@ -851,6 +835,8 @@  The DATA AND METADATA COHERENCE section discusses
 the behavior of this option in more detail.
 .TP 1.5i
 .BI clientaddr= n.n.n.n
+.TP 1.5i
+.BI clientaddr= n:n: ... :n
 Specifies a single IPv4 address (in dotted-quad form),
 or a non-link-local IPv6 address,
 that the NFS client advertises to allow servers
diff --git a/utils/mount/nfsmount.conf.man b/utils/mount/nfsmount.conf.man
index 12a3fe7..2258296 100644
--- a/utils/mount/nfsmount.conf.man
+++ b/utils/mount/nfsmount.conf.man
@@ -1,5 +1,5 @@ 
 .\"@(#)nfsmount.conf.5"
-.TH NFSMOUNT.CONF 5 "9 Mar 2008"
+.TH NFSMOUNT.CONF 5 "19 September 2012"
 .SH NAME
 nfsmount.conf - Configuration file for NFS mounts
 .SH SYNOPSIS
@@ -18,6 +18,10 @@  to particular variables using the
 .BR = 
 operator, as in 
 .BR Proto=Tcp .
+The variables that can be assigned are exactly the set of NFS specific
+mount options listed in
+.BR nfs (5).
+.PP
 Sections are broken up into three basic categories:
 Global options, Server options and Mount Point options.
 .HP
@@ -54,7 +58,7 @@  are defined in the configuration file.
     Proto=Tcp
 .RS
 .HP
-The TCP protocol will be used on every NFS mount.
+The TCP/IPv4 protocol will be used on every NFS mount.
 .HP
 .RE
 [ Server \(lqnfsserver.foo.com\(rq ]
@@ -62,10 +66,13 @@  The TCP protocol will be used on every NFS mount.
     rsize=32k
 .br
     wsize=32k
+.br
+    proto=udp6
 .HP
 .RS
-A 33k (32768 bytes) block size will be used as the read and write
-size on all mounts to the 'nfsserver.foo.com' server.
+A 32k (32768 bytes) block size will be used as the read and write
+size on all mounts to the 'nfsserver.foo.com' server.  UDP/IPv6
+is the protocol to be used.
 .HP
 .RE
 .BR