Subject: bin/7350: AMD nolonger mounting from servers that only support NFS/UDP
To: None <gnats-bugs@gnats.netbsd.org>
From: Richard Earnshaw <rearnsha@cambridge.arm.com>
List: netbsd-bugs
Date: 04/09/1999 18:24:08
>Number:         7350
>Category:       bin
>Synopsis:       AMD nolonger mounting from servers that only support NFS/UDP
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    bin-bug-people (Utility Bug People)
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Apr  9 10:35:01 1999
>Last-Modified:
>Originator:     rearnsha
>Organization:
ARM
-- 
>Release:        NetBSD-current 19990408<NetBSD-current source date>
>Environment:
	
System: NetBSD shark1 1.4_ALPHA NetBSD 1.4_ALPHA (SHARK) #28: Thu Apr 8 10:58:42 BST 1999 rearnsha@shark1:/work/rearnsha/netbsd/sys/arch/arm32/compile/SHARK arm32


>Description:
	On 30 March, the ordering for checking UDP vs TCP NFS mounts was 
	changed to check UDP before TCP.  Since this time, it is no-longer 
	possible to mount a file system from an NFS server that only supports
	UDP mounting (our NETAPP falls into this category).  

	Turning on full logging for amd gives:

 amd[803]: get_nfs_version: returning (3,udp) on host rogangosh
 amd[803]: get_nfs_version NFS(3,tcp) failed for rogangosh :: RPC: Program not registered
 amd[803]: Using NFS version 3, protocol udp on host rogangosh
 amd[803]: start_ping: nfs_version: 3
 amd[803]: get_nfs_version: returning (3,udp) on host rogangosh
 amd[803]: get_nfs_version NFS(3,tcp) failed for rogangosh :: RPC: Program not registered
 amd[803]: Using NFS version 3, protocol udp on host rogangosh
 amd[803]: get_nfs_version: returning (3,udp) on host rogangosh
 amd[803]: get_nfs_version NFS(3,tcp) failed for rogangosh :: RPC: Program not registered
 amd[803]: Using NFS version 3, protocol udp on host rogangosh
 amd[803]: get_nfs_version: returning (3,udp) on host rogangosh
 amd[803]: get_nfs_version NFS(3,tcp) failed for rogangosh :: RPC: Program not registered
 amd[803]: Using NFS version 3, protocol udp on host rogangosh
 amd[803]: get_nfs_version: returning (3,udp) on host rogangosh
 amd[803]: get_nfs_version NFS(3,tcp) failed for rogangosh :: RPC: Program not registered
 amd[803]: Using NFS version 3, protocol udp on host rogangosh
 amd[803]: get_nfs_version: returning (3,udp) on host rogangosh
 amd[803]: get_nfs_version NFS(3,tcp) failed for rogangosh :: RPC: Program not registered
 amd[803]: Using NFS version 3, protocol udp on host rogangosh
 amd[803]: file server rogangosh type nfs starts down
 amd[803]: get_nfs_version: returning (3,udp) on host rogangosh
 amd[803]: get_nfs_version NFS(3,tcp) failed for rogangosh :: RPC: Program not registered
 amd[803]: Using NFS version 3, protocol udp on host rogangosh

	A slowlaris snoop gives an idea what is happening over the wire.

    shark1 -> rogangosh    PORTMAP C Null
 rogangosh -> shark1       PORTMAP R Null
    shark1 -> rogangosh    PORTMAP C GETPORT prog=100003 (NFS) vers=3 proto=UDP
 rogangosh -> shark1       PORTMAP R GETPORT port=2049
    shark1 -> rogangosh    NFS C NULL3
 rogangosh -> shark1       NFS R NULL3
    shark1 -> rogangosh    PORTMAP C Null
 rogangosh -> shark1       PORTMAP R Null
    shark1 -> rogangosh    PORTMAP C GETPORT prog=100003 (NFS) vers=3 proto=TCP
 rogangosh -> shark1       PORTMAP R GETPORT port=0
    shark1 -> rogangosh    PORTMAP C Null
 rogangosh -> shark1       PORTMAP R Null
    shark1 -> rogangosh    PORTMAP C GETPORT prog=100003 (NFS) vers=3 proto=UDP
 rogangosh -> shark1       PORTMAP R GETPORT port=2049
    shark1 -> rogangosh    NFS C NULL3
 rogangosh -> shark1       NFS R NULL3
    shark1 -> rogangosh    PORTMAP C Null
 rogangosh -> shark1       PORTMAP R Null
    shark1 -> rogangosh    PORTMAP C GETPORT prog=100003 (NFS) vers=3 proto=TCP
 rogangosh -> shark1       PORTMAP R GETPORT port=0
    shark1 -> rogangosh    PORTMAP C Null
 rogangosh -> shark1       PORTMAP R Null
    shark1 -> rogangosh    PORTMAP C GETPORT prog=100003 (NFS) vers=3 proto=UDP

	The calls to the portmapper keep repeating until eventually timing
	out.

	Also, a solaris snoop of a mount from a machine that supports TCP 
	mounts seems to show that TCP mounting is still being preferred 
	over UDP.

   shark1 -> alpha3       PORTMAP C Null
   alpha3 -> shark1       PORTMAP R Null
   shark1 -> alpha3       PORTMAP C GETPORT prog=100003 (NFS) vers=3 proto=UDP
   alpha3 -> shark1       PORTMAP R GETPORT port=2049
   shark1 -> alpha3       NFS C NULL3
   alpha3 -> shark1       NFS R NULL3
   shark1 -> alpha3       PORTMAP C Null
   alpha3 -> shark1       PORTMAP R Null
   shark1 -> alpha3       PORTMAP C GETPORT prog=100003 (NFS) vers=3 proto=TCP
   alpha3 -> shark1       PORTMAP R GETPORT port=2049
   shark1 -> alpha3       TCP D=2049 S=1007 Syn Seq=3313399801 Len=0 Win=16384
   alpha3 -> shark1       TCP D=1007 S=2049 Syn Ack=3313399802 Seq=907904000
				Len=0 Win=33580
   shark1 -> alpha3       TCP D=2049 S=1007     Ack=907904001 Seq=3313399802 
				Len=0 Win=17520
   shark1 -> alpha3       NFS C NULL3
   alpha3 -> shark1       NFS R NULL3
   shark1 -> alpha3       TCP D=2049 S=1007 Fin Ack=907904029 Seq=3313399846 
				Len=0 Win=17520
   alpha3 -> shark1       TCP D=1007 S=2049     Ack=3313399847 Seq=907904029 
				Len=0 Win=33580
   alpha3 -> shark1       TCP D=1007 S=2049 Fin Ack=3313399847 Seq=907904029 
				Len=0 Win=33580
   shark1 -> alpha3       TCP D=2049 S=1007     Ack=907904030 Seq=3313399847 
				Len=0 Win=17520

	

>How-To-Repeat:
	Try to automount a file system from an NFS server that doesn't support
	TCP mounting.

>Fix:
	revert amd/amd/srvr_nfs.c to version 1.10, but this is probably
	just papering over a bug somewhere else.

>Audit-Trail:
>Unformatted: