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>