[DRBD-cvs] svn commit by phil - r3073 - branches/drbd-8.2/user - Implemented the handling of options for the proxy.

drbd-cvs at lists.linbit.com drbd-cvs at lists.linbit.com
Fri Sep 28 10:42:10 CEST 2007


Author: phil
Date: 2007-09-28 10:42:08 +0200 (Fri, 28 Sep 2007)
New Revision: 3073

Modified:
   branches/drbd-8.2/user/drbdadm.h
   branches/drbd-8.2/user/drbdadm_main.c
   branches/drbd-8.2/user/drbdadm_parser.c
   branches/drbd-8.2/user/drbdadm_parser.h
   branches/drbd-8.2/user/drbdadm_scanner.fl
Log:
Implemented the handling of options for the proxy.


Modified: branches/drbd-8.2/user/drbdadm.h
===================================================================
--- branches/drbd-8.2/user/drbdadm.h	2007-09-26 11:48:13 UTC (rev 3072)
+++ branches/drbd-8.2/user/drbdadm.h	2007-09-28 08:42:08 UTC (rev 3073)
@@ -106,6 +106,7 @@
   struct d_option* sync_options;
   struct d_option* startup_options;
   struct d_option* handlers;
+  struct d_option* proxy_options;
   struct d_resource* next;
 };
 

Modified: branches/drbd-8.2/user/drbdadm_main.c
===================================================================
--- branches/drbd-8.2/user/drbdadm_main.c	2007-09-26 11:48:13 UTC (rev 3072)
+++ branches/drbd-8.2/user/drbdadm_main.c	2007-09-28 08:42:08 UTC (rev 3073)
@@ -358,6 +358,7 @@
   dump_options("disk",common->disk_options);
   dump_options("syncer",common->sync_options);
   dump_options("startup",common->startup_options);
+  dump_options("proxy",common->proxy_options);
   dump_options("handlers",common->handlers);
   --indent; printf("}\n\n");
 }
@@ -430,10 +431,19 @@
   dump_options_xml("disk",common->disk_options);
   dump_options_xml("syncer",common->sync_options);
   dump_options_xml("startup",common->startup_options);
+  dump_options_xml("proxy",common->proxy_options);
   dump_options_xml("handlers",common->handlers);
   --indent; printI("</common>\n");
 }
 
+static void dump_proxy_info_xml(struct d_proxy_info* pi)
+{
+  printI("<proxy hostname=\"%s\">\n",esc_xml(pi->name)); ++indent;
+  printI("<inside port=\"%s\">%s</inside>\n", pi->inside_port, pi->inside_addr);
+  printI("<outside port=\"%s\">%s</outside>\n", pi->outside_port, pi->outside_addr);
+  --indent; printI("</proxy>\n");
+}
+
 static void dump_host_info_xml(struct d_host_info* hi)
 {
   if(!hi) {
@@ -452,6 +462,7 @@
   else {
     printI("<meta-disk index=\"%s\">%s</meta-disk>\n", hi->meta_index, esc_xml(hi->meta_disk));
   }
+  if(hi->proxy) dump_proxy_info_xml(hi->proxy);
   --indent; printI("</host>\n");
 }
 
@@ -466,6 +477,7 @@
   dump_options("disk",res->disk_options);
   dump_options("syncer",res->sync_options);
   dump_options("startup",res->startup_options);
+  dump_options("proxy",res->proxy_options);
   dump_options("handlers",res->handlers);
   --indent; printf("}\n\n");
 
@@ -484,6 +496,7 @@
   dump_options_xml("disk",res->disk_options);
   dump_options_xml("syncer",res->sync_options);
   dump_options_xml("startup",res->startup_options);
+  dump_options_xml("proxy",res->proxy_options);
   dump_options_xml("handlers",res->handlers);
   --indent; printI("</resource>\n");
 
@@ -598,6 +611,7 @@
     free_options(f->disk_options);
     free_options(f->sync_options);
     free_options(f->startup_options);
+    free_options(f->proxy_options);
     free_options(f->handlers);
     free(f);
   }
@@ -606,6 +620,7 @@
     free_options(common->disk_options);
     free_options(common->sync_options);
     free_options(common->startup_options);
+    free_options(common->proxy_options);
     free_options(common->handlers);
     free(common);
   }
@@ -640,6 +655,7 @@
     expand_opts(common->disk_options,    &res->disk_options);
     expand_opts(common->sync_options,    &res->sync_options);
     expand_opts(common->startup_options, &res->startup_options);
