]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/nfsstat/nfsstat.c
nfsstat: just declare -D/--diff-stat's variables
[nfs-utils.git] / utils / nfsstat / nfsstat.c
index 0186fa55b9c6c986d0ff1280b8e43d71de0d0ebf..bd105f5d7b1b5d056cbec13966f0ccaaf38c1326 100644 (file)
 
 #define MAXNRVALS      32
 
-static unsigned int    srvproc2info[20];       /* NFSv2 call counts ([0] == 18) */
-static unsigned int    cltproc2info[20];       /* NFSv2 call counts ([0] == 18) */
-static unsigned int    srvproc3info[24];       /* NFSv3 call counts ([0] == 22) */
-static unsigned int    cltproc3info[24];       /* NFSv3 call counts ([0] == 22) */
-static unsigned int    srvproc4info[4];        /* NFSv4 call counts ([0] == 2) */
-static unsigned int    cltproc4info[34];       /* NFSv4 call counts ([0] == 32) */
-static unsigned int    srvproc4opsinfo[42];/* NFSv4 call counts ([0] == 40) */
-static unsigned int    srvnetinfo[5];  /* 0  # of received packets
-                                        * 1  UDP packets
-                                        * 2  TCP packets
-                                        * 3  TCP connections
-                                        */
-static unsigned int    cltnetinfo[5];  /* 0  # of received packets
-                                        * 1  UDP packets
-                                        * 2  TCP packets
-                                        * 3  TCP connections
-                                        */
-
-static unsigned int    srvrpcinfo[6];  /* 0  total # of RPC calls
-                                        * 1  total # of bad calls
-                                        * 2  bad format
-                                        * 3  authentication failed
-                                        * 4  unknown client
-                                        */
-static unsigned int    cltrpcinfo[4];  /* 0  total # of RPC calls
-                                        * 1  retransmitted calls
-                                        * 2  cred refreshs
-                                        */
-
-static unsigned int    srvrcinfo[9];   /* 0  repcache hits
-                                        * 1  repcache hits
-                                        * 2  uncached reqs
-                                        * (for pre-2.4 kernels:)
-                                        * 3  FH lookups
-                                        * 4  'anon' FHs
-                                        * 5  noncached non-directories
-                                        * 6  noncached directories
-                                        * 7  stale
-                                        */
-
-static unsigned int    srvfhinfo[7];   /* (for kernels >= 2.4.0)
-                                        * 0  stale
-                                        * 1  FH lookups
-                                        * 2  'anon' FHs
-                                        * 3  noncached directories
-                                        * 4  noncached non-directories
-                                        * leave hole to relocate stale for order
-                                        *    compatability.
-                                        */
+static unsigned int    srvproc2info[20], srvproc2info_tmp[20]; /* NFSv2 call counts ([0] == 18) */
+static unsigned int    cltproc2info[20], cltproc2info_tmp[20]; /* NFSv2 call counts ([0] == 18) */
+static unsigned int    srvproc3info[24], srvproc3info_tmp[24]; /* NFSv3 call counts ([0] == 22) */
+static unsigned int    cltproc3info[24], cltproc3info_tmp[24]; /* NFSv3 call counts ([0] == 22) */
+static unsigned int    srvproc4info[4], srvproc4info_tmp[4];   /* NFSv4 call counts ([0] == 2) */
+static unsigned int    cltproc4info[34], cltproc4info_tmp[34]; /* NFSv4 call counts ([0] == 32) */
+static unsigned int    srvproc4opsinfo[42], srvproc4opsinfo_tmp[42];   /* NFSv4 call counts ([0] == 40) */
+static unsigned int    srvnetinfo[5], srvnetinfo_tmp[5];       /* 0  # of received packets
+                                                                * 1  UDP packets
+                                                                * 2  TCP packets
+                                                                * 3  TCP connections
+                                                                */
+static unsigned int    cltnetinfo[5], cltnetinfo_tmp[5];       /* 0  # of received packets
+                                                                * 1  UDP packets
+                                                                * 2  TCP packets
+                                                                * 3  TCP connections
+                                                                */
+
+static unsigned int    srvrpcinfo[6], srvrpcinfo_tmp[6];       /* 0  total # of RPC calls
+                                                                * 1  total # of bad calls
+                                                                * 2  bad format
+                                                                * 3  authentication failed
+                                                                * 4  unknown client
+                                                                */
+static unsigned int    cltrpcinfo[4], cltrpcinfo_tmp[4];       /* 0  total # of RPC calls
+                                                                * 1  retransmitted calls
+                                                                * 2  cred refreshs
+                                                                */
+
+static unsigned int    srvrcinfo[9], srvrcinfo_tmp[9];         /* 0  repcache hits
+                                                                * 1  repcache hits
+                                                                * 2  uncached reqs
+                                                                * (for pre-2.4 kernels:)
+                                                                * 3  FH lookups
+                                                                * 4  'anon' FHs
+                                                                * 5  noncached non-directories
+                                                                * 6  noncached directories
+                                                                * 7  stale
+                                                                */
+
+static unsigned int    srvfhinfo[7], srvfhinfo_tmp[7];         /* (for kernels >= 2.4.0)
+                                                                * 0  stale
+                                                                * 1  FH lookups
+                                                                * 2  'anon' FHs
+                                                                * 3  noncached directories
+                                                                * 4  noncached non-directories
+                                                                * leave hole to relocate stale for order
+                                                                *    compatability.
+                                                                */
 
 static const char *    nfsv2name[18] = {
        "null", "getattr", "setattr", "root",   "lookup",  "readlink",
@@ -116,28 +116,38 @@ typedef struct statinfo {
        unsigned int *  valptr;
 } statinfo;
 
-#define STRUCTSIZE(x)   sizeof(x)/sizeof(*x)
-
-static statinfo                srvinfo[] = {
-       { "net",        STRUCTSIZE(srvnetinfo), srvnetinfo },
-       { "rpc",        STRUCTSIZE(srvrpcinfo), srvrpcinfo },
-       { "rc",         STRUCTSIZE(srvrcinfo),  srvrcinfo  },
-       { "fh",         STRUCTSIZE(srvfhinfo),  srvfhinfo  },
-       { "proc2",      STRUCTSIZE(srvproc2info),  srvproc2info  },
-       { "proc3",      STRUCTSIZE(srvproc3info),  srvproc3info  },
-       { "proc4",      STRUCTSIZE(srvproc4info),  srvproc4info  },
-       { "proc4ops",   STRUCTSIZE(srvproc4opsinfo),srvproc4opsinfo},
-       { NULL,         0,                      NULL       }
-};
-
-static statinfo                cltinfo[] = {
-       { "net",        STRUCTSIZE(cltnetinfo), cltnetinfo },
-       { "rpc",        STRUCTSIZE(cltrpcinfo), cltrpcinfo },
-       { "proc2",      STRUCTSIZE(cltproc2info),  cltproc2info  },
-       { "proc3",      STRUCTSIZE(cltproc3info),  cltproc3info  },
-       { "proc4",      STRUCTSIZE(cltproc4info),  cltproc4info  },
-       { NULL,         0,                      NULL       }
-};
+/*
+ * We now build the arrays of statinfos using macros, which will make it easier
+ * to add new variables for --diff-stat.
+ * e.g., SRV(net) expands into the struct statinfo:  { "net", 5, srvnetinfo }
+ */
+#define ARRAYSIZE(x)           sizeof(x)/sizeof(*x)
+#define STATINFO(k, t, s...)   { #t, ARRAYSIZE(k##t##info##s), k##t##info##s }
+#define SRV(t, s...)           STATINFO(srv, t, s)
+#define CLT(t, s...)           STATINFO(clt, t, s)
+#define DECLARE_SRV(n, s...)   static statinfo n##s[] = { \
+                                       SRV(net,s), \
+                                       SRV(rpc,s), \
+                                       SRV(rc,s), \
+                                       SRV(fh,s), \
+                                       SRV(proc2,s), \
+                                       SRV(proc3,s),\
+                                       SRV(proc4,s), \
+                                       SRV(proc4ops,s),\
+                                       { NULL, 0, NULL }\
+                               }
+#define DECLARE_CLT(n, s...)   static statinfo n##s[] = { \
+                                       CLT(net,s), \
+                                       CLT(rpc,s), \
+                                       CLT(proc2,s),\
+                                       CLT(proc3,s), \
+                                       CLT(proc4,s),\
+                                       { NULL, 0, NULL }\
+                               }
+DECLARE_SRV(srvinfo);
+DECLARE_SRV(srvinfo, _tmp);
+DECLARE_CLT(cltinfo);
+DECLARE_CLT(cltinfo, _tmp);
 
 static void            print_numbers(const char *, unsigned int *,
                                        unsigned int);