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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
# $Id$
#
# RelaxNG schema for RPKI publication protocol.
#
# Copyright (C) 2012--2014 Dragon Research Labs ("DRL")
# Portions copyright (C) 2009--2011 Internet Systems Consortium ("ISC")
# Portions copyright (C) 2007--2008 American Registry for Internet Numbers ("ARIN")
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notices and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND DRL, ISC, AND ARIN DISCLAIM ALL
# WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DRL,
# ISC, OR ARIN BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
default namespace = "http://www.hactrn.net/uris/rpki/publication-spec/"
# Top level PDU
start = element msg {
attribute version { xsd:positiveInteger { maxInclusive="1" } },
( (attribute type { "query" }, query_elt*) |
(attribute type { "reply" }, reply_elt*) )
}
# PDUs allowed in a query
query_elt = ( config_query | client_query | certificate_query | crl_query |
manifest_query | roa_query | ghostbuster_query )
# PDUs allowed in a reply
reply_elt = ( config_reply | client_reply | certificate_reply | crl_reply |
manifest_reply | roa_reply | ghostbuster_reply | report_error_reply )
# Tag attributes for bulk operations
tag = attribute tag { xsd:token {maxLength="1024" } }
# Base64 encoded DER stuff
#base64 = xsd:base64Binary { maxLength="512000" }
#
# Sadly, it turns out that CRLs can in fact get longer than this for an active CA.
# Remove length limit for now, think about whether to put it back later.
base64 = xsd:base64Binary
# Publication URLs
uri_t = xsd:anyURI { maxLength="4096" }
uri = attribute uri { uri_t }
# Handles on remote objects (replaces passing raw SQL IDs). NB:
# Unlike the up-down protocol, handles in this protocol allow "/" as a
# hierarchy delimiter.
object_handle = xsd:string { maxLength="255" pattern="[\-_A-Za-z0-9/]+" }
# <config/> element (use restricted to repository operator)
# config_handle attribute, create, list, and destroy commands omitted deliberately, see code for details
config_payload = (element bpki_crl { base64 }?)
config_query |= element config { attribute action { "set" }, tag?, config_payload }
config_reply |= element config { attribute action { "set" }, tag? }
config_query |= element config { attribute action { "get" }, tag? }
config_reply |= element config { attribute action { "get" }, tag?, config_payload }
# <client/> element (use restricted to repository operator)
client_handle = attribute client_handle { object_handle }
client_bool = attribute clear_replay_protection { "yes" }?
client_payload = (attribute base_uri { uri_t }?, element bpki_cert { base64 }?, element bpki_glue { base64 }?)
client_query |= element client { attribute action { "create" }, tag?, client_handle, client_bool, client_payload }
client_reply |= element client { attribute action { "create" }, tag?, client_handle }
client_query |= element client { attribute action { "set" }, tag?, client_handle, client_bool, client_payload }
client_reply |= element client { attribute action { "set" }, tag?, client_handle }
client_query |= element client { attribute action { "get" }, tag?, client_handle }
client_reply |= element client { attribute action { "get" }, tag?, client_handle, client_payload }
client_query |= element client { attribute action { "list" }, tag? }
client_reply |= element client { attribute action { "list" }, tag?, client_handle, client_payload }
client_query |= element client { attribute action { "destroy" }, tag?, client_handle }
client_reply |= element client { attribute action { "destroy" }, tag?, client_handle }
# <certificate/> element
certificate_query |= element certificate { attribute action { "publish" }, tag?, uri, base64 }
certificate_reply |= element certificate { attribute action { "publish" }, tag?, uri }
certificate_query |= element certificate { attribute action { "withdraw" }, tag?, uri }
certificate_reply |= element certificate { attribute action { "withdraw" }, tag?, uri }
# <crl/> element
crl_query |= element crl { attribute action { "publish" }, tag?, uri, base64 }
crl_reply |= element crl { attribute action { "publish" }, tag?, uri }
crl_query |= element crl { attribute action { "withdraw" }, tag?, uri }
crl_reply |= element crl { attribute action { "withdraw" }, tag?, uri }
# <manifest/> element
manifest_query |= element manifest { attribute action { "publish" }, tag?, uri, base64 }
manifest_reply |= element manifest { attribute action { "publish" }, tag?, uri }
manifest_query |= element manifest { attribute action { "withdraw" }, tag?, uri }
manifest_reply |= element manifest { attribute action { "withdraw" }, tag?, uri }
# <roa/> element
roa_query |= element roa { attribute action { "publish" }, tag?, uri, base64 }
roa_reply |= element roa { attribute action { "publish" }, tag?, uri }
roa_query |= element roa { attribute action { "withdraw" }, tag?, uri }
roa_reply |= element roa { attribute action { "withdraw" }, tag?, uri }
# <ghostbuster/> element
ghostbuster_query |= element ghostbuster { attribute action { "publish" }, tag?, uri, base64 }
ghostbuster_reply |= element ghostbuster { attribute action { "publish" }, tag?, uri }
ghostbuster_query |= element ghostbuster { attribute action { "withdraw" }, tag?, uri }
ghostbuster_reply |= element ghostbuster { attribute action { "withdraw" }, tag?, uri }
# <report_error/> element
error = xsd:token { maxLength="1024" }
report_error_reply = element report_error {
tag?,
attribute error_code { error },
xsd:string { maxLength="512000" }?
}
# Local Variables:
# indent-tabs-mode: nil
# comment-start: "# "
# comment-start-skip: "#[ \t]*"
# End:
|