+    expand_opts(common->proxy_options,   &res->proxy_options);
     expand_opts(common->handlers,        &res->handlers);
     if(common->protocol && ! res->protocol) {
       res->protocol = strdup(common->protocol);
@@ -994,7 +1010,8 @@
 static int adm_proxy_up(struct d_resource* res, const char* unused __attribute((unused)))
 {
   char* argv[MAX_ARGS];
-  int argc=0;
+  int argc=0, rv;
+  struct d_option* opt;
 
   argv[NA(argc)]=drbd_proxy_ctl;
   argv[NA(argc)]="-c";
@@ -1007,6 +1024,20 @@
 	   res->me->address, res->me->port);
   argv[NA(argc)]=0;
 
+  rv = m_system(argv,SLEEPS_SHORT);
+  if(rv != 0) return rv;
+
+  argc=0;
+  argv[NA(argc)]=drbd_proxy_ctl;
+  opt = res->proxy_options;
+  while(opt) {
+    argv[NA(argc)]="-c";
+    ssprintf(argv[NA(argc)], "set %s %s-%s-%s %s",
+	     opt->name, res->me->name, res->name, res->peer->name, opt->value);
+    opt=opt->next; 
+  }
+  argv[NA(argc)]=0;
+
   return m_system(argv,SLEEPS_SHORT);  
 }
 
@@ -1644,6 +1675,13 @@
   if ( (opt = find_opt(res->handlers, "outdate-peer")) ) {
     if(strstr(opt->value,"drbd-peer-outdater")) sanity_check_perm();
   }
+
+  if (( res->me->proxy == NULL ) != (res->peer->proxy == NULL)) {
+	fprintf(stderr,
+		"Incomplete proxy configuration. in resource %s.\n",
+		res->name);
+	config_valid = 0;
+  }
 }
 
 static void global_validate(void)

Modified: branches/drbd-8.2/user/drbdadm_parser.c
===================================================================
--- branches/drbd-8.2/user/drbdadm_parser.c	2007-09-26 11:48:13 UTC (rev 3072)
+++ branches/drbd-8.2/user/drbdadm_parser.c	2007-09-28 08:42:08 UTC (rev 3073)
@@ -611,6 +611,11 @@
 			check_uniq("handlers section", "%s:handlers", res->name);
 			res->handlers =  parse_options(0, TK_HANDLER_OPTION);
 			break;
+		case TK_PROXY:
+			check_uniq("proxy section", "%s:proxy", res->name);
+			res->proxy_options =  parse_options(TK_PROXY_SWITCH,
+							    TK_PROXY_OPTION);
+			break;
 		case '}':
 		case 0:
 			goto exit_loop;

Modified: branches/drbd-8.2/user/drbdadm_parser.h
===================================================================
--- branches/drbd-8.2/user/drbdadm_parser.h	2007-09-26 11:48:13 UTC (rev 3072)
+++ branches/drbd-8.2/user/drbdadm_parser.h	2007-09-28 08:42:08 UTC (rev 3073)
@@ -92,6 +92,9 @@
 	TK_PROXY,
 	TK_INSIDE,
 	TK_OUTSIDE,
+	TK_MEMLIMIT,
+	TK_PROXY_OPTION,
+	TK_PROXY_SWITCH,
 };
 
 typedef struct YYSTYPE {

Modified: branches/drbd-8.2/user/drbdadm_scanner.fl
===================================================================
--- branches/drbd-8.2/user/drbdadm_scanner.fl	2007-09-26 11:48:13 UTC (rev 3072)
+++ branches/drbd-8.2/user/drbdadm_scanner.fl	2007-09-28 08:42:08 UTC (rev 3073)
@@ -98,6 +98,7 @@
 pri-lost	        { DP; CP; return TK_HANDLER_OPTION;     }
 outdate-peer		{ DP; CP; return TK_HANDLER_OPTION;	}
 local-io-error		{ DP; CP; return TK_HANDLER_OPTION;     }
+memlimit		{ DP; CP; return TK_PROXY_OPTION;       }
 {IPV4ADDR}		{ DP; CP; return TK_IPADDR;		}
 {NUM}			{ DP; CP; return TK_INTEGER;		}
 {DQSTRING}		{ unescape(); DP; CP; return TK_STRING;	}



More information about the drbd-cvs mailing list