diff options
author | Guy Harris <guy@alum.mit.edu> | 2018-06-22 17:19:18 -0700 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2018-06-22 17:19:18 -0700 |
commit | 19671cc62f08c8b13933cf7e1293fa3bd21b34db (patch) | |
tree | ae73c29d97722468197fae18c5810e34a9a1fcb3 | |
parent | 279bd14fc59ef9d84f350c3df12d37de6495662d (diff) | |
download | tcpdump-19671cc62f08c8b13933cf7e1293fa3bd21b34db.tar.gz |
Use nd_uint types for structures used to overlay packets.
-rw-r--r-- | nfs.h | 146 | ||||
-rw-r--r-- | print-nfs.c | 144 |
2 files changed, 149 insertions, 141 deletions
@@ -118,7 +118,6 @@ #define NFSX_V3FHMAX 64 /* max. allowed by protocol */ #define NFSX_V3FATTR 84 #define NFSX_V3SATTR 60 /* max. all fields filled in */ -#define NFSX_V3SRVSATTR (sizeof (struct nfsv3_sattr)) #define NFSX_V3POSTOPATTR (NFSX_V3FATTR + NFSX_UNSIGNED) #define NFSX_V3WCCDATA (NFSX_V3POSTOPATTR + 8 * NFSX_UNSIGNED) #define NFSX_V3COOKIEVERF 8 @@ -139,7 +138,6 @@ NFSX_V2FATTR) #define NFSX_WCCDATA(v3) ((v3) ? NFSX_V3WCCDATA : 0) #define NFSX_WCCORFATTR(v3) ((v3) ? NFSX_V3WCCDATA : NFSX_V2FATTR) -#define NFSX_SATTR(v3) ((v3) ? NFSX_V3SATTR : NFSX_V2SATTR) #define NFSX_COOKIEVERF(v3) ((v3) ? NFSX_V3COOKIEVERF : 0) #define NFSX_WRITEVERF(v3) ((v3) ? NFSX_V3WRITEVERF : 0) #define NFSX_READDIR(v3) ((v3) ? (5 * NFSX_UNSIGNED) : \ @@ -274,14 +272,14 @@ union nfsfh { typedef union nfsfh nfsfh_t; struct nfsv2_time { - uint32_t nfsv2_sec; - uint32_t nfsv2_usec; + nd_uint32_t nfsv2_sec; + nd_uint32_t nfsv2_usec; }; typedef struct nfsv2_time nfstime2; struct nfsv3_time { - uint32_t nfsv3_sec; - uint32_t nfsv3_nsec; + nd_uint32_t nfsv3_sec; + nd_uint32_t nfsv3_nsec; }; typedef struct nfsv3_time nfstime3; @@ -290,7 +288,7 @@ typedef struct nfsv3_time nfstime3; * protocol and to facilitate xdr conversion. */ struct nfs_uquad { - uint32_t nfsuquad[2]; + nd_uint32_t nfsuquad[2]; }; typedef struct nfs_uquad nfsuint64; @@ -298,8 +296,8 @@ typedef struct nfs_uquad nfsuint64; * NFS Version 3 special file number. */ struct nfsv3_spec { - uint32_t specdata1; - uint32_t specdata2; + nd_uint32_t specdata1; + nd_uint32_t specdata2; }; typedef struct nfsv3_spec nfsv3spec; @@ -313,32 +311,32 @@ typedef struct nfsv3_spec nfsv3spec; * NFSX_FATTR(v3) macro. */ struct nfs_fattr { - uint32_t fa_type; - uint32_t fa_mode; - uint32_t fa_nlink; - uint32_t fa_uid; - uint32_t fa_gid; + nd_uint32_t fa_type; + nd_uint32_t fa_mode; + nd_uint32_t fa_nlink; + nd_uint32_t fa_uid; + nd_uint32_t fa_gid; union { struct { - uint32_t nfsv2fa_size; - uint32_t nfsv2fa_blocksize; - uint32_t nfsv2fa_rdev; - uint32_t nfsv2fa_blocks; - uint32_t nfsv2fa_fsid; - uint32_t nfsv2fa_fileid; - nfstime2 nfsv2fa_atime; - nfstime2 nfsv2fa_mtime; - nfstime2 nfsv2fa_ctime; + nd_uint32_t nfsv2fa_size; + nd_uint32_t nfsv2fa_blocksize; + nd_uint32_t nfsv2fa_rdev; + nd_uint32_t nfsv2fa_blocks; + nd_uint32_t nfsv2fa_fsid; + nd_uint32_t nfsv2fa_fileid; + nfstime2 nfsv2fa_atime; + nfstime2 nfsv2fa_mtime; + nfstime2 nfsv2fa_ctime; } fa_nfsv2; struct { - nfsuint64 nfsv3fa_size; - nfsuint64 nfsv3fa_used; - nfsv3spec nfsv3fa_rdev; - nfsuint64 nfsv3fa_fsid; - nfsuint64 nfsv3fa_fileid; - nfstime3 nfsv3fa_atime; - nfstime3 nfsv3fa_mtime; - nfstime3 nfsv3fa_ctime; + nd_uint64_t nfsv3fa_size; + nd_uint64_t nfsv3fa_used; + nfsv3spec nfsv3fa_rdev; + nd_uint64_t nfsv3fa_fsid; + nd_uint64_t nfsv3fa_fileid; + nfstime3 nfsv3fa_atime; + nfstime3 nfsv3fa_mtime; + nfstime3 nfsv3fa_ctime; } fa_nfsv3; } fa_un; }; @@ -363,49 +361,31 @@ struct nfs_fattr { #define fa3_ctime fa_un.fa_nfsv3.nfsv3fa_ctime struct nfsv2_sattr { - uint32_t sa_mode; - uint32_t sa_uid; - uint32_t sa_gid; - uint32_t sa_size; - nfstime2 sa_atime; - nfstime2 sa_mtime; -}; - -/* - * NFS Version 3 sattr structure for the new node creation case. - */ -struct nfsv3_sattr { - uint32_t sa_modeset; - uint32_t sa_mode; - uint32_t sa_uidset; - uint32_t sa_uid; - uint32_t sa_gidset; - uint32_t sa_gid; - uint32_t sa_sizeset; - uint32_t sa_size; - uint32_t sa_atimetype; - nfstime3 sa_atime; - uint32_t sa_mtimetype; - nfstime3 sa_mtime; + nd_uint32_t sa_mode; + nd_uint32_t sa_uid; + nd_uint32_t sa_gid; + nd_uint32_t sa_size; + nfstime2 sa_atime; + nfstime2 sa_mtime; }; struct nfs_statfs { union { struct { - uint32_t nfsv2sf_tsize; - uint32_t nfsv2sf_bsize; - uint32_t nfsv2sf_blocks; - uint32_t nfsv2sf_bfree; - uint32_t nfsv2sf_bavail; + nd_uint32_t nfsv2sf_tsize; + nd_uint32_t nfsv2sf_bsize; + nd_uint32_t nfsv2sf_blocks; + nd_uint32_t nfsv2sf_bfree; + nd_uint32_t nfsv2sf_bavail; } sf_nfsv2; struct { - nfsuint64 nfsv3sf_tbytes; - nfsuint64 nfsv3sf_fbytes; - nfsuint64 nfsv3sf_abytes; - nfsuint64 nfsv3sf_tfiles; - nfsuint64 nfsv3sf_ffiles; - nfsuint64 nfsv3sf_afiles; - uint32_t nfsv3sf_invarsec; + nd_uint64_t nfsv3sf_tbytes; + nd_uint64_t nfsv3sf_fbytes; + nd_uint64_t nfsv3sf_abytes; + nd_uint64_t nfsv3sf_tfiles; + nd_uint64_t nfsv3sf_ffiles; + nd_uint64_t nfsv3sf_afiles; + nd_uint32_t nfsv3sf_invarsec; } sf_nfsv3; } sf_un; }; @@ -424,23 +404,23 @@ struct nfs_statfs { #define sf_invarsec sf_un.sf_nfsv3.nfsv3sf_invarsec struct nfsv3_fsinfo { - uint32_t fs_rtmax; - uint32_t fs_rtpref; - uint32_t fs_rtmult; - uint32_t fs_wtmax; - uint32_t fs_wtpref; - uint32_t fs_wtmult; - uint32_t fs_dtpref; - nfsuint64 fs_maxfilesize; - nfstime3 fs_timedelta; - uint32_t fs_properties; + nd_uint32_t fs_rtmax; + nd_uint32_t fs_rtpref; + nd_uint32_t fs_rtmult; + nd_uint32_t fs_wtmax; + nd_uint32_t fs_wtpref; + nd_uint32_t fs_wtmult; + nd_uint32_t fs_dtpref; + nd_uint64_t fs_maxfilesize; + nfstime3 fs_timedelta; + nd_uint32_t fs_properties; }; struct nfsv3_pathconf { - uint32_t pc_linkmax; - uint32_t pc_namemax; - uint32_t pc_notrunc; - uint32_t pc_chownrestricted; - uint32_t pc_caseinsensitive; - uint32_t pc_casepreserving; + nd_uint32_t pc_linkmax; + nd_uint32_t pc_namemax; + nd_uint32_t pc_notrunc; + nd_uint32_t pc_chownrestricted; + nd_uint32_t pc_caseinsensitive; + nd_uint32_t pc_casepreserving; }; diff --git a/print-nfs.c b/print-nfs.c index 9b5d459b..92c87fc4 100644 --- a/print-nfs.c +++ b/print-nfs.c @@ -228,6 +228,34 @@ print_nfsaddr(netdissect_options *ndo, ND_PRINT("%s.%s > %s.%s: ", srcaddr, s, dstaddr, d); } +/* + * NFS Version 3 sattr3 structure for the new node creation case. + * This does not have a fixed layout on the network, so this + * structure does not correspond to the layout of the data on + * the network; it's used to store the data when the sattr3 + * is parsed for use when it's later printed. + */ +struct nfsv3_sattr { + uint32_t sa_modeset; + uint32_t sa_mode; + uint32_t sa_uidset; + uint32_t sa_uid; + uint32_t sa_gidset; + uint32_t sa_gid; + uint32_t sa_sizeset; + uint32_t sa_size; + uint32_t sa_atimetype; + struct { + uint32_t nfsv3_sec; + uint32_t nfsv3_nsec; + } sa_atime; + uint32_t sa_mtimetype; + struct { + uint32_t nfsv3_sec; + uint32_t nfsv3_nsec; + } sa_mtime; +}; + static const uint32_t * parse_sattr3(netdissect_options *ndo, const uint32_t *dp, struct nfsv3_sattr *sa3) @@ -1113,7 +1141,7 @@ parsefattr(netdissect_options *ndo, const struct nfs_fattr *fap; fap = (const struct nfs_fattr *)dp; - ND_TCHECK_4(&fap->fa_gid); + ND_TCHECK_4(fap->fa_gid); if (verbose) { /* * XXX - UIDs and GIDs are unsigned in NFS and in @@ -1123,17 +1151,17 @@ parsefattr(netdissect_options *ndo, */ ND_PRINT(" %s %o ids %d/%d", tok2str(type2str, "unk-ft %u ", - EXTRACT_BE_U_4(&fap->fa_type)), - EXTRACT_BE_U_4(&fap->fa_mode), - EXTRACT_BE_S_4(&fap->fa_uid), - EXTRACT_BE_S_4(&fap->fa_gid)); + EXTRACT_BE_U_4(fap->fa_type)), + EXTRACT_BE_U_4(fap->fa_mode), + EXTRACT_BE_S_4(fap->fa_uid), + EXTRACT_BE_S_4(fap->fa_gid)); if (v3) { - ND_TCHECK_8(&fap->fa3_size); + ND_TCHECK_8(fap->fa3_size); ND_PRINT(" sz %" PRIu64, - EXTRACT_BE_U_8((const uint32_t *)&fap->fa3_size)); + EXTRACT_BE_U_8(fap->fa3_size)); } else { - ND_TCHECK_4(&fap->fa2_size); - ND_PRINT(" sz %u", EXTRACT_BE_U_4(&fap->fa2_size)); + ND_TCHECK_4(fap->fa2_size); + ND_PRINT(" sz %u", EXTRACT_BE_U_4(fap->fa2_size)); } } /* print lots more stuff */ @@ -1141,38 +1169,38 @@ parsefattr(netdissect_options *ndo, if (v3) { ND_TCHECK_8(&fap->fa3_ctime); ND_PRINT(" nlink %u rdev %u/%u", - EXTRACT_BE_U_4(&fap->fa_nlink), - EXTRACT_BE_U_4(&fap->fa3_rdev.specdata1), - EXTRACT_BE_U_4(&fap->fa3_rdev.specdata2)); + EXTRACT_BE_U_4(fap->fa_nlink), + EXTRACT_BE_U_4(fap->fa3_rdev.specdata1), + EXTRACT_BE_U_4(fap->fa3_rdev.specdata2)); ND_PRINT(" fsid %" PRIx64, - EXTRACT_BE_U_8((const uint32_t *)&fap->fa3_fsid)); + EXTRACT_BE_U_8(fap->fa3_fsid)); ND_PRINT(" fileid %" PRIx64, - EXTRACT_BE_U_8((const uint32_t *)&fap->fa3_fileid)); + EXTRACT_BE_U_8(fap->fa3_fileid)); ND_PRINT(" a/m/ctime %u.%06u", - EXTRACT_BE_U_4(&fap->fa3_atime.nfsv3_sec), - EXTRACT_BE_U_4(&fap->fa3_atime.nfsv3_nsec)); + EXTRACT_BE_U_4(fap->fa3_atime.nfsv3_sec), + EXTRACT_BE_U_4(fap->fa3_atime.nfsv3_nsec)); ND_PRINT(" %u.%06u", - EXTRACT_BE_U_4(&fap->fa3_mtime.nfsv3_sec), - EXTRACT_BE_U_4(&fap->fa3_mtime.nfsv3_nsec)); + EXTRACT_BE_U_4(fap->fa3_mtime.nfsv3_sec), + EXTRACT_BE_U_4(fap->fa3_mtime.nfsv3_nsec)); ND_PRINT(" %u.%06u", - EXTRACT_BE_U_4(&fap->fa3_ctime.nfsv3_sec), - EXTRACT_BE_U_4(&fap->fa3_ctime.nfsv3_nsec)); + EXTRACT_BE_U_4(fap->fa3_ctime.nfsv3_sec), + EXTRACT_BE_U_4(fap->fa3_ctime.nfsv3_nsec)); } else { ND_TCHECK_8(&fap->fa2_ctime); ND_PRINT(" nlink %u rdev 0x%x fsid 0x%x nodeid 0x%x a/m/ctime", - EXTRACT_BE_U_4(&fap->fa_nlink), - EXTRACT_BE_U_4(&fap->fa2_rdev), - EXTRACT_BE_U_4(&fap->fa2_fsid), - EXTRACT_BE_U_4(&fap->fa2_fileid)); + EXTRACT_BE_U_4(fap->fa_nlink), + EXTRACT_BE_U_4(fap->fa2_rdev), + EXTRACT_BE_U_4(fap->fa2_fsid), + EXTRACT_BE_U_4(fap->fa2_fileid)); ND_PRINT(" %u.%06u", - EXTRACT_BE_U_4(&fap->fa2_atime.nfsv2_sec), - EXTRACT_BE_U_4(&fap->fa2_atime.nfsv2_usec)); + EXTRACT_BE_U_4(fap->fa2_atime.nfsv2_sec), + EXTRACT_BE_U_4(fap->fa2_atime.nfsv2_usec)); ND_PRINT(" %u.%06u", - EXTRACT_BE_U_4(&fap->fa2_mtime.nfsv2_sec), - EXTRACT_BE_U_4(&fap->fa2_mtime.nfsv2_usec)); + EXTRACT_BE_U_4(fap->fa2_mtime.nfsv2_sec), + EXTRACT_BE_U_4(fap->fa2_mtime.nfsv2_usec)); ND_PRINT(" %u.%06u", - EXTRACT_BE_U_4(&fap->fa2_ctime.nfsv2_sec), - EXTRACT_BE_U_4(&fap->fa2_ctime.nfsv2_usec)); + EXTRACT_BE_U_4(fap->fa2_ctime.nfsv2_sec), + EXTRACT_BE_U_4(fap->fa2_ctime.nfsv2_usec)); } } return ((const uint32_t *)((const unsigned char *)dp + @@ -1260,23 +1288,23 @@ parsestatfs(netdissect_options *ndo, if (v3) { ND_PRINT(" tbytes %" PRIu64 " fbytes %" PRIu64 " abytes %" PRIu64, - EXTRACT_BE_U_8((const uint32_t *)&sfsp->sf_tbytes), - EXTRACT_BE_U_8((const uint32_t *)&sfsp->sf_fbytes), - EXTRACT_BE_U_8((const uint32_t *)&sfsp->sf_abytes)); + EXTRACT_BE_U_8(sfsp->sf_tbytes), + EXTRACT_BE_U_8(sfsp->sf_fbytes), + EXTRACT_BE_U_8(sfsp->sf_abytes)); if (ndo->ndo_vflag) { ND_PRINT(" tfiles %" PRIu64 " ffiles %" PRIu64 " afiles %" PRIu64 " invar %u", - EXTRACT_BE_U_8((const uint32_t *)&sfsp->sf_tfiles), - EXTRACT_BE_U_8((const uint32_t *)&sfsp->sf_ffiles), - EXTRACT_BE_U_8((const uint32_t *)&sfsp->sf_afiles), - EXTRACT_BE_U_4(&sfsp->sf_invarsec)); + EXTRACT_BE_U_8(sfsp->sf_tfiles), + EXTRACT_BE_U_8(sfsp->sf_ffiles), + EXTRACT_BE_U_8(sfsp->sf_afiles), + EXTRACT_BE_U_4(sfsp->sf_invarsec)); } } else { ND_PRINT(" tsize %u bsize %u blocks %u bfree %u bavail %u", - EXTRACT_BE_U_4(&sfsp->sf_tsize), - EXTRACT_BE_U_4(&sfsp->sf_bsize), - EXTRACT_BE_U_4(&sfsp->sf_blocks), - EXTRACT_BE_U_4(&sfsp->sf_bfree), - EXTRACT_BE_U_4(&sfsp->sf_bavail)); + EXTRACT_BE_U_4(sfsp->sf_tsize), + EXTRACT_BE_U_4(sfsp->sf_bsize), + EXTRACT_BE_U_4(sfsp->sf_blocks), + EXTRACT_BE_U_4(sfsp->sf_bfree), + EXTRACT_BE_U_4(sfsp->sf_bavail)); } return (1); @@ -1466,19 +1494,19 @@ parsefsinfo(netdissect_options *ndo, sfp = (const struct nfsv3_fsinfo *)dp; ND_TCHECK_SIZE(sfp); ND_PRINT(" rtmax %u rtpref %u wtmax %u wtpref %u dtpref %u", - EXTRACT_BE_U_4(&sfp->fs_rtmax), - EXTRACT_BE_U_4(&sfp->fs_rtpref), - EXTRACT_BE_U_4(&sfp->fs_wtmax), - EXTRACT_BE_U_4(&sfp->fs_wtpref), - EXTRACT_BE_U_4(&sfp->fs_dtpref)); + EXTRACT_BE_U_4(sfp->fs_rtmax), + EXTRACT_BE_U_4(sfp->fs_rtpref), + EXTRACT_BE_U_4(sfp->fs_wtmax), + EXTRACT_BE_U_4(sfp->fs_wtpref), + EXTRACT_BE_U_4(sfp->fs_dtpref)); if (ndo->ndo_vflag) { ND_PRINT(" rtmult %u wtmult %u maxfsz %" PRIu64, - EXTRACT_BE_U_4(&sfp->fs_rtmult), - EXTRACT_BE_U_4(&sfp->fs_wtmult), - EXTRACT_BE_U_8((const uint32_t *)&sfp->fs_maxfilesize)); + EXTRACT_BE_U_4(sfp->fs_rtmult), + EXTRACT_BE_U_4(sfp->fs_wtmult), + EXTRACT_BE_U_8(sfp->fs_maxfilesize)); ND_PRINT(" delta %u.%06u ", - EXTRACT_BE_U_4(&sfp->fs_timedelta.nfsv3_sec), - EXTRACT_BE_U_4(&sfp->fs_timedelta.nfsv3_nsec)); + EXTRACT_BE_U_4(sfp->fs_timedelta.nfsv3_sec), + EXTRACT_BE_U_4(sfp->fs_timedelta.nfsv3_nsec)); } return (1); trunc: @@ -1505,12 +1533,12 @@ parsepathconf(netdissect_options *ndo, ND_TCHECK_SIZE(spp); ND_PRINT(" linkmax %u namemax %u %s %s %s %s", - EXTRACT_BE_U_4(&spp->pc_linkmax), - EXTRACT_BE_U_4(&spp->pc_namemax), - EXTRACT_BE_U_4(&spp->pc_notrunc) ? "notrunc" : "", - EXTRACT_BE_U_4(&spp->pc_chownrestricted) ? "chownres" : "", - EXTRACT_BE_U_4(&spp->pc_caseinsensitive) ? "igncase" : "", - EXTRACT_BE_U_4(&spp->pc_casepreserving) ? "keepcase" : ""); + EXTRACT_BE_U_4(spp->pc_linkmax), + EXTRACT_BE_U_4(spp->pc_namemax), + EXTRACT_BE_U_4(spp->pc_notrunc) ? "notrunc" : "", + EXTRACT_BE_U_4(spp->pc_chownrestricted) ? "chownres" : "", + EXTRACT_BE_U_4(spp->pc_caseinsensitive) ? "igncase" : "", + EXTRACT_BE_U_4(spp->pc_casepreserving) ? "keepcase" : ""); return (1); trunc: return (0); |