1*c44296f9Sjsg /* $OpenBSD: nfs.c,v 1.10 2024/05/18 09:02:34 jsg Exp $ */
21bc2a42dSjasper
31bc2a42dSjasper /*
41bc2a42dSjasper * Copyright (c) 2009 Jasper Lievisse Adriaanse <jasper@openbsd.org>
51bc2a42dSjasper *
61bc2a42dSjasper * Permission to use, copy, modify, and distribute this software for any
71bc2a42dSjasper * purpose with or without fee is hereby granted, provided that the above
81bc2a42dSjasper * copyright notice and this permission notice appear in all copies.
91bc2a42dSjasper *
101bc2a42dSjasper * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
111bc2a42dSjasper * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
121bc2a42dSjasper * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
131bc2a42dSjasper * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
141bc2a42dSjasper * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
151bc2a42dSjasper * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
161bc2a42dSjasper * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
171bc2a42dSjasper *
181bc2a42dSjasper */
191bc2a42dSjasper
208f6b3bafSderaadt #include <sys/types.h>
211bc2a42dSjasper #include <sys/mount.h>
228f6b3bafSderaadt #include <sys/signal.h>
231bc2a42dSjasper #include <sys/sysctl.h>
241bc2a42dSjasper #include <nfs/rpcv2.h>
251bc2a42dSjasper #include <nfs/nfsproto.h>
261bc2a42dSjasper #include <nfs/nfs.h>
271bc2a42dSjasper
281bc2a42dSjasper #include <err.h>
291bc2a42dSjasper #include <errno.h>
301bc2a42dSjasper #include <stdio.h>
311bc2a42dSjasper #include <stdlib.h>
321bc2a42dSjasper #include <string.h>
331bc2a42dSjasper
341bc2a42dSjasper #include "systat.h"
351bc2a42dSjasper
361bc2a42dSjasper int select_client(void);
371bc2a42dSjasper int select_server(void);
381bc2a42dSjasper int read_nfs(void);
391bc2a42dSjasper void print_client(void);
401bc2a42dSjasper void print_server(void);
411bc2a42dSjasper
421bc2a42dSjasper struct nfsstats nfsstats;
431bc2a42dSjasper int num_client = 0;
441bc2a42dSjasper int num_server = 0;
451bc2a42dSjasper
461bc2a42dSjasper field_def fields_nfs[] = {
471bc2a42dSjasper /* Client */
48c8c19053Sjasper {"RPC COUNTS", 10, 12, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
4922f3ce3cSjasper {"", 12, 14, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
50c8c19053Sjasper {"RPC INFO", 14, 12, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
5122f3ce3cSjasper {"", 12, 14, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
52c8c19053Sjasper {"CACHE INFO", 10, 12, 1, FLD_ALIGN_LEFT, -1, 0, 0, 0},
5322f3ce3cSjasper {"", 12, 14, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
541bc2a42dSjasper
551bc2a42dSjasper /* Server */
56c8c19053Sjasper {"RPC COUNTS", 10, 12, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
5722f3ce3cSjasper {"", 12, 14, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
58c8c19053Sjasper {"CACHE STATS", 14, 12, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
5922f3ce3cSjasper {"", 12, 14, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
60c8c19053Sjasper {"WRITES", 10, 12, 1, FLD_ALIGN_LEFT, -1, 0, 0, 0},
6122f3ce3cSjasper {"", 10, 12, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
621bc2a42dSjasper };
631bc2a42dSjasper
641bc2a42dSjasper /* _V suffixed fields indicate a value column. */
651bc2a42dSjasper /* Client */
66596a8091Sjasper #define FLD_NFS_C_RPC_COUNTS FIELD_ADDR(fields_nfs,0)
67596a8091Sjasper #define FLD_NFS_C_RPC_COUNTS_V FIELD_ADDR(fields_nfs,1)
68596a8091Sjasper #define FLD_NFS_C_RPC_INFO FIELD_ADDR(fields_nfs,2)
69596a8091Sjasper #define FLD_NFS_C_RPC_INFO_V FIELD_ADDR(fields_nfs,3)
70596a8091Sjasper #define FLD_NFS_C_CACHE_INFO FIELD_ADDR(fields_nfs,4)
71596a8091Sjasper #define FLD_NFS_C_CACHE_V FIELD_ADDR(fields_nfs,5)
721bc2a42dSjasper
731bc2a42dSjasper /* Server */
74596a8091Sjasper #define FLD_NFS_S_RPC_COUNTS FIELD_ADDR(fields_nfs,6)
75596a8091Sjasper #define FLD_NFS_S_RPC_COUNTS_V FIELD_ADDR(fields_nfs,7)
76596a8091Sjasper #define FLD_NFS_S_CACHE_STATS FIELD_ADDR(fields_nfs,8)
77596a8091Sjasper #define FLD_NFS_S_CACHE_STATS_V FIELD_ADDR(fields_nfs,9)
78596a8091Sjasper #define FLD_NFS_S_WRITES FIELD_ADDR(fields_nfs,10)
79596a8091Sjasper #define FLD_NFS_S_WRITES_V FIELD_ADDR(fields_nfs,11)
801bc2a42dSjasper
811bc2a42dSjasper /* Define views */
821bc2a42dSjasper field_def *view_nfs_0[] = {
831bc2a42dSjasper FLD_NFS_C_RPC_COUNTS, FLD_NFS_C_RPC_COUNTS_V, FLD_NFS_C_RPC_INFO,
841bc2a42dSjasper FLD_NFS_C_RPC_INFO_V, FLD_NFS_C_CACHE_INFO, FLD_NFS_C_CACHE_V ,NULL
851bc2a42dSjasper };
861bc2a42dSjasper
871bc2a42dSjasper field_def *view_nfs_1[] = {
881bc2a42dSjasper FLD_NFS_S_RPC_COUNTS, FLD_NFS_S_RPC_COUNTS_V, FLD_NFS_S_CACHE_STATS,
891bc2a42dSjasper FLD_NFS_S_CACHE_STATS_V, FLD_NFS_S_WRITES, FLD_NFS_S_WRITES_V, NULL
901bc2a42dSjasper };
911bc2a42dSjasper
921bc2a42dSjasper /* Define view managers */
931bc2a42dSjasper struct view_manager nfs_client_mgr = {
941bc2a42dSjasper "Client", select_client, read_nfs, NULL, print_header,
951bc2a42dSjasper print_client, keyboard_callback, NULL, NULL
961bc2a42dSjasper };
971bc2a42dSjasper
981bc2a42dSjasper struct view_manager nfs_server_mgr = {
991bc2a42dSjasper "Server", select_server, read_nfs, NULL, print_header,
1001bc2a42dSjasper print_server, keyboard_callback, NULL, NULL
1011bc2a42dSjasper };
1021bc2a42dSjasper
1031bc2a42dSjasper field_view views_nfs[] = {
1041bc2a42dSjasper {view_nfs_0, "nfsclient", '8', &nfs_client_mgr},
1051bc2a42dSjasper {view_nfs_1, "nfsserver", '9', &nfs_server_mgr},
1061bc2a42dSjasper {NULL, NULL, 0, NULL}
1071bc2a42dSjasper };
1081bc2a42dSjasper
1091bc2a42dSjasper int
select_client(void)1101bc2a42dSjasper select_client(void)
1111bc2a42dSjasper {
1121bc2a42dSjasper num_disp = num_client;
1131bc2a42dSjasper return(0);
1141bc2a42dSjasper }
1151bc2a42dSjasper
1161bc2a42dSjasper int
select_server(void)1171bc2a42dSjasper select_server(void)
1181bc2a42dSjasper {
1191bc2a42dSjasper num_disp = num_server;
1201bc2a42dSjasper return(0);
1211bc2a42dSjasper }
1221bc2a42dSjasper
1231bc2a42dSjasper int
initnfs(void)1241bc2a42dSjasper initnfs(void)
1251bc2a42dSjasper {
1261bc2a42dSjasper field_view *v;
1271bc2a42dSjasper
1281bc2a42dSjasper for (v = views_nfs; v->name != NULL; v++)
1291bc2a42dSjasper add_view(v);
1301bc2a42dSjasper
1311bc2a42dSjasper read_nfs();
1321bc2a42dSjasper
1331bc2a42dSjasper return(0);
1341bc2a42dSjasper }
1351bc2a42dSjasper
1361bc2a42dSjasper /*
1371bc2a42dSjasper * We get all the information in one go and don't care about
138bc595886Sjasper * server or client fields (those will be '0' if not applicable).
1391bc2a42dSjasper */
1401bc2a42dSjasper int
read_nfs(void)1411bc2a42dSjasper read_nfs(void)
1421bc2a42dSjasper {
1431bc2a42dSjasper struct nfsstats *p = &nfsstats;
1441bc2a42dSjasper int mib[3];
1451bc2a42dSjasper size_t len = sizeof(*p);
1461bc2a42dSjasper
1471bc2a42dSjasper mib[0] = CTL_VFS;
1481bc2a42dSjasper mib[1] = 2; /* NETDEV */
1491bc2a42dSjasper mib[2] = NFS_NFSSTATS;
1501bc2a42dSjasper
1513aaa63ebSderaadt if (sysctl(mib, 3, p, &len, NULL, 0) == -1)
1521bc2a42dSjasper return(-1);
1531bc2a42dSjasper else
1541bc2a42dSjasper return(0);
1551bc2a42dSjasper }
1561bc2a42dSjasper
1571bc2a42dSjasper
1581bc2a42dSjasper /*
1591bc2a42dSjasper * As we want a view with multiple columns, mixed with labels and values,
1601bc2a42dSjasper * we can't use the regular dance and have to use our own (looong) dance
1611bc2a42dSjasper * to build the layout.
1621bc2a42dSjasper */
1631bc2a42dSjasper void
print_client(void)1641bc2a42dSjasper print_client(void)
1651bc2a42dSjasper {
1661bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_COUNTS, "Getattr");
1671bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
1681bc2a42dSjasper nfsstats.rpccnt[NFSPROC_GETATTR]);
1691bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_INFO, "TimedOut");
1701bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_INFO_V, nfsstats.rpctimeouts);
1711bc2a42dSjasper print_fld_str(FLD_NFS_C_CACHE_INFO, "Attr Hits ");
1721bc2a42dSjasper print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.attrcache_hits);
1731bc2a42dSjasper end_line();
1741bc2a42dSjasper
1751bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_COUNTS, "Setattr");
1761bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
1771bc2a42dSjasper nfsstats.rpccnt[NFSPROC_SETATTR]);
1781bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_INFO, "Invalid");
1791bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_INFO_V, nfsstats.rpcinvalid);
1801bc2a42dSjasper print_fld_str(FLD_NFS_C_CACHE_INFO, "Attr Misses");
1811bc2a42dSjasper print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.attrcache_misses);
1821bc2a42dSjasper end_line();
1831bc2a42dSjasper
1841bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_COUNTS, "Lookup");
1851bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
1861bc2a42dSjasper nfsstats.rpccnt[NFSPROC_LOOKUP]);
1871bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_INFO, "X Replies");
1881bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_INFO_V, nfsstats.rpcunexpected);
1891bc2a42dSjasper print_fld_str(FLD_NFS_C_CACHE_INFO, "Lkup Hits ");
1901bc2a42dSjasper print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.lookupcache_hits);
1911bc2a42dSjasper end_line();
1921bc2a42dSjasper
1931bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_COUNTS, "Readlink");
1941bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
1951bc2a42dSjasper nfsstats.rpccnt[NFSPROC_READLINK]);
1961bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_INFO, "Retries");
1971bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_INFO_V, nfsstats.rpcretries);
1981bc2a42dSjasper print_fld_str(FLD_NFS_C_CACHE_INFO, "Lkup Misses ");
1991bc2a42dSjasper print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.lookupcache_misses);
2001bc2a42dSjasper end_line();
2011bc2a42dSjasper
2021bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_COUNTS, "Read");
2031bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
2041bc2a42dSjasper nfsstats.rpccnt[NFSPROC_READ]);
2051bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_INFO, "Requests");
2061bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_INFO_V, nfsstats.rpcrequests);
2071bc2a42dSjasper print_fld_str(FLD_NFS_C_CACHE_INFO, "BioR Hits ");
2081bc2a42dSjasper print_fld_ssize(FLD_NFS_C_CACHE_V,
2091bc2a42dSjasper nfsstats.biocache_reads-nfsstats.read_bios);
2101bc2a42dSjasper end_line();
2111bc2a42dSjasper
2121bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_COUNTS, "Write");
2131bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V, nfsstats.rpccnt[NFSPROC_WRITE]);
2141bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_INFO, "FrcSync");
2151bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_INFO_V, nfsstats.forcedsync);
2161bc2a42dSjasper print_fld_str(FLD_NFS_C_CACHE_INFO, "BioR Misses");
2171bc2a42dSjasper print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.read_bios);
2181bc2a42dSjasper end_line();
2191bc2a42dSjasper
2201bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_COUNTS, "Create");
2211bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
2221bc2a42dSjasper nfsstats.rpccnt[NFSPROC_CREATE]);
2231bc2a42dSjasper print_fld_str(FLD_NFS_C_CACHE_INFO, "BioW Hits ");
2241bc2a42dSjasper print_fld_ssize(FLD_NFS_C_CACHE_V,
2251bc2a42dSjasper nfsstats.biocache_writes-nfsstats.write_bios);
2261bc2a42dSjasper end_line();
2271bc2a42dSjasper
2281bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_COUNTS, "Remove");
2291bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
2301bc2a42dSjasper nfsstats.rpccnt[NFSPROC_REMOVE]);
2311bc2a42dSjasper print_fld_str(FLD_NFS_C_CACHE_INFO, "BioW Misses");
2321bc2a42dSjasper print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.write_bios);
2331bc2a42dSjasper end_line();
2341bc2a42dSjasper
2351bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_COUNTS, "Rename");
2361bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
2371bc2a42dSjasper nfsstats.rpccnt[NFSPROC_RENAME]);
2381bc2a42dSjasper print_fld_str(FLD_NFS_C_CACHE_INFO, "BioRL Hits ");
2391bc2a42dSjasper print_fld_ssize(FLD_NFS_C_CACHE_V,
2401bc2a42dSjasper nfsstats.biocache_readlinks-nfsstats.readlink_bios);
2411bc2a42dSjasper end_line();
2421bc2a42dSjasper
2431bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_COUNTS, "Link");
2441bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V, nfsstats.rpccnt[NFSPROC_LINK]);
2451bc2a42dSjasper print_fld_str(FLD_NFS_C_CACHE_INFO, "BioRL Misses");
2461bc2a42dSjasper print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.readlink_bios);
2471bc2a42dSjasper end_line();
2481bc2a42dSjasper
2491bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_COUNTS, "Symlink");
2501bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
2511bc2a42dSjasper nfsstats.rpccnt[NFSPROC_SYMLINK]);
2521bc2a42dSjasper print_fld_str(FLD_NFS_C_CACHE_INFO, "BioD Hits ");
2531bc2a42dSjasper print_fld_ssize(FLD_NFS_C_CACHE_V,
2541bc2a42dSjasper nfsstats.biocache_readdirs-nfsstats.readdir_bios);
2551bc2a42dSjasper end_line();
2561bc2a42dSjasper
2571bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_COUNTS, "Mkdir");
2581bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V, nfsstats.rpccnt[NFSPROC_MKDIR]);
2591bc2a42dSjasper print_fld_str(FLD_NFS_C_CACHE_INFO, "BioD Misses");
2601bc2a42dSjasper print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.readdir_bios);
2611bc2a42dSjasper end_line();
2621bc2a42dSjasper
2631bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_COUNTS, "Rmdir");
2641bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V, nfsstats.rpccnt[NFSPROC_RMDIR]);
2651bc2a42dSjasper print_fld_str(FLD_NFS_C_CACHE_INFO, "DirE Hits ");
2661bc2a42dSjasper print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.direofcache_hits);
2671bc2a42dSjasper end_line();
2681bc2a42dSjasper
2691bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_COUNTS, "Readdir");
2701bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
2711bc2a42dSjasper nfsstats.rpccnt[NFSPROC_READDIR]);
2721bc2a42dSjasper print_fld_str(FLD_NFS_C_CACHE_INFO, "DirE Misses");
2731bc2a42dSjasper print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.direofcache_misses);
2741bc2a42dSjasper end_line();
2751bc2a42dSjasper
2761bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_COUNTS, "RdirPlus");
2771bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
2781bc2a42dSjasper nfsstats.rpccnt[NFSPROC_READDIRPLUS]);
2791bc2a42dSjasper end_line();
2801bc2a42dSjasper
2811bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_COUNTS, "Access");
2821bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
2831bc2a42dSjasper nfsstats.rpccnt[NFSPROC_ACCESS]);
2841bc2a42dSjasper end_line();
2851bc2a42dSjasper
2861bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_COUNTS, "Mknod");
2871bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V, nfsstats.rpccnt[NFSPROC_MKNOD]);
2881bc2a42dSjasper end_line();
2891bc2a42dSjasper
2901bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_COUNTS, "Fsstat");
2911bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
2921bc2a42dSjasper nfsstats.rpccnt[NFSPROC_FSSTAT]);
2931bc2a42dSjasper end_line();
2941bc2a42dSjasper
2951bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_COUNTS, "Fsinfo");
2961bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
2971bc2a42dSjasper nfsstats.rpccnt[NFSPROC_FSINFO]);
2981bc2a42dSjasper end_line();
2991bc2a42dSjasper
3001bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_COUNTS, "PathConf");
3011bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
3021bc2a42dSjasper nfsstats.rpccnt[NFSPROC_PATHCONF]);
3031bc2a42dSjasper end_line();
3041bc2a42dSjasper
3051bc2a42dSjasper print_fld_str(FLD_NFS_C_RPC_COUNTS, "Commit");
3061bc2a42dSjasper print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
3071bc2a42dSjasper nfsstats.rpccnt[NFSPROC_COMMIT]);
3081bc2a42dSjasper end_line();
3091bc2a42dSjasper }
3101bc2a42dSjasper
3111bc2a42dSjasper void
print_server(void)3121bc2a42dSjasper print_server(void)
3131bc2a42dSjasper {
3141bc2a42dSjasper print_fld_str(FLD_NFS_S_RPC_COUNTS, "Getattr");
3151bc2a42dSjasper print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
3161bc2a42dSjasper nfsstats.srvrpccnt[NFSPROC_GETATTR]);
3171bc2a42dSjasper print_fld_str(FLD_NFS_S_CACHE_STATS, "Inprog");
3181bc2a42dSjasper print_fld_ssize(FLD_NFS_S_CACHE_STATS_V, nfsstats.srvcache_inproghits);
3191bc2a42dSjasper print_fld_str(FLD_NFS_S_WRITES, "WriteOps");
3201bc2a42dSjasper print_fld_ssize(FLD_NFS_S_WRITES_V, nfsstats.srvvop_writes);
3211bc2a42dSjasper end_line();
3221bc2a42dSjasper
3231bc2a42dSjasper print_fld_str(FLD_NFS_S_RPC_COUNTS, "Setattr");
3241bc2a42dSjasper print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
3251bc2a42dSjasper nfsstats.srvrpccnt[NFSPROC_SETATTR]);
3261bc2a42dSjasper print_fld_str(FLD_NFS_S_CACHE_STATS, "Idem");
3271bc2a42dSjasper print_fld_ssize(FLD_NFS_S_CACHE_STATS_V,
3281bc2a42dSjasper nfsstats.srvcache_idemdonehits);
3291bc2a42dSjasper print_fld_str(FLD_NFS_S_WRITES, "WriteRPC");
3301bc2a42dSjasper print_fld_ssize(FLD_NFS_S_WRITES_V, nfsstats.srvrpccnt[NFSPROC_WRITE]);
3311bc2a42dSjasper end_line();
3321bc2a42dSjasper
3331bc2a42dSjasper print_fld_str(FLD_NFS_S_RPC_COUNTS, "Lookup");
3341bc2a42dSjasper print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
3351bc2a42dSjasper nfsstats.srvrpccnt[NFSPROC_LOOKUP]);
3361bc2a42dSjasper print_fld_str(FLD_NFS_S_CACHE_STATS, "Non-idem");
3371bc2a42dSjasper print_fld_ssize(FLD_NFS_S_CACHE_STATS_V,
3381bc2a42dSjasper nfsstats.srvcache_nonidemdonehits);
3391bc2a42dSjasper print_fld_str(FLD_NFS_S_WRITES, "Opsaved");
3401bc2a42dSjasper print_fld_ssize(FLD_NFS_S_WRITES_V,
3411bc2a42dSjasper nfsstats.srvrpccnt[NFSPROC_WRITE] - nfsstats.srvvop_writes);
3421bc2a42dSjasper end_line();
3431bc2a42dSjasper
3441bc2a42dSjasper print_fld_str(FLD_NFS_S_RPC_COUNTS, "Readlink");
3451bc2a42dSjasper print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
3461bc2a42dSjasper nfsstats.srvrpccnt[NFSPROC_READLINK]);
3471bc2a42dSjasper print_fld_str(FLD_NFS_S_CACHE_STATS, "Misses");
3481bc2a42dSjasper print_fld_ssize(FLD_NFS_S_CACHE_STATS_V, nfsstats.srvcache_misses);
3491bc2a42dSjasper end_line();
3501bc2a42dSjasper
3511bc2a42dSjasper print_fld_str(FLD_NFS_S_RPC_COUNTS, "Read");
3521bc2a42dSjasper print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
3531bc2a42dSjasper nfsstats.srvrpccnt[NFSPROC_READ]);
3541bc2a42dSjasper end_line();
3551bc2a42dSjasper
3561bc2a42dSjasper print_fld_str(FLD_NFS_S_RPC_COUNTS, "Write");
3571bc2a42dSjasper print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
3581bc2a42dSjasper nfsstats.srvrpccnt[NFSPROC_WRITE]);
3591bc2a42dSjasper end_line();
3601bc2a42dSjasper
3611bc2a42dSjasper print_fld_str(FLD_NFS_S_RPC_COUNTS, "Create");
3621bc2a42dSjasper print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
3631bc2a42dSjasper nfsstats.srvrpccnt[NFSPROC_CREATE]);
3641bc2a42dSjasper end_line();
3651bc2a42dSjasper
3661bc2a42dSjasper print_fld_str(FLD_NFS_S_RPC_COUNTS, "Remove");
3671bc2a42dSjasper print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
3681bc2a42dSjasper nfsstats.srvrpccnt[NFSPROC_REMOVE]);
3691bc2a42dSjasper end_line();
3701bc2a42dSjasper
3711bc2a42dSjasper print_fld_str(FLD_NFS_S_RPC_COUNTS, "Rename");
3721bc2a42dSjasper print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
3731bc2a42dSjasper nfsstats.srvrpccnt[NFSPROC_RENAME]);
3741bc2a42dSjasper end_line();
3751bc2a42dSjasper
3761bc2a42dSjasper print_fld_str(FLD_NFS_S_RPC_COUNTS, "Link");
3771bc2a42dSjasper print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
3781bc2a42dSjasper nfsstats.srvrpccnt[NFSPROC_LINK]);
3791bc2a42dSjasper end_line();
3801bc2a42dSjasper
3811bc2a42dSjasper print_fld_str(FLD_NFS_S_RPC_COUNTS, "Symlink");
3821bc2a42dSjasper print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
3831bc2a42dSjasper nfsstats.srvrpccnt[NFSPROC_SYMLINK]);
3841bc2a42dSjasper end_line();
3851bc2a42dSjasper
3861bc2a42dSjasper print_fld_str(FLD_NFS_S_RPC_COUNTS, "Mkdir");
3871bc2a42dSjasper print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
3881bc2a42dSjasper nfsstats.srvrpccnt[NFSPROC_MKDIR]);
3891bc2a42dSjasper end_line();
3901bc2a42dSjasper
3911bc2a42dSjasper print_fld_str(FLD_NFS_S_RPC_COUNTS, "Rmdir");
3921bc2a42dSjasper print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
3931bc2a42dSjasper nfsstats.srvrpccnt[NFSPROC_RMDIR]);
3941bc2a42dSjasper end_line();
3951bc2a42dSjasper
3961bc2a42dSjasper print_fld_str(FLD_NFS_S_RPC_COUNTS, "Readdir");
3971bc2a42dSjasper print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
3981bc2a42dSjasper nfsstats.srvrpccnt[NFSPROC_READDIR]);
3991bc2a42dSjasper end_line();
4001bc2a42dSjasper
4011bc2a42dSjasper print_fld_str(FLD_NFS_S_RPC_COUNTS, "RdirPlus");
4021bc2a42dSjasper print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
4031bc2a42dSjasper nfsstats.srvrpccnt[NFSPROC_READDIRPLUS]);
4041bc2a42dSjasper end_line();
4051bc2a42dSjasper
4061bc2a42dSjasper print_fld_str(FLD_NFS_S_RPC_COUNTS, "Access");
4071bc2a42dSjasper print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
4081bc2a42dSjasper nfsstats.srvrpccnt[NFSPROC_ACCESS]);
4091bc2a42dSjasper end_line();
4101bc2a42dSjasper
4111bc2a42dSjasper print_fld_str(FLD_NFS_S_RPC_COUNTS, "Mknod");
4121bc2a42dSjasper print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
4131bc2a42dSjasper nfsstats.srvrpccnt[NFSPROC_MKNOD]);
4141bc2a42dSjasper end_line();
4151bc2a42dSjasper
4161bc2a42dSjasper print_fld_str(FLD_NFS_S_RPC_COUNTS, "Fsstat");
4171bc2a42dSjasper print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
4181bc2a42dSjasper nfsstats.srvrpccnt[NFSPROC_FSSTAT]);
4191bc2a42dSjasper end_line();
4201bc2a42dSjasper
4211bc2a42dSjasper print_fld_str(FLD_NFS_S_RPC_COUNTS, "Fsinfo");
4221bc2a42dSjasper print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
4231bc2a42dSjasper nfsstats.srvrpccnt[NFSPROC_FSINFO]);
4241bc2a42dSjasper end_line();
4251bc2a42dSjasper
4261bc2a42dSjasper print_fld_str(FLD_NFS_S_RPC_COUNTS, "PathConf");
4271bc2a42dSjasper print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
4281bc2a42dSjasper nfsstats.srvrpccnt[NFSPROC_PATHCONF]);
4291bc2a42dSjasper end_line();
4301bc2a42dSjasper
4311bc2a42dSjasper print_fld_str(FLD_NFS_S_RPC_COUNTS, "Commit");
4321bc2a42dSjasper print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
4331bc2a42dSjasper nfsstats.srvrpccnt[NFSPROC_COMMIT]);
4341bc2a42dSjasper end_line();
4351bc2a42dSjasper
4361da8c12dScanacar /* This creates an empty space on screen to separate the two blocks */
4371da8c12dScanacar print_fld_str(FLD_NFS_S_RPC_COUNTS, "");
4381bc2a42dSjasper end_line();
4391bc2a42dSjasper
4401bc2a42dSjasper print_fld_str(FLD_NFS_S_RPC_COUNTS, "Ret-Failed");
4411bc2a42dSjasper print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V, nfsstats.srvrpc_errs);
4421bc2a42dSjasper print_fld_str(FLD_NFS_S_CACHE_STATS, "Faults");
4431bc2a42dSjasper print_fld_ssize(FLD_NFS_S_CACHE_STATS_V, nfsstats.srv_errs);
4441bc2a42dSjasper end_line();
4451bc2a42dSjasper }
446