summaryrefslogtreecommitdiff
path: root/data/schemata/interface_definition.rnc
diff options
context:
space:
mode:
Diffstat (limited to 'data/schemata/interface_definition.rnc')
-rw-r--r--data/schemata/interface_definition.rnc174
1 files changed, 174 insertions, 0 deletions
diff --git a/data/schemata/interface_definition.rnc b/data/schemata/interface_definition.rnc
new file mode 100644
index 0000000..5bd3437
--- /dev/null
+++ b/data/schemata/interface_definition.rnc
@@ -0,0 +1,174 @@
+# interface_definition.rnc: VyConf reference tree XML grammar
+#
+# Copyright (C) 2014 VyOS Development Group <maintainers@vyos.net>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
+# USA
+
+# The language of this file is compact form RELAX-NG
+# http://relaxng.org/compact-tutorial-20030326.htm
+# (unless converted to XML, then just RELAX-NG :)
+
+# Interface definition starts with interfaceDefinition tag that may contain node tags
+# It also may contain "extends" tags, if nodes must be appended to certain path
+start = element interfaceDefinition
+{
+ extends*, nodeList
+}
+
+nodeList = element nodeList
+{
+ node*
+}
+
+# Extends tag defines path prepended to the nodes
+extends = element extends
+{
+ path
+}
+
+path = attribute path
+{
+ text
+}
+
+# node tag may contain node, leafNode, or tagNode tags
+# Those are intermediate configuration nodes that may only contain
+# other nodes and must not have values
+node = element node
+{
+ ownerAttr?,
+ nodeNameAttr,
+ helpString?,
+ (node | tagNode | leafNode)*
+}
+
+# All nodes must have "name" attribute
+nodeNameAttr = attribute name
+{
+ text
+}
+
+# Ordinary nodes and tag nodes can have "owner" attribute.
+# Owner is the component that is notified when node changes.
+ownerAttr = attribute owner
+{
+ text
+}
+
+# Tag nodes are containers for nodes without predefined names, like network interfaces
+# or user names (e.g. "interfaces ethernet eth0" or "user jrandomhacker")
+# Tag nodes may contain node and leafNode elements, and also nameConstraint tags
+# They must not contain other tag nodes
+tagNode = element tagNode
+{
+ ownerAttr?,
+ nodeNameAttr,
+ nameConstraint?,
+ helpString?,
+ (node | leafNode)+
+}
+
+# Tag nodes may also contain nameConstraint tag with type and constraint
+# attributes. It provides information required to validate child name.
+nameConstraint = element nameConstraint
+{
+ typeAttr,
+ constraintAttr?,
+ errorMessageAttr?,
+ empty
+}
+
+# Leaf nodes are terminal configuration nodes that can't have children,
+# but can have values.
+# Leaf node may contain one or more valueConstraint tags
+# If multiple valueConstraint tags are used, they work a logical OR
+# Leaf nodes can have "multi" attribute that indicated that it can have
+# more than one value
+leafNode = element leafNode
+{
+ nodeNameAttr,
+ multiAttr?,
+ helpString?,
+ (valueHelpString | valueConstraint)*
+}
+
+# valueConstraint tag contains information required to validate node values
+# It must have two attributes, "type" and "constraint".
+valueConstraint = element valueConstraint
+{
+ typeAttr,
+ constraintAttr?,
+ errorMessageAttr?,
+ empty
+}
+
+# helpString tag contains brief description of the purpose of the node
+# Must have description= attribute
+helpString = element helpString
+{
+ descriptionAttr, empty
+}
+
+# valueHelpString tag contain information about acceptable value format
+# It may be exact value in value= attribute, or a placeholder taken from
+# type specified in type= attribute
+valueHelpString = element valueHelpString
+{
+ ((typeAttr, constraintAttr?) | valueAttr),
+ descriptionAttr,
+ empty
+}
+
+# description= attribute contains help strings for nodes
+descriptionAttr = attribute description
+{
+ text
+}
+
+# value= attributes contains one of allowed values for leaf nodes
+valueAttr = attribute value
+{
+ text
+}
+
+# type= attribute is used in leaf nodes and contains name of a type
+# to take value placeholder from
+typeAttr = attribute type
+{
+ text
+}
+
+# constraint= attribute contains additional information for type validation,
+# used in valueContrating tags
+constraintAttr = attribute constraint
+{
+ text
+}
+
+# error-message= attribute is used to override default error message
+# in nameConstraint and valueConstraint attributes
+errorMessageAttr = attribute error-message
+{
+ text
+}
+
+# multi=<true|false> attribute indicates that a leaf node can have
+# multiple values
+# If not present, treated as "false"
+multiAttr = attribute multi
+{
+ xsd:boolean
+}