]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
STABLE14-cmdebug-cellservdb-20080112
authorJeffrey Altman <jaltman@secure-endpoints.com>
Sat, 12 Jan 2008 15:50:58 +0000 (15:50 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Sat, 12 Jan 2008 15:50:58 +0000 (15:50 +0000)
LICENSE MIT

Add -cellservdb option to the cmdebug command.

This option will retrieve the volume location database information
for all cells known to the cache manager and output the data in the
format required by the CellServDB file.

This functionality is supported by the UNIX cache managers and
Windows cache managers 1.5.31 and later.

(cherry picked from commit b3fe9727b3e775348561bcbe0cf0c14cff82e597)

src/venus/cmdebug.c

index 0b4c6f39dc6eed0b3d3d8389c92fd35516fe17ae..fa305ef933a516ece2d0c7e4e55a77d968c6d4f5 100644 (file)
@@ -81,6 +81,7 @@ PrintCacheConfig(struct rx_connection *aconn)
     } else {
        printf("cmdebug: unsupported server version %d\n", srv_ver);
     }
+    return 0;
 }
 
 #ifndef CAPABILITY_BITS
@@ -472,6 +473,58 @@ PrintCacheEntries(struct rx_connection *aconn, int aint32)
        return PrintCacheEntries32(aconn, aint32);
 }
 
+static int
+PrintCellServDBEntry(struct rx_connection *aconn, afs_int32 cellnum)
+{
+    static struct cell_cache *cache;
+    int code;
+    char *cellname;
+    serverList sl;
+    unsigned int n;
+    int rc = 0;
+
+    cellname = NULL;
+    sl.serverList_len = 0;
+    sl.serverList_val = NULL;
+    code = RXAFSCB_GetCellServDB(aconn, cellnum, &cellname, &sl);
+    if (code)
+       return 0;
+
+    if ( !cellname || !cellname[0] )
+        goto done;
+
+    rc = 1;
+    printf(">%-23s#%s\n", cellname, cellname);
+
+    if (sl.serverList_val) {
+        for ( n=0; n<sl.serverList_len; n++) {
+            struct hostent *host;
+            afs_uint32      addr = ntohl(sl.serverList_val[n]);
+
+            host = gethostbyaddr((const char *)&addr, sizeof(afs_uint32), AF_INET);
+            printf("%-28s#%s\n", afs_inet_ntoa(addr), 
+                    host ? host->h_name : "");
+        }
+    }
+
+  done:
+    if (cellname)
+        free(cellname);
+
+    if (sl.serverList_val)
+       free(sl.serverList_val);
+
+    return rc;
+}
+
+static void
+PrintCellServDB(struct rx_connection *aconn) 
+{
+    afs_int32 index;
+
+    for ( index = 0 ; PrintCellServDBEntry(aconn, index); index++ );
+}
+
 int
 CommandProc(struct cmd_syndesc *as, void *arock)
 {
@@ -501,18 +554,25 @@ CommandProc(struct cmd_syndesc *as, void *arock)
               hostName);
        exit(1);
     }
-    if (as->parms[5].items) {
+
+    if (as->parms[6].items) {
        /* -addrs */
        PrintInterfaces(conn);
        return 0;
     }
-    if (as->parms[6].items) {
+    if (as->parms[7].items) {
        /* -cache */
        PrintCacheConfig(conn);
        return 0;
     }
 
-    if (as->parms[7].items)
+    if (as->parms[8].items) {
+       /* -cellservdb */
+       PrintCellServDB(conn);
+       return 0;
+    }
+
+    if (as->parms[5].items)
         print_ctime = 1;
 
     if (as->parms[2].items)
@@ -567,7 +627,7 @@ main(int argc, char **argv)
 
     rx_Init(0);
 
-    ts = cmd_CreateSyntax(NULL, CommandProc, NULL, "probe unik server");
+    ts = cmd_CreateSyntax(NULL, CommandProc, NULL, "query afs cache manager");
     cmd_AddParm(ts, "-servers", CMD_SINGLE, CMD_REQUIRED, "server machine");
     cmd_AddParm(ts, "-port", CMD_SINGLE, CMD_OPTIONAL, "IP port");
     cmd_AddParm(ts, "-long", CMD_FLAG, CMD_OPTIONAL, "print all info");
@@ -575,12 +635,16 @@ main(int argc, char **argv)
                  "print only cache entries with positive reference counts");
     cmd_AddParm(ts, "-callbacks", CMD_FLAG, CMD_OPTIONAL, 
                  "print only cache entries with callbacks");
+    cmd_AddParm(ts, "-ctime", CMD_FLAG, CMD_OPTIONAL, 
+                "print human readable expiration time");
+
+    
     cmd_AddParm(ts, "-addrs", CMD_FLAG, CMD_OPTIONAL,
                "print only host interfaces");
     cmd_AddParm(ts, "-cache", CMD_FLAG, CMD_OPTIONAL,
                "print only cache configuration");
-    cmd_AddParm(ts, "-ctime", CMD_FLAG, CMD_OPTIONAL, 
-                "print human readable expiration time");
+    cmd_AddParm(ts, "-cellservdb", CMD_FLAG, CMD_OPTIONAL, 
+                "print only cellservdb info");
 
     cmd_Dispatch(argc, argv);
     exit(0);