aboutsummaryrefslogtreecommitdiff
path: root/scripts/left-right-schema.rnc
blob: 11538150d7d74e9af99637322508a0115802fd7a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# $Id$
#
# RelaxNG (Compact Syntax) Schema for RPKI left-right protocol.
#
# libxml2 (including xmllint) only groks the XML syntax of RelaxNG, so
# run the compact syntax through trang to get XML syntax.

default namespace = "http://www.hactrn.net/uris/rpki/left-right-spec/"

start = element msg {
  attribute version { xsd:positiveInteger { maxInclusive="1" } },
  ( self | bsc | \parent | child | repository | route_origin | list_resources | report_error )*
}

action = attribute action { "create" | "set" | "get" | "list" | "destroy" }

type = attribute type { "query" | "reply" }

base64 = xsd:base64Binary { maxLength="512000" }

peer_ta = element peer_ta { base64 }

self = element self {
  action, type,
  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 {
  action, type,
  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 { base64 }*,
  element pkcs10_cert_request { base64 }?,
  element public_key { base64 }?
}

\parent = element parent {
  action, type,
  attribute self_id { xsd:token { maxLength="1024" } },
  attribute parent_id { xsd:token { maxLength="1024" } }?,
  attribute peer_contact { xsd:anyURI { maxLength="1024" } }?,
  attribute sia_base { 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" }?,
  peer_ta?
}

child = element child {
  action, type,
  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" }?,
  peer_ta?
}

repository = element repository {
  action, type,
  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" } }?,
  peer_ta?
}

route_origin = element route_origin {
  action, type,
  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 {
  type,
  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_name { 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" }
}