[DRBD-cvs] r1601 - trunk/user

svn at svn.drbd.org svn at svn.drbd.org
Tue Oct 19 12:13:21 CEST 2004


Author: phil
Date: 2004-10-19 12:13:18 +0200 (Tue, 19 Oct 2004)
New Revision: 1601

Modified:
   trunk/user/drbdadm_adjust.c
   trunk/user/drbdadm_main.c
   trunk/user/drbdsetup.c
   trunk/user/drbdtool_common.c
   trunk/user/drbdtool_common.h
Log:
drbdadm can now call drbdmeta. These new commands are 
currently known to drbdadm: 
create-md, show-gc, get-gc, dump-md
...more to come...


Modified: trunk/user/drbdadm_adjust.c
===================================================================
--- trunk/user/drbdadm_adjust.c	2004-10-19 09:11:49 UTC (rev 1600)
+++ trunk/user/drbdadm_adjust.c	2004-10-19 10:13:18 UTC (rev 1601)
@@ -36,9 +36,6 @@
 #include "drbdadm.h"
 #include "drbdtool_common.h"
 
-#define PERROR(fmt, args...) \
-do { fprintf(stderr,fmt ": ", ##args); perror(0); } while (0)
-
 /******
  This is a bit uggly.
  If you think you are clever, then consider to contribute a nicer

Modified: trunk/user/drbdadm_main.c
===================================================================
--- trunk/user/drbdadm_main.c	2004-10-19 09:11:49 UTC (rev 1600)
+++ trunk/user/drbdadm_main.c	2004-10-19 10:13:18 UTC (rev 1601)
@@ -89,6 +89,7 @@
 static int sh_ll_dev(struct d_resource* ,char* );
 static int sh_md_dev(struct d_resource* ,char* );
 static int sh_md_idx(struct d_resource* ,char* );
+static int admm_generic(struct d_resource* ,char* );
 
 char ss_buffer[255];
 struct utsname nodeinfo;
@@ -101,6 +102,7 @@
 int config_valid=1;
 int dry_run;
 char* drbdsetup;
+char* drbdmeta;
 char* setup_opts[10];
 int soi=0;
 volatile int alarm_raised;
@@ -109,6 +111,7 @@
   { "dry-run",      no_argument,      0, 'd' },
   { "config-file",  required_argument,0, 'c' },
   { "drbdsetup",    required_argument,0, 's' },
+  { "drbdmeta",     required_argument,0, 'm' },
   { 0,              0,                0, 0   }
 };
 
@@ -130,6 +133,10 @@
   { "state",             adm_generic_s,"state"           ,1,1 },
   { "cstate",            adm_generic_s,"cstate"          ,1,1 },
   { "dump",              adm_dump,    0                  ,1,1 },
+  { "create-md",         admm_generic, "create-md"       ,1,1 },
+  { "show-gc",           admm_generic, "show-gc"         ,1,1 },
+  { "get-gc",            admm_generic, "get-gc"          ,1,1 },
+  { "dump-md",           admm_generic, "dump-md"         ,1,1 },
   { "wait_con_int",      adm_wait_ci, 0                  ,1,0 },
   { "sh-resources",      sh_resources,0                  ,0,0 },
   { "sh-mod-parms",      sh_mod_parms,0                  ,0,0 },
@@ -326,7 +333,7 @@
   }
 }
 
-static void find_drbdsetup(char** pathes)
+static void find_drbdcmd(char** cmd, char** pathes)
 {
   struct stat buf;
   char **path;
@@ -334,13 +341,13 @@
   path=pathes;
   while(*path) {
     if(stat(*path,&buf)==0) {
-      drbdsetup=*path;
+      *cmd=*path;
       return;
     }
     path++;
   }
 
-  fprintf(stderr,"Can not find drbdsetup");
+  fprintf(stderr,"Can not find command (drbdsetup/drbdmeta)");
   exit(E_exec_error);
 }
 
@@ -492,6 +499,26 @@
   return m_system(argv,SLEEPS_SHORT);
 }
 
+static int admm_generic(struct d_resource* res ,char* cmd)
+{
+  char* argv[20];
+  int argc=0;
+
+  argv[argc++]=drbdmeta;
+  argv[argc++]=res->me->device;
+  argv[argc++]="v08";
+  if(!strcmp(res->me->meta_disk,"internal")) {
+    argv[argc++]=res->me->disk;
+  } else {
+    argv[argc++]=res->me->meta_disk;
+  }
+  argv[argc++]=res->me->meta_index;
+  argv[argc++]=cmd;
+  argv[argc++]=0;
+
+  return m_system(argv,SLEEPS_SHORT);
+}
+
 static int adm_generic(struct d_resource* res,char* cmd,int flags)
 {
   char* argv[20];
@@ -1022,6 +1049,7 @@
   struct d_resource *res,*tmp;
 
   drbdsetup=NULL;
+  drbdmeta=NULL;
   dry_run=0;
   yyin=NULL;
   uname(&nodeinfo); /* FIXME maybe fold to lower case ? */
@@ -1038,7 +1066,7 @@
     {
       int c;
 
-      c = getopt_long(argc,argv,make_optstring(admopt),admopt,0);
+      c = getopt_long(argc,argv,make_optstring(admopt,0),admopt,0);
       if(c == -1) break;
       switch(c)
 	{
@@ -1063,9 +1091,17 @@
 	    char* pathes[2];
 	    pathes[0]=optarg;
 	    pathes[1]=0;
-	    find_drbdsetup(pathes);
+	    find_drbdcmd(&drbdsetup,pathes);
 	  }
 	  break;
+	case 'm':
+	  {
+	    char* pathes[2];
+	    pathes[0]=optarg;
+	    pathes[1]=0;
+	    find_drbdcmd(&drbdmeta,pathes);
+	  }
+	  break;
 	case '?':
 	  // commented out, since opterr=1
 	  //fprintf(stderr,"Unknown option %s\n",argv[optind-1]);
@@ -1151,9 +1187,13 @@
   }
 
   if(drbdsetup == NULL) {
-    find_drbdsetup((char *[]){"./drbdsetup", "/sbin/drbdsetup", 0 });
+    find_drbdcmd(&drbdsetup,(char *[]){"./drbdsetup", "/sbin/drbdsetup", 0 });
   }
 
+  if(drbdmeta == NULL) {
+    find_drbdcmd(&drbdmeta,(char *[]){"./drbdmeta", "/sbin/drbdmeta", 0 });
+  }
+
   if(cmd->res_name_required)
     {
       if (optind + 1 > argc && cmd->function != adm_dump)

Modified: trunk/user/drbdsetup.c
===================================================================
--- trunk/user/drbdsetup.c	2004-10-19 09:11:49 UTC (rev 1600)
+++ trunk/user/drbdsetup.c	2004-10-19 10:13:18 UTC (rev 1601)
@@ -378,7 +378,7 @@
 
       PRINT_ARGV;
       next_option:
-      c = getopt_long(argc,argv,make_optstring(options),options,0);
+      c = getopt_long(argc,argv,make_optstring(options,'-'),options,0);
       if(c == -1) break;
       switch(c)
 	{
@@ -426,7 +426,7 @@
 
       PRINT_ARGV;
       next_option:
-      c = getopt_long(argc,argv,make_optstring(options),options,0);
+      c = getopt_long(argc,argv,make_optstring(options,'-'),options,0);
       if(c == -1) break;
       switch(c)
 	{
@@ -681,7 +681,7 @@
 	  PRINT_ARGV;
 	  /* only --timeout-expired may be abbreviated to -t
 	   * --human and --do-what-I-say have to be spelled out */
-	  c = getopt_long_only(argc,argv,make_optstring(options),options,0);
+	  c = getopt_long_only(argc,argv,make_optstring(options,'-'),options,0);
 	  if(c == -1) break;
 	  switch(c)
 	    {
@@ -733,7 +733,7 @@
 
 	  PRINT_ARGV;
 
-	  c = getopt_long(argc,argv,make_optstring(options),options,0);
+	  c = getopt_long(argc,argv,make_optstring(options,'-'),options,0);
 	  if(c == -1) break;
 	  switch(c)
 	    {
@@ -778,7 +778,7 @@
 	  int c;
 
 	  PRINT_ARGV;
-	  c = getopt_long(argc,argv,make_optstring(options),options,0);
+	  c = getopt_long(argc,argv,make_optstring(options,'-'),options,0);
 	  if(c == -1) break;
 	  switch(c)
 	    {
@@ -847,7 +847,7 @@
 	  int c;
 
 	  PRINT_ARGV;
-	  c = getopt_long(argc,argv,make_optstring(options),options,0);
+	  c = getopt_long(argc,argv,make_optstring(options,'-'),options,0);
 	  if(c == -1) break;
 	  switch(c)
 	    {
@@ -1014,7 +1014,7 @@
 	  int c;
 
 	  PRINT_ARGV;
-	  c = getopt_long(argc,argv,make_optstring(options),options,0);
+	  c = getopt_long(argc,argv,make_optstring(options,'-'),options,0);
 	  if(c == -1) break;
 	  switch(c)
 	    {

Modified: trunk/user/drbdtool_common.c
===================================================================
--- trunk/user/drbdtool_common.c	2004-10-19 09:11:49 UTC (rev 1600)
+++ trunk/user/drbdtool_common.c	2004-10-19 10:13:18 UTC (rev 1601)
@@ -25,7 +25,7 @@
 	return buf;
 }
 
-const char* make_optstring(struct option *options)
+const char* make_optstring(struct option *options,char startc)
 {
   static char buffer[200];
   static struct option* buffer_valid_for=NULL;
@@ -35,7 +35,7 @@
   if(options==buffer_valid_for) return buffer;
   opt=buffer_valid_for=options;
   c=buffer;
-  *c++='-';
+  if(startc) *c++=startc;
   while(opt->name)
     {
       *c++=opt->val;

Modified: trunk/user/drbdtool_common.h
===================================================================
--- trunk/user/drbdtool_common.h	2004-10-19 09:11:49 UTC (rev 1600)
+++ trunk/user/drbdtool_common.h	2004-10-19 10:13:18 UTC (rev 1601)
@@ -13,7 +13,7 @@
 extern int dt_open_drbd_device(const char* device,int open_may_fail);
 extern int dt_close_drbd_device(int drbd_fd);
 extern unsigned long m_strtol(const char* s,int def_mult);
-const char* make_optstring(struct option *options);
+const char* make_optstring(struct option *options, char startc);
 char* ppsize(char* buf, size_t size);
 
 #endif



More information about the drbd-cvs mailing list