[BACK]Return to nfs.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / systat

Annotation of src/usr.bin/systat/nfs.c, Revision 1.10

1.10    ! jsg         1: /*     $OpenBSD: nfs.c,v 1.9 2023/04/19 12:58:15 jsg Exp $     */
1.1       jasper      2:
                      3: /*
                      4:  * Copyright (c) 2009 Jasper Lievisse Adriaanse <jasper@openbsd.org>
                      5:  *
                      6:  * Permission to use, copy, modify, and distribute this software for any
                      7:  * purpose with or without fee is hereby granted, provided that the above
                      8:  * copyright notice and this permission notice appear in all copies.
                      9:  *
                     10:  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
                     11:  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
                     12:  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
                     13:  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
                     14:  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
                     15:  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
                     16:  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
                     17:  *
                     18:  */
                     19:
1.7       deraadt    20: #include <sys/types.h>
1.1       jasper     21: #include <sys/mount.h>
1.7       deraadt    22: #include <sys/signal.h>
1.1       jasper     23: #include <sys/sysctl.h>
                     24: #include <nfs/rpcv2.h>
                     25: #include <nfs/nfsproto.h>
                     26: #include <nfs/nfs.h>
                     27:
                     28: #include <err.h>
                     29: #include <errno.h>
                     30: #include <stdio.h>
                     31: #include <stdlib.h>
                     32: #include <string.h>
                     33:
                     34: #include "systat.h"
                     35:
                     36: int    select_client(void);
                     37: int    select_server(void);
                     38: int    read_nfs(void);
                     39: void   print_client(void);
                     40: void   print_server(void);
                     41:
                     42: struct nfsstats nfsstats;
                     43: int    num_client = 0;
                     44: int    num_server = 0;
                     45:
                     46: field_def fields_nfs[] = {
                     47:        /* Client */
1.2       jasper     48:        {"RPC COUNTS", 10, 12, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
1.5       jasper     49:        {"", 12, 14, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
1.2       jasper     50:        {"RPC INFO", 14, 12, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
1.5       jasper     51:        {"", 12, 14, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
1.2       jasper     52:        {"CACHE INFO", 10, 12, 1, FLD_ALIGN_LEFT, -1, 0, 0, 0},
1.5       jasper     53:        {"", 12, 14, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
1.1       jasper     54:
                     55:        /* Server */
1.2       jasper     56:        {"RPC COUNTS", 10, 12, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
1.5       jasper     57:        {"", 12, 14, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
1.2       jasper     58:        {"CACHE STATS", 14, 12, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
1.5       jasper     59:        {"", 12, 14, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
1.2       jasper     60:        {"WRITES", 10, 12, 1, FLD_ALIGN_LEFT, -1, 0, 0, 0},
1.5       jasper     61:        {"", 10, 12, 1, FLD_ALIGN_RIGHT, -1, 0, 0, 0},
1.1       jasper     62: };
                     63:
                     64: /* _V suffixed fields indicate a value column. */
                     65: /* Client */
1.6       jasper     66: #define        FLD_NFS_C_RPC_COUNTS    FIELD_ADDR(fields_nfs,0)
                     67: #define        FLD_NFS_C_RPC_COUNTS_V  FIELD_ADDR(fields_nfs,1)
                     68: #define        FLD_NFS_C_RPC_INFO      FIELD_ADDR(fields_nfs,2)
                     69: #define        FLD_NFS_C_RPC_INFO_V    FIELD_ADDR(fields_nfs,3)
                     70: #define        FLD_NFS_C_CACHE_INFO    FIELD_ADDR(fields_nfs,4)
                     71: #define        FLD_NFS_C_CACHE_V       FIELD_ADDR(fields_nfs,5)
1.1       jasper     72:
                     73: /* Server */
1.6       jasper     74: #define        FLD_NFS_S_RPC_COUNTS    FIELD_ADDR(fields_nfs,6)
                     75: #define        FLD_NFS_S_RPC_COUNTS_V  FIELD_ADDR(fields_nfs,7)
                     76: #define        FLD_NFS_S_CACHE_STATS   FIELD_ADDR(fields_nfs,8)
                     77: #define        FLD_NFS_S_CACHE_STATS_V FIELD_ADDR(fields_nfs,9)
                     78: #define        FLD_NFS_S_WRITES        FIELD_ADDR(fields_nfs,10)
                     79: #define        FLD_NFS_S_WRITES_V      FIELD_ADDR(fields_nfs,11)
1.1       jasper     80:
                     81: /* Define views */
                     82: field_def *view_nfs_0[] = {
                     83:        FLD_NFS_C_RPC_COUNTS, FLD_NFS_C_RPC_COUNTS_V, FLD_NFS_C_RPC_INFO,
                     84:        FLD_NFS_C_RPC_INFO_V, FLD_NFS_C_CACHE_INFO, FLD_NFS_C_CACHE_V ,NULL
                     85: };
                     86:
                     87: field_def *view_nfs_1[] = {
                     88:        FLD_NFS_S_RPC_COUNTS, FLD_NFS_S_RPC_COUNTS_V, FLD_NFS_S_CACHE_STATS,
                     89:        FLD_NFS_S_CACHE_STATS_V, FLD_NFS_S_WRITES, FLD_NFS_S_WRITES_V, NULL
                     90: };
                     91:
                     92: /* Define view managers */
                     93: struct view_manager nfs_client_mgr = {
                     94:        "Client", select_client, read_nfs, NULL, print_header,
                     95:        print_client, keyboard_callback, NULL, NULL
                     96: };
                     97:
                     98: struct view_manager nfs_server_mgr = {
                     99:        "Server", select_server, read_nfs, NULL, print_header,
                    100:        print_server, keyboard_callback, NULL, NULL
                    101: };
                    102:
                    103: field_view views_nfs[] = {
                    104:        {view_nfs_0, "nfsclient", '8', &nfs_client_mgr},
                    105:        {view_nfs_1, "nfsserver", '9', &nfs_server_mgr},
                    106:        {NULL, NULL, 0, NULL}
                    107: };
                    108:
                    109: int
                    110: select_client(void)
                    111: {
                    112:        num_disp = num_client;
                    113:        return(0);
                    114: }
                    115:
                    116: int
                    117: select_server(void)
                    118: {
                    119:        num_disp = num_server;
                    120:        return(0);
                    121: }
                    122:
                    123: int
                    124: initnfs(void)
                    125: {
                    126:        field_view *v;
                    127:
                    128:        for (v = views_nfs; v->name != NULL; v++)
                    129:                add_view(v);
                    130:
                    131:        read_nfs();
                    132:
                    133:        return(0);
                    134: }
                    135:
                    136: /*
                    137:  * We get all the information in one go and don't care about
1.3       jasper    138:  * server or client fields (those will be '0' if not applicable).
1.1       jasper    139:  */
                    140: int
                    141: read_nfs(void)
                    142: {
                    143:        struct nfsstats *p = &nfsstats;
                    144:        int mib[3];
                    145:        size_t len = sizeof(*p);
                    146:
                    147:        mib[0] = CTL_VFS;
                    148:        mib[1] = 2; /* NETDEV */
                    149:        mib[2] = NFS_NFSSTATS;
                    150:
1.8       deraadt   151:        if (sysctl(mib, 3, p, &len, NULL, 0) == -1)
1.1       jasper    152:                return(-1);
                    153:        else
                    154:                return(0);
                    155: }
                    156:
                    157:
                    158: /*
                    159:  * As we want a view with multiple columns, mixed with labels and values,
                    160:  * we can't use the regular dance and have to use our own (looong) dance
                    161:  * to build the layout.
                    162:  */
                    163: void
                    164: print_client(void)
                    165: {
                    166:        print_fld_str(FLD_NFS_C_RPC_COUNTS, "Getattr");
                    167:        print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
                    168:          nfsstats.rpccnt[NFSPROC_GETATTR]);
                    169:        print_fld_str(FLD_NFS_C_RPC_INFO, "TimedOut");
                    170:        print_fld_ssize(FLD_NFS_C_RPC_INFO_V, nfsstats.rpctimeouts);
                    171:        print_fld_str(FLD_NFS_C_CACHE_INFO, "Attr Hits  ");
                    172:        print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.attrcache_hits);
                    173:        end_line();
                    174:
                    175:        print_fld_str(FLD_NFS_C_RPC_COUNTS, "Setattr");
                    176:        print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
                    177:          nfsstats.rpccnt[NFSPROC_SETATTR]);
                    178:        print_fld_str(FLD_NFS_C_RPC_INFO, "Invalid");
                    179:        print_fld_ssize(FLD_NFS_C_RPC_INFO_V, nfsstats.rpcinvalid);
                    180:        print_fld_str(FLD_NFS_C_CACHE_INFO, "Attr Misses");
                    181:        print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.attrcache_misses);
                    182:        end_line();
                    183:
                    184:        print_fld_str(FLD_NFS_C_RPC_COUNTS, "Lookup");
                    185:        print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
                    186:          nfsstats.rpccnt[NFSPROC_LOOKUP]);
                    187:        print_fld_str(FLD_NFS_C_RPC_INFO, "X Replies");
                    188:        print_fld_ssize(FLD_NFS_C_RPC_INFO_V, nfsstats.rpcunexpected);
                    189:        print_fld_str(FLD_NFS_C_CACHE_INFO, "Lkup Hits  ");
                    190:        print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.lookupcache_hits);
                    191:        end_line();
                    192:
                    193:        print_fld_str(FLD_NFS_C_RPC_COUNTS, "Readlink");
                    194:        print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
                    195:          nfsstats.rpccnt[NFSPROC_READLINK]);
                    196:        print_fld_str(FLD_NFS_C_RPC_INFO, "Retries");
                    197:        print_fld_ssize(FLD_NFS_C_RPC_INFO_V, nfsstats.rpcretries);
                    198:        print_fld_str(FLD_NFS_C_CACHE_INFO, "Lkup Misses  ");
                    199:        print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.lookupcache_misses);
                    200:        end_line();
                    201:
                    202:        print_fld_str(FLD_NFS_C_RPC_COUNTS, "Read");
                    203:        print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
                    204:          nfsstats.rpccnt[NFSPROC_READ]);
                    205:        print_fld_str(FLD_NFS_C_RPC_INFO, "Requests");
                    206:        print_fld_ssize(FLD_NFS_C_RPC_INFO_V, nfsstats.rpcrequests);
                    207:        print_fld_str(FLD_NFS_C_CACHE_INFO, "BioR Hits  ");
                    208:        print_fld_ssize(FLD_NFS_C_CACHE_V,
                    209:          nfsstats.biocache_reads-nfsstats.read_bios);
                    210:        end_line();
                    211:
                    212:        print_fld_str(FLD_NFS_C_RPC_COUNTS, "Write");
                    213:        print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V, nfsstats.rpccnt[NFSPROC_WRITE]);
                    214:        print_fld_str(FLD_NFS_C_RPC_INFO, "FrcSync");
                    215:        print_fld_ssize(FLD_NFS_C_RPC_INFO_V, nfsstats.forcedsync);
                    216:        print_fld_str(FLD_NFS_C_CACHE_INFO, "BioR Misses");
                    217:        print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.read_bios);
                    218:        end_line();
                    219:
                    220:        print_fld_str(FLD_NFS_C_RPC_COUNTS, "Create");
                    221:        print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
                    222:          nfsstats.rpccnt[NFSPROC_CREATE]);
                    223:        print_fld_str(FLD_NFS_C_CACHE_INFO, "BioW Hits  ");
                    224:        print_fld_ssize(FLD_NFS_C_CACHE_V,
                    225:          nfsstats.biocache_writes-nfsstats.write_bios);
                    226:        end_line();
                    227:
                    228:        print_fld_str(FLD_NFS_C_RPC_COUNTS, "Remove");
                    229:        print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
                    230:          nfsstats.rpccnt[NFSPROC_REMOVE]);
                    231:        print_fld_str(FLD_NFS_C_CACHE_INFO, "BioW Misses");
                    232:        print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.write_bios);
                    233:        end_line();
                    234:
                    235:        print_fld_str(FLD_NFS_C_RPC_COUNTS, "Rename");
                    236:        print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
                    237:          nfsstats.rpccnt[NFSPROC_RENAME]);
                    238:        print_fld_str(FLD_NFS_C_CACHE_INFO, "BioRL Hits  ");
                    239:        print_fld_ssize(FLD_NFS_C_CACHE_V,
                    240:          nfsstats.biocache_readlinks-nfsstats.readlink_bios);
                    241:        end_line();
                    242:
                    243:        print_fld_str(FLD_NFS_C_RPC_COUNTS, "Link");
                    244:        print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V, nfsstats.rpccnt[NFSPROC_LINK]);
                    245:        print_fld_str(FLD_NFS_C_CACHE_INFO, "BioRL Misses");
                    246:        print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.readlink_bios);
                    247:        end_line();
                    248:
                    249:        print_fld_str(FLD_NFS_C_RPC_COUNTS, "Symlink");
                    250:        print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
                    251:          nfsstats.rpccnt[NFSPROC_SYMLINK]);
                    252:        print_fld_str(FLD_NFS_C_CACHE_INFO, "BioD Hits  ");
                    253:        print_fld_ssize(FLD_NFS_C_CACHE_V,
                    254:          nfsstats.biocache_readdirs-nfsstats.readdir_bios);
                    255:        end_line();
                    256:
                    257:        print_fld_str(FLD_NFS_C_RPC_COUNTS, "Mkdir");
                    258:        print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V, nfsstats.rpccnt[NFSPROC_MKDIR]);
                    259:        print_fld_str(FLD_NFS_C_CACHE_INFO, "BioD Misses");
                    260:        print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.readdir_bios);
                    261:        end_line();
                    262:
                    263:        print_fld_str(FLD_NFS_C_RPC_COUNTS, "Rmdir");
                    264:        print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V, nfsstats.rpccnt[NFSPROC_RMDIR]);
                    265:        print_fld_str(FLD_NFS_C_CACHE_INFO, "DirE Hits  ");
                    266:        print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.direofcache_hits);
                    267:        end_line();
                    268:
                    269:        print_fld_str(FLD_NFS_C_RPC_COUNTS, "Readdir");
                    270:        print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
                    271:          nfsstats.rpccnt[NFSPROC_READDIR]);
                    272:        print_fld_str(FLD_NFS_C_CACHE_INFO, "DirE Misses");
                    273:        print_fld_ssize(FLD_NFS_C_CACHE_V, nfsstats.direofcache_misses);
                    274:        end_line();
                    275:
                    276:        print_fld_str(FLD_NFS_C_RPC_COUNTS, "RdirPlus");
                    277:        print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
                    278:          nfsstats.rpccnt[NFSPROC_READDIRPLUS]);
                    279:        end_line();
                    280:
                    281:        print_fld_str(FLD_NFS_C_RPC_COUNTS, "Access");
                    282:        print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
                    283:          nfsstats.rpccnt[NFSPROC_ACCESS]);
                    284:        end_line();
                    285:
                    286:        print_fld_str(FLD_NFS_C_RPC_COUNTS, "Mknod");
                    287:        print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V, nfsstats.rpccnt[NFSPROC_MKNOD]);
                    288:        end_line();
                    289:
                    290:        print_fld_str(FLD_NFS_C_RPC_COUNTS, "Fsstat");
                    291:        print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
                    292:          nfsstats.rpccnt[NFSPROC_FSSTAT]);
                    293:        end_line();
                    294:
                    295:        print_fld_str(FLD_NFS_C_RPC_COUNTS, "Fsinfo");
                    296:        print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
                    297:          nfsstats.rpccnt[NFSPROC_FSINFO]);
                    298:        end_line();
                    299:
                    300:        print_fld_str(FLD_NFS_C_RPC_COUNTS, "PathConf");
                    301:        print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
                    302:          nfsstats.rpccnt[NFSPROC_PATHCONF]);
                    303:        end_line();
                    304:
                    305:        print_fld_str(FLD_NFS_C_RPC_COUNTS, "Commit");
                    306:        print_fld_ssize(FLD_NFS_C_RPC_COUNTS_V,
                    307:          nfsstats.rpccnt[NFSPROC_COMMIT]);
                    308:        end_line();
                    309: }
                    310:
                    311: void
                    312: print_server(void)
                    313: {
                    314:        print_fld_str(FLD_NFS_S_RPC_COUNTS, "Getattr");
                    315:        print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
                    316:          nfsstats.srvrpccnt[NFSPROC_GETATTR]);
                    317:        print_fld_str(FLD_NFS_S_CACHE_STATS, "Inprog");
                    318:        print_fld_ssize(FLD_NFS_S_CACHE_STATS_V, nfsstats.srvcache_inproghits);
                    319:        print_fld_str(FLD_NFS_S_WRITES, "WriteOps");
                    320:        print_fld_ssize(FLD_NFS_S_WRITES_V, nfsstats.srvvop_writes);
                    321:        end_line();
                    322:
                    323:        print_fld_str(FLD_NFS_S_RPC_COUNTS, "Setattr");
                    324:        print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
                    325:          nfsstats.srvrpccnt[NFSPROC_SETATTR]);
                    326:        print_fld_str(FLD_NFS_S_CACHE_STATS, "Idem");
                    327:        print_fld_ssize(FLD_NFS_S_CACHE_STATS_V,
                    328:          nfsstats.srvcache_idemdonehits);
                    329:        print_fld_str(FLD_NFS_S_WRITES, "WriteRPC");
                    330:        print_fld_ssize(FLD_NFS_S_WRITES_V, nfsstats.srvrpccnt[NFSPROC_WRITE]);
                    331:        end_line();
                    332:
                    333:        print_fld_str(FLD_NFS_S_RPC_COUNTS, "Lookup");
                    334:        print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
                    335:          nfsstats.srvrpccnt[NFSPROC_LOOKUP]);
                    336:        print_fld_str(FLD_NFS_S_CACHE_STATS, "Non-idem");
                    337:        print_fld_ssize(FLD_NFS_S_CACHE_STATS_V,
                    338:          nfsstats.srvcache_nonidemdonehits);
                    339:        print_fld_str(FLD_NFS_S_WRITES, "Opsaved");
                    340:        print_fld_ssize(FLD_NFS_S_WRITES_V,
                    341:          nfsstats.srvrpccnt[NFSPROC_WRITE] - nfsstats.srvvop_writes);
                    342:        end_line();
                    343:
                    344:        print_fld_str(FLD_NFS_S_RPC_COUNTS, "Readlink");
                    345:        print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
                    346:          nfsstats.srvrpccnt[NFSPROC_READLINK]);
                    347:        print_fld_str(FLD_NFS_S_CACHE_STATS, "Misses");
                    348:        print_fld_ssize(FLD_NFS_S_CACHE_STATS_V, nfsstats.srvcache_misses);
                    349:        end_line();
                    350:
                    351:        print_fld_str(FLD_NFS_S_RPC_COUNTS, "Read");
                    352:        print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
                    353:          nfsstats.srvrpccnt[NFSPROC_READ]);
                    354:        end_line();
                    355:
                    356:        print_fld_str(FLD_NFS_S_RPC_COUNTS, "Write");
                    357:        print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
                    358:          nfsstats.srvrpccnt[NFSPROC_WRITE]);
                    359:        end_line();
                    360:
                    361:        print_fld_str(FLD_NFS_S_RPC_COUNTS, "Create");
                    362:        print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
                    363:          nfsstats.srvrpccnt[NFSPROC_CREATE]);
                    364:        end_line();
                    365:
                    366:        print_fld_str(FLD_NFS_S_RPC_COUNTS, "Remove");
                    367:        print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
                    368:          nfsstats.srvrpccnt[NFSPROC_REMOVE]);
                    369:        end_line();
                    370:
                    371:        print_fld_str(FLD_NFS_S_RPC_COUNTS, "Rename");
                    372:        print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
                    373:          nfsstats.srvrpccnt[NFSPROC_RENAME]);
                    374:        end_line();
                    375:
                    376:        print_fld_str(FLD_NFS_S_RPC_COUNTS, "Link");
                    377:        print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
                    378:          nfsstats.srvrpccnt[NFSPROC_LINK]);
                    379:        end_line();
                    380:
                    381:        print_fld_str(FLD_NFS_S_RPC_COUNTS, "Symlink");
                    382:        print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
                    383:          nfsstats.srvrpccnt[NFSPROC_SYMLINK]);
                    384:        end_line();
                    385:
                    386:        print_fld_str(FLD_NFS_S_RPC_COUNTS, "Mkdir");
                    387:        print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
                    388:          nfsstats.srvrpccnt[NFSPROC_MKDIR]);
                    389:        end_line();
                    390:
                    391:        print_fld_str(FLD_NFS_S_RPC_COUNTS, "Rmdir");
                    392:        print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
                    393:          nfsstats.srvrpccnt[NFSPROC_RMDIR]);
                    394:        end_line();
                    395:
                    396:        print_fld_str(FLD_NFS_S_RPC_COUNTS, "Readdir");
                    397:        print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
                    398:          nfsstats.srvrpccnt[NFSPROC_READDIR]);
                    399:        end_line();
                    400:
                    401:        print_fld_str(FLD_NFS_S_RPC_COUNTS, "RdirPlus");
                    402:        print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
                    403:          nfsstats.srvrpccnt[NFSPROC_READDIRPLUS]);
                    404:        end_line();
                    405:
                    406:        print_fld_str(FLD_NFS_S_RPC_COUNTS, "Access");
                    407:        print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
                    408:          nfsstats.srvrpccnt[NFSPROC_ACCESS]);
                    409:        end_line();
                    410:
                    411:        print_fld_str(FLD_NFS_S_RPC_COUNTS, "Mknod");
                    412:        print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
                    413:          nfsstats.srvrpccnt[NFSPROC_MKNOD]);
                    414:        end_line();
                    415:
                    416:        print_fld_str(FLD_NFS_S_RPC_COUNTS, "Fsstat");
                    417:        print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
                    418:          nfsstats.srvrpccnt[NFSPROC_FSSTAT]);
                    419:        end_line();
                    420:
                    421:        print_fld_str(FLD_NFS_S_RPC_COUNTS, "Fsinfo");
                    422:        print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
                    423:          nfsstats.srvrpccnt[NFSPROC_FSINFO]);
                    424:        end_line();
                    425:
                    426:        print_fld_str(FLD_NFS_S_RPC_COUNTS, "PathConf");
                    427:        print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
                    428:          nfsstats.srvrpccnt[NFSPROC_PATHCONF]);
                    429:        end_line();
                    430:
                    431:        print_fld_str(FLD_NFS_S_RPC_COUNTS, "Commit");
                    432:        print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V,
                    433:          nfsstats.srvrpccnt[NFSPROC_COMMIT]);
                    434:        end_line();
                    435:
1.4       canacar   436:        /* This creates an empty space on screen to separate the two blocks */
                    437:        print_fld_str(FLD_NFS_S_RPC_COUNTS, "");
1.1       jasper    438:        end_line();
                    439:
                    440:        print_fld_str(FLD_NFS_S_RPC_COUNTS, "Ret-Failed");
                    441:        print_fld_ssize(FLD_NFS_S_RPC_COUNTS_V, nfsstats.srvrpc_errs);
                    442:        print_fld_str(FLD_NFS_S_CACHE_STATS, "Faults");
                    443:        print_fld_ssize(FLD_NFS_S_CACHE_STATS_V, nfsstats.srv_errs);
                    444:        end_line();
                    445: }