File update-agent-latest.diff of Package yast2-drbd

Index: yast2-drbd-2.13.1/agents/drbd.rb.yy
===================================================================
--- yast2-drbd-2.13.1.orig/agents/drbd.rb.yy	2008-12-19 17:28:40.000000000 +0800
+++ yast2-drbd-2.13.1/agents/drbd.rb.yy	2008-12-19 17:49:25.000000000 +0800
@@ -1,20 +1,31 @@
 
 class DrbdParser
 
-token TK_GLOBAL TK_RESOURCE TK_ON TK_NET TK_DISK_S TK_SYNCER TK_STARTUP TK_DISABLE_IO_HINTS TK_DISABLE_IP_VERIFICATION TK_PROTOCOL TK_INCON_DEGR_CMD TK_ADDRESS TK_DISK TK_DEVICE TK_META_DISK TK_MINOR_COUNT TK_INTEGER TK_STRING TK_ON_IO_ERROR TK_SIZE TK_TIMEOUT TK_CONNECT_INT TK_PING_INT TK_MAX_BUFFERS TK_IPADDR TK_UNPLUG_WATERMARK TK_MAX_EPOCH_SIZE TK_SNDBUF_SIZE TK_SKIP_SYNC TK_USE_CSUMS TK_RATE TK_SYNC_GROUP TK_AL_EXTENTS TK_WFC_TIMEOUT TK_DEGR_WFC_TIMEOUT TK_KO_COUNT TK_ON_DISCONNECT TK_DIALOG_REFRESH
+token TK_GLOBAL TK_RESOURCE TK_ON TK_NET TK_DISK_S TK_SYNCER TK_STARTUP TK_DISABLE_IP_VERIFICATION TK_PROTOCOL TK_ADDRESS TK_DISK TK_DEVICE TK_META_DISK TK_MINOR_COUNT TK_INTEGER TK_STRING TK_ON_IO_ERROR TK_SIZE TK_TIMEOUT TK_CONNECT_INT TK_PING_INT TK_MAX_BUFFERS TK_IPADDR TK_UNPLUG_WATERMARK TK_MAX_EPOCH_SIZE TK_SNDBUF_SIZE TK_RATE TK_AL_EXTENTS TK_WFC_TIMEOUT TK_DEGR_WFC_TIMEOUT TK_KO_COUNT TK_ON_DISCONNECT TK_DIALOG_REFRESH TK_USAGE_COUNT TK_COMMON TK_HANDLERS TK_FENCING TK_USE_BMBV TK_NO_DISK_BARRIER TK_NO_DISK_FLUSHES TK_NO_DISK_DRAIN TK_NO_MD_FLUSHES TK_MAX_BIO_BVECS TK_PINT_TIMEOUT TK_ALLOW_TWO_PRIMARIES TK_CRAM_HMAC_ALG TK_SHARED_SECRET TK_AFTER_SB_0PRI TK_AFTER_SB_1PRI TK_AFTER_SB_2PRI TK_DATA_INTEGRITY_ALG TK_RR_CONFLICT TK_NO_TCP_CORK TK_CPU_MASK TK_VERIFY_ALG TK_AFTER TK_FLEXIBLE_META_DISK TK_PRI_ON_INCON_DEGR TK_PRI_LOST_AFTER_SB TK_PRI_LOST TK_OUTDATE_PEER TK_LOCAL_IO_ERROR TK_SPLIT_BRAIN TK_BEFORE_RESYNC_TARGET TK_AFTER_RESYNC_TARGET TK_WAIT_AFTER_SB TK_BECOME_PRIMARY_ON TK_IPV6ADDR TK_IPV6
 
 rule
-	config: global_sec resources { $drbd['global'] = val[0]; $drbd['resources'] = val[1]; return $drbd; }
+	config: global_sec common_sec resources { $drbd['global'] = val[0]; $drbd['common'] = val[1]; $drbd['resources'] = val[2]; return $drbd; }
 
 	global_sec: /* none */ { return {}; }
     	      | TK_GLOBAL '{' glob_stmts '}' { return val[2]; }
 	glob_stmts: /* none */ { return {}; } 
         	  | glob_stmts glob_stmt ';' { nk = val[1][0]; val[0][nk] = val[1][1]; return val[0]; }
-	glob_stmt: TK_DISABLE_IO_HINTS { return ["#{val[0]}", true]; }
-	             | TK_DISABLE_IP_VERIFICATION { return ["#{val[0]}", true]; }
+	glob_stmt: TK_USAGE_COUNT TK_STRING { return ["#{val[0]}", val[1]]; }
+             | TK_DISABLE_IP_VERIFICATION { return ["#{val[0]}", true]; }
 		     | TK_MINOR_COUNT TK_STRING { return ["#{val[0]}", val[1]]; }
 		     | TK_DIALOG_REFRESH TK_STRING { return ["#{val[0]}", val[1]];}
 
