[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.6

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