⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 print-nfs.c

📁 Windump3.6.2源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
	if (dp == NULL || (!v3 && er))		return (0);	if (qflag)		return(1);	if (v3) {		if (vflag)			printf(" POST:");		if (!(dp = parse_post_op_attr(dp, vflag)))			return (0);	}	TCHECK2(dp, (v3 ? NFSX_V3STATFS : NFSX_V2STATFS));	sfsp = (const struct nfs_statfs *)dp;	if (v3) {		printf(" tbytes ");		print_int64((u_int32_t *)&sfsp->sf_tbytes, UNSIGNED);		printf(" fbytes ");		print_int64((u_int32_t *)&sfsp->sf_fbytes, UNSIGNED);		printf(" abytes ");		print_int64((u_int32_t *)&sfsp->sf_abytes, UNSIGNED);		if (vflag) {			printf(" tfiles ");			print_int64((u_int32_t *)&sfsp->sf_tfiles, UNSIGNED);			printf(" ffiles ");			print_int64((u_int32_t *)&sfsp->sf_ffiles, UNSIGNED);			printf(" afiles ");			print_int64((u_int32_t *)&sfsp->sf_afiles, UNSIGNED);			printf(" invar %u",			       (u_int32_t) ntohl(sfsp->sf_invarsec));		}	} else {		printf(" tsize %d bsize %d blocks %d bfree %d bavail %d",			(u_int32_t)ntohl(sfsp->sf_tsize),			(u_int32_t)ntohl(sfsp->sf_bsize),			(u_int32_t)ntohl(sfsp->sf_blocks),			(u_int32_t)ntohl(sfsp->sf_bfree),			(u_int32_t)ntohl(sfsp->sf_bavail));	}	return (1);trunc:	return (0);}static intparserddires(const u_int32_t *dp){	int er;	dp = parsestatus(dp, &er);	if (dp == 0 || er)		return (0);	if (qflag)		return (1);	TCHECK(dp[2]);	printf(" offset %x size %d ",	       (u_int32_t)ntohl(dp[0]), (u_int32_t)ntohl(dp[1]));	if (dp[2] != 0)		printf(" eof");	return (1);trunc:	return (0);}static const u_int32_t *parse_wcc_attr(const u_int32_t *dp){	printf(" sz ");	print_int64(dp, UNSIGNED);	printf(" mtime %u.%06u ctime %u.%06u",	       (u_int32_t)ntohl(dp[2]), (u_int32_t)ntohl(dp[3]),	       (u_int32_t)ntohl(dp[4]), (u_int32_t)ntohl(dp[5]));	return (dp + 6);}/* * Pre operation attributes. Print only if vflag > 1. */static const u_int32_t *parse_pre_op_attr(const u_int32_t *dp, int verbose){	TCHECK(dp[0]);	if (!ntohl(dp[0]))		return (dp + 1);	dp++;	TCHECK2(dp, 24);	if (verbose > 1) {		return parse_wcc_attr(dp);	} else {		/* If not verbose enough, just skip over wcc_attr */		return (dp + 6);	}trunc:	return (NULL);}/* * Post operation attributes are printed if vflag >= 1 */static const u_int32_t *parse_post_op_attr(const u_int32_t *dp, int verbose){	TCHECK(dp[0]);	if (!ntohl(dp[0]))		return (dp + 1);	dp++;	if (verbose) {		return parsefattr(dp, verbose, 1);	} else		return (dp + (NFSX_V3FATTR / sizeof (u_int32_t)));trunc:	return (NULL);}static const u_int32_t *parse_wcc_data(const u_int32_t *dp, int verbose){	if (verbose > 1)		printf(" PRE:");	if (!(dp = parse_pre_op_attr(dp, verbose)))		return (0);	if (verbose)		printf(" POST:");	return parse_post_op_attr(dp, verbose);}static const u_int32_t *parsecreateopres(const u_int32_t *dp, int verbose){	int er;	if (!(dp = parsestatus(dp, &er)))		return (0);	if (er)		dp = parse_wcc_data(dp, verbose);	else {		TCHECK(dp[0]);		if (!ntohl(dp[0]))			return (dp + 1);		dp++;		if (!(dp = parsefh(dp, 1)))			return (0);		if (verbose) {			if (!(dp = parse_post_op_attr(dp, verbose)))				return (0);			if (vflag > 1) {				printf("dir attr:");				dp = parse_wcc_data(dp, verbose);			}		}	}	return (dp);trunc:	return (NULL);}static intparsewccres(const u_int32_t *dp, int verbose){	int er;	if (!(dp = parsestatus(dp, &er)))		return (0);	return parse_wcc_data(dp, verbose) != 0;}static const u_int32_t *parsev3rddirres(const u_int32_t *dp, int verbose){	int er;	if (!(dp = parsestatus(dp, &er)))		return (0);	if (vflag)		printf(" POST:");	if (!(dp = parse_post_op_attr(dp, verbose)))		return (0);	if (er)		return dp;	if (vflag) {		TCHECK(dp[1]);		printf(" verf %08x%08x", dp[0], dp[1]);		dp += 2;	}	return dp;trunc:	return (NULL);}static intparsefsinfo(const u_int32_t *dp){	struct nfsv3_fsinfo *sfp;	int er;	if (!(dp = parsestatus(dp, &er)))		return (0);	if (vflag)		printf(" POST:");	if (!(dp = parse_post_op_attr(dp, vflag)))		return (0);	if (er)		return (1);	sfp = (struct nfsv3_fsinfo *)dp;	TCHECK(*sfp);	printf(" rtmax %u rtpref %u wtmax %u wtpref %u dtpref %u",	       (u_int32_t) ntohl(sfp->fs_rtmax),	       (u_int32_t) ntohl(sfp->fs_rtpref),	       (u_int32_t) ntohl(sfp->fs_wtmax),	       (u_int32_t) ntohl(sfp->fs_wtpref),	       (u_int32_t) ntohl(sfp->fs_dtpref));	if (vflag) {		printf(" rtmult %u wtmult %u maxfsz ",		       (u_int32_t) ntohl(sfp->fs_rtmult),		       (u_int32_t) ntohl(sfp->fs_wtmult));		print_int64((u_int32_t *)&sfp->fs_maxfilesize, UNSIGNED);		printf(" delta %u.%06u ",		       (u_int32_t) ntohl(sfp->fs_timedelta.nfsv3_sec),		       (u_int32_t) ntohl(sfp->fs_timedelta.nfsv3_nsec));	}	return (0);trunc:	return (1);}static intparsepathconf(const u_int32_t *dp){	int er;	struct nfsv3_pathconf *spp;	if (!(dp = parsestatus(dp, &er)))		return (0);	if (vflag)		printf(" POST:");	if (!(dp = parse_post_op_attr(dp, vflag)))		return (0);	if (er)		return (1);	spp = (struct nfsv3_pathconf *)dp;	TCHECK(*spp);	printf(" linkmax %u namemax %u %s %s %s %s",	       (u_int32_t) ntohl(spp->pc_linkmax),	       (u_int32_t) ntohl(spp->pc_namemax),	       ntohl(spp->pc_notrunc) ? "notrunc" : "",	       ntohl(spp->pc_chownrestricted) ? "chownres" : "",	       ntohl(spp->pc_caseinsensitive) ? "igncase" : "",	       ntohl(spp->pc_casepreserving) ? "keepcase" : "");	return (0);trunc:	return (1);}static voidinterp_reply(const struct rpc_msg *rp, u_int32_t proc, u_int32_t vers, int length){	register const u_int32_t *dp;	register int v3;	int er;	v3 = (vers == NFS_VER3);	if (!v3 && proc < NFS_NPROCS)		proc = nfsv3_procid[proc];	switch (proc) {	case NFSPROC_NOOP:		printf(" nop");		return;	case NFSPROC_NULL:		printf(" null");		return;	case NFSPROC_GETATTR:		printf(" getattr");		dp = parserep(rp, length);		if (dp != NULL && parseattrstat(dp, !qflag, v3) != 0)			return;		break;	case NFSPROC_SETATTR:		printf(" setattr");		if (!(dp = parserep(rp, length)))			return;		if (v3) {			if (parsewccres(dp, vflag))				return;		} else {			if (parseattrstat(dp, !qflag, 0) != 0)				return;		}		break;	case NFSPROC_LOOKUP:		printf(" lookup");		if (!(dp = parserep(rp, length)))			break;		if (v3) {			if (!(dp = parsestatus(dp, &er)))				break;			if (er) {				if (vflag > 1) {					printf(" post dattr:");					dp = parse_post_op_attr(dp, vflag);				}			} else {				if (!(dp = parsefh(dp, v3)))					break;				if ((dp = parse_post_op_attr(dp, vflag)) &&				    vflag > 1) {					printf(" post dattr:");					dp = parse_post_op_attr(dp, vflag);				}			}			if (dp)				return;		} else {			if (parsediropres(dp) != 0)				return;		}		break;	case NFSPROC_ACCESS:		printf(" access");		dp = parserep(rp, length);		if (!(dp = parsestatus(dp, &er)))			break;		if (vflag)			printf(" attr:");		if (!(dp = parse_post_op_attr(dp, vflag)))			break;		if (!er)			printf(" c %04x", (u_int32_t)ntohl(dp[0]));		return;	case NFSPROC_READLINK:		printf(" readlink");		dp = parserep(rp, length);		if (dp != NULL && parselinkres(dp, v3) != 0)			return;		break;	case NFSPROC_READ:		printf(" read");		if (!(dp = parserep(rp, length)))			break;		if (v3) {			if (!(dp = parsestatus(dp, &er)))				break;			if (!(dp = parse_post_op_attr(dp, vflag)))				break;			if (er)				return;			if (vflag) {				TCHECK(dp[1]);				printf("%u bytes", (u_int32_t) ntohl(dp[0]));				if (ntohl(dp[1]))					printf(" EOF");			}			return;		} else {			if (parseattrstat(dp, vflag, 0) != 0)				return;		}		break;	case NFSPROC_WRITE:		printf(" write");		if (!(dp = parserep(rp, length)))			break;		if (v3) {			if (!(dp = parsestatus(dp, &er)))				break;			if (!(dp = parse_wcc_data(dp, vflag)))				break;			if (er)				return;			if (vflag) {				TCHECK(dp[0]);				printf("%u bytes", (u_int32_t) ntohl(dp[0]));				if (vflag > 1) {					TCHECK(dp[1]);					printf(" <%s>",						tok2str(nfsv3_writemodes,							NULL, ntohl(dp[1])));				}				return;			}		} else {			if (parseattrstat(dp, vflag, v3) != 0)				return;		}		break;	case NFSPROC_CREATE:		printf(" create");		if (!(dp = parserep(rp, length)))			break;		if (v3) {			if (parsecreateopres(dp, vflag) != 0)				return;		} else {			if (parsediropres(dp) != 0)				return;		}		break;	case NFSPROC_MKDIR:		printf(" mkdir");		if (!(dp = parserep(rp, length)))			break;		if (v3) {			if (parsecreateopres(dp, vflag) != 0)				return;		} else {			if (parsediropres(dp) != 0)				return;		}		break;	case NFSPROC_SYMLINK:		printf(" symlink");		if (!(dp = parserep(rp, length)))			break;		if (v3) {			if (parsecreateopres(dp, vflag) != 0)				return;		} else {			if (parsestatus(dp, &er) != 0)				return;		}		break;	case NFSPROC_MKNOD:		printf(" mknod");		if (!(dp = parserep(rp, length)))			break;		if (parsecreateopres(dp, vflag) != 0)			return;		break;	case NFSPROC_REMOVE:		printf(" remove");		if (!(dp = parserep(rp, length)))			break;		if (v3) {			if (parsewccres(dp, vflag))				return;		} else {			if (parsestatus(dp, &er) != 0)				return;		}		break;	case NFSPROC_RMDIR:		printf(" rmdir");		if (!(dp = parserep(rp, length)))			break;		if (v3) {			if (parsewccres(dp, vflag))				return;		} else {			if (parsestatus(dp, &er) != 0)				return;		}		break;	case NFSPROC_RENAME:		printf(" rename");		if (!(dp = parserep(rp, length)))			break;		if (v3) {			if (!(dp = parsestatus(dp, &er)))				break;			if (vflag) {				printf(" from:");				if (!(dp = parse_wcc_data(dp, vflag)))					break;				printf(" to:");				if (!(dp = parse_wcc_data(dp, vflag)))					break;			}			return;		} else {			if (parsestatus(dp, &er) != 0)				return;		}		break;	case NFSPROC_LINK:		printf(" link");		if (!(dp = parserep(rp, length)))			break;		if (v3) {			if (!(dp = parsestatus(dp, &er)))				break;			if (vflag) {				printf(" file POST:");				if (!(dp = parse_post_op_attr(dp, vflag)))					break;				printf(" dir:");				if (!(dp = parse_wcc_data(dp, vflag)))					break;				return;			}		} else {			if (parsestatus(dp, &er) != 0)				return;		}		break;	case NFSPROC_READDIR:		printf(" readdir");		if (!(dp = parserep(rp, length)))			break;		if (v3) {			if (parsev3rddirres(dp, vflag))				return;		} else {			if (parserddires(dp) != 0)				return;		}		break;	case NFSPROC_READDIRPLUS:		printf(" readdirplus");		if (!(dp = parserep(rp, length)))			break;		if (parsev3rddirres(dp, vflag))			return;		break;	case NFSPROC_FSSTAT:		printf(" fsstat");		dp = parserep(rp, length);		if (dp != NULL && parsestatfs(dp, v3) != 0)			return;		break;	case NFSPROC_FSINFO:		printf(" fsinfo");		dp = parserep(rp, length);		if (dp != NULL && parsefsinfo(dp) != 0)			return;		break;	case NFSPROC_PATHCONF:		printf(" pathconf");		dp = parserep(rp, length);		if (dp != NULL && parsepathconf(dp) != 0)			return;		break;	case NFSPROC_COMMIT:		printf(" commit");		dp = parserep(rp, length);		if (dp != NULL && parsewccres(dp, vflag) != 0)			return;		break;	default:		printf(" proc-%u", proc);		return;	}trunc:	if (!nfserr)		fputs(" [|nfs]", stdout);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -