summaryrefslogtreecommitdiffstats
path: root/corosync.rnc
diff options
context:
space:
mode:
authorJan Pokorný <jpokorny@redhat.com>2013-01-29 18:20:13 +0100
committerJan Pokorný <jpokorny@redhat.com>2013-01-29 18:25:12 +0100
commitdbebf0be9cb077864aac9d6d60783b53ee50a2a5 (patch)
tree98eaed1a6bd19c0c8f925fec9a0655a5c9466b4d /corosync.rnc
parentf781e6e0c5ce428b18485d7d05df91962c04c007 (diff)
downloadrnc2rng-dbebf0be9cb077864aac9d6d60783b53ee50a2a5.tar.gz
rnc2rng-dbebf0be9cb077864aac9d6d60783b53ee50a2a5.tar.xz
rnc2rng-dbebf0be9cb077864aac9d6d60783b53ee50a2a5.zip
Massive update so it works for corosync.rnc and several others
- continued style cleanup - some files moved to "unused" dir - added several files for testing and the ones like TODO and HACKING Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
Diffstat (limited to 'corosync.rnc')
-rw-r--r--corosync.rnc684
1 files changed, 684 insertions, 0 deletions
diff --git a/corosync.rnc b/corosync.rnc
new file mode 100644
index 0000000..7e90d2c
--- /dev/null
+++ b/corosync.rnc
@@ -0,0 +1,684 @@
+# Copyright 2013 Red Hat, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# - Redistributions of source code must retain the above copyright notice,
+# this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# - Neither the name of the Red Hat, Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from this
+# software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+# THE POSSIBILITY OF SUCH DAMAGE.
+#
+# style guide (RELAX NG Compact only):
+# * '##' comments are wrapped at 50/80 (first line/rest), 2-spaced sentence
+# separator, AsciiDoc formatting is used within them
+# * sort everything you can to ease the lookup
+
+namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
+namespace a4doc = "http://people.redhat.com/jpokorny/ns/a4doc"
+
+start = corosync
+
+corosync =
+ element corosync {
+ (logging?
+ & nodelist?
+ & quorum?
+ & totem
+ & uidgid?)
+ }
+
+macro.logging_attributes =
+ # CFG: corosync.conf, cluster.conf
+ ## This specifies whether debug output is
+ ## logged for this particular logger. Also can contain value trace, what
+ ## is highest level of debug informations.
+ [ a:defaultValue = "off" ]
+ attribute debug {"off"|"on"}?,
+
+ # CFG: corosync.conf, cluster.conf
+ ## This specifies the logfile level for this particular subsystem. Ignored
+ ## if *debug* is 'on'. Possible values are: 'alert', 'crit', 'debug'
+ ## (same as *debug =* 'on'), 'emerg', 'err', 'info', 'notice' and 'warning'.
+ [ a:defaultValue = "info" ]
+ attribute logfile_priority {"alert"
+ |"crit"
+ |"debug"
+ |"emerg"
+ |"err"
+ |"info"
+ |"notice"
+ |"warning"
+ }?,
+
+ # CFG: corosync.conf, cluster.conf
+ ## This specifies the syslog facility type
+ ## that will be used for any messages sent to syslog. Options are
+ ## 'daemon', 'local0', 'local1', 'local2', 'local3', 'local4', 'local5',
+ ## 'local6' and 'local7'.
+ [ a:defaultValue = "daemon" ]
+ attribute syslog_facility {"daemon"
+ |"local0"
+ |"local1"
+ |"local2"
+ |"local3"
+ |"local4"
+ |"local5"
+ |"local6"
+ |"local7"
+ }?,
+
+ # CFG: corosync.conf, cluster.conf
+ ## This specifies the syslog level for this
+ ## particular subsystem. Ignored if *debug* is 'on'. Possible values are:
+ ## 'alert', 'crit', 'debug' (same as *debug =* 'on'), 'emerg', 'err',
+ ## 'info', 'notice' and 'warning'.
+ [ a:defaultValue = "info" ]
+ attribute syslog_priority {"alert"
+ |"crit"
+ |"debug"
+ |"emerg"
+ |"err"
+ |"info"
+ |"notice"
+ |"warning"
+ }?,
+
+ # CFG: corosync.conf, cluster.conf
+ ## This specifies the destination
+ ## of logging output.
+ ##
+ ## Please note, if you are using *to_logfile* and want to rotate the file,
+ ## use `logrotate(8)` with the option `copytruncate`, e.g.
+ ##
+ ## ----
+ ## /var/log/corosync.log {
+ ## missingok
+ ## compress
+ ## notifempty
+ ## daily
+ ## rotate 7
+ ## copytruncate
+ ## }
+ ## ----
+ [ a:defaultValue = "no" ]
+ attribute to_logfile {"no"|"yes"}?,
+
+ # CFG: corosync.conf
+ ## This specifies the destination
+ ## of logging output.
+ [ a:defaultValue = "yes" ]
+ attribute to_stderr {"no"|"yes"}?,
+
+ # CFG: corosync.conf, cluster.conf
+ ## This specifies the destination
+ ## of logging output.
+ [ a:defaultValue = "yes" ]
+ attribute to_syslog {"no"|"yes"}?
+
+logging =
+ element logging {
+ # CFG: corosync.conf
+ ## This specifies that a timestamp is placed
+ ## on all log messages.
+ [ a:defaultValue = "off" ]
+ attribute timestamp {"off"|"on"}?,
+
+ # CFG: corosync.conf
+ ## This specifies that file and line should
+ ## be printed.
+ [ a:defaultValue = "off" ]
+ attribute fileline {"off"|"on"}?,
+
+ # CFG: corosync.conf
+ ## This specifies that the code function name
+ ## should be printed.
+ [ a:defaultValue = "off" ]
+ attribute function_name {"off"|"on"}?,
+
+ macro.logging_attributes,
+ logger_subsys*
+ }
+
+logger_subsys =
+ element logger_subsys {
+ macro.logging_attributes,
+
+ # CFG: corosync.conf, cluster.conf
+ ## This specifies the subsystem identity
+ ## (name) for which logging is specified. This is the name used by
+ ## a service in the `log_init` call. E.g., 'CPG'.
+ ## This option is required.
+ attribute subsys {text}
+ }
+
+nodelist =
+ element nodelist {
+ node?
+ }
+
+node =
+ element node {
+ # XXX: implied check
+ # CFG: corosync.conf, cluster.conf
+ ## This configuration option is optional when
+ ## using IPv4 and required when using IPv6. This is a 32 bit value
+ ## specifying the node identifier delivered to the cluster membership
+ ## service. If this is not specified with IPv4, the node id will be
+ ## determined from the 32 bit IP address the system to which the system
+ ## is bound with ring identifier of 0. The node identifier value of zero
+ ## is reserved and should not be used.
+ attribute noid {xsd:unsignedInt}?,
+
+ # CFG: corosync.conf, cluster.conf
+ ## This specifies IP address of one of the nodes for particular ring
+ ## as denoted by its number (instead 0, there can be higher numbers).
+ attribute ring0_addr {text},
+ attribute ring1_addr {text}?,
+ attribute ring2_addr {text}?,
+ attribute ring3_addr {text}?,
+ attribute ring4_addr {text}?,
+ attribute ring5_addr {text}?,
+ attribute ring6_addr {text}?,
+ attribute ring7_addr {text}?,
+ attribute ring8_addr {text}?,
+ attribute ring9_addr {text}?
+ # NOTE: Augeas lens for corosync.conf counts on X = 0..9 only
+ }
+
+quorum =
+ element quorum {
+ # CFG: corosync.conf
+ ## This enables Downscale feature
+ ## (see `votequorum(5)`).
+ [ a:defaultValue = "0" ]
+ attribute allow_downscale {"0"|"1"}?,
+
+ # CFG: corosync.conf
+ ## This enables Auto Tie Breaker feature
+ ## (see `votequorum(5)`).
+ [ a:defaultValue = "0" ]
+ attribute auto_tie_breaker {"0"|"1"}?,
+
+ # CFG: corosync.conf, cluster.conf
+ ## This specifies the number of expected votes, overriding the number
+ ## implied by the number of *node* items within *nodes*.
+ attribute expected_votes {xsd:unsignedInt}?,
+
+ # CFG: corosync.conf
+ ## This enables Last Man Standing feature
+ ## (see `votequorum(5)`).
+ [ a:defaultValue = "0" ]
+ attribute last_man_standing {"0"|"1"}?,
+
+ # CFG: corosync.conf
+ ## This specifies the tunable for Last Man
+ ## Standing feature (see `votequorum(5)`).
+ [ a:defaultValue = "0" ]
+ attribute last_man_standing_window {xsd:nonNegativeInteger}?,
+
+ # CFG: corosync.conf
+ ## This specifies the quorum algorithm to use.
+ ## As of now, only 'corosync_votequorum' is supported.
+ attribute provider {"corosync_votequorum"}?,
+
+ # CFG: corosync.conf, cluster.conf
+ ## This enables two node cluster operations
+ ## (see `votequorum(5)`).
+ [ a:defaultValue = "0" ]
+ attribute two_node {"0"|"1"}?,
+
+ # CFG: corosync.conf
+ ## This enables Wait For All feature
+ ## (see `votequorum(5)`).
+ [ a:defaultValue = "0" ]
+ attribute wait_for_all {"0"|"1"}?
+ }
+
+totem =
+ element totem {
+ # CFG: corosync.conf
+ ## This configuration option is optional and
+ ## is only relevant when no *nodeid* is specified. Some corosync clients
+ ## require a signed 32 bit nodeid that is greater than zero however by
+ ## default corosync uses all 32 bits of the IPv4 address space when
+ ## generating a nodeid. Set this option to 'yes' to force the high bit
+ ## to be zero and therefor ensure the nodeid is a positive signed 32 bit
+ ## integer.
+ [ a:defaultValue = "no"
+ a4doc:discretion-hint =
+ "The clusters behavior is undefined if this option is enabled"
+ ~ " on only a subset of the cluster (for example during a rolling"
+ ~ " upgrade)." ]
+ attribute clear_node_high_bit {"no"|"yes"}?,
+
+ # CFG: corosync.conf, cluster.conf
+ # NOTE: not a direct mapping in cluster.conf (top-level tag instead)
+ ## This specifies the name of cluster and it's
+ ## used for automatic generating of multicast address.
+ attribute cluster_name {text}?,
+
+ # XXX: implied check
+ # CFG: corosync.conf, cluster.conf
+ ## This timeout specifies in milliseconds how
+ ## long to wait for consensus to be achieved before starting a new round
+ ## of membership configuration. The minimum value for *consensus* must be
+ ## 1.2 * *token*.
+ ##
+ ## This value will be automatically calculated at 1.2 * *token* if
+ ## the user doesn't specify a *consensus* value.
+ ##
+ ## For two node clusters, a *consensus* larger then the *join* timeout but
+ ## less then *token* is safe. For three node or larger clusters,
+ ## *consensus* should be larger then token. There is an increasing risk
+ ## of odd membership changes, which still guarantee virtual synchrony,
+ ## as node count grows if *consensus* is less than *token*.
+ [ a:defaultValue = "1200" ]
+ attribute consensus {xsd:unsignedInt}?,
+
+ # XXX: missing nss?
+ # CFG: corosync.conf
+ ## This specifies which cipher should be used
+ ## to encrypt all messages. Valid values are 'none' (no encryption),
+ ## 'aes256', 'aes192', 'aes128' and '3des'.
+ [ a:defaultValue = "aes256" ]
+ attribute crypto_cipher {"3des"|"aes128"|"aes192"|"aes256"|"none"}?,
+
+ # CFG: undocumented
+ attribute crypto_compat {"2.0"|"2.2"}?,
+
+ # CFG: corosync.conf
+ ## This specifies which HMAC authentication
+ ## should be used to authenticate all messages. Valid values are 'none'
+ ## (no authentication), 'md5', 'sha1', 'sha256', 'sha384' and 'sha512'.
+ [ a:defaultValue = "sha1" ]
+ attribute crypto_hash {"none"|"md5"|"sha1"|"sha256"|"sha384"|"sha512"}?,
+
+ # CFG: undocumented
+ attribute crypto_type {"3des"|"aes128"|"aes192"|"aes256"|"nss"}?,
+
+ # CFG: corosync.conf
+ ## This timeout specifies in milliseconds how
+ ## long to wait before checking that a network interface is back up after
+ ## it has been downed.
+ [ a:defaultValue = "1000" ]
+ attribute downcheck {xsd:unsignedInt}?,
+
+ # CFG: corosync.conf, cluster.conf
+ ## This constant specifies how many rotations
+ ## of the token without receiving any of the messages when messages should
+ ## be received may occur before a new configuration is formed.
+ [ a:defaultValue = "2500" ]
+ attribute fail_recv_const {xsd:unsignedInt}?,
+
+ # CFG: corosync.conf
+ ## Configures the optional HeartBeating
+ ## mechanism for faster failure detection. Keep in mind that engaging this
+ ## mechanism in lossy networks could cause faulty loss declaration as
+ ## the mechanism relies on the network for heartbeating.
+ ##
+ ## So as a rule of thumb use this mechanism if you require improved
+ ## failure in low to medium utilized networks.
+ ##
+ ## This constant specifies the number of heartbeat failures the system
+ ## should tolerate before declaring heartbeat failure, e.g., 3.
+ ## Also if this value is not set or is 0 then the heartbeat mechanism is
+ ## not engaged in the system and token rotation is the method of failure
+ ## detection. Zero disables the mechanism.
+ [ a:defaultValue = "0" ]
+ attribute heartbeat_failures_allowed {xsd:unsignedInt}?,
+
+ # CFG: corosync.conf
+ ## This timeout specifies in milliseconds
+ ## how long the token should be held by the representative when
+ ## the protocol is under low utilization.
+ [ a:defaultValue = "180"
+ a4doc:danger-hint =
+ "It is not recommended to override this value without guidance"
+ ~ " from the corosync community." ]
+ attribute hold {xsd:unsignedInt}?,
+
+ # CFG: corosync.conf, cluster.conf
+ ## This timeout specifies in milliseconds how
+ ## long to wait for join messages in the membership protocol.
+ [ a:defaultValue = "50" ]
+ attribute join {xsd:unsignedInt}?,
+
+ # CFG: corosync.conf, cluster.conf
+ ## This constant specifies the maximum number
+ ## of messages that may be sent by one processor on receipt of the token.
+ ## The *max_messages* parameter is limited to 256000 / *netmtu* to prevent
+ ## overflow of the kernel transmit buffers.
+ [ a:defaultValue = "17" ]
+ attribute max_messages {xsd:unsignedInt}?,
+
+ # CFG: corosync.conf
+ ## This constant specifies in milliseconds
+ ## the approximate delay that your network takes to transport one packet
+ ## from one machine to another. This value is to be set by system engineers
+ ## and please don't change it if not sure as this effects the failure
+ ## detection mechanism using heartbeat.
+ [ a:defaultValue = "50" ]
+ attribute max_network_delay {xsd:unsignedInt}?,
+
+ # CFG: corosync.conf
+ ## This timeout specifies in milliseconds how
+ ## long to wait before checking for a partition when no multicast traffic
+ ## is being sent. If multicast traffic is being sent, the merge detection
+ ## happens automatically as a function of the protocol.
+ [ a:defaultValue = "200" ]
+ attribute merge {xsd:unsignedInt}?,
+
+ # CFG: corosync.conf, cluster.conf
+ ## This constant defines the maximum number
+ ## of times on receipt of a token a message is checked for retransmission
+ ## before a retransmission occurs. This parameter is useful to modify for
+ ## switches that delay multicast packets compared to unicast packets.
+ ## The default setting works well for nearly all modern switches.
+ [ a:defaultValue = "5" ]
+ attribute miss_count_const {xsd:unsignedInt}?,
+
+ # CFG: corosync.conf, cluster.conf
+ ## This specifies the network maximum transmit
+ ## unit. To set this value beyond 1500, the regular frame MTU, requires
+ ## ethernet devices that support large, or also called jumbo, frames.
+ ## If any device in the network doesn't support large frames, the protocol
+ ## will not operate properly. The hosts must also have their mtu size set
+ ## from 1500 to whatever frame size is specified here.
+ ##
+ ## Please note while some NICs or switches
+ ## claim large frame support, they support 9000 MTU as the maximum frame
+ ## size including the IP header. Setting the *netmtu* and host MTUs to 9000
+ ## will cause totem to use the full 9000 bytes of the frame. Then Linux
+ ## will add a 18 byte header moving the full frame size to 9018.
+ ## As a result some hardware will not operate properly with this size
+ ## of data. A *netmtu* of 8982 seems to work for the few large frame devices
+ ## that have been tested. Some manufacturers claim large frame support
+ ## when in fact they support frame sizes of 4500 bytes.
+ ##
+ ## When sending multicast traffic, if the network frequently reconfigures,
+ ## chances are that some device in the network doesn't support large frames.
+ ##
+ ## Choose hardware carefully if intending to use large frame support.
+ [ a:defaultValue = "1500" ]
+ attribute netmtu {xsd:unsignedInt}?,
+
+ # CFG: undocumented
+ attribute nodeid {xsd:unsignedInt}?,
+
+ # CFG: corosync.conf
+ ## This specifies the time in milliseconds
+ ## to check if the failed ring can be auto-recovered.
+ [ a:defaultValue = "1000" ]
+ attribute rrp_autorecovery_check_timeout {xsd:unsignedInt}?,
+
+ # XXX: implied check: active,passive -> count(interface) <= 2
+ # CFG: corosync.conf, cluster.conf
+ ## This specifies the mode of redundant ring,
+ ## which may be 'none', 'active', or 'passive'. Active replication offers
+ ## none`, active, or passive. Active replication offers
+ ## slightly lower latency from transmit to delivery in faulty network
+ ## environments but with less performance. Passive replication may nearly
+ ## double the speed of the totem protocol if the protocol doesn't become
+ ## CPU bound. The final option is none, in which case only one network
+ ## interface will be used to operate the totem protocol.
+ ##
+ ## If only one *interface* directive is specified, 'none' is automatically
+ ## chosen. If multiple *interface* directives are specified, only 'active'
+ ## or 'passive' may be chosen.
+ ##
+ ## The maximum number of *interface* directives that is allowed for either
+ ## mode ('active' or 'passive') is 2.
+ attribute rrp_mode {"active"|"none"|"passive"}?,
+
+ # CFG: corosync.conf
+ ## This specifies the number of times
+ ## a problem is detected with multicast before setting the link faulty for
+ ## passive RRP mode. This variable is unused in active RRP mode.
+ ##
+ ## The default is 10 times *rrp_problem_count_threshold*.
+ attribute rrp_problem_count_mcast_threshold {xsd:unsignedInt}?,
+
+ # XXX: implied check
+ # CFG: corosync.conf, cluster.conf
+ ## This specifies the number of times
+ ## a problem is detected with a link before setting the link faulty.
+ ## Once a link is set faulty, no more data is transmitted upon it. Also,
+ ## the problem counter is no longer decremented when the problem count
+ ## timeout expires.
+ ##
+ ## A problem is detected whenever all tokens from the proceeding
+ ## processor have not been received within the *rrp_token_expired_timeout*.
+ ## The *rrp_problem_count_threshold* * *rrp_token_expired_timeout* should be
+ ## at least 50 milliseconds less then the *token* timeout, or a complete
+ ## reconfiguration may occur.
+ [ a:defaultValue = "10" ]
+ attribute rrp_problem_count_threshold {xsd:unsignedInt}?,
+
+ # CFG: corosync.conf
+ ## This specifies the time in milliseconds
+ ## to wait before decrementing the problem count by 1 for a particular ring
+ ## to ensure a link is not marked faulty for transient network failures.
+ [ a:defaultValue = "2000" ]
+ attribute rrp_problem_count_timeout {xsd:unsignedInt}?,
+
+ # CFG: corosync.conf
+ ## This specifies the time in milliseconds
+ ## to increment the problem counter for the redundant ring protocol after
+ ## not having received a token from all rings for a particular processor.
+ ##
+ ## This value will automatically be calculated from the *token* timeout
+ ## and *problem_count_threshold* but may be overridden.
+ [ a:defaultValue = "47"
+ a4doc:danger-hint =
+ "It is not recommended to override this value without guidance"
+ ~ " from the corosync community." ]
+ attribute rrp_token_expired_timeout {xsd:unsignedInt}?,
+
+ # XXX: implied check/migration to current items
+ # CFG: corosync.conf, cluster.conf
+ ## This specifies that HMAC/SHA1 authentication should be used
+ ## to authenticate all messages. It further specifies that all data
+ ## should be encrypted with the nss library and aes256 encryption
+ ## algorithm to protect data from eavesdropping.
+ ##
+ ## Enabling this option adds a encryption header to every message sent
+ ## by totem which reduces total throughput. Also encryption and
+ ## authentication consume extra CPU cycles in corosync.
+ [ a:defaultValue = "on"
+ a4doc:deprecation-hint =
+ "It's recomended to use combination of *crypto_cipher* and *crypto_hash*."
+ ]
+ attribute secauth {"off"|"on"}?,
+
+ # CFG: corosync.conf
+ ## This timeout specifies in milliseconds
+ ## an upper range between 0 and *send_join* to wait before sending a join
+ ## message. For eprecationtions with less then 32 nodes, this parameter
+ ## is not necessary. For larger rings, this parameter is necessary
+ ## to ensure the NIC is not overflowed with join messages on formation of
+ ## a new ring. A reasonable value for large rings (128 nodes) would be
+ ## 80msec. Other timer values must also change if this value is changed.
+ [ a:defaultValue = "0"
+ a4doc:danger-hint =
+ "Seek advice from the corosync mailing list if trying to run"
+ ~ " larger configurations." ]
+ attribute send_join {xsd:unsignedInt}?,
+
+ # CFG: corosync.conf, cluster.conf
+ ## This constant specifies how many rotations
+ ## of the token without any multicast traffic should occur before the hold
+ ## timer is started.
+ [ a:defaultValue = "30" ]
+ attribute seqno_unchanged_const {xsd:unsignedInt}?,
+
+ # CFG: undocumented
+ attribute threads {xsd:unsignedInt}?,
+
+ # CFG: corosync.conf, cluster.conf
+ ## This timeout specifies in milliseconds
+ ## until a token loss is declared after not receiving a token. This is
+ ## the time spent detecting a failure of a processor in the current
+ ## configuration. Reforming a new configuration takes about 50
+ ## milliseconds in addition to this timeout.
+ [ a:defaultValue = "1000" ]
+ attribute token {xsd:unsignedInt}?,
+
+ # CFG: corosync.conf
+ ## This timeout specifies in milliseconds
+ ## after how long before receiving a token the token is retransmitted.
+ ## This will be automatically calculated if token is modified.
+ [ a:defaultValue = "238"
+ a4doc:danger-hint =
+ "It is not recommended to override this value without guidance"
+ ~ " from the corosync community." ]
+ attribute token_retransmit {xsd:unsignedInt}?,
+
+ # CFG: corosync.conf, cluster.conf
+ ## This value identifies how many token
+ ## retransmits should be attempted before forming a new configuration.
+ ## If this value is set, retransmit and hold will be automatically
+ ## calculated from *retransmits_before_loss* and token.
+ [ a:defaultValue = "4" ]
+ attribute token_retransmits_before_loss_const {xsd:unsignedInt}?,
+
+ # CFG: corosync.conf
+ [ a:defaultValue = "udp" ]
+ attribute transport {"iba"|"udp"|"udpu"}?,
+ ## This option controls the transport
+ ## mechanism used. If the interface to which corosync is binding is
+ ## an RDMA interface such as RoCEE or Infiniband, the 'iba' parameter
+ ## may be specified. To avoid the use of multicast entirely, a unicast
+ ## transport parameter 'udpu' can be specified. This requires specifying
+ ## the list of members in *nodelist* directive, that could potentially make
+ ## up the membership before deployment.
+
+ # CFG: corosync.conf
+ ## This specifies the version of
+ ## the configuration file. Currently the only valid value for this
+ ## option is '2'.
+ attribute version {xsd:unsignedInt},
+
+ # CFG: corosync.conf
+ ## This option controls the virtual
+ ## synchrony filter type used to identify a primary component.
+ ## The preferred choice is YKD dynamic linear voting, however, for
+ ## clusters larger then 32 nodes YKD consumes alot of memory. For large
+ ## scale clusters that are created by changing the MAX_PROCESSORS_COUNT
+ ## #define in the C code totem.h file, the virtual synchrony filter 'none'
+ ## is recommended but then AMF and DLCK services (which are currently
+ ## experimental) are not safe for use.
+ [ a:defaultValue = "ykd" ]
+ attribute vsftype {"none"|"ykd"}?,
+
+ # CFG: corosync.conf, cluster.conf
+ ## This constant specifies the maximum number
+ ## of messages that may be sent on one token rotation. If all processors
+ ## perform equally well, this value could be large (300), which would
+ ## introduce higher latency from origination to delivery for very large
+ ## rings. To reduce latency in large rings (16+), the defaults are a safe
+ ## compromise. If 1 or more slow processor(s) are present among fast
+ ## processors, *window_size* should be no larger then 256000 / *netmtu*
+ ## to avoid overflow of the kernel receive buffers. The user is notified
+ ## of this by the display of a retransmit list in the notification logs.
+ ## There is no loss of data, but performance is reduced when these errors
+ ## occur.
+ [ a:defaultValue = "50" ]
+ attribute window_size {xsd:unsignedInt}?,
+
+ interface*
+ }
+
+interface =
+ element interface {
+ # CFG: corosync.conf, cluster.conf
+ ## This specifies the network address
+ ## the corosync executive should bind to.
+ ## *bindnetaddr* should be an IP address configured on the system, or
+ ## a network address.
+ ##
+ ## For example, if the local interface is `192.168.5.92` with netmask
+ ## `255.255.255.0`, you should set *bindnetaddr* to `192.168.5.92` or
+ ## `192.168.5.0`. If the local interface is `192.168.5.92` with netmask
+ ## `255.255.255.192`, set *bindnetaddr* to `192.168.5.92` or `192.168.5.64`,
+ ## and so forth.
+ ##
+ ## This may also be an IPv6 address, in which case IPv6 networking will be
+ ## used. In this case, the exact address must be specified and there is no
+ ## automatic selection of the network interface within a specific subnet
+ ## as with IPv4.
+ ##
+ ## If IPv6 networking is used, the *nodeid* field in *nodelist* must be
+ ## specified.
+ attribute bindnetaddr {text}?,
+
+ # CFG: corosync.conf
+ ## This is optional and can be set to 'yes'. If it is set to 'yes',
+ ## the broadcast address will be used for communication. If this option
+ ## is set, *mcastaddr* should not be set.
+ [ a:defaultValue = "no" ]
+ attribute broadcast {"no"|"yes"}?,
+
+ # CFG: corosync.conf, cluster.conf
+ ## This is the multicast address used
+ ## by corosync executive. The default should work for most networks, but
+ ## the network administrator should be queried about a multicast address
+ ## to use. Avoid `224.x.x.x` because this is a "config" multicast address.
+ ##
+ ## This may also be an IPv6 multicast address, in which case IPv6 networking
+ ## will be used. If IPv6 networking is used, the *nodeid* field in
+ ## *nodelist* must be specified.
+ ##
+ ## It's not needed to use this option if *cluster_name* option is used.
+ ## If both options are used, *mcastaddr* has higher priority.
+ attribute mcastaddr {text}?,
+
+ # CFG: corosync.conf, cluster.conf
+ ## This specifies the UDP port number.
+ ## It is possible to use the same multicast address on a network with
+ ## the corosync services configured for different UDP ports. Please note
+ ## corosync uses two UDP ports *mcastport* (for mcast receives) and
+ ## *mcastport* - 1 (for mcast sends). If you have multiple clusters
+ ## on the same network using the same *mcastaddr* please configure
+ ## the **mcastport**s with a gap.
+ attribute mcastport {xsd:unsignedShort}?,
+
+ # CFG: corosync.conf, cluster.conf
+ ## This specifies the ring number for
+ ## the interface. When using the redundant ring protocol, each interface
+ ## should specify separate ring numbers to uniquely identify to
+ ## the membership protocol which interface to use for which redundant ring.
+ ## The *ringnumber* must start at 0.
+ attribute ringnumber {xsd:unsignedByte}?,
+
+ # CFG: corosync.conf, cluster.conf
+ ## This specifies the Time To Live (TTL).
+ ## If you run your cluster on a routed network then the default of '1' will
+ ## be too small. This option provides a way to increase this up to '255'.
+ ## The valid range is '0..255'. Note that this is only valid on multicast
+ ## transport types.
+ [ a:defaultValue = "1" ]
+ attribute ttl {xsd:unsignedByte}?
+ }
+
+#uidgid =
+# element uidgid {
+# attribute uid {text}?,
+# attribute gid {text}?
+# }