Subject: Re: kern/32318: NFS client or server hang
To: None <gnats-bugs@netbsd.org, kern-bug-people@netbsd.org,>
From: Christos Zoulas <christos@zoulas.com>
List: netbsd-bugs
Date: 12/16/2005 14:28:49
On Dec 16, 7:00pm, bouyer@antioche.eu.org (Manuel Bouyer) wrote:
-- Subject: kern/32318: NFS client or server hang
| Before that the server sent a stream of
| 19:19:24.927421 IP chassiron.localhost.nfs > rochebonne.antioche.eu.org.1098072401: reply ERR 1460
| I'm not sure if it's normal or not (is this an error, or a normal
| reply to a read ?)
| It also looks like the client opened a second TCP connection at
| 19:19:26.792149, maybe for the concurrent accesses ?
Well, lets find out what the error means... Here's a patch to parse the
rpc message rejection code. I have not tested it, but it should be close.
If it works, please commit it. We can then find out what kind of error
you are getting.
christos
Index: print-nfs.c
===================================================================
RCS file: /cvsroot/src/dist/tcpdump/print-nfs.c,v
retrieving revision 1.13
diff -u -u -r1.13 print-nfs.c
--- print-nfs.c 27 Sep 2004 23:04:24 -0000 1.13
+++ print-nfs.c 16 Dec 2005 19:27:26 -0000
@@ -1007,6 +1007,67 @@
len = EXTRACT_32BITS(&dp[1]);
if (len >= length)
return (NULL);
+
+ if (EXTRACT_32BITS(&rp->rm_reply.rp_stat) != MSG_ACCEPTED) {
+ enum reject_stat rstat;
+ rpcvers_t rlow;
+ rpcvers_t rhigh;
+ enum auth_stat rwhy;
+
+ rstat = EXTRACT_32BITS(dp);
+ switch (rstat) {
+ case RPC_MISMATCH:
+ dp += sizeof(u_int32_t);
+ rlow = EXTRACT_32BITS(dp);
+ dp += sizeof(u_int32_t);
+ rhigh = EXTRACT_32BITS(dp);
+ printf("RPC Version mismatch (%d-%d)\n",
+ (int)rlow, (int)rhigh);
+ break;
+ case AUTH_ERROR:
+ dp += sizeof(u_int32_t);
+ rwhy = EXTRACT_32BITS(dp);
+ printf("Auth ");
+ switch (rwhy) {
+ case AUTH_OK:
+ printf("OK\n");
+ break;
+ case AUTH_BADCRED:
+ printf("Bogus Credentials (seal broken)\n");
+ break;
+ case AUTH_REJECTEDCRED:
+ printf("Rejected Credentials (client should "
+ "begin new session)\n");
+ break;
+ case AUTH_BADVERF:
+ printf("Bogus Verifier (seal broken)\n");
+ break;
+ case AUTH_REJECTEDVERF:
+ printf("Verifier expired or was replayed\n");
+ break;
+ case AUTH_TOOWEAK:
+ printf("Credentials are too weak\n");
+ break;
+ case AUTH_INVALIDRESP:
+ printf("Bogus response verifier\n");
+ break;
+ case AUTH_FAILED:
+ printf("Unknown failure\n");
+ break;
+ default:
+ printf("Invalid failure code %d\n",
+ (int)rwhy);
+ break;
+ }
+ break;
+ default:
+ printf("Unknown reason for rejecting rpc message %d\n",
+ (int)rstat);
+ break;
+ }
+ return NULL;
+ }
+
/*
* skip past the ar_verf credentials.
*/