NFSPROC_NOOP
};
+static const struct tok nfsproc_str[] = {
+ { NFSPROC_NOOP, "nop" },
+ { NFSPROC_NULL, "null" },
+ { NFSPROC_GETATTR, "getattr" },
+ { NFSPROC_SETATTR, "setattr" },
+ { NFSPROC_LOOKUP, "lookup" },
+ { NFSPROC_ACCESS, "access" },
+ { NFSPROC_READLINK, "readlink" },
+ { NFSPROC_READ, "read" },
+ { NFSPROC_WRITE, "write" },
+ { NFSPROC_CREATE, "create" },
+ { NFSPROC_MKDIR, "mkdir" },
+ { NFSPROC_SYMLINK, "symlink" },
+ { NFSPROC_MKNOD, "mknod" },
+ { NFSPROC_REMOVE, "remove" },
+ { NFSPROC_RMDIR, "rmdir" },
+ { NFSPROC_RENAME, "rename" },
+ { NFSPROC_LINK, "link" },
+ { NFSPROC_READDIR, "readdir" },
+ { NFSPROC_READDIRPLUS, "readdirplus" },
+ { NFSPROC_FSSTAT, "fsstat" },
+ { NFSPROC_FSINFO, "fsinfo" },
+ { NFSPROC_PATHCONF, "pathconf" },
+ { NFSPROC_COMMIT, "commit" },
+ { 0, NULL }
+};
+
/*
* NFS V2 and V3 status values.
*
{ 0, NULL }
};
+static const struct tok sunrpc_auth_str[] = {
+ { SUNRPC_AUTH_OK, "OK" },
+ { SUNRPC_AUTH_BADCRED, "Bogus Credentials (seal broken)" },
+ { SUNRPC_AUTH_REJECTEDCRED, "Rejected Credentials (client should begin new session)" },
+ { SUNRPC_AUTH_BADVERF, "Bogus Verifier (seal broken)" },
+ { SUNRPC_AUTH_REJECTEDVERF, "Verifier expired or was replayed" },
+ { SUNRPC_AUTH_TOOWEAK, "Credentials are too weak" },
+ { SUNRPC_AUTH_INVALIDRESP, "Bogus response verifier" },
+ { SUNRPC_AUTH_FAILED, "Unknown failure" },
+ { 0, NULL }
+};
+
+static const struct tok sunrpc_str[] = {
+ { SUNRPC_PROG_UNAVAIL, "PROG_UNAVAIL" },
+ { SUNRPC_PROG_MISMATCH, "PROG_MISMATCH" },
+ { SUNRPC_PROC_UNAVAIL, "PROC_UNAVAIL" },
+ { SUNRPC_GARBAGE_ARGS, "GARBAGE_ARGS" },
+ { SUNRPC_SYSTEM_ERR, "SYSTEM_ERR" },
+ { 0, NULL }
+};
+
static void
print_nfsaddr(netdissect_options *ndo,
const u_char *bp, const char *s, const char *d)
case SUNRPC_AUTH_ERROR:
ND_TCHECK(rp->rm_reply.rp_reject.rj_why);
rwhy = EXTRACT_32BITS(&rp->rm_reply.rp_reject.rj_why);
- ND_PRINT((ndo, "Auth "));
- switch (rwhy) {
-
- case SUNRPC_AUTH_OK:
- ND_PRINT((ndo, "OK"));
- break;
-
- case SUNRPC_AUTH_BADCRED:
- ND_PRINT((ndo, "Bogus Credentials (seal broken)"));
- break;
-
- case SUNRPC_AUTH_REJECTEDCRED:
- ND_PRINT((ndo, "Rejected Credentials (client should begin new session)"));
- break;
-
- case SUNRPC_AUTH_BADVERF:
- ND_PRINT((ndo, "Bogus Verifier (seal broken)"));
- break;
-
- case SUNRPC_AUTH_REJECTEDVERF:
- ND_PRINT((ndo, "Verifier expired or was replayed"));
- break;
-
- case SUNRPC_AUTH_TOOWEAK:
- ND_PRINT((ndo, "Credentials are too weak"));
- break;
-
- case SUNRPC_AUTH_INVALIDRESP:
- ND_PRINT((ndo, "Bogus response verifier"));
- break;
-
- case SUNRPC_AUTH_FAILED:
- ND_PRINT((ndo, "Unknown failure"));
- break;
-
- default:
- ND_PRINT((ndo, "Invalid failure code %u", (unsigned int)rwhy));
- break;
- }
+ ND_PRINT((ndo, "Auth %s", tok2str(sunrpc_auth_str, "Invalid failure code %u", rwhy)));
break;
default:
if (!v3 && proc < NFS_NPROCS)
proc = nfsv3_procid[proc];
+ ND_PRINT((ndo, " %s", tok2str(nfsproc_str, "proc-%u", proc)));
switch (proc) {
- case NFSPROC_NOOP:
- ND_PRINT((ndo, " nop"));
- return;
- case NFSPROC_NULL:
- ND_PRINT((ndo, " null"));
- return;
case NFSPROC_GETATTR:
- ND_PRINT((ndo, " getattr"));
- if ((dp = parsereq(ndo, rp, length)) != NULL &&
- parsefh(ndo, dp, v3) != NULL)
- return;
- break;
-
case NFSPROC_SETATTR:
- ND_PRINT((ndo, " setattr"));
+ case NFSPROC_READLINK:
+ case NFSPROC_FSSTAT:
+ case NFSPROC_FSINFO:
+ case NFSPROC_PATHCONF:
if ((dp = parsereq(ndo, rp, length)) != NULL &&
parsefh(ndo, dp, v3) != NULL)
return;
break;
case NFSPROC_LOOKUP:
- ND_PRINT((ndo, " lookup"));
+ case NFSPROC_CREATE:
+ case NFSPROC_MKDIR:
+ case NFSPROC_REMOVE:
+ case NFSPROC_RMDIR:
if ((dp = parsereq(ndo, rp, length)) != NULL &&
parsefhn(ndo, dp, v3) != NULL)
return;
break;
case NFSPROC_ACCESS:
- ND_PRINT((ndo, " access"));
if ((dp = parsereq(ndo, rp, length)) != NULL &&
(dp = parsefh(ndo, dp, v3)) != NULL) {
ND_TCHECK(dp[0]);
}
break;
- case NFSPROC_READLINK:
- ND_PRINT((ndo, " readlink"));
- if ((dp = parsereq(ndo, rp, length)) != NULL &&
- parsefh(ndo, dp, v3) != NULL)
- return;
- break;
-
case NFSPROC_READ:
- ND_PRINT((ndo, " read"));
if ((dp = parsereq(ndo, rp, length)) != NULL &&
(dp = parsefh(ndo, dp, v3)) != NULL) {
if (v3) {
break;
case NFSPROC_WRITE:
- ND_PRINT((ndo, " write"));
if ((dp = parsereq(ndo, rp, length)) != NULL &&
(dp = parsefh(ndo, dp, v3)) != NULL) {
if (v3) {
}
break;
- case NFSPROC_CREATE:
- ND_PRINT((ndo, " create"));
- if ((dp = parsereq(ndo, rp, length)) != NULL &&
- parsefhn(ndo, dp, v3) != NULL)
- return;
- break;
-
- case NFSPROC_MKDIR:
- ND_PRINT((ndo, " mkdir"));
- if ((dp = parsereq(ndo, rp, length)) != 0 && parsefhn(ndo, dp, v3) != 0)
- return;
- break;
-
case NFSPROC_SYMLINK:
- ND_PRINT((ndo, " symlink"));
if ((dp = parsereq(ndo, rp, length)) != 0 &&
(dp = parsefhn(ndo, dp, v3)) != 0) {
ND_PRINT((ndo, " ->"));
break;
case NFSPROC_MKNOD:
- ND_PRINT((ndo, " mknod"));
if ((dp = parsereq(ndo, rp, length)) != 0 &&
(dp = parsefhn(ndo, dp, v3)) != 0) {
ND_TCHECK(*dp);
}
break;
- case NFSPROC_REMOVE:
- ND_PRINT((ndo, " remove"));
- if ((dp = parsereq(ndo, rp, length)) != NULL &&
- parsefhn(ndo, dp, v3) != NULL)
- return;
- break;
-
- case NFSPROC_RMDIR:
- ND_PRINT((ndo, " rmdir"));
- if ((dp = parsereq(ndo, rp, length)) != NULL &&
- parsefhn(ndo, dp, v3) != NULL)
- return;
- break;
-
case NFSPROC_RENAME:
- ND_PRINT((ndo, " rename"));
if ((dp = parsereq(ndo, rp, length)) != NULL &&
(dp = parsefhn(ndo, dp, v3)) != NULL) {
ND_PRINT((ndo, " ->"));
break;
case NFSPROC_LINK:
- ND_PRINT((ndo, " link"));
if ((dp = parsereq(ndo, rp, length)) != NULL &&
(dp = parsefh(ndo, dp, v3)) != NULL) {
ND_PRINT((ndo, " ->"));
break;
case NFSPROC_READDIR:
- ND_PRINT((ndo, " readdir"));
if ((dp = parsereq(ndo, rp, length)) != NULL &&
(dp = parsefh(ndo, dp, v3)) != NULL) {
if (v3) {
break;
case NFSPROC_READDIRPLUS:
- ND_PRINT((ndo, " readdirplus"));
if ((dp = parsereq(ndo, rp, length)) != NULL &&
(dp = parsefh(ndo, dp, v3)) != NULL) {
ND_TCHECK(dp[4]);
}
break;
- case NFSPROC_FSSTAT:
- ND_PRINT((ndo, " fsstat"));
- if ((dp = parsereq(ndo, rp, length)) != NULL &&
- parsefh(ndo, dp, v3) != NULL)
- return;
- break;
-
- case NFSPROC_FSINFO:
- ND_PRINT((ndo, " fsinfo"));
- if ((dp = parsereq(ndo, rp, length)) != NULL &&
- parsefh(ndo, dp, v3) != NULL)
- return;
- break;
-
- case NFSPROC_PATHCONF:
- ND_PRINT((ndo, " pathconf"));
- if ((dp = parsereq(ndo, rp, length)) != NULL &&
- parsefh(ndo, dp, v3) != NULL)
- return;
- break;
-
case NFSPROC_COMMIT:
- ND_PRINT((ndo, " commit"));
if ((dp = parsereq(ndo, rp, length)) != NULL &&
(dp = parsefh(ndo, dp, v3)) != NULL) {
ND_TCHECK(dp[2]);
break;
default:
- ND_PRINT((ndo, " proc-%u", EXTRACT_32BITS(&rp->rm_call.cb_proc)));
return;
}
* now we can check the ar_stat field
*/
astat = (enum sunrpc_accept_stat) EXTRACT_32BITS(dp);
- switch (astat) {
-
- case SUNRPC_SUCCESS:
- break;
-
- case SUNRPC_PROG_UNAVAIL:
- ND_PRINT((ndo, " PROG_UNAVAIL"));
- nfserr = 1; /* suppress trunc string */
- return (NULL);
-
- case SUNRPC_PROG_MISMATCH:
- ND_PRINT((ndo, " PROG_MISMATCH"));
- nfserr = 1; /* suppress trunc string */
- return (NULL);
-
- case SUNRPC_PROC_UNAVAIL:
- ND_PRINT((ndo, " PROC_UNAVAIL"));
- nfserr = 1; /* suppress trunc string */
- return (NULL);
-
- case SUNRPC_GARBAGE_ARGS:
- ND_PRINT((ndo, " GARBAGE_ARGS"));
- nfserr = 1; /* suppress trunc string */
- return (NULL);
-
- case SUNRPC_SYSTEM_ERR:
- ND_PRINT((ndo, " SYSTEM_ERR"));
- nfserr = 1; /* suppress trunc string */
- return (NULL);
-
- default:
- ND_PRINT((ndo, " ar_stat %d", astat));
+ if (astat != SUNRPC_SUCCESS) {
+ ND_PRINT((ndo, " %s", tok2str(sunrpc_str, "ar_stat %d", astat)));
nfserr = 1; /* suppress trunc string */
return (NULL);
}
if (!v3 && proc < NFS_NPROCS)
proc = nfsv3_procid[proc];
+ ND_PRINT((ndo, " %s", tok2str(nfsproc_str, "proc-%u", proc)));
switch (proc) {
- case NFSPROC_NOOP:
- ND_PRINT((ndo, " nop"));
- return;
-
- case NFSPROC_NULL:
- ND_PRINT((ndo, " null"));
- return;
-
case NFSPROC_GETATTR:
- ND_PRINT((ndo, " getattr"));
dp = parserep(ndo, rp, length);
if (dp != NULL && parseattrstat(ndo, dp, !ndo->ndo_qflag, v3) != 0)
return;
break;
case NFSPROC_SETATTR:
- ND_PRINT((ndo, " setattr"));
if (!(dp = parserep(ndo, rp, length)))
return;
if (v3) {
break;
case NFSPROC_LOOKUP:
- ND_PRINT((ndo, " lookup"));
if (!(dp = parserep(ndo, rp, length)))
break;
if (v3) {
break;
case NFSPROC_ACCESS:
- ND_PRINT((ndo, " access"));
if (!(dp = parserep(ndo, rp, length)))
break;
if (!(dp = parsestatus(ndo, dp, &er)))
return;
case NFSPROC_READLINK:
- ND_PRINT((ndo, " readlink"));
dp = parserep(ndo, rp, length);
if (dp != NULL && parselinkres(ndo, dp, v3) != 0)
return;
break;
case NFSPROC_READ:
- ND_PRINT((ndo, " read"));
if (!(dp = parserep(ndo, rp, length)))
break;
if (v3) {
break;
case NFSPROC_WRITE:
- ND_PRINT((ndo, " write"));
if (!(dp = parserep(ndo, rp, length)))
break;
if (v3) {
break;
case NFSPROC_CREATE:
- ND_PRINT((ndo, " create"));
- if (!(dp = parserep(ndo, rp, length)))
- break;
- if (v3) {
- if (parsecreateopres(ndo, dp, ndo->ndo_vflag) != 0)
- return;
- } else {
- if (parsediropres(ndo, dp) != 0)
- return;
- }
- break;
-
case NFSPROC_MKDIR:
- ND_PRINT((ndo, " mkdir"));
if (!(dp = parserep(ndo, rp, length)))
break;
if (v3) {
break;
case NFSPROC_SYMLINK:
- ND_PRINT((ndo, " symlink"));
if (!(dp = parserep(ndo, rp, length)))
break;
if (v3) {
break;
case NFSPROC_MKNOD:
- ND_PRINT((ndo, " mknod"));
if (!(dp = parserep(ndo, rp, length)))
break;
if (parsecreateopres(ndo, dp, ndo->ndo_vflag) != 0)
break;
case NFSPROC_REMOVE:
- ND_PRINT((ndo, " remove"));
- if (!(dp = parserep(ndo, rp, length)))
- break;
- if (v3) {
- if (parsewccres(ndo, dp, ndo->ndo_vflag))
- return;
- } else {
- if (parsestatus(ndo, dp, &er) != 0)
- return;
- }
- break;
-
case NFSPROC_RMDIR:
- ND_PRINT((ndo, " rmdir"));
if (!(dp = parserep(ndo, rp, length)))
break;
if (v3) {
break;
case NFSPROC_RENAME:
- ND_PRINT((ndo, " rename"));
if (!(dp = parserep(ndo, rp, length)))
break;
if (v3) {
break;
case NFSPROC_LINK:
- ND_PRINT((ndo, " link"));
if (!(dp = parserep(ndo, rp, length)))
break;
if (v3) {
break;
case NFSPROC_READDIR:
- ND_PRINT((ndo, " readdir"));
if (!(dp = parserep(ndo, rp, length)))
break;
if (v3) {
break;
case NFSPROC_READDIRPLUS:
- ND_PRINT((ndo, " readdirplus"));
if (!(dp = parserep(ndo, rp, length)))
break;
if (parsev3rddirres(ndo, dp, ndo->ndo_vflag))
break;
case NFSPROC_FSSTAT:
- ND_PRINT((ndo, " fsstat"));
dp = parserep(ndo, rp, length);
if (dp != NULL && parsestatfs(ndo, dp, v3) != 0)
return;
break;
case NFSPROC_FSINFO:
- ND_PRINT((ndo, " fsinfo"));
dp = parserep(ndo, rp, length);
if (dp != NULL && parsefsinfo(ndo, dp) != 0)
return;
break;
case NFSPROC_PATHCONF:
- ND_PRINT((ndo, " pathconf"));
dp = parserep(ndo, rp, length);
if (dp != NULL && parsepathconf(ndo, dp) != 0)
return;
break;
case NFSPROC_COMMIT:
- ND_PRINT((ndo, " commit"));
dp = parserep(ndo, rp, length);
if (dp != NULL && parsewccres(ndo, dp, ndo->ndo_vflag) != 0)
return;
break;
default:
- ND_PRINT((ndo, " proc-%u", proc));
return;
}
trunc: