[PATCH] statfs: specify node ranges in statfs.conf

0 views
Skip to first unread message

Abhishek Kulkarni

unread,
Dec 17, 2008, 8:56:18 PM12/17/08
to xc...@googlegroups.com
The main motivation to separate out the range parsing from libxcpu was that it could be used in statfs.
Added a new function nodecreate_from_range in statfs.

statfs.conf now supports node ranges like

x[0-100]=10.0.0.[10-110]
x[101-200]=10.0.1.[10-109]

and so on.
It assumes the node range and address range is equal.

Signed-off-by: Abhishek Kulkarni <kulk...@lanl.gov>

Index: statfs/statfs.c
===================================================================
--- statfs/statfs.c    (revision 752)
+++ statfs/statfs.c    (working copy)
@@ -199,6 +199,46 @@
     np_werror(NULL, 0);
 }
 
+static int
+nodecreate_from_range(char *namerange, char *addrrange)
+{
+    int nname, naddr, i;
+    char **name = NULL, **addr = NULL;
+    Node *nd, **lnd;
+
+    nname = parse_range(namerange, &name);
+    if (nname < 0)
+        goto error;
+   
+    naddr = parse_range(addrrange, &addr);
+    if (naddr < 0)
+        goto error;
+
+    if (nname != naddr) {
+        np_werror("syntax error: name and address range mismatch", EIO);
+        return -1;
+    }
+
+    for (i = 0; i < nname; i++) {
+        nd = nodecreate(name[i], addr[i]);
+        if (!nd)
+            goto error;
+       
+        nd->next = nodes;
+        nodes = nd;
+    }
+
+    free(name);
+    free(addr);
+    return nname;
+error:
+    free(name);
+    free(addr);
+    np_werror("syntax error: '%s %s' invalid node range description",
+          EIO, namerange, addrrange);
+    return -1;
+}
+
 static void
 nodereseterror(Node *nd)
 {
@@ -333,16 +373,14 @@
     int errorcount = 0;
     char buf[256], *p, *s;
     FILE *f;
-    Node *nd, **lnd;
 
+
     f = fopen(path, "r");
     if (!f) {
         np_suerror(path, errno);
         return -1;
     }
 
-    lnd = &nodes;
-
     /* there are few things worse than a program that feeds you
      * config file errors one line at a time. So, if you get an
      * error, track the fact, but keep trying to parse, so
@@ -383,19 +421,14 @@
             ;
         p[n+1] = '\0';
 
-        nd = nodecreate(s, p);
-        if (!nd){
+        if (nodecreate_from_range(s, p) < 0) {
             errorcount++;
             continue;
         }
-
-        *lnd = nd;
-        lnd = &nd->next;
     }
 
     fclose(f);
     return -errorcount;
-
 }
 
 static Npfile*

Reply all
Reply to author
Forward
0 new messages