Subject: Re: bin/12802: mount_nfs forces ipv6 if interface is capable
To: Bernd Ernesti <netbsd@arresum.inka.de>
From: Hubert Feyrer <hubert.feyrer@informatik.fh-regensburg.de>
List: tech-userlevel
Date: 05/01/2001 22:43:13
On Tue, 1 May 2001, Bernd Ernesti wrote:
> I don't think that adding a -4 option for ipv4 is a good idea.
> This would collide with NFS Version 4, whenever we get it.
There's a place out there that has -A for address family, and usually
yakes inet or inet6. Maybe we could adopt that for various tools
(mount_nfs, ping, traceroute, netstat, ...)
- Hubert
>
> Bernd
>
> On Tue, May 01, 2001 at 12:28:00PM -0700, adam@algroup.co.uk wrote:
> >
> > >Number: 12802
> > >Category: bin
> > >Synopsis: mount_nfs forces ipv6 if interface is capable
> > >Confidential: no
> > >Severity: serious
> > >Priority: medium
> > >Responsible: bin-bug-people
> > >State: open
> > >Class: sw-bug
> > >Submitter-Id: net
> > >Arrival-Date: Tue May 01 12:28:00 PDT 2001
> > >Closed-Date:
> > >Last-Modified:
> > >Originator: Adam Laurie
> > >Release: 1.5
> > >Organization:
> > A.L. Digital Ltd.
> > >Environment:
> > NetBSD gnugget 1.5U NetBSD 1.5U (GNUGGET) #16: Mon Apr 30 15:52:55 BST 2001 root@gnugget:/usr/src/sys/arch/hpcmips/compile/GNUGGET hpcmips
> >
> > >Description:
> > mount_nfs will choose ipv6 for the rpcbind request if the interface is
> > capable. this will cause it to fail for services that are only registered
> > for ipv4.
> > >How-To-Repeat:
> > build cfsd (with port 2049 option), run rpcbind, mountd and cfsd.
> > you then get the following behaviour:
> >
> > gnugget-root# /sbin/mount -o intr,-2 localhost:/null /crypt
> > mount_nfs: rpcbind on server: RPC: Program not registered
> >
> > adding the option to specify ipv4 fixes it:
> >
> > gnugget-root# /sbin/mount -o intr,-2,-4 localhost:/null /crypt
> > gnugget-root#
> >
> > >Fix:
> > apply the following patch:
> >
> > --- sbin/mount_nfs/mount_nfs.c.orig Mon Apr 30 14:38:55 2001
> > +++ sbin/mount_nfs/mount_nfs.c Mon Apr 30 14:46:27 2001
> > @@ -168,6 +168,7 @@
> > int nfsproto = IPPROTO_UDP;
> > int force2 = 0;
> > int force3 = 0;
> > +int inet4 = 0;
> > int mnttcp_ok = 1;
> >
> > #ifdef NFSKERB
> > @@ -237,7 +238,7 @@
> > nfsargs = nfsdefargs;
> > nfsargsp = &nfsargs;
> > while ((c = getopt(argc, argv,
> > - "23a:bcCdD:g:I:iKL:lm:o:PpqR:r:sTt:w:x:UX")) != -1)
> > + "234a:bcCdD:g:I:iKL:lm:o:PpqR:r:sTt:w:x:UX")) != -1)
> > switch (c) {
> > case '3':
> > if (force2)
> > @@ -250,6 +251,9 @@
> > force2 = 1;
> > nfsargsp->flags &= ~NFSMNT_NFSV3;
> > break;
> > + case '4':
> > + inet4 = 1;
> > + break;
> > case 'a':
> > num = strtol(optarg, &p, 10);
> > if (*p || num < 0)
> > @@ -672,12 +676,12 @@
> > * __rpc_*2nconf exist, maybe they should be exported.
> > */
> > if (nfsargsp->sotype == SOCK_STREAM) {
> > - if (ai->ai_family == AF_INET6)
> > + if (ai->ai_family == AF_INET6 && ! inet4)
> > netid = "tcp6";
> > else
> > netid = "tcp";
> > } else {
> > - if (ai->ai_family == AF_INET6)
> > + if (ai->ai_family == AF_INET6 && ! inet4)
> > netid = "udp6";
> > else
> > netid = "udp";
> > @@ -857,7 +861,7 @@
> > usage()
> > {
> > (void)fprintf(stderr, "usage: mount_nfs %s\n%s\n%s\n%s\n%s\n",
> > -"[-23bcCdiKlpPqsTUX] [-a maxreadahead] [-D deadthresh]",
> > +"[-234bcCdiKlpPqsTUX] [-a maxreadahead] [-D deadthresh]",
> > "\t[-g maxgroups] [-I readdirsize] [-L leaseterm] [-m realm]",
> > "\t[-o options] [-R retrycnt] [-r readsize] [-t timeout]",
> > "\t[-w writesize] [-x retrans]",
> > --- sbin/mount_nfs/mount_nfs.8.orig Mon Apr 30 15:36:52 2001
> > +++ sbin/mount_nfs/mount_nfs.8 Mon Apr 30 15:36:58 2001
> > @@ -42,7 +42,7 @@
> > .Sh SYNOPSIS
> > .Nm ""
> > .Bk -words
> > -.Op Fl 23KPTUbcCdilqs
> > +.Op Fl 234KPTUbcCdilqs
> > .Ek
> > .Bk -words
> > .Op Fl D Ar deadthresh
> > @@ -103,6 +103,8 @@
> > .It Fl 3
> > Use the NFS Version 3 protocol. The default is to try version 3 first, and
> > fall back to version 2 if the mount fails.
> > +.It Fl 4
> > +Use IPv4 transport. The default is to use IPv6 if the interface supports it.
> > .It Fl D
> > Used with NQNFS to set the
> > .Dq "dead server threshold"
> >
> > >Release-Note:
> > >Audit-Trail:
> > >Unformatted:
> >
>
--
Hubert Feyrer <hubert.feyrer@informatik.fh-regensburg.de>