cddl 0.8.8 → 0.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/cddl +35 -15
- data/cddl.gemspec +4 -2
- data/data/cddl.abnf +2 -1
- data/lib/cbor-pp-play.rb +1 -0
- data/lib/cddl.rb +234 -39
- data/test/test-cddl.rb +51 -0
- data/test-data/7807.cddl +14 -0
- data/test-data/abignum.cddl +1 -0
- data/test-data/abnf1.cddl +3 -0
- data/test-data/abnf2.cddl +37 -0
- data/test-data/abnf3.cddl +32 -0
- data/test-data/bat.cddl +16 -0
- data/test-data/bpv7.cddl +136 -0
- data/test-data/bpv7a.cddl +181 -0
- data/test-data/bpv7b.cddl +167 -0
- data/test-data/cat-re.cddl +2 -0
- data/test-data/complex-occ.cddl +11 -0
- data/test-data/coral.cddl +10 -0
- data/test-data/coral1.cddl +5 -0
- data/test-data/coral2.cddl +7 -0
- data/test-data/coral3.cddl +7 -0
- data/test-data/det1.cddl +12 -0
- data/test-data/feat1.cddl +4 -0
- data/test-data/feature-controller.cddl +6 -0
- data/test-data/feature-detail.cddl +5 -0
- data/test-data/foo.cddl +1 -0
- data/test-data/homenet-de.cddl +12 -0
- data/test-data/homenet-fe.cddl +12 -0
- data/test-data/jim-cut-2.cddl +11 -0
- data/test-data/jim-cut.cddl +12 -0
- data/test-data/jsoniodef.cddl +719 -0
- data/test-data/lint1.cddl +9 -0
- data/test-data/mdl-ble.cddl +9 -0
- data/test-data/mdl-deve.cddl +54 -0
- data/test-data/mdl-dp.cddl +11 -0
- data/test-data/mdl-mso.cddl +20 -0
- data/test-data/mdl-request.cddl +26 -0
- data/test-data/mdl-response.cddl +66 -0
- data/test-data/mdl.cddl +11 -0
- data/test-data/mon-val.cddl +1 -0
- data/test-data/multipart-ct.cddl +2 -0
- data/test-data/named-group.cddl +7 -0
- data/test-data/non-empty.cddl +5 -0
- data/test-data/oid.cddl +8 -0
- data/test-data/oidbat.cddl +8 -0
- data/test-data/plus.cddl +3 -0
- data/test-data/sasl.cddl +24 -0
- data/test-data/sequence.cddl +1 -0
- data/test-data/sipos.cddl +8 -0
- data/test-data/star-edited.cddl +98 -0
- data/test-data/star.cddl +95 -0
- data/test-data/test-gen.cddl +3 -0
- data/test-data/time.cddl +11 -0
- data/test-data/yangid.cddl +1 -0
- data/test-data/yaron1.cddl +95 -0
- metadata +70 -8
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
start = [Tag0, Tag1004]
|
|
2
|
+
|
|
3
|
+
; for draft-ietf-cbor-date-tag
|
|
4
|
+
Tag1004 = #6.1004(text .abnf full-date)
|
|
5
|
+
; for RFC 7049
|
|
6
|
+
Tag0 = #6.0(text .abnf date-time)
|
|
7
|
+
|
|
8
|
+
full-date = "full-date" .cat rfc3339
|
|
9
|
+
date-time = "date-time" .cat rfc3339
|
|
10
|
+
|
|
11
|
+
; Note the trick of idiomatically starting with a newline, separating
|
|
12
|
+
; off the element in the .cat from the rule-list
|
|
13
|
+
rfc3339 = '
|
|
14
|
+
date-fullyear = 4DIGIT
|
|
15
|
+
date-month = 2DIGIT ; 01-12
|
|
16
|
+
date-mday = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on
|
|
17
|
+
; month/year
|
|
18
|
+
time-hour = 2DIGIT ; 00-23
|
|
19
|
+
time-minute = 2DIGIT ; 00-59
|
|
20
|
+
time-second = 2DIGIT ; 00-58, 00-59, 00-60 based on leap sec
|
|
21
|
+
; rules
|
|
22
|
+
time-secfrac = "." 1*DIGIT
|
|
23
|
+
time-numoffset = ("+" / "-") time-hour ":" time-minute
|
|
24
|
+
time-offset = "Z" / time-numoffset
|
|
25
|
+
|
|
26
|
+
partial-time = time-hour ":" time-minute ":" time-second
|
|
27
|
+
[time-secfrac]
|
|
28
|
+
full-date = date-fullyear "-" date-month "-" date-mday
|
|
29
|
+
full-time = partial-time time-offset
|
|
30
|
+
|
|
31
|
+
date-time = full-date "T" full-time
|
|
32
|
+
' .cat rfc5234-core
|
|
33
|
+
|
|
34
|
+
rfc5234-core = '
|
|
35
|
+
DIGIT = %x30-39 ; 0-9
|
|
36
|
+
; abbreviated here
|
|
37
|
+
'
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
start = [tt, tb, bt, bb]
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
tt = text .abnf '4DIGIT 1FOO
|
|
5
|
+
DIGIT = %x30-39 ; 0-9
|
|
6
|
+
FOO = %xc0-cf
|
|
7
|
+
'
|
|
8
|
+
tb = text .abnfb '4DIGIT 1FOO
|
|
9
|
+
DIGIT = %x30-39 ; 0-9
|
|
10
|
+
FOO = %xc0-cf
|
|
11
|
+
'
|
|
12
|
+
bt = bytes .abnf '4DIGIT 1FOO
|
|
13
|
+
DIGIT = %x30-39 ; 0-9
|
|
14
|
+
FOO = %xc0-cf
|
|
15
|
+
'
|
|
16
|
+
bb = bytes .abnfb '4DIGIT 1FOO
|
|
17
|
+
DIGIT = %x30-39 ; 0-9
|
|
18
|
+
FOO = %xc0-cf
|
|
19
|
+
'
|
|
20
|
+
|
|
21
|
+
; ["7408\xC6", "7073\xC3", h'30383131CD', h'32363738CD']
|
|
22
|
+
; ["5892\u00ca", "2145\u00c6", h'33333338C38B', h'31343033C388']
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
; ** ENCOED UTF-8
|
|
26
|
+
; ** ENCOED UTF-8
|
|
27
|
+
; ** ENCOED UTF-8
|
|
28
|
+
; ** ENCOED UTF-8
|
|
29
|
+
; ["5845\u00c6", "9329\u00cb", h'38393538C389', h'33343230C386']
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
; ["1066\u00cc", "9253\xC9", h'38333533C38A', h'32373337C4']
|
data/test-data/bat.cddl
ADDED
data/test-data/bpv7.cddl
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
start = bundle
|
|
2
|
+
|
|
3
|
+
dtn-time = uint
|
|
4
|
+
|
|
5
|
+
creation-timestamp = [dtn-time, sequence: uint]
|
|
6
|
+
|
|
7
|
+
eid-generic = [uri-code, SSP: any]
|
|
8
|
+
|
|
9
|
+
uri-code = uint
|
|
10
|
+
|
|
11
|
+
eid = eid-choice .within eid-generic
|
|
12
|
+
|
|
13
|
+
eid-choice /= [dtn-code, SSP: (text / 0)]
|
|
14
|
+
|
|
15
|
+
dtn-code = 1 ; TBD
|
|
16
|
+
|
|
17
|
+
eid-choice /= [ipn-code, SSP: [nodenum: uint, servicenum: uint]]
|
|
18
|
+
|
|
19
|
+
ipn-code = 2 ; TBD
|
|
20
|
+
|
|
21
|
+
bundle-control-flags = uint .bits bundleflagbits
|
|
22
|
+
|
|
23
|
+
bundleflagbits = &(
|
|
24
|
+
|
|
25
|
+
reserved: 15
|
|
26
|
+
|
|
27
|
+
reserved: 14
|
|
28
|
+
|
|
29
|
+
reserved: 13
|
|
30
|
+
|
|
31
|
+
bundle-deletion-status-reports-are-requested: 12
|
|
32
|
+
|
|
33
|
+
bundle-delivery-status-reports-are-requested: 11
|
|
34
|
+
|
|
35
|
+
bundle-forwarding-status-reports-are-requested: 10
|
|
36
|
+
|
|
37
|
+
reserved: 9
|
|
38
|
+
|
|
39
|
+
bundle-reception-status-reports-are-requested: 8
|
|
40
|
+
|
|
41
|
+
bundle-contains-a-Manifest-block: 7
|
|
42
|
+
|
|
43
|
+
status-time-is-requested-in-all-status-reports: 6
|
|
44
|
+
|
|
45
|
+
user-application-acknowledgement-is-requested: 5
|
|
46
|
+
|
|
47
|
+
reserved: 4
|
|
48
|
+
|
|
49
|
+
reserved: 3
|
|
50
|
+
|
|
51
|
+
bundle-must-not-be-fragmented: 2
|
|
52
|
+
|
|
53
|
+
payload-is-an-administrative-record: 1
|
|
54
|
+
|
|
55
|
+
bundle-is-a-fragment: 0
|
|
56
|
+
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
crc = bytes
|
|
60
|
+
|
|
61
|
+
block-control-flags = uint .bits blockflagbits
|
|
62
|
+
|
|
63
|
+
blockflagbits = &(
|
|
64
|
+
|
|
65
|
+
reserved: 7
|
|
66
|
+
|
|
67
|
+
reserved: 6
|
|
68
|
+
|
|
69
|
+
reserved: 5
|
|
70
|
+
|
|
71
|
+
reserved: 4
|
|
72
|
+
|
|
73
|
+
bundle-must-be-deleted-if-block-cannot-be-processed: 3
|
|
74
|
+
|
|
75
|
+
status-report-must-be-transmitted-if-block-cannot-be-processed: 2
|
|
76
|
+
|
|
77
|
+
block-must-be-removed-from-bundle-if-it-cannot-be-processed: 1
|
|
78
|
+
|
|
79
|
+
block-must-be-replicated-in-every-fragment: 0
|
|
80
|
+
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
bundle = [primary-block, *extension-block, payload-block]
|
|
84
|
+
|
|
85
|
+
primary-block = [
|
|
86
|
+
|
|
87
|
+
version: 7,
|
|
88
|
+
|
|
89
|
+
bundle-control-flags,
|
|
90
|
+
|
|
91
|
+
crc-type: uint,
|
|
92
|
+
|
|
93
|
+
destination: eid,
|
|
94
|
+
|
|
95
|
+
source-node: eid,
|
|
96
|
+
|
|
97
|
+
report-to: eid,
|
|
98
|
+
|
|
99
|
+
creation-timestamp,
|
|
100
|
+
|
|
101
|
+
lifetime: uint,
|
|
102
|
+
|
|
103
|
+
? fragment-offset: uint,
|
|
104
|
+
|
|
105
|
+
? total-application-data-length: uint,
|
|
106
|
+
|
|
107
|
+
? crc,
|
|
108
|
+
|
|
109
|
+
]
|
|
110
|
+
|
|
111
|
+
canonical-block = [
|
|
112
|
+
|
|
113
|
+
block-type-code: uint,
|
|
114
|
+
|
|
115
|
+
canonical-block-common,
|
|
116
|
+
|
|
117
|
+
? crc
|
|
118
|
+
|
|
119
|
+
]
|
|
120
|
+
|
|
121
|
+
canonical-block-common = (
|
|
122
|
+
|
|
123
|
+
block-number: uint,
|
|
124
|
+
|
|
125
|
+
block-control-flags,
|
|
126
|
+
|
|
127
|
+
crc-type: uint,
|
|
128
|
+
|
|
129
|
+
block-type-specific-data: bytes
|
|
130
|
+
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
payload-block = ([block-type-code: 1, canonical-block-common, ?crc]) .within canonical-block
|
|
135
|
+
|
|
136
|
+
extension-block = ([block-type-code: (uint .ne 1), canonical-block-common, ?crc]) .within canonical-block
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
start = bundle / #6.55799(bundle)
|
|
2
|
+
|
|
3
|
+
; Times before 2000 are invalid
|
|
4
|
+
dtn-time = uint
|
|
5
|
+
|
|
6
|
+
; CRC enumerated type
|
|
7
|
+
crc-type = 0 / 1 / 2
|
|
8
|
+
; Either 16-bit or 32-bit
|
|
9
|
+
crc-value = (bstr .size 2) / (bstr .size 4)
|
|
10
|
+
|
|
11
|
+
creation-timestamp = [dtn-time, sequence: uint]
|
|
12
|
+
|
|
13
|
+
eid = $eid-choice .within eid-structure
|
|
14
|
+
eid-structure = [
|
|
15
|
+
uri-code: uint,
|
|
16
|
+
SSP: any
|
|
17
|
+
]
|
|
18
|
+
$eid-choice /= [
|
|
19
|
+
uri-code: 1,
|
|
20
|
+
SSP: (tstr / 0)
|
|
21
|
+
]
|
|
22
|
+
$eid-choice /= [
|
|
23
|
+
uri-code: 2,
|
|
24
|
+
SSP: [
|
|
25
|
+
nodenum: uint,
|
|
26
|
+
servicenum: uint
|
|
27
|
+
]
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
bundle-control-flags = uint .bits bundleflagbits
|
|
31
|
+
bundleflagbits = &(
|
|
32
|
+
reserved: 15
|
|
33
|
+
reserved: 14
|
|
34
|
+
reserved: 13
|
|
35
|
+
bundle-deletion-status-reports-are-requested: 12
|
|
36
|
+
bundle-delivery-status-reports-are-requested: 11
|
|
37
|
+
bundle-forwarding-status-reports-are-requested: 10
|
|
38
|
+
reserved: 9
|
|
39
|
+
bundle-reception-status-reports-are-requested: 8
|
|
40
|
+
bundle-contains-a-Manifest-block: 7
|
|
41
|
+
status-time-is-requested-in-all-status-reports: 6
|
|
42
|
+
user-application-acknowledgement-is-requested: 5
|
|
43
|
+
reserved: 4
|
|
44
|
+
reserved: 3
|
|
45
|
+
bundle-must-not-be-fragmented: 2
|
|
46
|
+
payload-is-an-administrative-record: 1
|
|
47
|
+
bundle-is-a-fragment: 0
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
block-control-flags = uint .bits blockflagbits
|
|
51
|
+
blockflagbits = &(
|
|
52
|
+
reserved: 7
|
|
53
|
+
reserved: 6
|
|
54
|
+
reserved: 5
|
|
55
|
+
reserved: 4
|
|
56
|
+
bundle-must-be-deleted-if-block-cannot-be-processed: 3
|
|
57
|
+
status-report-must-be-transmitted-if-block-cannot-be-processed: 2
|
|
58
|
+
block-must-be-removed-from-bundle-if-it-cannot-be-processed: 1
|
|
59
|
+
block-must-be-replicated-in-every-fragment: 0
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
bundle = [primary-block, *extension-block, payload-block]
|
|
63
|
+
|
|
64
|
+
primary-block = [
|
|
65
|
+
version: 7,
|
|
66
|
+
bundle-control-flags,
|
|
67
|
+
crc-type,
|
|
68
|
+
destination: eid,
|
|
69
|
+
source-node: eid,
|
|
70
|
+
report-to: eid,
|
|
71
|
+
creation-timestamp,
|
|
72
|
+
lifetime: uint,
|
|
73
|
+
? (
|
|
74
|
+
fragment-offset: uint,
|
|
75
|
+
; total-application-data-length: uint,
|
|
76
|
+
)
|
|
77
|
+
? crc-value,
|
|
78
|
+
]
|
|
79
|
+
|
|
80
|
+
; Abstract shared structure of all non-primary blocks
|
|
81
|
+
canonical-block-structure = [
|
|
82
|
+
block-type-code: uint,
|
|
83
|
+
block-number: uint,
|
|
84
|
+
block-control-flags,
|
|
85
|
+
crc-type,
|
|
86
|
+
; Each block type defines the content within the bytestring
|
|
87
|
+
block-type-specific-data,
|
|
88
|
+
? crc-value
|
|
89
|
+
]
|
|
90
|
+
block-type-specific-data = bstr / #6.24(bstr)
|
|
91
|
+
; Extension block type, which does not specialize any more than the code/number
|
|
92
|
+
extension-block = $extension-block-structure .within canonical-block-structure
|
|
93
|
+
$extension-block-structure = [
|
|
94
|
+
block-type-code: (uint .gt 1),
|
|
95
|
+
extension-block-number,
|
|
96
|
+
block-control-flags,
|
|
97
|
+
crc-type,
|
|
98
|
+
($extension-block-data .within block-type-specific-data)
|
|
99
|
+
? crc-value
|
|
100
|
+
]
|
|
101
|
+
extension-block-number = (uint .ne 0)
|
|
102
|
+
; Payload block type
|
|
103
|
+
payload-block = payload-block-structure .within canonical-block-structure
|
|
104
|
+
payload-block-structure = [
|
|
105
|
+
block-type-code: 1,
|
|
106
|
+
block-number: 0,
|
|
107
|
+
block-control-flags,
|
|
108
|
+
crc-type,
|
|
109
|
+
($payload-block-data .within block-type-specific-data)
|
|
110
|
+
? crc-value
|
|
111
|
+
]
|
|
112
|
+
|
|
113
|
+
; Arbitrary payload data
|
|
114
|
+
$payload-block-data /= bstr
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
; Administrative record as a payload data specialization
|
|
118
|
+
$payload-block-data /= block-type-specific-data .cbor admin-record
|
|
119
|
+
admin-record = $admin-record .within admin-record-structure
|
|
120
|
+
admin-record-structure = [
|
|
121
|
+
record-type-code: uint,
|
|
122
|
+
record-content: any
|
|
123
|
+
]
|
|
124
|
+
; Only one defined record type
|
|
125
|
+
$admin-record /= [1, status-record-content]
|
|
126
|
+
status-record-content = [
|
|
127
|
+
bundle-status-information,
|
|
128
|
+
status-report-reason-code: uint,
|
|
129
|
+
source-node-eid: eid,
|
|
130
|
+
subject-creation-timestamp: creation-timestamp,
|
|
131
|
+
? (
|
|
132
|
+
subject-payload-offset: uint,
|
|
133
|
+
subject-payload-length: uint
|
|
134
|
+
)
|
|
135
|
+
]
|
|
136
|
+
bundle-status-information = [
|
|
137
|
+
reporting-node-received-bundle: status-info-content,
|
|
138
|
+
reporting-node-forwarded-bundle: status-info-content,
|
|
139
|
+
reporting-node-delivered-bundle: status-info-content,
|
|
140
|
+
reporting-node-deleted-bundle: status-info-content
|
|
141
|
+
]
|
|
142
|
+
status-info-content = [
|
|
143
|
+
status-indicator: bool,
|
|
144
|
+
? timestamp: dtn-time
|
|
145
|
+
]
|
|
146
|
+
|
|
147
|
+
; Previous Node extension block
|
|
148
|
+
$extension-block-structure /= [
|
|
149
|
+
block-type-code: 7,
|
|
150
|
+
extension-block-number,
|
|
151
|
+
block-control-flags,
|
|
152
|
+
crc-type,
|
|
153
|
+
(block-type-specific-data .cbor ext-data-previous-node)
|
|
154
|
+
? crc-value
|
|
155
|
+
]
|
|
156
|
+
ext-data-previous-node = eid
|
|
157
|
+
|
|
158
|
+
; Bundle Age extension block
|
|
159
|
+
$extension-block-structure /= [
|
|
160
|
+
block-type-code: 8,
|
|
161
|
+
extension-block-number,
|
|
162
|
+
block-control-flags,
|
|
163
|
+
crc-type,
|
|
164
|
+
(block-type-specific-data .cbor ext-data-bundle-age)
|
|
165
|
+
? crc-value
|
|
166
|
+
]
|
|
167
|
+
ext-data-bundle-age = uint
|
|
168
|
+
|
|
169
|
+
; Hop Count extension block
|
|
170
|
+
$extension-block-structure /= [
|
|
171
|
+
block-type-code: 9,
|
|
172
|
+
extension-block-number,
|
|
173
|
+
block-control-flags,
|
|
174
|
+
crc-type,
|
|
175
|
+
(block-type-specific-data .cbor ext-data-hop-count)
|
|
176
|
+
? crc-value
|
|
177
|
+
]
|
|
178
|
+
ext-data-hop-count = [
|
|
179
|
+
hop-limit: uint,
|
|
180
|
+
hop-count: uint
|
|
181
|
+
]
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
start = bundle / #6.55799(bundle)
|
|
2
|
+
|
|
3
|
+
; Times before 2000 are invalid
|
|
4
|
+
dtn-time = uint
|
|
5
|
+
|
|
6
|
+
; CRC enumerated type
|
|
7
|
+
crc-type = 0 / 1 / 2
|
|
8
|
+
; Either 16-bit or 32-bit
|
|
9
|
+
crc-value = (bstr .size 2) / (bstr .size 4)
|
|
10
|
+
|
|
11
|
+
creation-timestamp = [dtn-time, sequence: uint]
|
|
12
|
+
|
|
13
|
+
eid = $eid-choice .within eid-structure
|
|
14
|
+
eid-structure = [
|
|
15
|
+
uri-code: uint,
|
|
16
|
+
SSP: any
|
|
17
|
+
]
|
|
18
|
+
$eid-choice /= [
|
|
19
|
+
uri-code: 1,
|
|
20
|
+
SSP: (tstr / 0)
|
|
21
|
+
]
|
|
22
|
+
$eid-choice /= [
|
|
23
|
+
uri-code: 2,
|
|
24
|
+
SSP: [
|
|
25
|
+
nodenum: uint,
|
|
26
|
+
servicenum: uint
|
|
27
|
+
]
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
; The root bundle array
|
|
31
|
+
bundle = [primary-block, *extension-block, payload-block]
|
|
32
|
+
|
|
33
|
+
primary-block = [
|
|
34
|
+
version: 7,
|
|
35
|
+
bundle-control-flags,
|
|
36
|
+
crc-type,
|
|
37
|
+
destination: eid,
|
|
38
|
+
source-node: eid,
|
|
39
|
+
report-to: eid,
|
|
40
|
+
creation-timestamp,
|
|
41
|
+
lifetime: uint,
|
|
42
|
+
? (
|
|
43
|
+
fragment-offset: uint,
|
|
44
|
+
total-application-data-length: uint,
|
|
45
|
+
)
|
|
46
|
+
? crc-value,
|
|
47
|
+
]
|
|
48
|
+
bundle-control-flags = uint .bits bundleflagbits
|
|
49
|
+
bundleflagbits = &(
|
|
50
|
+
reserved: 15,
|
|
51
|
+
reserved: 14,
|
|
52
|
+
reserved: 13,
|
|
53
|
+
bundle-deletion-status-reports-are-requested: 12,
|
|
54
|
+
bundle-delivery-status-reports-are-requested: 11,
|
|
55
|
+
bundle-forwarding-status-reports-are-requested: 10,
|
|
56
|
+
reserved: 9,
|
|
57
|
+
bundle-reception-status-reports-are-requested: 8,
|
|
58
|
+
bundle-contains-a-Manifest-block: 7,
|
|
59
|
+
status-time-is-requested-in-all-status-reports: 6,
|
|
60
|
+
user-application-acknowledgement-is-requested: 5,
|
|
61
|
+
reserved: 4,
|
|
62
|
+
reserved: 3,
|
|
63
|
+
bundle-must-not-be-fragmented: 2,
|
|
64
|
+
payload-is-an-administrative-record: 1,
|
|
65
|
+
bundle-is-a-fragment: 0
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
; Abstract shared structure of all non-primary blocks
|
|
69
|
+
canonical-block-structure = [
|
|
70
|
+
block-type-code: uint,
|
|
71
|
+
block-number: uint,
|
|
72
|
+
block-control-flags,
|
|
73
|
+
crc-type,
|
|
74
|
+
; Each block type defines the content within the bytestring
|
|
75
|
+
block-type-specific-data,
|
|
76
|
+
? crc-value
|
|
77
|
+
]
|
|
78
|
+
block-control-flags = uint .bits blockflagbits
|
|
79
|
+
blockflagbits = &(
|
|
80
|
+
reserved: 7,
|
|
81
|
+
reserved: 6,
|
|
82
|
+
reserved: 5,
|
|
83
|
+
reserved: 4,
|
|
84
|
+
bundle-must-be-deleted-if-block-cannot-be-processed: 3,
|
|
85
|
+
status-report-must-be-transmitted-if-block-cannot-be-processed: 2,
|
|
86
|
+
block-must-be-removed-from-bundle-if-it-cannot-be-processed: 1,
|
|
87
|
+
block-must-be-replicated-in-every-fragment: 0
|
|
88
|
+
)
|
|
89
|
+
block-type-specific-data = bstr / #6.24(bstr)
|
|
90
|
+
; Actual CBOR data embedded in a bytestring, with optional tag to indicate so
|
|
91
|
+
embedded-cbor<Item> = (bstr .cbor Item) / #6.24(bstr .cbor Item)
|
|
92
|
+
|
|
93
|
+
; Extension block type, which does not specialize other than the code/number
|
|
94
|
+
extension-block = $extension-block-structure .within canonical-block-structure
|
|
95
|
+
; Generic shared structure of all non-primary blocks
|
|
96
|
+
extension-block-use<CodeValue, BlockData> = [
|
|
97
|
+
block-type-code: CodeValue,
|
|
98
|
+
block-number: (uint .ne 0),
|
|
99
|
+
block-control-flags,
|
|
100
|
+
crc-type,
|
|
101
|
+
BlockData,
|
|
102
|
+
? crc-value
|
|
103
|
+
]
|
|
104
|
+
|
|
105
|
+
; Payload block type
|
|
106
|
+
payload-block = payload-block-structure .within canonical-block-structure
|
|
107
|
+
payload-block-structure = [
|
|
108
|
+
block-type-code: 1,
|
|
109
|
+
block-number: 0,
|
|
110
|
+
block-control-flags,
|
|
111
|
+
crc-type,
|
|
112
|
+
$payload-block-data,
|
|
113
|
+
? crc-value
|
|
114
|
+
]
|
|
115
|
+
|
|
116
|
+
; Arbitrary payload data, including non-CBOR bytestring
|
|
117
|
+
$payload-block-data /= block-type-specific-data
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
; Administrative record as a payload data specialization
|
|
121
|
+
$payload-block-data /= embedded-cbor<admin-record>
|
|
122
|
+
admin-record = $admin-record .within admin-record-structure
|
|
123
|
+
admin-record-structure = [
|
|
124
|
+
record-type-code: uint,
|
|
125
|
+
record-content: any
|
|
126
|
+
]
|
|
127
|
+
; Only one defined record type
|
|
128
|
+
$admin-record /= [1, status-record-content]
|
|
129
|
+
status-record-content = [
|
|
130
|
+
bundle-status-information,
|
|
131
|
+
status-report-reason-code: uint,
|
|
132
|
+
source-node-eid: eid,
|
|
133
|
+
subject-creation-timestamp: creation-timestamp,
|
|
134
|
+
? (
|
|
135
|
+
subject-payload-offset: uint,
|
|
136
|
+
subject-payload-length: uint
|
|
137
|
+
)
|
|
138
|
+
]
|
|
139
|
+
bundle-status-information = [
|
|
140
|
+
reporting-node-received-bundle: status-info-content,
|
|
141
|
+
reporting-node-forwarded-bundle: status-info-content,
|
|
142
|
+
reporting-node-delivered-bundle: status-info-content,
|
|
143
|
+
reporting-node-deleted-bundle: status-info-content
|
|
144
|
+
]
|
|
145
|
+
status-info-content = [
|
|
146
|
+
status-indicator: bool,
|
|
147
|
+
? timestamp: dtn-time
|
|
148
|
+
]
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
; Previous Node extension block
|
|
152
|
+
$extension-block-structure /=
|
|
153
|
+
extension-block-use<7, embedded-cbor<ext-data-previous-node>>
|
|
154
|
+
ext-data-previous-node = eid
|
|
155
|
+
|
|
156
|
+
; Bundle Age extension block
|
|
157
|
+
$extension-block-structure /=
|
|
158
|
+
extension-block-use<8, embedded-cbor<ext-data-bundle-age>>
|
|
159
|
+
ext-data-bundle-age = uint
|
|
160
|
+
|
|
161
|
+
; Hop Count extension block
|
|
162
|
+
$extension-block-structure /=
|
|
163
|
+
extension-block-use<9, embedded-cbor<ext-data-hop-count>>
|
|
164
|
+
ext-data-hop-count = [
|
|
165
|
+
hop-limit: uint,
|
|
166
|
+
hop-count: uint
|
|
167
|
+
]
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
foo = {
|
|
2
|
+
2*4 any => any
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
;;sed -n 's/^; //p' complex-occ.cddl | sh
|
|
6
|
+
; echo '{}' | cddl complex-occ.cddl v -
|
|
7
|
+
; echo '{"1": 2}' | cddl complex-occ.cddl v -
|
|
8
|
+
; echo '{"1": 2, "2": 3}' | cddl complex-occ.cddl v -
|
|
9
|
+
; echo '{"1": 2, "2": 3, "3": 4}' | cddl complex-occ.cddl v -
|
|
10
|
+
; echo '{"1": 2, "2": 3, "3": 4, "4": 5}' | cddl complex-occ.cddl v -
|
|
11
|
+
; echo '{"1": 2, "2": 3, "3": 4, "4": 5, "5": 6}' | cddl complex-occ.cddl v -
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
coral = [+ s-exp]
|
|
2
|
+
s-exp = ((text, value, ?coral) // directive)
|
|
3
|
+
value = ctext / cbytes / cint / cfloat / cboolean / cdatetime / null / {"_link": tstr} / {"_form": tstr}
|
|
4
|
+
ctext = text / {"_text": text}
|
|
5
|
+
cint = {"_int": int}
|
|
6
|
+
cfloat = float / {"_float": float}
|
|
7
|
+
cboolean = bool / {"_bool": bool}
|
|
8
|
+
cdatetime = {"_datetime": text}
|
|
9
|
+
cbytes = {"_bytes": text} ; base64url no padding
|
|
10
|
+
directive = (("_using", {* text => text}) // ("_base", text))
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
document = {*element}
|
|
2
|
+
element = (text => value / [2*value])
|
|
3
|
+
value = text / float / bool / tagged
|
|
4
|
+
tagged = {"_int":int,*element} / {"_float":float,*element} / {"_text":text,*element} / {"_bytes":bytes,*element} / {"_datetime":text,*element} / {"_bool":bool,*element} / {"_link":ciri,*element} / {"_form":ciri,*element}
|
|
5
|
+
ciri = text ; full IRI given
|
|
6
|
+
/ [text] ; suffix for default prefix
|
|
7
|
+
/ [text, text] ; prefix, suffix for that prefix
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
document = {? ("_using" => {* text => text}), *element}
|
|
2
|
+
element = (text => value / [2*value])
|
|
3
|
+
value = text / float / bool / tagged / {*element}
|
|
4
|
+
tagged = {"_int": int, *element} / {"_float": float, *element} / {"_text": text, *element} / {"_bytes": bytes, *element} / {"_datetime": text, *element} / {"_bool": bool, *element} / {"_link": ciri, *element} / {"_form": ciri, *element}
|
|
5
|
+
ciri = text ; full IRI given
|
|
6
|
+
/ [text] ; suffix for default prefix
|
|
7
|
+
/ [text, text] ; prefix, suffix for that prefix
|
data/test-data/det1.cddl
ADDED
data/test-data/foo.cddl
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
foo=bar=int
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
hna-configuration = {
|
|
2
|
+
"registred_domain" : tstr,
|
|
3
|
+
"dm" : tstr,
|
|
4
|
+
? "dm_transport" : "53" // "DoT" // "DoH" // "DoQ"
|
|
5
|
+
? "dm_port" : uint,
|
|
6
|
+
? "dm_acl" : hna-acl // [ +hna-acl ]
|
|
7
|
+
? "hna_auth_method": hna-auth-method
|
|
8
|
+
? "hna_certificate": tstr
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
hna-acl = tstr
|
|
12
|
+
hna-auth-method /= "certificate"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
hna-configuration = {
|
|
2
|
+
"registered_domain" : tstr,
|
|
3
|
+
"dm" : tstr,
|
|
4
|
+
? "dm_transport" : "53" / "DoT" / "DoH" / "DoQ"
|
|
5
|
+
? "dm_port" : uint,
|
|
6
|
+
? "dm_acl" : hna-acl / [ +hna-acl ]
|
|
7
|
+
? "hna_auth_method": hna-auth-method
|
|
8
|
+
? "hna_certificate": tstr
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
hna-acl = tstr
|
|
12
|
+
hna-auth-method /= "certificate"
|