idnits 2.17.1 draft-newton-weirds-route-policy-00.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** The document seems to lack a Security Considerations section. ** The document seems to lack an IANA Considerations section. (See Section 2.2 of https://www.ietf.org/id-info/checklist for how to handle the case when there are no actions for IANA.) ** The document seems to lack a both a reference to RFC 2119 and the recommended RFC 2119 boilerplate, even if it appears to use RFC 2119 keywords. RFC 2119 keyword, line 63: '...olicy extensions SHOULD add the follow...' RFC 2119 keyword, line 95: '...he object member MUST be one of the fo...' RFC 2119 keyword, line 309: '...ecified by RDAP) SHOULD contain links ...' RFC 2119 keyword, line 348: '...ecified by RDAP) SHOULD contain links ...' RFC 2119 keyword, line 387: '...pecified by RDAP) SHOULD contain links...' Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year -- The document date (July 3, 2014) is 3585 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) No issues found here. Summary: 3 errors (**), 0 flaws (~~), 1 warning (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group A. Newton 3 Internet-Draft ARIN 4 Intended status: Standards Track J. Aehlen 5 Expires: January 4, 2015 RIPE NCC 6 C. Martinez 7 LACNIC 8 J. Snijders 9 Independent 10 July 3, 2014 12 Route Policy Extensions for RDAP 13 draft-newton-weirds-route-policy-00 15 Abstract 17 This document describes extensions to the RDAP JSON data model to 18 express route policy. 20 Status of This Memo 22 This Internet-Draft is submitted in full conformance with the 23 provisions of BCP 78 and BCP 79. 25 Internet-Drafts are working documents of the Internet Engineering 26 Task Force (IETF). Note that other groups may also distribute 27 working documents as Internet-Drafts. The list of current Internet- 28 Drafts is at http://datatracker.ietf.org/drafts/current/. 30 Internet-Drafts are draft documents valid for a maximum of six months 31 and may be updated, replaced, or obsoleted by other documents at any 32 time. It is inappropriate to use Internet-Drafts as reference 33 material or to cite them other than as "work in progress." 35 This Internet-Draft will expire on January 4, 2015. 37 Copyright Notice 39 Copyright (c) 2014 IETF Trust and the persons identified as the 40 document authors. All rights reserved. 42 This document is subject to BCP 78 and the IETF Trust's Legal 43 Provisions Relating to IETF Documents 44 (http://trustee.ietf.org/license-info) in effect on the date of 45 publication of this document. Please review these documents 46 carefully, as they describe your rights and restrictions with respect 47 to this document. Code Components extracted from this document must 48 include Simplified BSD License text as described in Section 4.e of 49 the Trust Legal Provisions and are provided without warranty as 50 described in the Simplified BSD License. 52 1. Introduction 54 The base JSON data model for RDAP contains objects for domain name 55 registries (DNRs) and Regional Internet Registries (RIRs). It does 56 not contain objects for Internet Routing Registries (IRRs). 58 This document describes extensions to the RDAP data model to express 59 route policy. 61 2. RDAP Compliance 63 Servers expressing route policy extensions SHOULD add the following 64 string to rdapConformance array: "route_policy_level_0". The 65 following is an example: 67 An example rdapConformance data structure: 69 "rdapConformance" : 70 [ 71 "rdap_level_0", 72 "route_policy_level_0" 73 ] 75 Figure 1 77 JSON names for extensions in RDAP should be prefixed with an 78 extension identifier. The extension identifier used by this 79 extension is "rp0". 81 This document defines one extenion to the RDAP autnum object class 82 ("rp0_policies") and three new RDAP object classes which map to RPSL 83 classes: route, route set, and autnum set. The RDAP equivalent of an 84 RPSL maintainer object is the entity object class. Each of object 85 classes defined by this document may have the links, entities, and 86 other common data structures defined by RDAP. 88 3. Autnum Route Policies 90 The rp0_policies is an array containing objects. Each object in the 91 array contains one member, the value of which is a string containing 92 routing policy. Use of the rp0_policies array is as an optional 93 member to the RDAP autnum object class. 95 The name of the object member MUST be one of the following names: 97 import 99 mp-import 101 import-via 103 export 105 mp-export 107 export-via 109 An example rp0_policies data structure: 111 "rp0_policies": 112 [ 113 { "import-via": 114 "AS6777 from AS-ANY EXCEPT (AS1103 AND AS1103) accept ANY" }, 115 { "export-via": 116 "AS6777 to AS-ANY EXCEPT (AS1 AND AS1103) announce AS-SNIJDERS" } 117 ] 119 Figure 2 121 As rp0_policies is an array, the order of the objects in the array is 122 to be observed during processing. 124 The following is an example of a JSON object representing an autnum 125 with route policy extensions. For illustrative purposes, it does not 126 include rdapConformance or notices data structures. 128 { 129 "handle" : "XXXX-RIR", 130 "startAutnum" : 10, 131 "endAutnum" : 15, 132 "name": "AS-RTR-1", 133 "type" : "DIRECT ALLOCATION", 134 "status" : [ "allocated" ], 135 "country": "AU", 136 "remarks" : 137 [ 138 { 139 "description" : 140 [ 141 "She sells sea shells down by the sea shore.", 142 "Originally written by Terry Sullivan." 143 ] 145 } 146 ], 147 "links" : 148 [ 149 { 150 "value" : "http://example.net/autnum/xxxx", 151 "rel" : "self", 152 "href" : "http://example.net/autnum/xxxx", 153 "type" : "application/rdap+json" 154 } 155 ], 156 "events" : 157 [ 158 { 159 "eventAction" : "registration", 160 "eventDate" : "1990-12-31T23:59:60Z" 161 }, 162 { 163 "eventAction" : "last changed", 164 "eventDate" : "1991-12-31T23:59:60Z" 165 } 166 ], 167 "entities" : 168 [ 169 { 170 "handle" : "XXXX", 171 "vcardArray":[ 172 "vcard", 173 [ 174 ["version", {}, "text", "4.0"], 175 ["fn", {}, "text", "Joe User"], 176 ["kind", {}, "text", "individual"], 177 ["lang", { 178 "pref":"1" 179 }, "language-tag", "fr"], 180 ["lang", { 181 "pref":"2" 182 }, "language-tag", "en"], 183 ["org", { 184 "type":"work" 185 }, "text", "Example"], 186 ["title", {}, "text", "Research Scientist"], 187 ["role", {}, "text", "Project Lead"], 188 ["adr", 189 { "type":"work" }, 190 "text", 191 [ 192 "", 193 "Suite 1234", 194 "4321 Rue Somewhere", 195 "Quebec", 196 "QC", 197 "G1V 2M2", 198 "Canada" 199 ] 200 ], 201 ["tel", 202 { "type":["work", "voice"], "pref":"1" }, 203 "uri", "tel:+1-555-555-1234;ext=102" 204 ], 205 ["email", 206 { "type":"work" }, 207 "text", "joe.user@example.com" 208 ], 209 ] 210 ], 211 "roles" : [ "registrant" ], 212 "remarks" : 213 [ 214 { 215 "description" : 216 [ 217 "She sells sea shells down by the sea shore.", 218 "Originally written by Terry Sullivan." 219 ] 220 } 221 ], 222 "links" : 223 [ 224 { 225 "value" : "http://example.net/entity/XXXX", 226 "rel" : "self", 227 "href" : "http://example.net/entity/XXXX", 228 "type" : "application/rdap+json" 229 } 230 ], 231 "events" : 232 [ 233 { 234 "eventAction" : "registration", 235 "eventDate" : "1990-12-31T23:59:60Z" 236 }, 237 { 238 "eventAction" : "last changed", 239 "eventDate" : "1991-12-31T23:59:60Z" 240 } 242 ] 243 } 244 ], 245 "rp0_policies": 246 [ 247 { "import-via": 248 "AS6777 from AS-ANY EXCEPT (AS1103 AND AS1103) accept ANY" }, 249 { "export-via": 250 "AS6777 to AS-ANY EXCEPT (AS1 AND AS1103) announce AS-SNIJDERS" } 251 ] 252 } 254 4. Route Object Class 256 The RDAP route object class is an RDAP representation of the RPSL 257 route class. 259 The following is an elided example of a route object showing the high 260 level structure: 262 { 263 "handle" : "XXX", 264 "route" : "XXX", 265 "origin" : 123, 266 ... 267 "entities" : 268 [ 269 ... 270 ], 271 "links" : 272 [ 273 ... 274 ], 275 ... 276 } 278 The "handle" member is the registry unique identifier of the route 279 object, just as with other RDAP object classes. The "route" member 280 is the IP address prefix as specified in RPSL. The "handle" and 281 "route" values may be the same (and usually will be). 283 The "origin" member is an integer specifying an autonomous system 284 number. 286 The other members of the object are: 288 memberOf - an array of strings, each containing the handle of a 289 route set object. 291 inject - an array of strings, each containing a value as specified 292 by RPSL. 294 components - a string containing a value as specified by RPSL. 296 aggregateBoundary - a string containing a value as specified by 297 RPSL. 299 aggregateMtd - a string containing a value as specified by RPSL. 301 exportComps - a string containing a value as specified by RPSL. 303 holes - an array of strings, each containing a value as specified 304 by RPSL. 306 entities - an array of entity objects, as specified by RDAP. 308 While the "memberOf" array contains route set object handles, the 309 links array (as specified by RDAP) SHOULD contain links to each route 310 set object using the "collection" link relationship. 312 Route objects are obtained from an RDAP server by appending the 313 "/route" path to an RDAP base URL followed by either the handle of 314 the route object or value of the "route" member. 316 5. Route Set Object Class 318 The route set object class is an RDAP representation of the route-set 319 object in RPSL. 321 The following is an elided example of a route set object showing the 322 high level structure: 324 { 325 "handle" : "XXX", 326 "members" : 327 [ 328 ... 329 ], 330 ... 331 "entities" : 332 [ 333 ... 334 ], 335 "links" : 336 [ 337 ... 338 ], 339 ... 340 } 342 The "handle" member is the registry unique identifier of the route 343 set object, just as with other RDAP object classes. The "members" 344 object member is an array of strings, each containing the handle of a 345 route or route set object. 347 While the "members" array contains route or route set object handles, 348 the links array (as specified by RDAP) SHOULD contain links to each 349 route or route set object using the "item" link relationship. 351 Route set objects are obtained from an RDAP server by appending the 352 "/routeSet" path to an RDAP base URL followed by the handle of the 353 route set object. 355 6. Autnum Set Object Class 357 The autnum set object class is an RDAP representation of the as-set 358 object in RPSL. 360 The following is an elided example of an autnum set object showing 361 the high level structure: 363 { 364 "handle" : "XXX", 365 "members" : 366 [ 367 ... 368 ], 369 ... 370 "entities" : 371 [ 372 ... 373 ], 374 "links" : 375 [ 376 ... 377 ], 378 ... 379 } 381 The "handle" member is the registry unique identifier of the autnum 382 set object, just as with other RDAP object classes. The "members" 383 object member is an array of strings, each containing the handle of 384 an autnum object (as defined by RDAP) or autnum set object. 386 While the "members" array contains autnum or autnum set object 387 handles, the links array (as specified by RDAP) SHOULD contain links 388 to each autnum or autnum set object using the "item" link 389 relationship. 391 Autnum set objects are obtained from an RDAP server by appending the 392 "/autnumSet" path to an RDAP base URL followed by the handle of the 393 autnum set object. 395 7. Discussion 397 7.1. Other IRR Objects 399 RDAP contains many objects that are found in IRRs, but not all of 400 them. The common object types are autnum objects and entity objects 401 (for the mnter class of objects). RDAP does not have equivalences 402 for route or set objects, and RPSL does not have equivalences for 403 nameserver, domain, or network objects (though such objects do appear 404 in registries that are both RIRs and IRRs). 406 There has been debate in the community over the usefulness of the 407 entire RPSL data model. Therefore, this document starts with 408 replicating only the parts of RPSL needed to express import/export 409 policy for an autonomous system. 411 7.2. Decomposition of RPSL to JSON 413 Since RPSL is specified via language grammar, it requires an RPSL 414 specific parser. This has been among one of its chief criticisms. 415 RDAP uses JSON, so it requires no RDAP specific parser. 417 As the route policy community is not very large and is mostly 418 composed of individuals who are not computer programmers as their 419 primary tasking, the issue of a problem domain parser for route 420 policy is important. But using a common data format such as JSON, 421 network operators do not need to create a route policy specific 422 parser to use the data. While seemingly trivial to some, it is an 423 important consideration for such a small community. 425 This document does not attempt to map RPSL into JSON, instead leaving 426 the policies as RPSL strings. This only solves the "lookup" problem, 427 where RDAP can be consulted to get the policies. It does not solve 428 the "parser" problem, where a special purpose RPSL parser is still 429 needed. 431 Future versions of this document may decompose RPSL into JSON once a 432 reasonable JSON serialization technique can be determined. 434 Authors' Addresses 436 Andrew Lee Newton 437 American Registry for Internet Numbers 438 3635 Concorde Parkway 439 Chantilly, VA 20151 440 US 442 Email: andy@arin.net 443 URI: http://www.arin.net 445 Johan Aehlen 446 RIPE Network Coordination Centre 447 Singel 258 448 Amsterdam 1016AB 449 NL 451 Email: jahlen@ripe.net 452 URI: http://www.ripe.net 453 Carlos M. Martinez 454 Latin American and Caribbean Internet Address Registry 455 Rambla Republica de Mexico 6125 456 Montevideo 11300 457 UY 459 Email: carlos@lacnic.net 460 URI: http://www.lacnic.net 462 Job Snijders 463 Independent 464 Theodorus Majofskistraat 100 465 Amsterdam 1065 SZ 466 NL 468 Email: job@instituut.net