+	common_sec: /* none */ { return {}; }		 
+			 | TK_COMMON '{' common_stmts '}' { return val[2]; }
+	common_stmts: /* none */ { return {}; }		 
+			 | common_stmts common_stmt { nk = val[1][0]; val[0][nk] = val[1][1]; return val[0]; }
+
+	common_stmt: TK_DISK_S disk_stmts '}' { return ["#{val[0]}", val[1]]; }
+			| TK_NET '{' net_stmts '}' { return ["#{val[0]}", val[2]]; }
+			| TK_SYNCER '{' sync_stmts '}' { return ["#{val[0]}", val[2]]; }
+			| TK_STARTUP '{' startup_stmts '}' { return ["#{val[0]}", val[2]]; }
+			| TK_HANDLERS '{' handlers_stmts '}' { return ["#{val[0]}", val[2]]; }
+
 	resources: /* none */ { return {}; }
 	         | resources resource { nk = val[1][0]; val[0][nk] = val[1][1]; return val[0]; }
 
@@ -23,8 +34,8 @@
 	resource_name: TK_STRING { return val[0]; }
 
 	res_stmts: /* none */ { return {}; }
-             | res_stmts res_stmt ';' { nk = val[1][0]; val[0][nk] = val[1][1]; return val[0]; }
-	     | res_stmts section {nk = val[1][0]; 
+		| res_stmts res_stmt ';' { nk = val[1][0]; val[0][nk] = val[1][1]; return val[0]; }
+		| res_stmts section {nk = val[1][0]; 
                                   if nk == "on" then 
 				      if (!val[0]["on"]) then val[0]["on"] = {}; end
                                       val[0]["on"][val[1][1]] = val[1][2];  
@@ -34,12 +45,15 @@
                                   return val[0]; }
 
 	res_stmt: TK_PROTOCOL TK_STRING { return ["#{val[0]}", val[1]]; } 
-            | TK_INCON_DEGR_CMD TK_STRING { return ["#{val[0]}", val[1]]; }
+         | TK_DEVICE TK_STRING { return ["#{val[0]}", val[1]]; }
+		 | TK_META_DISK meta_disk_and_index { return ["#{val[0]}", val[1]]; }
+		 | TK_DISK TK_STRING { return ["#{val[0]}", val[1]]; }
 
 	section: TK_DISK_S disk_stmts '}' { return ["#{val[0]}", val[1]]; }
 		   | TK_NET '{' net_stmts '}' { return ["#{val[0]}", val[2]]; }
 		   | TK_SYNCER '{' sync_stmts '}' { return ["#{val[0]}", val[2]]; }
 		   | TK_STARTUP '{' startup_stmts '}' { return ["#{val[0]}", val[2]]; }
+		   | TK_HANDLERS '{' handlers_stmts '}' { return ["#{val[0]}", val[2]]; }
 		   | TK_ON hostname '{' host_stmts '}' { return ["#{val[0]}", "#{val[1]}", val[3]]; }
 
 	hostname: TK_STRING { return val[0]; }
@@ -49,6 +63,13 @@
 	
 	disk_stmt: TK_ON_IO_ERROR TK_STRING { return ["#{val[0]}", val[1]]; }
 		     | TK_SIZE TK_STRING { return ["#{val[0]}", val[1]]; }
+		     | TK_FENCING TK_STRING { return ["#{val[0]}", val[1]]; }
+		     | TK_USE_BMBV TK_STRING { return ["#{val[0]}", val[1]]; }
+		     | TK_NO_DISK_BARRIER TK_STRING { return ["#{val[0]}", val[1]]; }
+		     | TK_NO_DISK_FLUSHES TK_STRING { return ["#{val[0]}", val[1]]; }
+			 | TK_NO_DISK_DRAIN  TK_STRING { return ["#{val[0]}", val[1]]; }
+			 | TK_NO_MD_FLUSHES  TK_STRING { return ["#{val[0]}", val[1]]; }
+			 | TK_MAX_BIO_BVECS TK_STRING { return ["#{val[0]}", val[1]]; }
 
 	net_stmts: /* none */ { return {}; }
              | net_stmts net_stmt ';' { nk = val[1][0]; val[0][nk] = val[1][1]; return val[0]; } 
@@ -56,20 +77,29 @@
 	net_stmt: TK_TIMEOUT TK_STRING { return ["#{val[0]}", val[1]]; }
 		    | TK_CONNECT_INT TK_STRING { return ["#{val[0]}", val[1]]; }
 			| TK_PING_INT TK_STRING { return ["#{val[0]}", val[1]]; }
+			| TK_PINT_TIMEOUT TK_STRING { return ["#{val[0]}", val[1]]; }
 			| TK_MAX_BUFFERS TK_STRING { return ["#{val[0]}", val[1]]; }
 			| TK_UNPLUG_WATERMARK TK_STRING { return ["#{val[0]}", val[1]]; }
 			| TK_MAX_EPOCH_SIZE TK_STRING { return ["#{val[0]}", val[1]]; }
 			| TK_SNDBUF_SIZE TK_STRING { return ["#{val[0]}", val[1]]; }
 			| TK_KO_COUNT TK_STRING { return ["#{val[0]}", val[1]]; }
-			| TK_ON_DISCONNECT TK_STRING { return ["#{val[0]}", val[1]]; }
+			| TK_ALLOW_TWO_PRIMARIES { return ["#{val[0]}", true]; }
+			| TK_CRAM_HMAC_ALG TK_STRING { return ["#{val[0]}", val[1]]; }
+			| TK_SHARED_SECRET TK_STRING { return ["#{val[0]}", val[1]]; }
+			| TK_AFTER_SB_0PRI TK_STRING { return ["#{val[0]}", val[1]]; }
+			| TK_AFTER_SB_1PRI TK_STRING { return ["#{val[0]}", val[1]]; }
+			| TK_AFTER_SB_2PRI TK_STRING { return ["#{val[0]}", val[1]]; }
+			| TK_DATA_INTEGRITY_ALG TK_STRING { return ["#{val[0]}", val[1]]; }
+			| TK_RR_CONFLICT TK_STRING { return ["#{val[0]}", val[1]]; }
+			| TK_NO_TCP_CORK { return ["#{val[0]}", true]; }
 
 	sync_stmts: /* none */  { return {}; }
 	          | sync_stmts sync_stmt ';' { nk = val[1][0]; val[0][nk] = val[1][1]; return val[0]; }
 
-	sync_stmt: TK_SKIP_SYNC { return ["#{val[0]}", true];}
-             | TK_USE_CSUMS { return ["#{val[0]}", true];}
-			 | TK_RATE TK_STRING { return ["#{val[0]}", val[1]]; }
-			 | TK_SYNC_GROUP TK_STRING { return ["#{val[0]}", val[1]]; }
+	sync_stmt: TK_RATE TK_STRING { return ["#{val[0]}", val[1]]; }
+			 | TK_CPU_MASK TK_STRING { return ["#{val[0]}", vavl[1]]; }
+			 | TK_VERIFY_ALG TK_STRING { return ["#{val[0]}", val[1]]; }
+			 | TK_AFTER TK_STRING { return ["#{val[0]}", val[1]]; }
 			 | TK_AL_EXTENTS TK_STRING { return ["#{val[0]}", val[1]]; }
 
 	host_stmts: /* none */ { return {}; }
@@ -79,16 +109,35 @@
              | TK_DEVICE TK_STRING { return ["#{val[0]}", val[1]]; }
 			 | TK_ADDRESS ip_and_port { return ["#{val[0]}", val[1]]; }
 			 | TK_META_DISK meta_disk_and_index { return ["#{val[0]}", val[1]]; }
+			 | TK_FLEXIBLE_META_DISK flexible_meta_disk { return ["#{val[0]}", val[1]]; }
+
+	handlers_stmts: /* none */ { return {}; }
+			 | handlers_stmts handlers_stmt ';' { nk = val[1][0]; val[0][nk] = val[1][1]; return val[0]; }
+
+	handlers_stmt: TK_PRI_ON_INCON_DEGR TK_STRING { return ["#{val[0]}", val[1]]; }
+			 | TK_PRI_LOST_AFTER_SB TK_STRING { return ["#{val[0]}", val[1]]; }
+			 | TK_PRI_LOST TK_STRING { return ["#{val[0]}", val[1]]; }
+			 | TK_OUTDATE_PEER TK_STRING { return ["#{val[0]}", val[1]]; }
+			 | TK_LOCAL_IO_ERROR TK_STRING { return ["#{val[0]}", val[1]]; }
+			 | TK_SPLIT_BRAIN TK_STRING { return ["#{val[0]}", val[1]]; }
+			 | TK_BEFORE_RESYNC_TARGET TK_STRING { return ["#{val[0]}", val[1]]; }
+			 | TK_AFTER_RESYNC_TARGET TK_STRING { return ["#{val[0]}", val[1]]; }
 
 	ip_and_port: TK_STRING ':' TK_STRING { return "#{val[0]}:#{val[2]}"; }
+			 | TK_IPV6 TK_IPV6ADDR ":" TK_STRING { return "#{val[0]} #{val[1]}:#{val[3]}"; }
+			 | TK_STRING TK_STRING ':' TK_STRING { return "#{val[0]} #{val[1]}:#{val[3]}"; }
 
 	meta_disk_and_index: TK_STRING TK_STRING { return "#{val[0]} #{val[1]}"; }
  		       | TK_STRING { return val[0]; }
 			 
+	flexible_meta_disk: TK_STRING { return val[0]; }
+
 	startup_stmts: /* */ { return {}; }
 	             | startup_stmts startup_stmt ';' { nk = val[1][0]; val[0][nk] = val[1][1]; return val[0]; }
 
 	startup_stmt: TK_WFC_TIMEOUT TK_STRING { return ["#{val[0]}", val[1]]; }
+				| TK_WAIT_AFTER_SB { return ["#{val[0]}", true]; }
+				| TK_BECOME_PRIMARY_ON TK_STRING { return ["#{val[0]}", val[1]]; }
 		        | TK_DEGR_WFC_TIMEOUT TK_STRING { return ["#{val[0]}", val[1]]; }
 
 end			 
@@ -98,21 +147,17 @@
 
 ---- inner	
 	def parse(str)
-#		@yydebug = true
+		@yydebug = false
 		@q = []
 		until str.empty? || !str
 			case str
 			when /\A\s+/
 			when /\Adisable-ip-verification/
 				@q.push [:TK_DISABLE_IP_VERIFICATION, 'disable-ip-verification']
-			when /\Adisable-io-hints/
-				@q.push [:TK_DISABLE_IO_HINTS, 'disable-io-hints']
-			when /\Aincon-degr-cmd/
-				@q.push [:TK_INCON_DEGR_CMD, 'incon-degr-cmd']
+			when /\Ausage-count/
+				@q.push [:TK_USAGE_COUNT, 'usage-count']
 			when /\Adialog-refresh/
 				@q.push [:TK_DIALOG_REFRESH, 'dialog-refresh']	
-			when /\Aon-disconnect/
-				@q.push [:TK_ON_DISCONNECT, 'on-disconnect']
 			when /\Aon-io-error/
 				@q.push [:TK_ON_IO_ERROR, 'on-io-error']
 			when /\Aglobal/
@@ -121,10 +166,12 @@
 				@q.push [:TK_MINOR_COUNT, 'minor-count']
 			when /\Aresource/
 				@q.push [:TK_RESOURCE, 'resource']
+			when /\Acommon/
+				@q.push [:TK_COMMON, 'common']	
 			when /\Aprotocol/
 				@q.push [:TK_PROTOCOL, 'protocol']
 			when /\Adisk\s*\{/
-				@q.push [:TK_DISK_S, 'disk']
+				@q.push [:TK_DISK_S, 'disk_s']
 			when /\Adisk/
 				@q.push [:TK_DISK, 'disk']
 			when /\Anet/
@@ -133,12 +180,80 @@
 				@q.push [:TK_SYNCER, 'syncer']
 			when /\Astartup/
 				@q.push [:TK_STARTUP, 'startup']
+			when /\Ahandlers/
+				@q.push [:TK_HANDLERS, 'handlers']	
+			when /\Afencing/
+				@q.push [:TK_FENCING, 'fencing']	
+			when /\Ause-bmbv/
+				@q.push [:TK_USE_BMBV, 'use-bmbv']
+			when /\Ano-disk-barrier/
+				@q.push [:TK_NO_DISK_BARRIER, 'no-disk-barrier']
+			when /\Ano-disk-flushes/
+				@q.push [:TK_NO_DISK_FLUSHES, 'no-disk-flushes']
+			when /\Ano-disk-drain/
+				@q.push [:TK_NO_DISK_DRAIN, 'no-disk-drain']
+			when /\Ano-md-flushes/
+				@q.push [:TK_NO_MD_FLUSHES, 'no-md-flushes']
+			when /\Amax-bio-bvecs/
+				@q.push [:TK_MAX_BIO_BVECS, 'max-bio-bvecs']
+			when /\Aping-timeout/
+				@q.push [:TK_PING_TIMEOUT, 'ping-timeout']
+			when /\Aallow-two-primaries/
+				@q.push [:TK_ALLOW_TWO_PRIMARIES, 'allow-two-primaries']
+			when /\Acram-hmac-alg/
+				@q.push [:TK_CRAM_HMAC_ALG, 'cram-hmac-alg']
+			when /\Ashared-secret/
+				@q.push [:TK_SHARED_SECRET, 'shared-secret']
+			when /\Aafter-sb-0pri/
+				@q.push [:TK_AFTER_SB_0PRI, 'after-sb-0pri']
+			when /\Aafter-sb-1pri/
+				@q.push [:TK_AFTER_SB_0PRI, 'after-sb-1pri']
+			when /\Aafter-sb-2pri/
+				@q.push [:TK_AFTER_SB_0PRI, 'after-sb-2pri']
+			when /\Adata-integrity-alg/
+				@q.push [:TK_DATA_INTEGRITY_ALG, 'data-integrity-alg']	
+			when /\Arr-conflict/
+				@q.push [:TK_RR_CONFLICT, 'rr-conflict']
+			when /\Apri-on-incon-degr/
+				@q.push [:TK_PRI_ON_INCON_DEGR, 'pri-on-incon-degr']
+			when /\Apri-lost-after-sb/
+				@q.push [:TK_PRI_LOST_AFTER_SB, 'pri-lost-after-sb']
+			when /\Apri-lost/
+				@q.push [:TK_PRI_LOST, 'pri-lost']	
+			when /\Aoutdate-peer/
+				@q.push [:TK_OUTDATE_PEER, 'outdate-peer']
+			when /\Alocal-io-error/
+				@q.push [:TK_LOCAL_IO_ERROR, 'local-io-error']
+			when /\Asplit-brain/
+				@q.push [:TK_SPLIT_BRAIN, 'split-brain']
+			when /\Abefore-resync-target/
+				@q.push [:TK_BEFORE_RESYNC_TARGET, 'before-rsync-target']
+			when /\Aafter-resync-target/
+				@q.push [:TK_AFTER_RESYNC_TARGET, 'after-resync-target']
+			when /\Await-after-sb/
+				@q.push [:TK_WAIT_AFTER_SB, 'wait-after-sb']
+			when /\Abecome-primary-on/
+				@q.push [:TK_BECOME_PRIMARY_ON, 'become-primary-on']	
+			when /\Ano-tcp-cork/
+				@q.push [:TK_NO_TCP_CORK, 'no-tcp-cork']
+			when /\Acpu-mask/
+				@q.push [:TK_CPU_MASK, 'cpu-mask']
+			when /\Averify-alg/
+				@q.push [:TK_VERIFY_ALG, 'verify-alg']	
 			when /\Asize/
 				@q.push [:TK_SIZE, 'size']
 			when /\Atimeout/
 				@q.push [:TK_TIMEOUT, 'timeout']
 			when /\Aconnect-int/
 				@q.push [:TK_CONNECT_INT, 'connect-int']
+			when /\Aafter-sb-0pri/
+				@q.push [:TK_AFTER_SB_0PRI, 'after-sb-0pri']
+			when /\Aafter-sb-1pri/
+				@q.push [:TK_AFTER_SB_0PRI, 'after-sb-1pri']
+			when /\Aafter-sb-2pri/
+				@q.push [:TK_AFTER_SB_0PRI, 'after-sb-2pri']
+			when /\Arr-conflict/
+				@q.push [:TK_RR_CONFLICT, 'rr-conflict']	
 			when /\Aping-int/
 				@q.push [:TK_PING_INT, 'ping-int']
 			when /\Amax-buffers/
@@ -151,32 +266,34 @@
 				@q.push [:TK_SNDBUF_SIZE, 'sndbuf-size']
 			when /\Ako-count/
 				@q.push [:TK_KO_COUNT, 'ko-count']
-			when /\Askip-sync/
-				@q.push [:TK_SKIP_SYNC, 'skip-sync']
-			when /\Ause-csums/
-				@q.push [:TK_USE_CSUMS, 'use-csums']
 			when /\Arate/
 				@q.push [:TK_RATE, 'rate']
-			when /\Agroup/
-				@q.push [:TK_SYNC_GROUP, 'group']
 			when /\Aal-extents/
 				@q.push [:TK_AL_EXTENTS, 'al-extents']
+			when /\Aafter/
+				@q.push [:TK_AFTER, 'after']	
 			when /\Adevice/
 				@q.push [:TK_DEVICE, 'device']
 			when /\Aaddress/
 				@q.push [:TK_ADDRESS, 'address']
 			when /\Ameta-disk/
 				@q.push [:TK_META_DISK, 'meta-disk']
-			when /\Awfc-timeout/
-				@q.push [:TK_WFC_TIMEOUT, 'wfc-timeout']
+			when /\Aflexible-meta-disk/
+				@q.push [:TK_FLEXIBLE_META_DISK, 'flexible-meta-disk']	
 			when /\Adegr-wfc-timeout/
 				@q.push [:TK_DEGR_WFC_TIMEOUT, 'degr-wfc-timeout']
+			when /\Awfc-timeout/
+				@q.push [:TK_WFC_TIMEOUT, 'wfc-timeout']
+			when /\Aipv6/
+				@q.push [:TK_IPV6, 'ipv6']	
 			when /\Aon\s*/
 				@q.push [:TK_ON, 'on']
 			when /\A"[^"]*"/
 				@q.push [:TK_STRING, $&]
+			when /\A\[[\w\.\/:]+:[\w\.\/:]+\]/
+				@q.push [:TK_IPV6ADDR, $&]	
 			when /\A[\w\.\/\[\]-]+/
-				@q.push [:TK_STRING, $&]	
+				@q.push [:TK_STRING, $&]
 			when /\A.|\n/o
 				s = $&
 				@q.push [s, s]
@@ -235,7 +352,7 @@
 
 def doList (path)
   if path.length == 0 then
-    puts "[ \"global\", \"resources\" ]"
+    puts "[ \"global\", \"resources\", \"common\" ]"
     return
   end
 
@@ -331,6 +448,10 @@
 	  errlog path[it]+" is changed to "+path[it].chomp()[1..-2]
       path[it]=path[it].chomp()[1..-2]
     end
+	if path[it] != "" and path[it][0..1] == "\\\"" then
+		errlog path[it]+" is changed to "+path[it].chomp()[1..-3]+"\""
+		path[it]=path[it].chomp()[1..-3]+"\""
+	end
   end
 
   if args[0..1] == "\\\"" then
@@ -431,7 +552,7 @@
     if $drbd.has_key?("global") then
       file.puts "global {"
       $drbd["global"].each_key do |key|
-	    if key == "disable-ip-verification" or key == "disable-io-hints" then
+	    if key == "disable-ip-verification" then
 		  if $drbd["global"][key] == "" or $drbd["global"][key] == "true" then
 		    file.puts "   "+key+";"
 		  end
@@ -441,6 +562,53 @@
       end
       file.puts "}"
     end
+
+	if $drbd.has_key?("common") then
+		file.puts "common {"
+
+        if $drbd["common"].has_key?("disk_s") then
+          file.puts "   disk {"
+          $drbd["common"]["disk_s"].each_key do |key|
+            file.puts "      "+key+"\t"+$drbd["common"]["disk_s"][key]+";"
+          end
+          file.puts "   }"
+        end
+
+        if $drbd["common"].has_key?("syncer") then
+          file.puts "   syncer {"
+          $drbd["common"]["syncer"].each_key do |key|
+            file.puts "      "+key+"\t"+$drbd["common"]["syncer"][key]+";"
+          end
+          file.puts "   }"
+        end
+
+        if $drbd["common"].has_key?("net") then
+          file.puts "   net {"
+          $drbd["common"]["net"].each_key do |key|
+            file.puts "      "+key+"\t"+$drbd["common"]["net"][key]+";"
+          end
+          file.puts "   }"
+        end
+
+        if $drbd["common"].has_key?("startup") then
+          file.puts "   startup {"
+          $drbd["common"]["startup"].each_key do |key|
+            file.puts "      "+key+"\t"+$drbd["common"]["startup"][key]+";"
+          end
+          file.puts "   }"
+        end
+
+        if $drbd["common"].has_key?("handlers") then
+          file.puts "   handlers {"
+          $drbd["common"]["handlers"].each_key do |key|
+            file.puts "      "+key+"\t"+$drbd["common"]["handlers"][key]+";"
+          end
+          file.puts "   }"
+        end
+
+		file.puts "}"
+	end
+
     if $drbd.has_key?("resources") then
       $drbd["resources"].each_key do |res_name|
         file.puts "resource "+res_name+" {"
@@ -448,15 +616,20 @@
         if $drbd["resources"][res_name].has_key?("protocol") then
           file.puts "   protocol\t"+$drbd["resources"][res_name]["protocol"]+";"
         end
-
-        if $drbd["resources"][res_name].has_key?("incon-degr-cmd") then
-          file.puts "   incon-degr-cmd\t"+$drbd["resources"][res_name]["incon-degr-cmd"]+";"
+		if $drbd["resources"][res_name].has_key?("device") then
+          file.puts "   device\t"+$drbd["resources"][res_name]["device"]+";"
+        end
+		if $drbd["resources"][res_name].has_key?("disk") then
+          file.puts "   disk\t"+$drbd["resources"][res_name]["disk"]+";"
+        end
+		if $drbd["resources"][res_name].has_key?("meta-disk") then
+          file.puts "   meta-disk\t"+$drbd["resources"][res_name]["meta-disk"]+";"
         end
 
-        if $drbd["resources"][res_name].has_key?("disk") then
+        if $drbd["resources"][res_name].has_key?("disk_s") then
           file.puts "   disk {"
-          $drbd["resources"][res_name]["disk"].each_key do |key|
-            file.puts "      "+key+"\t"+$drbd["resources"][res_name]["disk"][key]+";"
+          $drbd["resources"][res_name]["disk_s"].each_key do |key|
+            file.puts "      "+key+"\t"+$drbd["resources"][res_name]["disk_s"][key]+";"
           end
           file.puts "   }"
         end
@@ -485,6 +658,14 @@
           file.puts "   }"
         end
 
+        if $drbd["resources"][res_name].has_key?("handlers") then
+          file.puts "   handlers {"
+          $drbd["resources"][res_name]["handlers"].each_key do |key|
+            file.puts "      "+key+"\t"+$drbd["resources"][res_name]["handlers"][key]+";"
+          end
+          file.puts "   }"
+        end
+
         if $drbd["resources"][res_name].has_key?("on") then
           $drbd["resources"][res_name]["on"].each_key do |node_name|
             file.puts "   on "+node_name+" {"
@@ -512,10 +693,12 @@
 
 # `Write (.drbd) means to write the file, other wise, the file is not written anyway
 
+errlog($drbd.to_s)
+
 $stdin.each do |line|
   errlog(line)
   line.chomp
-  cmd = line.gsub(/^`?([a-zA-Z]+)\s.*$/, '\1')
+  cmd = line.gsub(/^`?([a-zA-Z]+)\s+$/, '\1')
   path = line.gsub(/^`?([a-zA-Z]+)\s+\(([^,]*)(,.*)?\)$/, '\2').split('.')-[""]-["\n"]
   args = line.gsub(/^`?([a-zA-Z]+)\s+\(([^,]*)(,.*)?\)$/, '\3')
   if args.length != 0 then
Index: yast2-drbd-2.13.1/src/Drbd.ycp
===================================================================
--- yast2-drbd-2.13.1.orig/src/Drbd.ycp	2008-12-19 17:28:40.000000000 +0800
+++ yast2-drbd-2.13.1/src/Drbd.ycp	2008-12-19 17:28:40.000000000 +0800
@@ -49,9 +49,9 @@
 global map resource_config = $[];
 global string drbd_dir = "/etc";
 global boolean start_daemon = false;
-global map<string, list<string> > config_name = $["disk":["on-io-error", "size"],
-	   "syncer":["skip-sync", "use-csums", "rate", "group", "al-extents"],
-	   "net":["timeout", "connect-int", "ping-int", "max-buffers", "unplug-watermark", "max-epoch-size", "sndbuf-size", "ko-count", "on-disconnect"],
+global map<string, list<string> > config_name = $["disk_s":["on-io-error", "size"],
+	   "syncer":["rate", "al-extents"],
+	   "net":["timeout", "connect-int", "ping-int", "max-buffers", "unplug-watermark", "max-epoch-size", "sndbuf-size", "ko-count"],
 	   "startup":["wfc-timeout", "degr-wfc-timeout"]];
 
 
@@ -90,7 +90,7 @@
         y2milestone("read drbd conf file: %1", drbd_dir);
 
 		//read global configs
-        foreach (string key, [ "disable-ip-verification", "minor-count", "dialog-refresh", "disable-io-hints" ],
+        foreach (string key, [ "disable-ip-verification", "minor-count", "dialog-refresh"],
         {
             string val = (string)SCR::Read(topath(sformat(".drbd.global.%1", key)));
             global_config[key] = val;
@@ -109,7 +109,7 @@
 			map config = $[];
 			list<string> res_configs = (list<string>)SCR::Dir(topath(sformat(".drbd.resources.%1", resname)));
 
-			foreach (string resconf, ["protocol", "incon-degr-cmd"],
+			foreach (string resconf, ["protocol"],
 			{
 				if (contains(res_configs, resconf)) {
 					string val = (string)SCR::Read(topath(sformat(".drbd.resources.%1.%2",resname,resconf)));
@@ -238,7 +238,7 @@
 	//global config here
 	Progress::NextStage();
 	y2debug("to write global config: global_config=%1", global_config);
-	foreach(string key, [ "disable-ip-verification", "minor-count", "dialog-refresh", "disable-io-hints" ],
+	foreach(string key, [ "disable-ip-verification", "minor-count", "dialog-refresh" ],
 	{
 		if (global_config[key]:nil != nil) {
 			SCR::Write(topath(sformat(".drbd.global.%1", key)), global_config[key]:nil);
Index: yast2-drbd-2.13.1/src/global_conf.ycp
===================================================================
--- yast2-drbd-2.13.1.orig/src/global_conf.ycp	2007-04-17 00:46:56.000000000 +0800
+++ yast2-drbd-2.13.1/src/global_conf.ycp	2008-12-19 17:28:40.000000000 +0800
@@ -15,7 +15,6 @@
 	void global_conf_Read()
 	{
 		disipver = Drbd::global_config["disable-ip-verification"]:"false";
-		disiohin = Drbd::global_config["disable-io-hints"]:"false";
 		diagref = Drbd::global_config["dialog-refresh"]:"1";
 		mc = Drbd::global_config["minor-count"]:"5";
 	}
@@ -28,21 +27,18 @@
 						`VBox(
 							`Left(`IntField(`id("MinorCount"), _("Minor Count"), 1, 20, tointeger(mc))),
 							`Left(`IntField(`id("DialogRefresh"), _("Dialog Refresh"), 0, 1000, tointeger(diagref))),
-							`Left(`CheckBox(`id("DisableIpVerification"), `opt(`notify), _("Disable IP Verification"), disipver=="true")),
-							`Left(`CheckBox(`id("DisableIoHint"), `opt(`notify), _("Disable IO Hint"), disiohin=="true"))))
-					), `VStretch()
+							`Left(`CheckBox(`id("DisableIpVerification"), `opt(`notify), _("Disable IP Verification"), disipver=="true"))
+							))), `VStretch()
 				);
 	}
 
 	boolean global_conf_Write ()
 	{
 		disipver = (boolean)UI::QueryWidget(`id("DisableIpVerification"), `Value) ? "true" : nil;
-		disiohin = (boolean)UI::QueryWidget(`id("DisableIoHint"), `Value) ? "true" : nil;
 		diagref  = sformat("%1", UI::QueryWidget(`id("DialogRefresh"), `Value));
 		mc       = sformat("%1", UI::QueryWidget(`id("MinorCount"), `Value));
 
 		Drbd::global_config["disable-ip-verification"] = disipver;
-		Drbd::global_config["disable-io-hints"] = disiohin;
 		Drbd::global_config["dialog-refresh"] = diagref;
 		Drbd::global_config["minor-count"] = mc;
 
@@ -73,7 +69,7 @@
 				ret = (string)UI::QueryWidget (`id (`wizardTree), `CurrentItem);
 			}
 
-			if (ret=="DialogRefresh" || ret=="MinorCount" || ret=="DisableIpVerification" || ret=="DisableIoHint") {
+			if (ret=="DialogRefresh" || ret=="MinorCount" || ret=="DisableIpVerification" ) {
 				continue;
 			}
 
Index: yast2-drbd-2.13.1/src/resource_conf.ycp
===================================================================
--- yast2-drbd-2.13.1.orig/src/resource_conf.ycp	2008-12-19 17:28:40.000000000 +0800
+++ yast2-drbd-2.13.1/src/resource_conf.ycp	2008-12-19 17:28:40.000000000 +0800
@@ -78,14 +78,14 @@
 			ret = (string)UI::QueryWidget (`id (`wizardTree), `CurrentItem);
 		}
 
-		if (ret=="resource_conf" || ret=="DialogRefresh" || ret=="MinorCount" || ret=="DisableIpVerification" || ret=="DisableIoHint") {
+		if (ret=="resource_conf" || ret=="DialogRefresh" || ret=="MinorCount" || ret=="DisableIpVerification" ) {
 			continue;
 		}
 
 		if (ret == `delete)
 		{
 			string resname = (string) UI::QueryWidget(`id(`res_list_table), `CurrentItem);
-			Drbd::resource_config[resname] = nil;
+			Drbd::resource_config[sformat("%1", resname)] = nil;
 			ret = `list;
 			break;
 		}
@@ -185,9 +185,7 @@
 	return `VBox(
 				`HBox(
 					`ComboBox(`id(`protocol), _("Protocol"), ["A", "B", "C"]),
-					`HSpacing(),
-					`TextEntry(`id(`cmd), _("Inconsistent degraded command"),
-								res_config["incon-degr-cmd"]:"\"echo '!DRBD! pri on incon-degr' | wall ; sleep 60 ; halt -f\"")
+					`HSpacing()
 				),
 				`Frame(
 					"Startup",
@@ -201,7 +199,7 @@
 					`HBox(
 						`ComboBox(`id(`on_io_error), "on-io-error", ["detach", "panic", "pass_on"]),
 						`HSpacing(),
-						`TextEntry(`id(`size), "size", res_config["disk", "size"]:"")
+						`TextEntry(`id(`size), "size", res_config["disk_s", "size"]:"")
 					)
 				),
 				`Frame(
@@ -218,8 +216,7 @@
 						),
 						`HBox(
 							`TextEntry(`id(`max_epoch_size), "max-epoch-size", res_config["net", "max-epoch-size"]:""),
-							`TextEntry(`id(`ko_count), "ko-count", res_config["net", "ko-count"]:""),
-							`ComboBox(`id(`on_disconnect), "on-disconnect", ["reconnect", "stand_alone", "freeze_io"])
+							`TextEntry(`id(`ko_count), "ko-count", res_config["net", "ko-count"]:"")
 						)
 					)
 				),
@@ -227,8 +224,7 @@
 					"Syncer",
 					`HBox(
 						`TextEntry(`id(`rate),       "Rate",       res_config["syncer", "rate"]:""),
-						`TextEntry(`id(`al_extents), "Al-extents", res_config["syncer", "al-extents"]:""),
-						`TextEntry(`id(`group),      "Group",      res_config["syncer", "group"]:"")
+						`TextEntry(`id(`al_extents), "Al-extents", res_config["syncer", "al-extents"]:"")
 					)
 				),
 				`VStretch(),
@@ -247,22 +243,19 @@
 	if (UI::QueryWidget(`id(`protocol), `Value) == nil)
 	{
 		if (res_config["protocol"]:nil == nil) res_config["protocol"] = "C";
-		if (res_config["incon-degr-cmd"]:nil == nil) res_config["incon-degr-cmd"] = "echo '!DRBD! pri on incon-degr' | wall ; sleep 60 ; halt -f";
-		if (res_config["disk", "on-io-error"]:nil == nil) res_config["disk"] = $["on-io-error" : "pass_on"];
-		if (res_config["net", "on-disconnect"]:nil == nil) res_config["net"] = $["on-disconnect" : "reconnect"];
+		if (res_config["disk_s", "on-io-error"]:nil == nil) res_config["disk_s"] = $["on-io-error" : "pass_on"];
 		return res_config;
 	}
 
 
 	res_config["protocol"] = (string) UI::QueryWidget(`id(`protocol), `Value);
-	res_config["incon-degr-cmd"] = (string) UI::QueryWidget(`id(`cmd), `Value);
 
 	res_config["startup"] = $[
 		"wfc-timeout" : (string) UI::QueryWidget(`id(`wfc_timeout), `Value),
 		"degr-wfc-timeout"        : (string) UI::QueryWidget(`id(`degr_wfc_timeout), `Value)
 	];
 
-	res_config["disk"] = $[
+	res_config["disk_s"] = $[
 		"on-io-error" : (string) UI::QueryWidget(`id(`on_io_error), `Value),
 		"size"        : (string) UI::QueryWidget(`id(`size), `Value)
 	];
@@ -275,12 +268,10 @@
 		"max-buffers" : (string) UI::QueryWidget(`id(`max_buffers), `Value),
 		"max-epoch-size" : (string) UI::QueryWidget(`id(`max_epoch_size), `Value),
 		"ko-count" : (string) UI::QueryWidget(`id(`ko_count), `Value),
-		"on-disconnect" : (string) UI::QueryWidget(`id(`on_disconnect), `Value),
 	];
 
 	res_config["syncer"] = $[
 		"al-extents" : (string) UI::QueryWidget(`id(`al_extents), `Value),
-		"group"      : (string) UI::QueryWidget(`id(`group), `Value),
 		"rate"       : (string) UI::QueryWidget(`id(`rate), `Value)
 	];
 
@@ -376,8 +367,7 @@
 			my_SetContents("resource_conf", res_advance_config_get_dialog(res_config));
 
 			UI::ChangeWidget(`id(`protocol), `Value, res_config["protocol"]:"C");
-			UI::ChangeWidget(`id(`on_io_error), `Value, res_config["disk", "on-io-error"]:"pass_on");
-			UI::ChangeWidget(`id(`on_disconnect), `Value, res_config["net", "on-disconnect"]:"reconnect");
+			UI::ChangeWidget(`id(`on_io_error), `Value, res_config["disk_s", "on-io-error"]:"pass_on");
 
 			Wizard::DisableNextButton();
 			Wizard::DisableAbortButton();
openSUSE Build Service is sponsored by