aboutsummaryrefslogtreecommitdiff
path: root/scripts/left-right-schema.rng
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/left-right-schema.rng')
-rw-r--r--scripts/left-right-schema.rng270
1 files changed, 139 insertions, 131 deletions
diff --git a/scripts/left-right-schema.rng b/scripts/left-right-schema.rng
index 554e8180..5bd0391e 100644
--- a/scripts/left-right-schema.rng
+++ b/scripts/left-right-schema.rng
@@ -8,6 +8,7 @@
run the compact syntax through trang to get XML syntax.
-->
<grammar ns="http://www.hactrn.net/uris/rpki/left-right-spec/" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <!-- Top level PDU -->
<start>
<element name="msg">
<attribute name="version">
@@ -22,47 +23,17 @@
<ref name="parent_elt"/>
<ref name="child_elt"/>
<ref name="repository_elt"/>
- <ref name="route_origin_elt"/>
+ <ref name="ro_elt"/>
<ref name="list_resources_elt"/>
<ref name="report_error_elt"/>
</choice>
</zeroOrMore>
</element>
</start>
- <define name="action">
- <attribute name="action">
- <choice>
- <value>create</value>
- <value>set</value>
- <value>get</value>
- <value>list</value>
- <value>destroy</value>
- </choice>
- </attribute>
- </define>
- <define name="type">
- <attribute name="type">
- <choice>
- <value>query</value>
- <value>reply</value>
- </choice>
- </attribute>
- </define>
- <define name="base64">
- <data type="base64Binary">
- <param name="maxLength">512000</param>
- </data>
- </define>
- <define name="peer_ta">
- <element name="peer_ta">
- <ref name="base64"/>
- </element>
- </define>
- <define name="sql_id">
- <data type="token">
- <param name="maxLength">1024</param>
- </data>
- </define>
+ <!--
+ Combinations of action and type attributes used in later definitions.
+ The same patterns repeat in most of the elements in this protocol.
+ -->
<define name="ctl_cq">
<attribute name="action">
<value>create</value>
@@ -143,6 +114,25 @@
<value>reply</value>
</attribute>
</define>
+ <!-- Base64 encoded DER stuff -->
+ <define name="base64">
+ <data type="base64Binary">
+ <param name="maxLength">512000</param>
+ </data>
+ </define>
+ <!-- How we wrap peer_ta fields (separate element or inline?) -->
+ <define name="peer_ta">
+ <element name="peer_ta">
+ <ref name="base64"/>
+ </element>
+ </define>
+ <!-- Base definition for all fields that are really just SQL primary indices -->
+ <define name="sql_id">
+ <data type="token">
+ <param name="maxLength">1024</param>
+ </data>
+ </define>
+ <!-- <self/> element -->
<define name="self_bool">
<optional>
<attribute name="rekey">
@@ -253,6 +243,7 @@
<ref name="self_id"/>
</element>
</define>
+ <!-- <bsc/> element -->
<define name="bsc_bool">
<optional>
<attribute name="generate_keypair">
@@ -381,6 +372,7 @@
<ref name="bsc_id"/>
</element>
</define>
+ <!-- <parent/> element -->
<define name="parent_id">
<attribute name="parent_id">
<ref name="sql_id"/>
@@ -510,6 +502,7 @@
<ref name="parent_id"/>
</element>
</define>
+ <!-- <child/> element -->
<define name="child_id">
<attribute name="child_id">
<ref name="sql_id"/>
@@ -615,6 +608,7 @@
<ref name="child_id"/>
</element>
</define>
+ <!-- <repository/> element -->
<define name="repository_id">
<attribute name="repository_id">
<ref name="sql_id"/>
@@ -711,19 +705,20 @@
<ref name="repository_id"/>
</element>
</define>
- <define name="route_origin_id">
+ <!-- <route_origin/> element -->
+ <define name="ro_id">
<attribute name="route_origin_id">
<ref name="sql_id"/>
</attribute>
</define>
- <define name="route_origin_bool">
+ <define name="ro_bool">
<optional>
<attribute name="suppress_publication">
<value>yes</value>
</attribute>
</optional>
</define>
- <define name="route_origin_payload">
+ <define name="ro_payload">
<optional>
<attribute name="asn">
<data type="token">
@@ -746,153 +741,166 @@
</attribute>
</optional>
</define>
- <!-- route_origin_elt = element route_origin { action, type, self_id, route_origin_id?, route_origin_bool, route_origin_payload } -->
- <define name="route_origin_elt" combine="choice">
+ <define name="ro_elt" combine="choice">
<element name="route_origin">
<ref name="ctl_cq"/>
<ref name="self_id"/>
- <ref name="route_origin_bool"/>
- <ref name="route_origin_payload"/>
+ <ref name="ro_bool"/>
+ <ref name="ro_payload"/>
</element>
</define>
- <define name="route_origin_elt" combine="choice">
+ <define name="ro_elt" combine="choice">
<element name="route_origin">
<ref name="ctl_cr"/>
<ref name="self_id"/>
- <ref name="route_origin_id"/>
+ <ref name="ro_id"/>
</element>
</define>
- <define name="route_origin_elt" combine="choice">
+ <define name="ro_elt" combine="choice">
<element name="route_origin">
<ref name="ctl_sq"/>
<ref name="self_id"/>
- <ref name="route_origin_id"/>
- <ref name="route_origin_bool"/>
- <ref name="route_origin_payload"/>
+ <ref name="ro_id"/>
+ <ref name="ro_bool"/>
+ <ref name="ro_payload"/>
</element>
</define>
- <define name="route_origin_elt" combine="choice">
+ <define name="ro_elt" combine="choice">
<element name="route_origin">
<ref name="ctl_sr"/>
<ref name="self_id"/>
- <ref name="route_origin_id"/>
+ <ref name="ro_id"/>
</element>
</define>
- <define name="route_origin_elt" combine="choice">
+ <define name="ro_elt" combine="choice">
<element name="route_origin">
<ref name="ctl_gq"/>
<ref name="self_id"/>
- <ref name="route_origin_id"/>
+ <ref name="ro_id"/>
</element>
</define>
- <define name="route_origin_elt" combine="choice">
+ <define name="ro_elt" combine="choice">
<element name="route_origin">
<ref name="ctl_gr"/>
<ref name="self_id"/>
- <ref name="route_origin_id"/>
- <ref name="route_origin_payload"/>
+ <ref name="ro_id"/>
+ <ref name="ro_payload"/>
</element>
</define>
- <define name="route_origin_elt" combine="choice">
+ <define name="ro_elt" combine="choice">
<element name="route_origin">
<ref name="ctl_lq"/>
<ref name="self_id"/>
</element>
</define>
- <define name="route_origin_elt" combine="choice">
+ <define name="ro_elt" combine="choice">
<element name="route_origin">
<ref name="ctl_lr"/>
<ref name="self_id"/>
- <ref name="route_origin_id"/>
- <ref name="route_origin_payload"/>
+ <ref name="ro_id"/>
+ <ref name="ro_payload"/>
</element>
</define>
- <define name="route_origin_elt" combine="choice">
+ <define name="ro_elt" combine="choice">
<element name="route_origin">
<ref name="ctl_dq"/>
<ref name="self_id"/>
- <ref name="route_origin_id"/>
+ <ref name="ro_id"/>
</element>
</define>
- <define name="route_origin_elt" combine="choice">
+ <define name="ro_elt" combine="choice">
<element name="route_origin">
<ref name="ctl_dr"/>
<ref name="self_id"/>
- <ref name="route_origin_id"/>
+ <ref name="ro_id"/>
</element>
</define>
- <define name="list_resources_payload">
- <optional>
- <attribute name="valid_until">
- <data type="token">
- <param name="maxLength">1024</param>
- </data>
- </attribute>
- </optional>
- <zeroOrMore>
- <element name="resource_class">
- <optional>
- <attribute name="subject_name">
- <data type="token">
- <param name="maxLength">1024</param>
- </data>
- </attribute>
- </optional>
- <optional>
- <attribute name="as">
- <data type="token">
- <param name="maxLength">1024</param>
- </data>
- </attribute>
- </optional>
- <optional>
- <attribute name="ipv4">
- <data type="token">
- <param name="maxLength">1024</param>
- </data>
- </attribute>
- </optional>
- <optional>
- <attribute name="ipv6">
- <data type="token">
- <param name="maxLength">1024</param>
- </data>
- </attribute>
- </optional>
- <optional>
- <attribute name="req_as">
- <data type="token">
- <param name="maxLength">1024</param>
- </data>
- </attribute>
- </optional>
- <optional>
- <attribute name="req_ipv4">
- <data type="token">
- <param name="maxLength">1024</param>
- </data>
- </attribute>
- </optional>
- <optional>
- <attribute name="req_ipv6">
- <data type="token">
- <param name="maxLength">1024</param>
- </data>
- </attribute>
- </optional>
- </element>
- </zeroOrMore>
- </define>
+ <!-- <list_resources/> element -->
<define name="list_resources_elt">
<element name="list_resources">
- <ref name="type"/>
- <ref name="self_id"/>
- <optional>
- <ref name="child_id"/>
- </optional>
- <ref name="list_resources_payload"/>
+ <choice>
+ <group>
+ <attribute name="type">
+ <value>query</value>
+ </attribute>
+ <ref name="self_id"/>
+ <optional>
+ <ref name="child_id"/>
+ </optional>
+ </group>
+ <group>
+ <attribute name="type">
+ <value>reply</value>
+ </attribute>
+ <ref name="self_id"/>
+ <optional>
+ <ref name="child_id"/>
+ </optional>
+ <optional>
+ <attribute name="valid_until">
+ <data type="token">
+ <param name="maxLength">1024</param>
+ </data>
+ </attribute>
+ </optional>
+ <zeroOrMore>
+ <element name="resource_class">
+ <optional>
+ <attribute name="subject_name">
+ <data type="token">
+ <param name="maxLength">1024</param>
+ </data>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="as">
+ <data type="token">
+ <param name="maxLength">1024</param>
+ </data>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="ipv4">
+ <data type="token">
+ <param name="maxLength">1024</param>
+ </data>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="ipv6">
+ <data type="token">
+ <param name="maxLength">1024</param>
+ </data>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="req_as">
+ <data type="token">
+ <param name="maxLength">1024</param>
+ </data>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="req_ipv4">
+ <data type="token">
+ <param name="maxLength">1024</param>
+ </data>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="req_ipv6">
+ <data type="token">
+ <param name="maxLength">1024</param>
+ </data>
+ </attribute>
+ </optional>
+ </element>
+ </zeroOrMore>
+ </group>
+ </choice>
</element>
</define>
+ <!-- <report_error/> element -->
<define name="report_error_elt">
<element name="report_error">
<ref name="self_id"/>