summaryrefslogtreecommitdiffstats
path: root/corosync.trang.rng
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.trang.rng
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.trang.rng')
-rw-r--r--corosync.trang.rng907
1 files changed, 907 insertions, 0 deletions
diff --git a/corosync.trang.rng b/corosync.trang.rng
new file mode 100644
index 0000000..e53e6a0
--- /dev/null
+++ b/corosync.trang.rng
@@ -0,0 +1,907 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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
+-->
+<grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns:a4doc="http://people.redhat.com/jpokorny/ns/a4doc" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <start>
+ <ref name="corosync"/>
+ </start>
+ <define name="corosync">
+ <element name="corosync">
+ <interleave>
+ <optional>
+ <ref name="logging"/>
+ </optional>
+ <optional>
+ <ref name="nodelist"/>
+ </optional>
+ <optional>
+ <ref name="quorum"/>
+ </optional>
+ <ref name="totem"/>
+ <optional>
+ <ref name="uidgid"/>
+ </optional>
+ </interleave>
+ </element>
+ </define>
+ <define name="macro.logging_attributes">
+ <optional>
+ <!-- CFG: corosync.conf, cluster.conf -->
+ <attribute name="debug" a:defaultValue="off">
+ <a:documentation>This specifies whether debug output is
+logged for this particular logger. Also can contain value trace, what
+is highest level of debug informations.</a:documentation>
+ <choice>
+ <value>off</value>
+ <value>on</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf, cluster.conf -->
+ <attribute name="logfile_priority" a:defaultValue="info">
+ <a:documentation>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:documentation>
+ <choice>
+ <value>alert</value>
+ <value>crit</value>
+ <value>debug</value>
+ <value>emerg</value>
+ <value>err</value>
+ <value>info</value>
+ <value>notice</value>
+ <value>warning</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf, cluster.conf -->
+ <attribute name="syslog_facility" a:defaultValue="daemon">
+ <a:documentation>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:documentation>
+ <choice>
+ <value>daemon</value>
+ <value>local0</value>
+ <value>local1</value>
+ <value>local2</value>
+ <value>local3</value>
+ <value>local4</value>
+ <value>local5</value>
+ <value>local6</value>
+ <value>local7</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf, cluster.conf -->
+ <attribute name="syslog_priority" a:defaultValue="info">
+ <a:documentation>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:documentation>
+ <choice>
+ <value>alert</value>
+ <value>crit</value>
+ <value>debug</value>
+ <value>emerg</value>
+ <value>err</value>
+ <value>info</value>
+ <value>notice</value>
+ <value>warning</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf, cluster.conf -->
+ <attribute name="to_logfile" a:defaultValue="no">
+ <a:documentation>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:documentation>
+ <choice>
+ <value>no</value>
+ <value>yes</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="to_stderr" a:defaultValue="yes">
+ <a:documentation>This specifies the destination
+of logging output.</a:documentation>
+ <choice>
+ <value>no</value>
+ <value>yes</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf, cluster.conf -->
+ <attribute name="to_syslog" a:defaultValue="yes">
+ <a:documentation>This specifies the destination
+of logging output.</a:documentation>
+ <choice>
+ <value>no</value>
+ <value>yes</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+ <define name="logging">
+ <element name="logging">
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="timestamp" a:defaultValue="off">
+ <a:documentation>This specifies that a timestamp is placed
+on all log messages.</a:documentation>
+ <choice>
+ <value>off</value>
+ <value>on</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="fileline" a:defaultValue="off">
+ <a:documentation>This specifies that file and line should
+be printed.</a:documentation>
+ <choice>
+ <value>off</value>
+ <value>on</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="function_name" a:defaultValue="off">
+ <a:documentation>This specifies that the code function name
+should be printed.</a:documentation>
+ <choice>
+ <value>off</value>
+ <value>on</value>
+ </choice>
+ </attribute>
+ </optional>
+ <ref name="macro.logging_attributes"/>
+ <zeroOrMore>
+ <ref name="logger_subsys"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="logger_subsys">
+ <element name="logger_subsys">
+ <ref name="macro.logging_attributes"/>
+ <!-- CFG: corosync.conf, cluster.conf -->
+ <attribute name="subsys">
+ <a:documentation>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.</a:documentation>
+ </attribute>
+ </element>
+ </define>
+ <define name="nodelist">
+ <element name="nodelist">
+ <optional>
+ <ref name="node"/>
+ </optional>
+ </element>
+ </define>
+ <define name="node">
+ <element name="node">
+ <group>
+ <optional>
+ <!--
+ XXX: implied check
+ CFG: corosync.conf, cluster.conf
+ -->
+ <attribute name="noid">
+ <a:documentation>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.</a:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <!-- CFG: corosync.conf, cluster.conf -->
+ <attribute name="ring0_addr">
+ <a:documentation>This specifies IP address of one of the nodes for particular ring
+as denoted by its number (instead 0, there can be higher numbers).</a:documentation>
+ </attribute>
+ <optional>
+ <attribute name="ring1_addr"/>
+ </optional>
+ <optional>
+ <attribute name="ring2_addr"/>
+ </optional>
+ <optional>
+ <attribute name="ring3_addr"/>
+ </optional>
+ <optional>
+ <attribute name="ring4_addr"/>
+ </optional>
+ <optional>
+ <attribute name="ring5_addr"/>
+ </optional>
+ <optional>
+ <attribute name="ring6_addr"/>
+ </optional>
+ <optional>
+ <attribute name="ring7_addr"/>
+ </optional>
+ <optional>
+ <attribute name="ring8_addr"/>
+ </optional>
+ <optional>
+ <attribute name="ring9_addr"/>
+ </optional>
+ </group>
+ <!-- NOTE: Augeas lens for corosync.conf counts on X = 0..9 only -->
+ </element>
+ </define>
+ <define name="quorum">
+ <element name="quorum">
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="allow_downscale" a:defaultValue="0">
+ <a:documentation>This enables Downscale feature
+(see `votequorum(5)`).</a:documentation>
+ <choice>
+ <value>0</value>
+ <value>1</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="auto_tie_breaker" a:defaultValue="0">
+ <a:documentation>This enables Auto Tie Breaker feature
+(see `votequorum(5)`).</a:documentation>
+ <choice>
+ <value>0</value>
+ <value>1</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf, cluster.conf -->
+ <attribute name="expected_votes">
+ <a:documentation>This specifies the number of expected votes, overriding the number
+implied by the number of *node* items within *nodes*.</a:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="last_man_standing" a:defaultValue="0">
+ <a:documentation>This enables Last Man Standing feature
+(see `votequorum(5)`).</a:documentation>
+ <choice>
+ <value>0</value>
+ <value>1</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="last_man_standing_window" a:defaultValue="0">
+ <a:documentation>This specifies the tunable for Last Man
+Standing feature (see `votequorum(5)`).</a:documentation>
+ <data type="nonNegativeInteger"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="provider">
+ <a:documentation>This specifies the quorum algorithm to use.
+As of now, only 'corosync_votequorum' is supported.</a:documentation>
+ <value>corosync_votequorum</value>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf, cluster.conf -->
+ <attribute name="two_node" a:defaultValue="0">
+ <a:documentation>This enables two node cluster operations
+(see `votequorum(5)`).</a:documentation>
+ <choice>
+ <value>0</value>
+ <value>1</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="wait_for_all" a:defaultValue="0">
+ <a:documentation>This enables Wait For All feature
+(see `votequorum(5)`).</a:documentation>
+ <choice>
+ <value>0</value>
+ <value>1</value>
+ </choice>
+ </attribute>
+ </optional>
+ </element>
+ </define>
+ <define name="totem">
+ <element name="totem">
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="clear_node_high_bit" 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).">
+ <a:documentation>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:documentation>
+ <choice>
+ <value>no</value>
+ <value>yes</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <!--
+ CFG: corosync.conf, cluster.conf
+ NOTE: not a direct mapping in cluster.conf (top-level tag instead)
+ -->
+ <attribute name="cluster_name">
+ <a:documentation>This specifies the name of cluster and it's
+used for automatic generating of multicast address.</a:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <!--
+ XXX: implied check
+ CFG: corosync.conf, cluster.conf
+ -->
+ <attribute name="consensus" a:defaultValue="1200">
+ <a:documentation>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:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!--
+ XXX: missing nss?
+ CFG: corosync.conf
+ -->
+ <attribute name="crypto_cipher" a:defaultValue="aes256">
+ <a:documentation>This specifies which cipher should be used
+to encrypt all messages. Valid values are 'none' (no encryption),
+'aes256', 'aes192', 'aes128' and '3des'.</a:documentation>
+ <choice>
+ <value>3des</value>
+ <value>aes128</value>
+ <value>aes192</value>
+ <value>aes256</value>
+ <value>none</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: undocumented -->
+ <attribute name="crypto_compat">
+ <choice>
+ <value>2.0</value>
+ <value>2.2</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="crypto_hash" a:defaultValue="sha1">
+ <a:documentation>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:documentation>
+ <choice>
+ <value>none</value>
+ <value>md5</value>
+ <value>sha1</value>
+ <value>sha256</value>
+ <value>sha384</value>
+ <value>sha512</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: undocumented -->
+ <attribute name="crypto_type">
+ <choice>
+ <value>3des</value>
+ <value>aes128</value>
+ <value>aes192</value>
+ <value>aes256</value>
+ <value>nss</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="downcheck" a:defaultValue="1000">
+ <a:documentation>This timeout specifies in milliseconds how
+long to wait before checking that a network interface is back up after
+it has been downed.</a:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf, cluster.conf -->
+ <attribute name="fail_recv_const" a:defaultValue="2500">
+ <a:documentation>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:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="heartbeat_failures_allowed" a:defaultValue="0">
+ <a:documentation>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:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="hold" a:defaultValue="180" a4doc:danger-hint="It is not recommended to override this value without guidance from the corosync community.">
+ <a:documentation>This timeout specifies in milliseconds
+how long the token should be held by the representative when
+the protocol is under low utilization.</a:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf, cluster.conf -->
+ <attribute name="join" a:defaultValue="50">
+ <a:documentation>This timeout specifies in milliseconds how
+long to wait for join messages in the membership protocol.</a:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf, cluster.conf -->
+ <attribute name="max_messages" a:defaultValue="17">
+ <a:documentation>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:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="max_network_delay" a:defaultValue="50">
+ <a:documentation>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:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="merge" a:defaultValue="200">
+ <a:documentation>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:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf, cluster.conf -->
+ <attribute name="miss_count_const" a:defaultValue="5">
+ <a:documentation>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:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf, cluster.conf -->
+ <attribute name="netmtu" a:defaultValue="1500">
+ <a:documentation>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:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: undocumented -->
+ <attribute name="nodeid">
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="rrp_autorecovery_check_timeout" a:defaultValue="1000">
+ <a:documentation>This specifies the time in milliseconds
+to check if the failed ring can be auto-recovered.</a:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!--
+ XXX: implied check: active,passive -> count(interface) <= 2
+ CFG: corosync.conf, cluster.conf
+ -->
+ <attribute name="rrp_mode">
+ <a:documentation>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.</a:documentation>
+ <choice>
+ <value>active</value>
+ <value>none</value>
+ <value>passive</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="rrp_problem_count_mcast_threshold">
+ <a:documentation>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*.</a:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!--
+ XXX: implied check
+ CFG: corosync.conf, cluster.conf
+ -->
+ <attribute name="rrp_problem_count_threshold" a:defaultValue="10">
+ <a:documentation>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:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="rrp_problem_count_timeout" a:defaultValue="2000">
+ <a:documentation>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:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="rrp_token_expired_timeout" a:defaultValue="47" a4doc:danger-hint="It is not recommended to override this value without guidance from the corosync community.">
+ <a:documentation>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:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!--
+ XXX: implied check/migration to current items
+ CFG: corosync.conf, cluster.conf
+ -->
+ <attribute name="secauth" a:defaultValue="on" a4doc:deprecation-hint="It's recomended to use combination of *crypto_cipher* and *crypto_hash*.">
+ <a:documentation>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:documentation>
+ <choice>
+ <value>off</value>
+ <value>on</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="send_join" a:defaultValue="0" a4doc:danger-hint="Seek advice from the corosync mailing list if trying to run larger configurations.">
+ <a:documentation>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:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf, cluster.conf -->
+ <attribute name="seqno_unchanged_const" a:defaultValue="30">
+ <a:documentation>This constant specifies how many rotations
+of the token without any multicast traffic should occur before the hold
+timer is started.</a:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: undocumented -->
+ <attribute name="threads">
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf, cluster.conf -->
+ <attribute name="token" a:defaultValue="1000">
+ <a:documentation>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:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="token_retransmit" a:defaultValue="238" a4doc:danger-hint="It is not recommended to override this value without guidance from the corosync community.">
+ <a:documentation>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:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf, cluster.conf -->
+ <attribute name="token_retransmits_before_loss_const" a:defaultValue="4">
+ <a:documentation>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:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="transport" a:defaultValue="udp">
+ <choice>
+ <value>iba</value>
+ <value>udp</value>
+ <value>udpu</value>
+ </choice>
+ </attribute>
+ </optional>
+ <attribute name="version">
+ <a:documentation>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.</a:documentation>
+ <!-- CFG: corosync.conf -->
+ <a:documentation>This specifies the version of
+the configuration file. Currently the only valid value for this
+option is '2'.</a:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="vsftype" a:defaultValue="ykd">
+ <a:documentation>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:documentation>
+ <choice>
+ <value>none</value>
+ <value>ykd</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf, cluster.conf -->
+ <attribute name="window_size" a:defaultValue="50">
+ <a:documentation>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:documentation>
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ <zeroOrMore>
+ <ref name="interface"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="interface">
+ <element name="interface">
+ <optional>
+ <!-- CFG: corosync.conf, cluster.conf -->
+ <attribute name="bindnetaddr">
+ <a:documentation>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.</a:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf -->
+ <attribute name="broadcast" a:defaultValue="no">
+ <a:documentation>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:documentation>
+ <choice>
+ <value>no</value>
+ <value>yes</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf, cluster.conf -->
+ <attribute name="mcastaddr">
+ <a:documentation>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.</a:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf, cluster.conf -->
+ <attribute name="mcastport">
+ <a:documentation>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.</a:documentation>
+ <data type="unsignedShort"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf, cluster.conf -->
+ <attribute name="ringnumber">
+ <a:documentation>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.</a:documentation>
+ <data type="unsignedByte"/>
+ </attribute>
+ </optional>
+ <optional>
+ <!-- CFG: corosync.conf, cluster.conf -->
+ <attribute name="ttl" a:defaultValue="1">
+ <a:documentation>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:documentation>
+ <data type="unsignedByte"/>
+ </attribute>
+ </optional>
+ </element>
+ </define>
+</grammar>
+<!--
+ uidgid =
+ element uidgid {
+ attribute uid {text}?,
+ attribute gid {text}?
+ }
+-->