resource example {
	options {
		on-no-data-accessible suspend-io;
	}

	net {
		cram-hmac-alg "sha1";
		shared-secret "secret_string";
	}

	# The disk section is possible on resource level and in each
	# volume section
	disk {
		# If you have a resonable RAID controller
		# with non volatile write cache (BBWC, flash)
		disk-flushes no;
		disk-barrier no;
		md-flushes no;
	}

	# volume sections on resource level, are inherited to all node
	# sections. Place it here if the backing devices have the same
	# device names on all your nodes.
	volume 1 {
		device minor 1;
		disk /dev/sdb1;
		meta-disk internal;

		disk {
			resync-after example/0;
		}
	}

	on wurzel {
		address	192.168.47.1:7780;

		volume 0 {
		       device minor 0;
		       disk /dev/vg_wurzel/lg_example;
		       meta-disk /dev/vg_wurzel/lv_example_md;
		}
	}
	on sepp {
		address	192.168.47.2:7780;

		volume 0 {
		       device minor 0;
		       disk /dev/vg_sepp/lg_example;
		       meta-disk /dev/vg_sepp/lv_example_md;
		}
	}
}

resource "ipv6_example_res" {
	net {
		cram-hmac-alg "sha1";
		shared-secret "ieho4CiiUmaes6Ai";
	}

	volume 2 {
		device	"/dev/drbd_fancy_name" minor 0;
		disk	/dev/vg0/example2;
		meta-disk internal;
	}

	on amd {
		# Here is an example of ipv6.
		# If you want to use ipv4 in ipv6 i.e. something like [::ffff:192.168.22.11]
		# you have to set disable-ip-verification in the global section.
		address	ipv6 [fd0c:39f4:f135:305:230:48ff:fe63:5c9a]:7789;
	}

	on alf {
		address ipv6 [fd0c:39f4:f135:305:230:48ff:fe63:5ebe]:7789;
	}
}


#
# A two volume setup with a node for disaster recovery in an off-site location.
#

resource alpha-bravo {
	net {
		cram-hmac-alg "sha1";
		shared-secret "Gei6mahcui4Ai0Oh";
	}

	on alpha {
		volume 0 {
			device minor 0;
			disk /dev/foo;
			meta-disk /dev/bar;
		}
		volume 1 {
			device minor 1;
			disk /dev/foo1;
			meta-disk /dev/bar1;
		}
		address	192.168.23.21:7780;
	}
	on bravo {
		volume 0 {
			device minor 0;
			disk /dev/foo;
			meta-disk /dev/bar;
		}
		volume 1 {
			device minor 1;
			disk /dev/foo1;
			meta-disk /dev/bar1;
		}
		address	192.168.23.22:7780;
	}
}

resource stacked_multi_volume {
	net {
		protocol A;

		on-congestion pull-ahead;
		congestion-fill 400M;
		congestion-extents 1000;
	}

	disk {
		c-fill-target 10M;
	}

	volume 0 { device minor 10; }
	volume 1 { device minor 11; }

	proxy {
		memlimit 500M;
		plugin {
			lzma contexts 4 level 9;
		}
	}

	stacked-on-top-of alpha-bravo {
		address	192.168.23.23:7780;

		proxy on charly {
			# In the regular production site, there is a dedicated host to run
			# DRBD-proxy
			inside    192.168.23.24:7780; # for connections to DRBD
			outside   172.16.17.18:7780; # for connections over the WAN or VPN
			options {
				memlimit 1G; # Additional proxy options are possible here
			}
		}
	}
	on delta {
		volume 0 {
			device minor 0;
			disk /dev/foo;
			meta-disk /dev/bar;
		}
		volume 1 {
			device minor 1;
			disk /dev/foo1;
			meta-disk /dev/bar1;
		}
		address	127.0.0.2:7780;

		proxy on delta {
			# In the DR-site the proxy runs on the machine that stores the data
			inside 127.0.0.1:7780;
			outside 172.16.17.19:7780;
		}
	}
}

resource drbd_9_two_connection {
	volume 0 {
	       device minor 19;
	       disk /dev/foo/bar;
	       meta-disk internal;
	}

	on alpha {
		node-id 0;
		address 192.168.31.1:7800;
	}
	on bravo {
		node-id 1;
		address 192.168.31.2:7800;
	}
	on charlie {
		node-id 2;
		address 192.168.31.3:7800;
	}

	net {
		ko-count 3;
	}

	connection "optional name" {
		host alpha;
		host bravo;
		net { protocol C; }
	}

	connection {
		host alpha address 127.0.0.1:7800 via proxy on alpha {
			inside 127.0.0.2:7800;
			outside 192.168.31.1:7801;
		}
		host charlie address 127.0.0.1:7800 via proxy on charlie {
			inside 127.0.0.2:7800;
			outside 192.168.31.3:7800;
		}
		net { protocol A; }

		volume 0 {
			disk {
				resync-rate 10M;
				c-plan-ahead 20;
				c-delay-target 10;
				c-fill-target 100;
				c-min-rate 10;
				c-max-rate 100M;
			}
		}
	}

	connection {
		host bravo address 127.0.0.1:7800 via proxy on bravo {
			inside 127.0.0.2:7800;
			outside 192.168.31.2:7801;
		}
		host charlie address 127.0.0.1:7800 via proxy on charlie {
			inside 127.0.0.2:7800;
			outside 192.168.31.3:7800;
		}
		net { protocol A; }
	}
}

resource drbd_9_mesh {
	options {
		quorum majority;
		on-no-quorum io-error;
	}
	volume 0 {
	       device minor 21;
	       disk /dev/foo/bar2;
	       meta-disk internal;
	}

	on alpha {
		node-id 0;
		address 192.168.31.1:7900;
	}
	on bravo {
		node-id 1;
		address 192.168.31.2:7900;
	}
	on charlie {
		node-id 2;
		address 192.168.31.3:7900;
	}

	connection-mesh {
		hosts alpha bravo charlie;
		net {
			protocol C;
		}
	}
}

resource drbd_9_multi_path {
	volume 0 {
	       device minor 12;
	       disk /dev/foo/bar3;
	       meta-disk internal;
	}

	on alpha {
		node-id 0;
	}
	on bravo {
		node-id 1;
	}

	connection {
		path {
			host alpha address 192.168.41.1:7900;
			host bravo address 192.168.41.2:7900;
		}
		path {
			host alpha address 192.168.42.1:7900;
			host bravo address 192.168.42.2:7900;
		}
		net {
			transport rdma;
			sndbuf-size 10M;
			rcvbuf-size 10M;
			max-buffers 20000;
			protocol C;
		}
	}
}

resource dless {
	volume 0 {
		device minor 99;
		disk /dev/foo/bar4;
		meta-disk internal;
	}
	on fat-tyre {
		node-id 0;
	}
	on other {
		node-id 1;
		volume 0 {
			disk none;
		}
	}
	connection {
		host fat-tyre address 10.43.9.50:7000;
		host other address 10.43.9.51:7000;
	}
}
