aboutsummaryrefslogtreecommitdiff
path: root/scripts/left-right-schema.rnc
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/left-right-schema.rnc')
-rw-r--r--scripts/left-right-schema.rnc127
1 files changed, 127 insertions, 0 deletions
diff --git a/scripts/left-right-schema.rnc b/scripts/left-right-schema.rnc
new file mode 100644
index 00000000..52f7fd82
--- /dev/null
+++ b/scripts/left-right-schema.rnc
@@ -0,0 +1,127 @@
+# $Id$
+#
+# RelaxNG (Compact Syntax) Schema for RPKI left-right protocol.
+#
+# libxml2 (including xmllint) only groks the XML syntax of RelaxNG, so
+# run the output of this script through a converter like trang to get
+# XML syntax.
+
+ default namespace = "http://www.hactrn.net/uris/rpki/left-right-spec/"
+
+ grammar {
+ start = element msg {
+ attribute version { xsd:positiveInteger { maxInclusive="1" } },
+ attribute type { "control_request" | "control_response" | "data_request" | "data_response" | "error" },
+ \payload
+ }
+
+ \payload = ( \self | \bsc | \parent | \child | \repository | \route_origin | \list_resources | \report_error )*
+
+ \self = element self {
+ attribute action { xsd:token { maxLength="1024" } },
+ attribute self_id { xsd:token { maxLength="1024" } }?,
+ attribute rekey { "yes" }?,
+ attribute reissue { "yes" }?,
+ attribute revoke { "yes" }?,
+ attribute run_now { "yes" }?,
+ attribute publish_world_now { "yes" }?,
+ element extension_preference {
+ attribute name { xsd:token { maxLength="1024" } },
+ xsd:string { maxLength="512000" }
+ }*
+ }
+
+ \bsc = element bsc {
+ attribute action { xsd:token { maxLength="1024" } },
+ attribute self_id { xsd:token { maxLength="1024" } },
+ attribute bsc_id { xsd:token { maxLength="1024" } }?,
+ attribute generate_keypair { "yes" }?,
+ attribute key_type { xsd:token { maxLength="1024" } }?,
+ attribute hash_alg { xsd:token { maxLength="1024" } }?,
+ attribute key_length { xsd:token { maxLength="1024" } }?,
+ element signing_cert {
+ xsd:base64Binary { maxLength="512000" }
+ }*,
+ element pkcs10_cert_request {
+ xsd:base64Binary { maxLength="512000" }
+ }?,
+ element public_key {
+ xsd:base64Binary { maxLength="512000" }
+ }?
+ }
+
+ \parent = element parent {
+ attribute action { xsd:token { maxLength="1024" } },
+ attribute self_id { xsd:token { maxLength="1024" } },
+ attribute parent_id { xsd:token { maxLength="1024" } }?,
+ attribute peer_contact { xsd:anyURI { maxLength="1024" } }?,
+ attribute sia_head { xsd:anyURI { maxLength="1024" } }?,
+ attribute bsc_link { xsd:token { maxLength="1024" } }?,
+ attribute repository_link { xsd:token { maxLength="1024" } }?,
+ attribute rekey { "yes" }?,
+ attribute reissue { "yes" }?,
+ attribute revoke { "yes" }?,
+ element peer_ta {
+ xsd:base64Binary { maxLength="512000" }
+ }?
+ }
+
+ \child = element child {
+ attribute action { xsd:token { maxLength="1024" } },
+ attribute self_id { xsd:token { maxLength="1024" } },
+ attribute child_id { xsd:token { maxLength="1024" } }?,
+ attribute bsc_link { xsd:token { maxLength="1024" } }?,
+ attribute child_db_id { xsd:token { maxLength="1024" } }?,
+ attribute reissue { "yes" }?,
+ element peer_ta {
+ xsd:base64Binary { maxLength="512000" }
+ }?
+ }
+
+ \repository = element repository {
+ attribute action { xsd:token { maxLength="1024" } },
+ attribute self_id { xsd:token { maxLength="1024" } },
+ attribute repository_id { xsd:token { maxLength="1024" } }?,
+ attribute peer_contact { xsd:anyURI { maxLength="1024" } }?,
+ attribute bsc_link { xsd:token { maxLength="1024" } }?,
+ element peer_ta {
+ xsd:base64Binary { maxLength="512000" }
+ }?
+ }
+
+ \route_origin = element route_origin {
+ attribute action { xsd:token { maxLength="1024" } },
+ attribute self_id { xsd:token { maxLength="1024" } },
+ attribute route_origin_id { xsd:token { maxLength="1024" } }?,
+ attribute suppress_publication { "yes" }?,
+ attribute asn { xsd:token { maxLength="1024" } }?,
+ attribute ipv4 { xsd:token { maxLength="1024" } }?,
+ attribute ipv6 { xsd:token { maxLength="1024" } }?
+ }
+
+ \list_resources = element list_resources {
+ attribute self_id { xsd:token { maxLength="1024" } },
+ attribute child_id { xsd:token { maxLength="1024" } }?,
+ attribute valid_until { xsd:token { maxLength="1024" } }?,
+ element resource_class {
+ attribute subject { xsd:token { maxLength="1024" } }?,
+ attribute as { xsd:token { maxLength="1024" } }?,
+ attribute ipv4 { xsd:token { maxLength="1024" } }?,
+ attribute ipv6 { xsd:token { maxLength="1024" } }?,
+ attribute req_as { xsd:token { maxLength="1024" } }?,
+ attribute req_ipv4 { xsd:token { maxLength="1024" } }?,
+ attribute req_ipv6 { xsd:token { maxLength="1024" } }?
+ }*
+ }
+
+ \report_error = element report_error {
+ attribute self_id { xsd:token { maxLength="1024" } },
+ attribute error_code { xsd:token { maxLength="1024" } },
+ xsd:string { maxLength="512000" }
+ }
+
+ }
+
+# Local Variables:
+# compile-command: "trang left-right-schema.rnc left-right-schema.rng"
+# End: