diff options
author | Rob Austein <sra@hactrn.net> | 2007-07-23 21:41:23 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2007-07-23 21:41:23 +0000 |
commit | b1c717cb9526f8ac883632e31eaa0e5fa83a04ab (patch) | |
tree | 5a840e29df1d638beacf256f6f23f0341a68d4fd /scripts/left-right-schema.rng | |
parent | d4529dadef8f5f16edaabee532592c28bd0020bc (diff) |
Tighten up checking based on action and type elements.
svn path=/scripts/left-right-schema.rnc; revision=789
Diffstat (limited to 'scripts/left-right-schema.rng')
-rw-r--r-- | scripts/left-right-schema.rng | 270 |
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"/> |