home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1997 December / Internet_Info_CD-ROM_Walnut_Creek_December_1997.iso / drafts / draft_ietf_q_t / draft-ietf-rps-rpsl-03.txt < prev    next >
Text File  |  1997-08-02  |  105KB  |  2,794 lines

  1.  
  2.  
  3. Internet Draft                                           Cengiz Alaettinoglu
  4. Expires  January 30, 1998                                            USC/ISI
  5. draft-ietf-rps-rpsl-03.txt                                        Tony Bates
  6.                                                                Cisco Systems
  7.                                                                 Elise Gerich
  8.                                                              At Home Network
  9.                                                            Daniel Karrenberg
  10.                                                                         RIPE
  11.                                                                  David Meyer
  12.                                                         University of Oregon
  13.                                                              Marten Terpstra
  14.                                                                 Bay Networks
  15.                                                            Curtis Villamizer
  16.                                                                          ANS
  17.                                                                July 30, 1997
  18.  
  19.  
  20.  
  21.                 Routing Policy Specification Language (RPSL)
  22.  
  23.  
  24.  
  25.  
  26. Status of this Memo
  27.  
  28.  
  29. This Internet  Draft  is  the  reference document  for  the  Routing  Policy
  30. Specification Language (RPSL). RPSL allows a network operator to be able  to
  31. specify routing policies at  various levels in  the Internet hierarchy;  for
  32. example at the Autonomous  System (AS) level.   At  the same time,  policies
  33. can be specified  with sufficient detail  in RPSL so  that low level  router
  34. configurations can be generated from them.  RPSL is extensible; new  routing
  35. protocols and new protocol features can be introduced at any time.
  36.  
  37. This document is an Internet Draft, and can be found as draft-ietf-rps-rpsl-
  38. 03.txt in any  standard internet  drafts repository.    Internet Drafts  are
  39. working documents of the Internet Engineering Task Force (IETF), its  Areas,
  40. and its Working Groups.  Note that other groups may also distribute  working
  41. documents as Internet Drafts.
  42.  
  43. Internet Drafts  are draft  documents valid  for a  maximum of  six  months.
  44. Internet Drafts may be  updated, replaced, or  obsoleted by other  documents
  45. at any time.   It  is not appropriate  to use Internet  Drafts as  reference
  46. material, or to cite  them other than  as a ``working  draft'' or ``work  in
  47. progress.''
  48.  
  49. Please check  the I-D  abstract  listing contained  in each  Internet  Draft
  50. directory to learn the current status of this or any other Internet Draft.
  51. Internet Draft                       RPSL                      July 30, 1997
  52.  
  53. Contents
  54.  
  55.  
  56. 1 Introduction                                                             4
  57.  
  58. 2 RPSL Names, Reserved Words, and Representation                           5
  59.  
  60.  
  61. 3 mntner Class                                                             6
  62.  
  63. 4 person Class                                                             8
  64.  
  65.  
  66. 5 route Class                                                              9
  67.  
  68. 6 Set Classes                                                             10
  69.  
  70.   6.1 route-set Class  . . . . . . . . . . . . . . . . . . . . . . . . . . 10
  71.  
  72.   6.2 as-set Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
  73.  
  74.   6.3 Predefined Set Objects  . . . . . . . . . . . . . . . . . . . . . . 13
  75.  
  76.   6.4 Hierarchical Set Names  . . . . . . . . . . . . . . . . . . . . . . 13
  77.  
  78.  
  79. 7 aut-num Class                                                            14
  80.  
  81.   7.1 import Attribute:  Import Policy Specification . . . . . . . . . . . 14
  82.  
  83.     7.1.1Peering Specification  . . . . . . . . . . . . . . . . . . . . . 15
  84.  
  85.     7.1.2Action Specification . . . . . . . . . . . . . . . . . . . . . . 17
  86.  
  87.     7.1.3Filter Specification . . . . . . . . . . . . . . . . . . . . . . 17
  88.  
  89.     7.1.4Example Policy Expressions . . . . . . . . . . . . . . . . . . . 21
  90.  
  91.   7.2 export Attribute:  Export Policy Specification . . . . . . . . . . . 21
  92.  
  93.    7.3 Other  Routing  Protocols, Multi-Protocol  Routing Protocols,  and
  94.     Injecting Routes Between Protocols . . . . . . . . . . . . . . . . .  22
  95.  
  96.   7.4 Ambiguity Resolution  . . . . . . . . . . . . . . . . . . . . . . . 23
  97.  
  98.   7.5 default Attribute:  Default Policy Specification . . . . . . . . . . 25
  99.  
  100.   7.6 Structured Policy Specification . . . . . . . . . . . . . . . . . . 26
  101.  
  102. 8 dictionary Class                                                         30
  103.  
  104.  
  105.  
  106. Alaettinoglu et.  al.           Expires  January 30, 1998           [Page 2]
  107. Internet Draft                       RPSL                      July 30, 1997
  108.  
  109.   8.1 Initial RPSL Dictionary and Example Policy Actions and Filters  . . 33
  110.  
  111. 9 Advanced route Class                                                    37
  112.  
  113.   9.1 Specifying Static Routes  . . . . . . . . . . . . . . . . . . . . . 37
  114.  
  115.   9.2 Specifying Aggregate Routes . . . . . . . . . . . . . . . . . . . . 38
  116.  
  117.  
  118. 10inet-rtr Class                                                           39
  119.  
  120. 11inet-tunnel Class and Specifying Tunnels                                 41
  121.  
  122.  
  123. 12Security Consideration                                                  42
  124.  
  125. 13Acknowledgements                                                        44
  126.  
  127.  
  128. A Routing Registry Sites                                                  46
  129.  
  130. B Authors' Addresses                                                      46
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162. Alaettinoglu et.  al.           Expires  January 30, 1998           [Page 3]
  163. Internet Draft                       RPSL                      July 30, 1997
  164.  
  165. 1 Introduction
  166.  
  167.  
  168. This Internet  Draft  is  the  reference document  for  the  Routing  Policy
  169. Specification Language (RPSL). RPSL allows a network operator to be able  to
  170. specify routing policies at  various levels in  the Internet hierarchy;  for
  171. example at the Autonomous  System (AS) level.   At  the same time,  policies
  172. can be specified  with sufficient detail  in RPSL so  that low level  router
  173. configurations can be generated from them.  RPSL is extensible; new  routing
  174. protocols and new protocol features can be introduced at any time.
  175.  
  176. RPSL is a  replacement for  the current Internet  de-facto standard  routing
  177. policy specification  language  known  as  RIPE-181  [6]  or  RFC-1786  [7].
  178. RIPE-81 [8] was the first language  deployed in the Internet for  specifying
  179. routing policies.  It was later replaced by RIPE-181 [6].
  180.  
  181. Through operational  use of  RIPE-181 it  has become  apparent that  certain
  182. policies cannot be specified and a need for an enhanced and more generalized
  183. language is needed.  RPSL addresses RIPE-181's limitations.  RPSL is  object
  184. oriented; that  is,  objects contain  pieces  of policy  and  administrative
  185. information.  These objects are registered in the Internet Routing  Registry
  186. (IRR) by the authorized organizations.   The registration process is  beyond
  187. the scope of this document.  Please refer to [2, 21, 4] for more  details on
  188. the IRR.
  189.  
  190. RPSL was  designed so  that  a view  of the  global  routing policy  can  be
  191. contained in  a  single  cooperatively maintained  distributed  database  to
  192. improve the  integrety of  Internet's routing.    RPSL  is not  designed  to
  193. be a  router  configuration language.    RPSL  is  designed so  that  router
  194. configurations can be generated from the  description of the policy for  one
  195. automomous system (see  aut-num class)  combined with the  description of  a
  196. router (see inet-rtr class), mainly  providing router ID, autonomous  system
  197. number of  the router,  interfaces and  peers of  the router,  and  combined
  198. with a global database mappings AS  sets to ASes (see as-set class),  origin
  199. ASes and route sets to route prefixes.   (see route and route-set  classes),
  200. The accurate  population of  the RPSL  database can  help contribute  toward
  201. such goals as  router configurations  which protect  against accidental  (or
  202. malicious) distribution  of inaccurate  routing information  and  contribute
  203. toward the  verification of  Internet's routing  and aggregation  boundaries
  204. beyond a single AS.
  205.  
  206. In the following sections,  we present the classes  that are used to  define
  207. various policy  and administrative  objects.    The "mntner"  class  defines
  208. entities authorized  to add,  delete  and modify  a  set of  objects.    The
  209. "person" class  describes technical  and administrative  contact  personnel.
  210. Autonomous systems (ASes) are specified using  the "aut-num" class.   Routes
  211. are specified using  the "route"  class.   Sets of  ASes and  routes can  be
  212. defined using  the  "as-set" and  "route-set"  classes.    The  "dictionary"
  213. class provides the  extensibility to  the language.    The "inet-rtr"  class
  214. is used  to specify  routers.   Tunnels  are specified  using  "inet-tunnel"
  215. class.  Many of these  classes were originally defined in earlier  documents
  216.  
  217.  
  218. Alaettinoglu et.  al.           Expires  January 30, 1998           [Page 4]
  219. Internet Draft                       RPSL                      July 30, 1997
  220.  
  221. [6, 18, 20, 17, 5] and have all been enhanced.
  222.  
  223. This document is self-contained.  However, the reader is encouraged to  read
  224. RIPE-181 [7] and the  associated documents [18, 20,  17, 5] as they  provide
  225. significant background as to the motivation and underlying principles behind
  226. RIPE-181 and consequently,  RPSL. They  further cover the  basic concept  of
  227. the Internet Routing  Registry (IRR)  [2, 21,  4], the  data repository  for
  228. storing global RPSL based  routing policies and  a fundamental component  in
  229. the application of RPSL. For a tutorial on RPSL, the reader should read  the
  230. RPSL applications document [4].
  231.  
  232.  
  233. 2 RPSL Names, Reserved Words, and Representation
  234.  
  235.  
  236. Each class has a set of attributes which store a piece of information  about
  237. the objects of  the class.    Attributes can be  mandatory or  optional:   A
  238. mandatory attribute has to be defined for all objects of the class; optional
  239. attributes can  be skipped.    Attributes  can also  be single  or  multiple
  240. valued.  Each object is uniquely identified by a set of attributes, referred
  241. to as the class ``key''.
  242.  
  243. The value of an attribute has a type.   The following types are most  widely
  244. used.  Note that RPSL is case insensitive.
  245.  
  246.  
  247. <object-name>Many  objects in RPSL  have a name.   An  <object-name> is made
  248.     up of letters, digits, the character underscore ``_'', and  the character
  249.     hyphen ``-''; the first  character of a name must  be a letter, and  the
  250.     last character of a  name must be a  letter or a  digit.  The  following
  251.     words are reserved by RPSL, and they can not be used as names:
  252.  
  253.  
  254.           any as-any rs-any peeras
  255.           and or not
  256.           atomic from to at action accept announce except refine
  257.           networks into
  258.  
  259.  
  260.     Names starting with  certain prefixes  are reserved  for certain  object
  261.     types.   Names  starting with  ``as-'' are  reserved for  as set  names.
  262.     Names starting with ``rs-'' are reserved for route set names.
  263.  
  264. <as-number>An  AS number x is represented as  the string ``ASx''.  That  is,
  265.     the AS 226 is represented as AS226.
  266.  
  267. <ipv4-address>An IPv4 address is represented as a  sequence of four integers
  268.     in the range from 0  to 255 separated by the  character dot ``.''.   For
  269.     example, 128.9.128.5 represents a  valid IPv4 address.   In the rest  of
  270.     this document, we may refer to IPv4 addresses as IP addresses.
  271.  
  272.  
  273.  
  274. Alaettinoglu et.  al.           Expires  January 30, 1998           [Page 5]
  275. Internet Draft                       RPSL                      July 30, 1997
  276.  
  277. <address-prefix>An  address  prefix  is  represented   as  an  IPv4  address
  278.     followed by the  character slash  ``/'' followed  by an  integer in  the
  279.     range from  0  to  32.    The  following  are  valid  address  prefixes:
  280.     128.9.128.5/32,  128.9.0.0/16,  0.0.0.0/0;  and  the  following  address
  281.     prefixes are invalid:   0/0, 128.9/16 since 0  or 128.9 are not  strings
  282.     containing four integers.
  283.  
  284. <date>A date  is represented as an eight digit integer of the form  YYYYMMDD
  285.     where YYYY represents the year, MM represents the month of the year  (01
  286.     through 12), and  DD represents the  day of the  month (01 through  31).
  287.     For example, June 24, 1996 is represented as 19960624.
  288.  
  289. <email-address>is as described in RFC-822[11].
  290.  
  291. <dns-name>is as described in RFC-1034[23].
  292.  
  293. <person>is  either  a  full  name  of  a   person  or  a  uniquely  assigned
  294.     NIC-handle.  Its syntax has the following form:
  295.  
  296.  
  297.           <firstname> [<initials>] <lastname>
  298.         | <nic-handle>
  299.  
  300.            E.g.
  301.               John E Doe
  302.               JED31
  303.  
  304.  
  305.     A NIC handle is an identifier  used by routing, address allocation,  and
  306.     other registries to unambiguously refer to people.
  307.  
  308. <free-form>is a sequence of ASCII characters.
  309.  
  310. <X-name>is  a name of an object  of type X. That is  <mntner-name> is a name
  311.     of an mntner object.
  312.  
  313. <registry-name>is  a name of an  IRR registry.   The routing registries  are
  314.     listed in Appendix A.
  315.  
  316.  
  317. A value of an attribute may also be a  lists of one of these types.  A  list
  318. is represented by separating the list members by commas ``,''.  For example,
  319. ``AS1, AS2, AS3, AS4'' is a list of AS numbers.  Note that being list valued
  320. and being multiple valued are orthogonal.   A multiple valued attribute  has
  321. more than one  value each of  which may or  may not be  a list depending  on
  322. the attribute.  On the other hand a single valued attribute may have  a list
  323. value.
  324.  
  325. An RPSL object is textually represented as a list of attribute-value  pairs.
  326. Each attribute-value pair is written on a separate line.  The attribute name
  327. starts at column 0, followed by character  ``:''  and followed by the  value
  328.  
  329.  
  330. Alaettinoglu et.  al.           Expires  January 30, 1998           [Page 6]
  331. Internet Draft                       RPSL                      July 30, 1997
  332.  
  333. of the attribute.   The object's  representation ends when  a blank line  is
  334. encountered.   An attribute's  value can be  split over  multiple lines,  by
  335. starting the continuation lines with a white-space (`` '' or tab) character.
  336. The order of attribute-value pairs is significant.
  337.  
  338. An object's description may contain comments.  A comment can be anywhere  in
  339. an object's definition, it starts at the first ``#'' character on a line and
  340. ends at the first end-of-line character.  White space characters can be used
  341. to improve readability.
  342.  
  343.  
  344. 3 mntner Class
  345.  
  346.  
  347. The mntner class defines  entities that can create,  delete and update  RPSL
  348. objects.  A provider, before he/she can create any RPSL object, first  needs
  349. to create a mntner object.  The attributes of the mntner class are  shown in
  350. Figure 1.  The mntner class was first described in [18].
  351.  
  352.  
  353.   Attribute  Value                    Type
  354.   mntner     <object-name>            mandatory, single-valued, class key
  355.   descr      <free-form>              mandatory, single-valued
  356.   auth       see description in text  mandatory, multi-valued
  357.   upd-to     <email-address>          mandatory, multi-valued
  358.   mnt-nfy    <email-address>          optional, multi-valued
  359.   tech-c     <person>                 mandatory, multi-valued
  360.   admin-c    <person>                 mandatory, multi-valued
  361.   remarks    <free-form>              optional, multi-valued
  362.   notify     <email-address>          optional, multi-valued
  363.   mnt-by     list of <mntner-name>    mandatory, multi-valued
  364.   changed    <email-address> <date>   mandatory, multi-valued
  365.   source     <registry-name>          mandatory, single-valued
  366.  
  367.  
  368.                      Figure 1:  mntner Class Attributes
  369.  
  370.  
  371. The mntner attribute is mandatory and is the class key attribute.  Its value
  372. is an RPSL name.  The auth attribute specifies the scheme that will  be used
  373. to identify and authenticate update requests  from this maintainer.  It  has
  374. the following syntax:
  375.  
  376.  
  377.    auth: <scheme-id> <auth-info>
  378.  
  379.    E.g.
  380.           auth: NONE
  381.           auth: CRYPT-PW dhjsdfhruewf
  382.           auth: MAIL-FROM .*@ripe\.net
  383.  
  384.  
  385.  
  386. Alaettinoglu et.  al.           Expires  January 30, 1998           [Page 7]
  387. Internet Draft                       RPSL                      July 30, 1997
  388.  
  389. The <scheme-id>'s currently defined are:  NONE, MAIL-FROM, PGP and CRYPT-PW.
  390. The <auth-info> is additional information  required by a particular  scheme:
  391. in the case of  MAIL-FROM, it is a  regular expression matching valid  email
  392. addresses; in the case of CRYPT-PW, it  is a password in UNIX crypt  format;
  393. and in the case of PGP, it is a PGP public key.  If multiple auth attributes
  394. are specified, an update request satisfying any one of them is authenticated
  395. to be from the maintainer.
  396.  
  397. The upd-to  attribute  is an  email  address.    On an  unauthorized  update
  398. attempt of an object  maintained by this maintainer,  an email message  will
  399. be sent to this  address.   The mnt-nfy attribute  is an email  address.   A
  400. notification message will  be forwarded  to this email  address whenever  an
  401. object maintained by this maintainer is added, changed or deleted.
  402.  
  403. The descr attribute is a short, free-form textual description of the object.
  404. The tech-c attribute  is a technical  contact person.   This  is someone  to
  405. be contacted for technical problems such  as misconfiguration.  The  admin-c
  406. attribute is an administrative contact person.   The remarks attribute is  a
  407. free text explanation or  clarification.  The  notify attribute is an  email
  408. address to which  notifications of changes  to this object  should be  sent.
  409. The mnt-by attribute is a  list of mntner object  names.  The  authorization
  410. for changes to  this object  is governed by  any of  the maintainer  objects
  411. referenced.  The changed attribute  documents who last changed this  object,
  412. and when this change was made.  Its syntax has the following form:
  413.  
  414.  
  415.    changed: <email-address> <YYYYMMDD>
  416.  
  417.    E.g.
  418.    changed: johndoe@terabit-labs.nn 19900401
  419.  
  420.  
  421. The  <email-address>  identifies  the  person  who  made  the  last  change.
  422. <YYYYMMDD> is the date of  the change.   The source attribute specifies  the
  423. registry where the object is registered.
  424.  
  425. The descr,  tech-c, admin-c,  remarks, notify,  mnt-by,  changed and  source
  426. attributes are attributes of all RPSL classes.  Their syntax, semantics, and
  427. mandatory, optional, multi-valued, or single-valued status are the same  for
  428. for all classes.  We do not further discuss them in other sections.
  429.  
  430.  
  431. 4 person Class
  432.  
  433.  
  434. A person class is used to describe information about people.  Even though it
  435. does not describe routing  policy, we still describe  it here briefly  since
  436. many policy objects make reference to person objects.  The person class  was
  437. first described in [20].
  438.  
  439.  
  440.  
  441.  
  442. Alaettinoglu et.  al.           Expires  January 30, 1998           [Page 8]
  443. Internet Draft                       RPSL                      July 30, 1997
  444.  
  445. The attributes  of the  person class  are shown  in Figure  2.   The  person
  446. attribute is  the full  name  of the  person.    The  phone and  the  fax-no
  447. attributes have the following syntax:
  448.  
  449.  
  450.       phone: +<country-code> <city> <subscriber> [ext. <extension>]
  451.  
  452.    E.g.:
  453.       phone: +31 20 12334676
  454.       phone: +44 123 987654 ext. 4711
  455.  
  456.  
  457.  
  458.   Attribute  Value                    Type
  459.   person     <person>                 mandatory, single-valued, class key
  460.   address    <free-form>              mandatory, multi-valued
  461.   phone      see description in text  mandatory, multi-valued
  462.   fax-no     same as phone            optional, multi-valued
  463.   e-mail     <email-address>          mandatory, multi-valued
  464.   nic-hdl    see description in text  optional, single-valued
  465.  
  466.  
  467.                      Figure 2:  person Class Attributes
  468.  
  469.  
  470.  
  471. 5 route Class
  472.  
  473.  
  474. Each interAS route (also referred to as an interdomain route) originated  by
  475. an AS is specified using a route object.  The attributes of the  route class
  476. are shown in Figure  3.  The  route attribute is the  address prefix of  the
  477. route and the origin attribute  is the AS number  of the AS that  originates
  478. the route into the interAS routing system.   The route and origin  attribute
  479. pair is the class key.
  480.  
  481. The Figure 4 shows examples of four route  objects.  Note that the last  two
  482. route objects have the same address  prefix, namely 128.8.0.0/16.   However,
  483. they are different route objects since they are originated by different ASes
  484. (i.e. they have different keys).
  485.  
  486. The withdrawn attribute,  if present,  signifies that the  originator AS  no
  487. longer originates this address prefix in the Internet.  Its value is a  date
  488. indicating the date of withdrawal.   In Figure 4,  the last route object  is
  489. withdrawn (i.e. no longer originated by AS2) on June 24, 1996.
  490.  
  491.  
  492.  
  493.  
  494.  
  495.  
  496.  
  497.  
  498. Alaettinoglu et.  al.           Expires  January 30, 1998           [Page 9]
  499. Internet Draft                       RPSL                      July 30, 1997
  500.  
  501.  
  502. Attribute     Value                      Type
  503. route         <address-prefix>           mandatory, single-valued, class key
  504. origin        <as-number>                mandatory, single-valued, class key
  505. withdrawn     <date>                     optional, single-valued
  506. member-of     list of <route-set-names>  optional, single-valued
  507.               see Section 6
  508. inject-at     see Section 9              optional, multi-valued
  509. aggr-by       see Section 9              optional, single-valued
  510. export-comps  see Section 9              optional, single-valued
  511. holes         see Section 9              optional, single-valued
  512.  
  513.  
  514.                      Figure 3:  route Class Attributes
  515.  
  516.  
  517.  
  518.    route: 128.9.0.0/16
  519.    origin: AS226
  520.  
  521.    route: 128.99.0.0/16
  522.    origin: AS226
  523.  
  524.    route: 128.8.0.0/16
  525.    origin: AS1
  526.  
  527.    route: 128.8.0.0/16
  528.    origin: AS2
  529.    withdrawn: 19960624
  530.  
  531.  
  532.                           Figure 4:  Route Objects
  533.  
  534.  
  535. 6 Set Classes
  536.  
  537.  
  538. To specify policies,  it is often  useful to define  sets of  objects.   For
  539. this purpose we define two  classes:  route-set and  as-set.  These  classes
  540. define a named set.   The members of these  sets can be specified by  either
  541. explicitly listing them  in the set  object's definition,  or implicitly  by
  542. having route and aut-num objects refer to the set name in their definitions,
  543. or a combination of both methods.
  544.  
  545.  
  546. 6.1 route-set Class
  547.  
  548.  
  549. The attributes of the route-set class are shown in Figure 5.  The  route-set
  550. attribute defines the name of the set.  It is an RPSL name that  starts with
  551. ``rs-''.  The members attribute lists the  members of the set.  The  members
  552.  
  553.  
  554. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 10]
  555. Internet Draft                       RPSL                      July 30, 1997
  556.  
  557. attribute is a list of address prefixes or other route-set names.
  558.  
  559.  
  560.    Attribute    Value                          Type
  561.    route-set    <object-name>                  mandatory, single-valued,
  562.                                                class key
  563.    members      list of <address-prefixes> or  optional, single-valued
  564.                 <route-set-names>
  565.    mbrs-by-ref  list of <mntner-names>         optional, single-valued
  566.  
  567.  
  568.                    Figure 5:  route-set Class Attributes
  569.  
  570.  
  571. Figure 6 presents some example route-set  objects.  The set rs-foo  contains
  572. two address prefixes, namely 128.9.0.0/16 and 128.9.0.0/16.  The set  rs-bar
  573. contains the members of the set rs-foo and the address prefix  128.7.0.0/16.
  574. The set rs-empty contains no members.
  575.  
  576.  
  577.    route-set: rs-foo
  578.    members: 128.9.0.0/16, 128.9.0.0/24
  579.  
  580.    route-set: rs-bar
  581.    members: 128.7.0.0/16, rs-foo
  582.  
  583.    route-set: rs-empty
  584.  
  585.  
  586.                         Figure 6:  route-set Objects
  587.  
  588. An address  prefix  or  a route-set  name  in  a members  attribute  can  be
  589. optionally followed by an operator '^-',  '^+', '^n', or '^n-m' where n  and
  590. m are integers.   ^- operator is the  exclusive more specifics operator;  it
  591. stands for the more  specifics of the address  prefix excluding the  address
  592. prefix itself.   ^+ operator is  the inclusive more  specifics operator;  it
  593. stands for the more  specifics of the address  prefix including the  address
  594. prefix itself.  ^n  operator, stands for all the  length n specifics of  the
  595. address prefix.   ^n-m operator,  stands for all  the length  n to length  m
  596. specifics of the address prefix.  For example, the following set
  597.  
  598.  
  599.    route-set: rs-bar
  600.    members: 5.0.0.0/8^+, 128.9.0.0/16^-,
  601.             30.0.0.0/8^16, 30.0.0.0/8^24-32, rs-foo^+
  602.  
  603.  
  604. contains all  the  more  specifics of  5.0.0.0/8  including  5.0.0.0/8,  all
  605. the more  specifics of  128.9.0.0/16 excluding  128.9.0.0/16, all  the  more
  606. specifics of 30.0.0.0/8  which are  of length  16 such  as 30.9.0.0/16,  all
  607. the more  specifics of  30.0.0.0/8 which  are of  length 24  to 32  such  as
  608.  
  609.  
  610. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 11]
  611. Internet Draft                       RPSL                      July 30, 1997
  612.  
  613. 30.9.9.96/28, and all the  more specifics of address  prefixes in route  set
  614. rs-foo.
  615.  
  616. The mbrs-by-ref attribute is a list of maintainer names or the keyword  ANY.
  617. If this attribute  is used,  the route  set also  includes address  prefixes
  618. whose route objects  are registered by  one of these  maintainers and  whose
  619. member-of attribute refers to the name of this route set.  If the value of a
  620. mbrs-by-ref attribute is ANY,  any route object referring  to the route  set
  621. name is a member.  If the mbrs-by-ref attribute is missing, only the address
  622. prefixes listed in the members attribute are members of the set.  Note that,
  623. if a prefix is  already listed explicitly  as a member of  a route set,  the
  624. route object for that prefix does not need to contain a member-of attribute.
  625.  
  626.  
  627.    route-set: rs-foo
  628.    mbrs-by-ref: MNTR-ME, MNTR-YOU
  629.  
  630.    route-set: rs-bar
  631.    members: 128.7.0.0/16
  632.    mbrs-by-ref: MNTR-YOU
  633.  
  634.    route: 128.9.0.0/16
  635.    origin: AS1
  636.    member-of: rs-foo
  637.    mnt-by: MNTR-ME
  638.  
  639.    route: 128.8.0.0/16
  640.    origin: AS2
  641.    member-of: rs-foo, rs-bar
  642.    mnt-by: MNTR-YOU
  643.  
  644.  
  645.                        Figure 7:  route-set objects.
  646.  
  647. Figure 7  presents  example  route-set  objects  that  use  the  mbrs-by-ref
  648. attribute.     The  set  rs-foo   contains  two  address  prefixes,   namely
  649. 128.8.0.0/16 and 128.9.0.0/16 since the  route objects for 128.8.0.0/16  and
  650. 128.9.0.0/16 refer to the set name rs-foo in their member-of attribute.  The
  651. set rs-bar contains the address prefixes 128.7.0.0/16 and 128.8.0.0/16.  The
  652. route 128.7.0.0/16 is explicitly listed in the members attribute of  rs-bar,
  653. and the route object for  128.8.0.0/16 refer to the  set name rs-bar in  its
  654. member-of attribute.
  655.  
  656. Note that, if an address prefix is listed in a members attribute of a  route
  657. set, it is a member  of that route set.   The route object corresponding  to
  658. this address prefix does not need to contain a member-of attribute referring
  659. to this  set name.    The  member-of  attribute of  the  route class  is  an
  660. additional mechanism for specifying the members indirectly.
  661.  
  662.  
  663.  
  664.  
  665.  
  666. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 12]
  667. Internet Draft                       RPSL                      July 30, 1997
  668.  
  669. 6.2 as-set Class
  670.  
  671.  
  672. The attributes  of the  as-set class  are shown  in Figure  8.   The  as-set
  673. attribute defines the name of the set.  It is an RPSL name that  starts with
  674. ``as-''.  The members attribute lists the  members of the set.  The  members
  675. attribute is a list of AS numbers, or other as-set names.
  676.  
  677.  
  678.       Attribute    Value                    Type
  679.       as-set       <object-name>            mandatory, single-valued,
  680.                                             class key
  681.       members      list of <as-numbers> or  optional, single-valued
  682.                    <as-set-names>
  683.       mbrs-by-ref  list of <mntner-names>   optional, single-valued
  684.  
  685.                      Figure 8:  as-set Class Attributes
  686.  
  687.  
  688.  
  689. Figure 9 presents two  as-set objects.   The set  as-foo contains two  ASes,
  690. namely AS1 and AS2.  The set  as-bar contains the members of the set  as-foo
  691. and AS3, that is it contains AS1, AS2, AS3.
  692.  
  693.  as-set: as-foo                      as-set: as-bar
  694.  members: AS1, AS2                   members: AS3, as-foo
  695.  
  696.  
  697.                          Figure 9:  as-set objects.
  698.  
  699. The mbrs-by-ref attribute is a list of maintainer names or the keyword  ANY.
  700. If this attribute  is used,  the  AS set  also includes  ASes whose  aut-num
  701. objects are  registered by  one  of these  maintainers and  whose  member-of
  702. attribute refers to the name of this AS set.  If the value of  a mbrs-by-ref
  703. attribute is ANY, any AS object referring to  the AS set is a member of  the
  704. set.  If the mbrs-by-ref attribute  is missing, only the ASes listed in  the
  705. members attribute are members of the set.
  706.  
  707.  
  708.  as-set: as-foo
  709.  members: AS1, AS2
  710.  mbrs-by-ref: MNTR-ME
  711.  
  712.  aut-num: AS3                          aut-num: AS4
  713.  member-of: as-foo                     member-of: as-foo
  714.  mnt-by: MNTR-ME                       mnt-by: MNTR-OTHER
  715.  
  716.  
  717.                         Figure 10:  as-set objects.
  718.  
  719. Figure 10  presents  an example  as-set  object that  uses  the  mbrs-by-ref
  720.  
  721.  
  722. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 13]
  723. Internet Draft                       RPSL                      July 30, 1997
  724.  
  725. attribute.  The set as-foo contains AS1, AS2  and AS3.  AS4 is not a  member
  726. of the set as-foo even though the aut-num object references as-foo.  This is
  727. because MNTR-OTHER is not listed in the as-foo's mbrs-by-ref attribute.
  728.  
  729.  
  730. 6.3 Predefined Set Objects
  731.  
  732.  
  733. In a  context that  expects a  route set  (e.g.   members  attribute of  the
  734. route-set class),  an AS  number  ASx defines  the set  of routes  that  are
  735. originated by ASx;  and an as-set AS-X  defines the set  of routes that  are
  736. originated by the ASes in AS-X. A route p is said to be originated by ASx if
  737. there is a route object for p with ASx as the value of the origin attribute.
  738. For example, in Figure 11,  the route set rs-special contains  128.9.0.0/16,
  739. routes of AS1 and AS2, and routes of the ASes in AS set AS-FOO.
  740.  
  741.  
  742.    route-set: rs-special
  743.    members: 128.9.0.0/16, AS1, AS2, AS-FOO
  744.  
  745.  
  746.           Figure 11:  Use of AS numbers and AS sets in route sets.
  747.  
  748. The keyword rs-any  defines the  set of all  routes registered  in IRR.  The
  749. keyword as-any defines the set of all ASes registered in IRR.
  750.  
  751.  
  752. 6.4 Hierarchical Set Names
  753.  
  754.  
  755. Set names can be hierarchical.  A hierarchical set name is a sequence of set
  756. names and AS numbers separated by colons ``:''.  For example, the  following
  757. names are  valid:   AS1:AS-CUSTOMERS, AS1:RS-EXCEPTIONS,  AS1:RS-EXPORT:AS2,
  758. RS-EXCEPTIONS:RS-BOGUS. All components of an hierarchical set name which are
  759. not AS numbers should start  with ``as-'' or ``rs-''  for as sets and  route
  760. sets respectively.
  761.  
  762. A set object with name X1:...:Xn-1:Xn can only be created by the  maintainer
  763. of the object with name  X1:...:Xn-1.  That is,  only the maintainer of  AS1
  764. can create a set with name AS1:AS-FOO; and only the maintainer of AS1:AS-FOO
  765. can create a set with name AS1:AS-FOO:AS-BAR.
  766.  
  767.  
  768.  
  769. 7 aut-num Class
  770.  
  771.  
  772. ASes are specified using the aut-num class.   The attributes of the  aut-num
  773. class are shown in  Figure 12.   The value of the  aut-num attribute is  the
  774. AS number of  the AS described  by this object.   The  as-name attribute  is
  775. a symbolic name  (in RPSL name  syntax) of  the AS. The  import, export  and
  776.  
  777.  
  778. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 14]
  779. Internet Draft                       RPSL                      July 30, 1997
  780.  
  781. default routing policies of  the AS are specified  using import, export  and
  782. default attributes respectively.
  783.  
  784.  
  785.    Attribute  Value                  Type
  786.    aut-num    <as-number>            mandatory, single-valued, class key
  787.    as-name    <object-name>          mandatory, single-valued
  788.    member-of  list of <as-set-names> optional, single-valued
  789.    import     see Section 7.1        optional, multi valued
  790.    export     see Section 7.2        optional, multi valued
  791.    default    see Section 7.5        optional, multi valued
  792.  
  793.                     Figure 12:  aut-num Class Attributes
  794.  
  795.  
  796.  
  797. 7.1 import Attribute:  Import Policy Specification
  798.  
  799.  
  800.  
  801.      ----------------------                   ----------------------
  802.      |            7.7.7.1 |-------|   |-------| 7.7.7.2            |
  803.      |                    |     ========      |                    |
  804.      |   AS1              |      EX1  |-------| 7.7.7.3     AS2    |
  805.      |                    |                   |                    |
  806.      |            9.9.9.1 |------       ------| 9.9.9.2            |
  807.      ----------------------     |       |     ----------------------
  808.                                ===========
  809.                                    |    EX2
  810.      ----------------------        |
  811.      |            9.9.9.3 |---------
  812.      |                    |
  813.      |   AS3              |
  814.      ----------------------
  815.  
  816.  
  817. Figure 13:  Example topology  consisting of three ASes,  AS1, AS2, and  AS3;
  818. two exchange points, EX1 and EX2; and six routers.
  819.  
  820.  
  821. A typical interconnection of ASes  is shown in Figure 13.   In this  example
  822. topology, there are  three ASes,  AS1, AS2,  and AS3;  two exchange  points,
  823. EX1 and  EX2; and  six routers.    Routers connected  to  the same  exchange
  824. point peer with each  other, i.e. open a  connection for exchanging  routing
  825. information.  Each router would export a subset of the routes it has  to its
  826. peer routers.  Peer routers would import a subset of these routes.  A router
  827. while importing routes would  set some route attributes.   For example,  AS1
  828. can assign higher  preference values to  the routes it  imports from AS2  so
  829. that it prefers AS2  over AS3.   While exporting routes,  a router may  also
  830. set some route attributes in order  to affect route selection by its  peers.
  831. For example, AS2 may set the MULTI-EXIT-DISCRIMINATOR BGP attribute so  that
  832.  
  833.  
  834. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 15]
  835. Internet Draft                       RPSL                      July 30, 1997
  836.  
  837. AS1 prefers to use the router 9.9.9.2.  Most interAS policies are  specified
  838. by specifying what route  subsets can be imported  or exported, and how  the
  839. various route attributes are set and used.
  840.  
  841. In RPSL, an import policy is divided  into import policy expressions.   Each
  842. import policy expression is specified using an import attribute.  The import
  843. attribute has the  following syntax  (we will  extend this  syntax later  in
  844. Sections 7.3 and 7.6):
  845.  
  846.  
  847.     import: from <peering-1> [action <action-1>]
  848.             . . .
  849.             from <peering-N> [action <action-N>]
  850.             accept <filter>
  851.  
  852.  
  853. The action specification is optional.  The semantics of an import  attribute
  854. is as follows:  the set of routes that are matched by <filter> are  imported
  855. from all  the  peers specified  in  <peerings>;  while importing  routes  at
  856. <peering-M>, <action-M> is executed.
  857.  
  858.  
  859.   E.g.
  860.     aut-num: AS1
  861.     import: from AS2 action pref = 1; accept { 128.9.0.0/16 }
  862.  
  863.  
  864. This example states that  the route 128.9.0.0/16 is  accepted from AS2  with
  865. preference 1.  In the next  few subsections, we will describe how  peerings,
  866. actions and filters are specified.
  867.  
  868.  
  869. 7.1.1 Peering Specification
  870.  
  871.  
  872. Our example above  used an  AS number  to specify  peerings.   The  peerings
  873. can be  specified at  different granularities.    The  syntax of  a  peering
  874. specification is as follows:
  875.  
  876.  
  877.      <peer-as> [<peer-router>] [at <local-router>]
  878.    | <as-set> [at <local-router>]
  879.  
  880.  
  881. where  <local-router>  and  <peer-router>  are  IP  addresses  of   routers,
  882. <peer-as> is an AS number, and <as-set> is  an AS set name.  <peer-as>  must
  883. be the AS number  of <peer-router>.   Both <local-router> and  <peer-router>
  884. are optional.    We  first  describe the  semantics  using the  first  form.
  885. If both  <local-router>  and  <peer-router>  are  specified,   this  peering
  886. specification identifies only  the peering between  these two routers.    If
  887. only <local-router>  is  specified, this  peering  specification  identifies
  888.  
  889.  
  890. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 16]
  891. Internet Draft                       RPSL                      July 30, 1997
  892.  
  893. all the  peerings between  <local-router> and  any of  its peer  routers  in
  894. <peer-as>.  If only  <peer-router> is specified, this peering  specification
  895. identifies all  the  peerings  between  any  router  in  the  local  AS  and
  896. <peer-router>.   If neither <local-router>  nor <peer-router> is  specified,
  897. this peering specification identifies all the peerings between any router in
  898. the local AS and any router in <peer-as>.  If the <as-set> form is used, the
  899. peering specification identifies all the peerings between <local-router> and
  900. any of its peer routers in one of  the ASes in <as-set>.  If  <local-router>
  901. is not  specified, the  peering specification  identifies all  the  peerings
  902. between any router in the local AS and any of its peer routers in one of the
  903. ASes in <as-set>.
  904.  
  905. We next give examples.   Consider  the topology of Figure  13 where AS1  has
  906. two routers 7.7.7.1 and 9.9.9.1; AS2 has three routers 7.7.7.2, 7.7.7.3  and
  907. 9.9.9.2; AS3 has one router 9.9.9.3.  7.7.7.1, 7.7.7.2 and 7.7.7.3 peer with
  908. each other; 9.9.9.1, 9.9.9.2 and 9.9.9.3  peer with each other.  In  example
  909. (1) below 7.7.7.1 imports 128.9.0.0/16 from 7.7.7.2.
  910.  
  911.  
  912.  (1) aut-num: AS1
  913.      import: from AS2 7.7.7.2 at 7.7.7.1 accept { 128.9.0.0/16 }
  914.  
  915.  (2) aut-num: AS1
  916.      import: from AS2         at 7.7.7.1 accept { 128.9.0.0/16 }
  917.  
  918.  (3) aut-num: AS1
  919.      import: from AS2                    accept { 128.9.0.0/16 }
  920.  
  921.  (4) as-set: AS-FOO
  922.      members: AS2, AS3
  923.  
  924.      aut-num: AS1
  925.      import: from AS-FOO      at 9.9.9.1 accept { 128.9.0.0/16 }
  926.  
  927.  (5) aut-num: AS1
  928.      import: from AS-FOO                 accept { 128.9.0.0/16 }
  929.  
  930.  (6) aut-num: AS1
  931.      import: from AS2         at 9.9.9.1 accept { 128.9.0.0/16 }
  932.      import: from AS3         at 9.9.9.1 accept { 128.9.0.0/16 }
  933.  
  934.  (7) aut-num: AS1
  935.      import: from AS2                    accept { 128.9.0.0/16 }
  936.      import: from AS3                    accept { 128.9.0.0/16 }
  937.  
  938.  
  939. In example (2), 7.7.7.1 imports 128.9.0.0/16  from 7.7.7.2 and 7.7.7.3.   In
  940. example (3),  7.7.7.1 imports  128.9.0.0/16 from  7.7.7.2 and  7.7.7.3,  and
  941. 9.9.9.1 imports 128.9.0.0/16 from 9.9.9.2.  In example (4), 9.9.9.1  imports
  942. 128.9.0.0/16 from 9.9.9.2  and 9.9.9.3.    In example  (5), 9.9.9.1  imports
  943. 128.9.0.0/16 from 9.9.9.2 and 9.9.9.3, and 7.7.7.1 imports 128.9.0.0/16 from
  944.  
  945.  
  946. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 17]
  947. Internet Draft                       RPSL                      July 30, 1997
  948.  
  949. 7.7.7.2 and 7.7.7.3.  The example (4) and (5) are equivalent to examples (6)
  950. and (7) respectively.
  951.  
  952.  
  953. 7.1.2 Action Specification
  954.  
  955.  
  956. Policy actions in RPSL set or  modify route attributes, such as assigning  a
  957. preference to a  route, adding a  community to the  community attribute,  or
  958. setting the MULTI-EXIT-DISCRIMINATOR  attribute.   Policy  actions can  also
  959. instruct routers to perform special operations, such as route flap damping.
  960.  
  961. The routing policy attributes whose values can be modified in policy actions
  962. are specified in the RPSL dictionary.  Please refer to Section 8 for  a list
  963. of these attributes.   Each action  in RPSL is  terminated by the  character
  964. ';'.  It is  possible to form composite policy  actions by listing them  one
  965. after the other.   In a  composite policy action,  the actions are  executed
  966. left to right.  For example,
  967.  
  968.  
  969.  aut-num: AS1
  970.  import: from AS2
  971.          action pref = 10; med = 0; community.append(10250, {3561,10});
  972.          accept { 128.9.0.0/16 }
  973.  
  974.  
  975. sets pref to  10, med  to 0,  and then  appends 10250  and {3561,10}  to the
  976. community attribute.
  977.  
  978.  
  979. 7.1.3 Filter Specification
  980.  
  981.  
  982. A policy filter  is a  logical expression  which when  applied to  a set  of
  983. routes returns a  subset of these  routes.   We say that  the policy  filter
  984. matches the subset returned.  The  policy filter can match routes using  any
  985. route attribute, such as the destination address prefix (or NLRI),  AS-path,
  986. or community attributes.
  987.  
  988. The following policy filters can be used to select a subset of routes:
  989.  
  990.  
  991. ANY
  992.     The filter-keyword ANY matches all routes.
  993.  
  994. Address-Prefix Set
  995.     This is an explicit list of address prefixes enclosed in  braces '{' and
  996.     '}'.   The policy  filter matches  the set of  routes whose  destination
  997.     address-prefix is in the set.  For example:
  998.  
  999.  
  1000.  
  1001.  
  1002. Alaettinoglu et. al.           Expires  January 30, 1998           [Page 18]
  1003. Internet Draft                       RPSL                      July 30, 1997
  1004.  
  1005.             { 0.0.0.0/0 }
  1006.             { 128.9.0.0/16, 128.8.0.0/16, 128.7.128.0/17, 5.0.0.0/8 }
  1007.             { }
  1008.  
  1009.  
  1010.     An address prefix can be optionally followed by an operator '^-',  '^+',
  1011.     '^n', or  '^n-m'  where n  and  m are  integers.    ^- operator  is  the
  1012.     exclusive more specifics operator; it  stands for the more specifics  of
  1013.     the address prefix excluding the address prefix itself.  ^+ operator  is
  1014.     the inclusive more specifics operator; it stands for the more  specifics
  1015.     of the address prefix including the address prefix itself.  ^n operator,
  1016.     stands for all  the length  n specifics  of the  address prefix.    ^n-m
  1017.     operator, stands  for all  the length  n to  length m  specifics of  the
  1018.     address prefix.  For example, the set
  1019.  
  1020.  
  1021.                { 5.0.0.0/8^+, 128.9.0.0/16^-, 30.0.0.0/8^16,  30.0.0.0/8^24-
  1022.     32 }
  1023.  
  1024.  
  1025.     contains all the  more specifics of  5.0.0.0/8 including 5.0.0.0/8,  all
  1026.     the more specifics of 128.9.0.0/16 excluding 128.9.0.0/16, all the  more
  1027.     specifics of 30.0.0.0/8 which are of length 16 such as 30.9.0.0/16,  and
  1028.     all the more specifics of 30.0.0.0/8 which  are of length 24 to 32  such
  1029.     as 30.9.9.96/28.
  1030.  
  1031. Route Set Name
  1032.     A route set name matches the set of routes that are members of  the set.
  1033.     A route set name may be a name of a route-set object, an AS number, or a
  1034.     name of an as-set object (AS numbers and as-set names implicitly  define
  1035.     route sets; please see Section 6.3).  For example:
  1036.  
  1037.  
  1038.           aut-num: AS1
  1039.           import: from AS2 action pref = 1; accept AS2
  1040.           import: from AS2 action pref = 1; accept AS-FOO
  1041.           import: from AS2 action pref = 1; accept RS-FOO
  1042.  
  1043.  
  1044.     The keyword PeerAS can be used instead of the AS number of the  peer AS.
  1045.     PeerAS is particularly useful when the peering is specified using an  AS
  1046.     set.  For example:
  1047.  
  1048.  
  1049.           as-set: AS-FOO
  1050.           members: AS2 AS3
  1051.  
  1052.           aut-num: AS1
  1053.           import: from AS-FOO action pref = 1; accept PeerAS
  1054.  
  1055.  
  1056.  
  1057.  
  1058. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 19]
  1059. Internet Draft                       RPSL                      July 30, 1997
  1060.  
  1061.     is same as:
  1062.  
  1063.  
  1064.           aut-num: AS1
  1065.           import: from AS2 action pref = 1; accept AS2
  1066.           import: from AS3 action pref = 1; accept AS3
  1067.  
  1068.  
  1069.     A route set  name can also  be followed  by one of  the operators  '^-',
  1070.     '^+', '^n' or '^n-m'.   These operators are distributive over the  route
  1071.     sets.   For example,  { 5.0.0.0/8,  6.0.0.0/8 }^+ equals  { 5.0.0.0/8^+,
  1072.     6.0.0.0/8^+ },  and AS1^-  equals all  the exclusive  more specifics  of
  1073.     routes originated by AS1.
  1074.  
  1075. AS Path Regular Expressions
  1076.     An AS-path  regular  expression  can  be used  as  a  policy  filter  by
  1077.     enclosing the  expression in  `<' and  `>'.   An  AS-path policy  filter
  1078.     matches the set  of routes which  traverses a sequence  of ASes  matched
  1079.     by the AS-path regular expression.   A router  can check this using  the
  1080.     AS_PATH attribute  in the  Border Gateway Protocol  [28], or  the RD_PATH
  1081.     attribute in the Inter-Domain Routing Protocol[26].
  1082.  
  1083.     AS-path Regular Expressions are POSIX compliant regular expressions over
  1084.     the alphabet of AS  numbers.  The  regular expression constructs are  as
  1085.     follows:
  1086.  
  1087.  
  1088.     ASN      where ASN is  an AS number.   ASN matches  the AS-path that  is
  1089.                  of length 1 and contains the corresponding AS number  (e.g.
  1090.                  AS-path regular expression AS1 matches the AS-path ``1'').
  1091.  
  1092.                  The keyword PeerAS can be used instead of the AS  number of
  1093.                  the peer AS.
  1094.  
  1095.     AS-set   where AS-set is an  AS set name.   AS-set matches the  AS-paths
  1096.                  that is matched by one of the ASes in the AS-set.
  1097.  
  1098.     .        matches the AS-paths matched by any AS number.
  1099.  
  1100.     [...]    is an AS number  set.  It matches  the AS-paths matched by  the
  1101.                  AS numbers listed between the brackets.  The AS  numbers in
  1102.                  the set are separated by white space characters.  If  a `-'
  1103.                  is used between two AS numbers in this set, all  AS numbers
  1104.                  between the two  AS numbers are  included in the  set.   If
  1105.                  an as-set name is listed, all AS numbers in the  as-set are
  1106.                  included.
  1107.  
  1108.     [^...]   is a complemented AS number set.  It matches any  AS-path which
  1109.                  is not matched by the AS numbers in the set.
  1110.  
  1111.     ^        Matches the empty string at the beginning of an AS-path.
  1112.  
  1113.  
  1114. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 20]
  1115. Internet Draft                       RPSL                      July 30, 1997
  1116.  
  1117.     $        Matches the empty string at the end of an AS-path.
  1118.  
  1119.  
  1120.     We next list the regular expression operators in the decreasing order of
  1121.     evaluation.  These operators  are left associative, i.e. performed  left
  1122.     to right.
  1123.  
  1124.  
  1125.     Unary postfix operators * + ?
  1126.                  For  a  regular expression  A,  A*  matches  zero  or  more
  1127.                  occurrences of A; A+ matches one or more occurrences of  A;
  1128.                  A? matches zero or one occurrence of A.
  1129.  
  1130.     Binary catenation operator
  1131.                  This  is  an  implicit  operator  and  exists  between  two
  1132.                  regular  expressions  A  and  B  when  no  other   explicit
  1133.                  operator  is specified.     The resulting  expression  A  B
  1134.                  matches an AS-path if A matches some prefix of the  AS-path
  1135.                  and B matches the rest of the AS-path.
  1136.  
  1137.     Binary alternative (or) operator |
  1138.                  For a  regular  expressions A  and  B, A  | B  matches  any
  1139.                  AS-path that is matched by A or B.
  1140.  
  1141.  
  1142.     Parenthesis can be  used to  override the default  order of  evaluation.
  1143.     White spaces can be used to increase readability.
  1144.  
  1145.     The following are examples of AS-path filters:
  1146.  
  1147.  
  1148.        <AS3>
  1149.        <^AS1>
  1150.        <AS2$>
  1151.        <^AS1 AS2 AS3$>
  1152.        <^AS1 .* AS2$>.
  1153.  
  1154.  
  1155.     The first  example matches  any route whose  AS-path contains  AS3,  the
  1156.     second matches routes whose AS-path  starts with AS1, the third  matches
  1157.     routes whose  AS-path ends  with AS2,  the fourth  matches routes  whose
  1158.     AS-path is exactly ``1 2 3'', and the fifth matches routes whose AS-path
  1159.     starts with  AS1 and  ends  in AS2  with any  number  of AS  numbers  in
  1160.     between.
  1161.  
  1162.  
  1163. Composite Policy Filters
  1164.  
  1165.  
  1166. The following operators (in decreasing order  of evaluation) can be used  to
  1167. form composite policy filters:
  1168.  
  1169.  
  1170. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 21]
  1171. Internet Draft                       RPSL                      July 30, 1997
  1172.  
  1173. NOT Given a policy  filter x, NOT x matches  the set of routes that are  not
  1174.     matched by x.  That is it is the negation of policy filter x.
  1175.  
  1176. AND Given two policy  filters x and y, x  AND y matches the intersection  of
  1177.     the routes that are matched by x and that are matched by y.
  1178.  
  1179. OR Given two policy filters x and y, x OR y matches the union  of the routes
  1180.     that are matched by x and that are matched by y.
  1181.  
  1182.  
  1183. Note that an OR operator can be implicit, that is `x y' is equivalent  to `x
  1184. OR y'.
  1185.  
  1186.  
  1187.   E.g.
  1188.     NOT {128.9.0.0/16, 128.8.0.0/16}
  1189.     AS226 AS227 OR AS228
  1190.     AS226 AND NOT {128.9.0.0/16}
  1191.     AS226 AND {0.0.0.0/0^0-18}
  1192.  
  1193.  
  1194. The first example  matches any route  except 128.9.0.0/16 and  128.8.0.0/16.
  1195. The second example matches the routes of AS226, AS227 and AS228.  The  third
  1196. example matches the routes of AS226 except 128.9.0.0/16.  The fourth example
  1197. matches the routes of AS226 whose length are shorter than 19.
  1198.  
  1199. Policy filters can also use the  values of other attributes for  comparison.
  1200. The attributes whose values can be  used in policy filters are specified  in
  1201. the RPSL dictionary.   Please refer to  Section 8 for details.   An  example
  1202. using the the BGP community attribute is shown below:
  1203.  
  1204.  
  1205.     aut-num: AS1
  1206.     export: to AS2 announce AS1 AND NOT community.contains(NO_EXPORT)
  1207.  
  1208.  
  1209. Filters using the routing  policy attributes defined  in the dictionary  are
  1210. evaluated before evaluating the operators AND, OR and NOT.
  1211.  
  1212.  
  1213. 7.1.4 Example Policy Expressions
  1214.  
  1215.  
  1216.  aut-num: AS1
  1217.  import: from AS2 action pref = 1;
  1218.          from AS3 action pref = 2;
  1219.          accept AS4
  1220.  
  1221.  
  1222. The above  example states  that  AS4's routes  are  accepted from  AS2  with
  1223. preference 1,  and from AS3  with preference  2 (routes  with lower  integer
  1224.  
  1225.  
  1226. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 22]
  1227. Internet Draft                       RPSL                      July 30, 1997
  1228.  
  1229. preference values are preferred over  routes with higher integer  preference
  1230. values).
  1231.  
  1232.  
  1233.  aut-num: AS1
  1234.  import: from AS2 7.7.7.2 at 7.7.7.1 action pref = 1;
  1235.          from AS2                    action pref = 2;
  1236.          accept AS4
  1237.  
  1238.  
  1239. The above example states that AS4's routes are accepted from AS2 on  peering
  1240. 7.7.7.1-7.7.7.2 with preference 1,  and on any other  peering with AS2  with
  1241. preference 2.
  1242.  
  1243.  
  1244. 7.2 export Attribute:  Export Policy Specification
  1245.  
  1246.  
  1247. Similarly,  an  export  policy  expression  is  specified  using  an  export
  1248. attribute.  The export attribute has the following syntax:
  1249.  
  1250.  
  1251.     export: to <peering-1> [action <action-1>]
  1252.             . . .
  1253.             to <peering-N> [action <action-N>]
  1254.             announce <filter>
  1255.  
  1256.  
  1257. The action specification is optional.  The semantics of an export  attribute
  1258. is as  follows:    the set  of  routes  that are  matched  by  <filter>  are
  1259. exported to all the peers specified in <peerings>; while exporting routes at
  1260. <peering-M>, <action-M> is executed.
  1261.  
  1262.  
  1263.   E.g.
  1264.     aut-num: AS1
  1265.     export: to AS2 action med = 5; community .= 70;
  1266.             announce AS4
  1267.  
  1268.  
  1269.  
  1270. In this example, AS4's routes are announced to AS2 with the med  attribute's
  1271. value set to 5 and community 70 added to the community list.
  1272.  
  1273. Example:
  1274.  
  1275.  
  1276.     aut-num: AS1
  1277.     export: to AS-FOO announce ANY
  1278.  
  1279.  
  1280.  
  1281.  
  1282. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 23]
  1283. Internet Draft                       RPSL                      July 30, 1997
  1284.  
  1285. In this example,  AS1 announces all  of its routes  to the  ASes in the  set
  1286. AS-FOO.
  1287.  
  1288.  
  1289. 7.3 Other Routing Protocols, Multi-Protocol Routing Protocols, and Injecting
  1290.     Routes Between Protocols
  1291.  
  1292.  
  1293. The syntax of the import and export attributes are indeed the following:
  1294.  
  1295.  
  1296.     import: [protocol <protocol-1>] [into <protocol-2>]
  1297.             from <peering-1> [action <action-1>]
  1298.             . . .
  1299.             from <peering-N> [action <action-N>]
  1300.             accept <filter>
  1301.     export: [protocol <protocol-1>] [into <protocol-2>]
  1302.             to <peering-1> [action <action-1>]
  1303.             . . .
  1304.             to <peering-N> [action <action-N>]
  1305.             announce <filter>
  1306.  
  1307.  
  1308. Where the  optional  protocol  specifications can  be  used  for  specifying
  1309. policies for  other  routing  protocols,  or for  injecting  routes  of  one
  1310. protocol into another protocol, or for multi-protocol routing policies.  The
  1311. valid protocol  names are  defined  in the  dictionary.    The  <protocol-1>
  1312. is the  name  of  the protocol  whose  routes  are being  exchanged.     The
  1313. <protocol-2> is the name  of the protocol which  is receiving these  routes.
  1314. Both <protocol-1> and <protocol-2> default to the Internet Exterior  Gateway
  1315. Protocol, currently BGP.
  1316.  
  1317. In the following example, all interAS routes are injected into RIP.
  1318.  
  1319.  
  1320.  aut-num: AS1
  1321.  import: from AS2 accept AS2
  1322.  export: protocol BGP4 into RIP
  1323.          to AS1 announce ANY
  1324.  
  1325.  
  1326. In the  following  example, AS1  accepts  AS2's  routes including  any  more
  1327. specifics of AS2's  routes, but does  not inject these  extra more  specific
  1328. routes into OSPF.
  1329.  
  1330.  
  1331.  aut-num: AS1
  1332.  import: from AS2 accept AS2^+
  1333.  export: protocol BGP4 into OSPF
  1334.          to AS1 announce AS2
  1335.  
  1336.  
  1337.  
  1338. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 24]
  1339. Internet Draft                       RPSL                      July 30, 1997
  1340.  
  1341. In the following example,  AS1 injects its static  routes (routes which  are
  1342. members of the set AS1:RS-STATIC-ROUTES) to the interAS routing protocol and
  1343. appends AS1 twice to their AS paths.
  1344.  
  1345.  
  1346.  aut-num: AS1
  1347.  import: protocol STATIC into BGP4
  1348.          from AS1 action aspath.prepend(AS1, AS1);
  1349.          accept AS1:RS-STATIC-ROUTES
  1350.  
  1351.  
  1352. In the following example,  AS1 imports different set  of unicast routes  for
  1353. multicast reverse path forwarding from AS2:
  1354.  
  1355.  
  1356.  aut-num: AS1
  1357.  import: from AS2 accept AS2
  1358.  import: protocol IDMR
  1359.          from AS2 accept AS2:RS-RPF-ROUTES
  1360.  
  1361.  
  1362. 7.4 Ambiguity Resolution
  1363.  
  1364.  
  1365. It is possible that the same peering can be covered by more that one peering
  1366. specification in a policy expression.  For example:
  1367.  
  1368.  
  1369.  aut-num: AS1
  1370.  import: from AS2 7.7.7.2 at 7.7.7.1 action pref = 2;
  1371.          from AS2 7.7.7.2 at 7.7.7.1 action pref = 1;
  1372.          accept AS4
  1373.  
  1374.  
  1375. This is  not an  error,  though definitely  not  desirable.   To  break  the
  1376. ambiguity, the action  corresponding to the  first peering specification  is
  1377. used.  That is the routes are accepted with preference 2.  We call this rule
  1378. as the specification-order rule.
  1379.  
  1380. Consider the example:
  1381.  
  1382.  
  1383.  aut-num: AS1
  1384.  import: from AS2                    action pref = 2;
  1385.          from AS2 7.7.7.2 at 7.7.7.1 action pref = 1; dpa = 5;
  1386.          accept AS4
  1387.  
  1388.  
  1389. where both peering specifications cover the peering 7.7.7.1-7.7.7.2,  though
  1390. the second one covers  it more specifically.   The specification order  rule
  1391. still applies, and only the action ``pref =  2'' is executed.  In fact,  the
  1392.  
  1393.  
  1394. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 25]
  1395. Internet Draft                       RPSL                      July 30, 1997
  1396.  
  1397. second peering-action pair has  no use since  the first peering-action  pair
  1398. always covers it.   If the intended policy was  to accept these routes  with
  1399. preference 1 on this particular peering  and with preference 2 in all  other
  1400. peerings, the user should have specified:
  1401.  
  1402.  
  1403.  aut-num: AS1
  1404.  import: from AS2 7.7.7.2 at 7.7.7.1 action pref = 1; dpa = 5;
  1405.          from AS2                    action pref = 2;
  1406.          accept AS4
  1407.  
  1408.  
  1409. It is also possible that more than one policy expression can cover the  same
  1410. set of routes for the same peering.  For example:
  1411.  
  1412.  
  1413.  aut-num: AS1
  1414.  import: from AS2 action pref = 2; accept AS4
  1415.  import: from AS2 action pref = 1; accept AS4
  1416.  
  1417.  
  1418. In this case, the specification-order  rule is still used.   That is,  AS4's
  1419. routes are  accepted from  AS2  with preference  2.    If the  filters  were
  1420. overlapping but not exactly the same:
  1421.  
  1422.  
  1423.  aut-num: AS1
  1424.  import: from AS2 action pref = 2; accept AS4
  1425.  import: from AS2 action pref = 1; accept AS4 OR AS5
  1426.  
  1427.  
  1428. the AS4's routes are accepted from  AS2 with preference 2 and however  AS5's
  1429. routes are also accepted, but with preference 1.
  1430.  
  1431. We next give  the general specification  order rule for  the benefit of  the
  1432. RPSL implementors.  Consider two policy expressions:
  1433.  
  1434.  
  1435.  aut-num: AS1
  1436.  import: from peerings-1 action action-1 accept filter-1
  1437.  import: from peerings-2 action action-2 accept filter-2
  1438.  
  1439.  
  1440. The  above  policy  expressions  are  equivalent  to  the  following   three
  1441. expressions where there is no overlap:
  1442.  
  1443.  
  1444.  aut-num: AS1
  1445.  import: from peerings-1 action action-1 accept filter-1
  1446.  import: from peerings-3 action action-2 accept filter-2 AND NOT filter-1
  1447.  import: from peerings-4 action action-2 accept filter-2
  1448.  
  1449.  
  1450. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 26]
  1451. Internet Draft                       RPSL                      July 30, 1997
  1452.  
  1453. where  peerings-3  are  those  that  are  covered  by  both  peerings-1  and
  1454. peerings-2, and peerings-4 are those that are covered by peerings-2 but  not
  1455. by peerings-1 (``filter-2  AND NOT  filter-1'' matches the  routes that  are
  1456. matched by filter-2 but not by filter-1).
  1457.  
  1458. Example:
  1459.  
  1460.  
  1461.  aut-num: AS1
  1462.  import: from AS2 7.7.7.2 at 7.7.7.1
  1463.          action pref = 2;
  1464.          accept {128.9.0.0/16}
  1465.  import: from AS2
  1466.          action pref = 1;
  1467.          accept {128.9.0.0/16, 75.0.0.0/8}
  1468.  
  1469.  
  1470. Lets consider two  peerings with AS2,  7.7.7.1-7.7.7.2 and  9.9.9.1-9.9.9.2.
  1471. Both policy expressions cover 7.7.7.1-7.7.7.2.   On this peering, the  route
  1472. 128.9.0.0/16 is accepted  with preference  2,  and the  route 75.0.0.0/8  is
  1473. accepted with preference 1.  The peering 9.9.9.1-9.9.9.2 is only covered  by
  1474. the second policy expressions.   Hence, both the route 128.9.0.0/16 and  the
  1475. route 75.0.0.0/8 are accepted with preference 1 on peering 9.9.9.1-9.9.9.2.
  1476.  
  1477.  
  1478. 7.5 default Attribute:  Default Policy Specification
  1479.  
  1480.  
  1481. Default routing policies  are specified using  the default attribute.    The
  1482. default attribute has the following syntax:
  1483.  
  1484.  
  1485.     default: to <peering> [action <action>] [networks <filter>]
  1486.  
  1487.  
  1488. The <action>  and  <filter> specifications  are  optional.    The  semantics
  1489. are as  follows:   The <peering>  specification indicates  the AS  (and  the
  1490. router if  present)  is being  defaulted  to;  the  <action>  specification,
  1491. if present,  indicates  various  attributes of  defaulting,  for  example  a
  1492. relative preference if  multiple defaults  are specified;  and the  <filter>
  1493. specifications, if present, is a policy filter.  A router chooses a  default
  1494. router from the routes in its routing table that matches this <filter>.
  1495.  
  1496. In the following example, AS1 defaults to AS2 for routing.
  1497.  
  1498.  
  1499.  aut-num: AS1
  1500.  default: to AS2
  1501.  
  1502.  
  1503.  
  1504.  
  1505.  
  1506. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 27]
  1507. Internet Draft                       RPSL                      July 30, 1997
  1508.  
  1509. In the following example, router 7.7.7.1  in AS1 defaults to router  7.7.7.2
  1510. in AS2.
  1511.  
  1512.  
  1513.  aut-num: AS1
  1514.  default: to AS2 7.7.7.2 at 7.7.7.1
  1515.  
  1516.  
  1517. In the following example, AS1 defaults to AS2 and AS3, but prefers AS2  over
  1518. AS3.
  1519.  
  1520.  
  1521.  aut-num: AS1
  1522.  default: to AS2 action pref = 1;
  1523.  default: to AS3 action pref = 2;
  1524.  
  1525.  
  1526. In the following example, AS1 defaults  to AS2 and uses 128.9.0.0/16 as  the
  1527. default network.
  1528.  
  1529.  
  1530.  aut-num: AS1
  1531.  default: to AS2 networks { 128.9.0.0/16 }
  1532.  
  1533.  
  1534. 7.6 Structured Policy Specification
  1535.  
  1536.  
  1537. The import  and  export policies  can  be structured.    We  only  reccomend
  1538. structured policies to advanced RPSL users.   Please feel free to skip  this
  1539. section.
  1540.  
  1541. The BNF for a structured policy specification is the following:
  1542.  
  1543.  
  1544.    <import-factor> ::= from <peering-1> [action <action-1>]
  1545.                        . . .
  1546.                        from <peering-N> [action <action-N>]
  1547.                        accept <filter>;
  1548.  
  1549.    <import-term> ::=  <import-factor> |
  1550.                       LEFT-BRACE
  1551.                       <import-factor>
  1552.                       . . .
  1553.                       <import-factor>
  1554.                       RIGHT-BRACE
  1555.  
  1556.    <import-expression> ::= <import-term>                            |
  1557.                            <import-term> EXCEPT <import-expression> |
  1558.                            <import-term> REFINE <import-expression>
  1559.  
  1560.  
  1561.  
  1562. Alaettinoglu et. al.           Expires  January 30, 1998           [Page 28]
  1563. Internet Draft                       RPSL                      July 30, 1997
  1564.  
  1565.    import: [protocol <protocol1>] [into <protocol2>]
  1566.            <import-expression>
  1567.  
  1568.  
  1569. Please note the semicolon at the end  of an <import-factor>.  If the  policy
  1570. specification is not structured (as in all the examples in other  sections),
  1571. this semicolon is optional.  The syntax and semantics for an <import-factor>
  1572. is already defined in Section 7.1.
  1573.  
  1574. An <import-term> is either a  sequence of <import-factor>'s enclosed  within
  1575. matching braces (i.e. `{'  and `}') or just  a single <import-factor>.   The
  1576. semantics of an <import-term>  is the union  of <import-factor>'s using  the
  1577. specification order  rule.     An <import-expression>  is  either  a  single
  1578. <import-term> or an <import-term> followed  by one of the keywords  "except"
  1579. and "refine",  followed  by another  <import-expression>.    Note  that  our
  1580. definition allows nested  expressions.   Hence  there can  be exceptions  to
  1581. exceptions, refinements to refinements,  or even refinements to  exceptions,
  1582. and so on.
  1583.  
  1584. The semantics  for  the  except operator  is  as  follows:   The  result  of
  1585. an except operation  is another  <import-term>.   The  resulting policy  set
  1586. contains the policies of the right hand side but their filters are  modified
  1587. to only include the routes also matched  by a filter on the left hand  side.
  1588. The policies of the left hand side are included afterwards and their filters
  1589. are modified to exclude the routes matched by the filters of the right  hand
  1590. side.  Please note that the filters are modified during this process but the
  1591. actions are copied verbatim.  When there are multiple levels of nesting, the
  1592. operations (both except and refine) are performed right to left.
  1593.  
  1594. Consider the following example:
  1595.  
  1596.  
  1597.  import: from AS1 action pref = 1; accept as-foo;
  1598.          except {
  1599.             from AS2 action pref = 2; accept AS226;
  1600.             except {
  1601.                from AS3 action pref = 3; accept {128.9.0.0/16};
  1602.             }
  1603.          }
  1604.  
  1605.  
  1606. where the route 128.9.0.0/16 is originated  by AS226, and AS226 is a  member
  1607. of the as set as-foo.   In this example, the route 128.9.0.0/16 is  accepted
  1608. from AS3, any other route (not 128.9.0.0/16) originated by AS226 is accepted
  1609. from AS2, and any other ASes' routes in as-foo is accepted from AS1.
  1610.  
  1611. We can  come  to  the  same conclusion  using  the  algebra  defined  above.
  1612. Consider the inner exception specification:
  1613.  
  1614.  
  1615.    from AS2 action pref = 2; accept AS226;
  1616.  
  1617.  
  1618. Alaettinoglu et. al.           Expires  January 30, 1998           [Page 29]
  1619. Internet Draft                       RPSL                      July 30, 1997
  1620.  
  1621.    except {
  1622.       from AS3 action pref = 3; accept {128.9.0.0/16};
  1623.    }
  1624.  
  1625.  
  1626. is equivalent to
  1627.  
  1628.  
  1629.   {
  1630.    from AS3 action pref = 3; accept AS226 AND {128.9.0.0/16};
  1631.    from AS2 action pref = 2; accept AS226 AND NOT {128.9.0.0/16};
  1632.   }
  1633.  
  1634.  
  1635. Hence, the original expression is equivalent to:
  1636.  
  1637.  
  1638.  import: from AS1 action pref = 1; accept as-foo;
  1639.          except {
  1640.             from AS3 action pref = 3; accept AS226 AND {128.9.0.0/16};
  1641.             from AS2 action pref = 2; accept AS226 AND NOT {128.9.0.0/16};
  1642.          }
  1643.  
  1644.  
  1645. which is equivalent to
  1646.  
  1647.  
  1648.  import: {
  1649.     from AS3 action pref = 3;
  1650.              accept as-foo AND AS226 AND {128.9.0.0/16};
  1651.     from AS2 action pref = 2;
  1652.              accept as-foo AND AS226 AND NOT {128.9.0.0/16};
  1653.     from AS1 action pref = 1;
  1654.              accept as-foo AND NOT
  1655.                (AS226 AND NOT {128.9.0.0/16} OR AS226 AND {128.9.0.0/16});
  1656.     }
  1657.  
  1658.  
  1659. Since AS226 is in as-foo and 128.9.0.0/16 is in AS226, it simplifies to:
  1660.  
  1661.  
  1662.  import: {
  1663.            from AS3 action pref = 3; accept {128.9.0.0/16};
  1664.            from AS2 action pref = 2; accept AS226 AND NOT {128.9.0.0/16};
  1665.            from AS1 action pref = 1; accept as-foo AND NOT AS226;
  1666.          }
  1667.  
  1668.  
  1669. In the case  of the  refine operator,  the resulting set  is constructed  by
  1670. taking the cartasian product of the two sides as follows:  for each policy l
  1671. in the left hand  side and for  each policy r  in the right  hand side,  the
  1672.  
  1673.  
  1674. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 30]
  1675. Internet Draft                       RPSL                      July 30, 1997
  1676.  
  1677. peerings of the resulting policy  are the peerings common  to both r and  l;
  1678. the filter of the resulting policy is the intersection of l's filter and r's
  1679. filter; and action  of the resulting  policy is l's  action followed by  r's
  1680. action.  If there are no common peerings, or if the intersection of  filters
  1681. is empty, a resulting policy is not generated.
  1682.  
  1683. Consider the following example:
  1684.  
  1685.  
  1686.  import: { from AS-ANY action pref = 1; accept community.contains({3560,10});
  1687.                                 from   AS-ANY   action   pref   =   2;   ac-
  1688. cept community.contains({3560,20});
  1689.          } refine {
  1690.             from AS1 accept AS1;
  1691.             from AS2 accept AS2;
  1692.             from AS3 accept AS3;
  1693.          }
  1694.  
  1695.  
  1696. Here, any route with community  {3560,10} is assigned a preference  of 1 and
  1697. any route with community {3560,20} is assigned a  preference of 2 regardless
  1698. of whom they are  imported from.   However, only  AS1's routes are  imported
  1699. from AS1, and only AS2's routes are imported from AS2, and only AS3's routes
  1700. are imported form AS3, and no routes are imported from any other AS. We  can
  1701. reach the same conclusion using the above algebra.  That is, our example  is
  1702. equivalent to:
  1703.  
  1704.  
  1705.  import: {
  1706.    from AS1 action pref = 1; accept community.contains({3560,10}) AND AS1;
  1707.    from AS1 action pref = 2; accept community.contains({3560,20}) AND AS1;
  1708.    from AS2 action pref = 1; accept community.contains({3560,10}) AND AS2;
  1709.    from AS2 action pref = 2; accept community.contains({3560,20}) AND AS2;
  1710.    from AS3 action pref = 1; accept community.contains({3560,10}) AND AS3;
  1711.    from AS3 action pref = 2; accept community.contains({3560,20}) AND AS3;
  1712.  }
  1713.  
  1714.  
  1715. Note that the common peerings between  ``from AS1'' and ``from AS-ANY''  are
  1716. those peerings in  ``from AS1''.    Even though  we do  not formally  define
  1717. ``common peerings'', it is  straight forward to  deduce the definition  from
  1718. the definitions of peerings (please see Section 7.1.1).
  1719.  
  1720. Consider the following example:
  1721.  
  1722.  
  1723.  import: {
  1724.    from AS-ANY action med = 0; accept {0.0.0.0/0^0-16};
  1725.    } refine {
  1726.         from AS1 at 7.7.7.1 action pref = 1; accept AS1;
  1727.         from AS1            action pref = 2; accept AS1;
  1728.  
  1729.  
  1730. Alaettinoglu et. al.           Expires  January 30, 1998           [Page 31]
  1731. Internet Draft                       RPSL                      July 30, 1997
  1732.  
  1733.      }
  1734.  
  1735.  
  1736. where only routes of length 0 to 16 are accepted and med's value is set to 0
  1737. to disable med's effect for all peerings;  In addition, from AS1 only  AS1's
  1738. routes are imported, and AS1's routes imported at 7.7.7.1 are preferred over
  1739. other peerings.  This is equivalent to:
  1740.  
  1741.  
  1742.  import: {
  1743.       from  AS1  at  7.7.7.1  action  med=0;  pref=1;  accept  {0.0.0.0/0^0-
  1744. 16} AND AS1;
  1745.     from  AS1                  action  med=0; pref=2;  accept  {0.0.0.0/0^0-
  1746. 16} AND AS1;
  1747.  }
  1748.  
  1749.  
  1750. The above  syntax and  semantics  also apply  equally to  structured  export
  1751. policies with ``from'' replaced with ``to'' and ``accept'' is replaced  with
  1752. ``announce''.
  1753.  
  1754.  
  1755. 8 dictionary Class
  1756.  
  1757.  
  1758. The dictionary  class provides  extensibility  to RPSL.  Dictionary  objects
  1759. define routing policy  attributes, types,  and routing protocols.    Routing
  1760. policy attributes, henceforth called rp-attributes, may correspond to actual
  1761. protocol attributes, such as the  BGP path attributes (e.g. community,  dpa,
  1762. and AS-path), or they may correspond to router features (e.g. BGP route flap
  1763. damping).  As new protocols, new protocol attributes, or new router features
  1764. are introduced,  the dictionary  object is  updated to  include  appropriate
  1765. rp-attribute and protocol definitions.
  1766.  
  1767. An rp-attribute is an abstract class;  that is their data representation  is
  1768. not available.   Instead,  they are accessed  through access methods.    For
  1769. example, the rp-attribute for  the BGP AS-path  attribute is called  aspath;
  1770. and it has an access method called prepend which stuffs extra AS numbers  to
  1771. the AS-path attributes.  Access methods  can take arguments.  Arguments  are
  1772. strongly typed.  For example, the  method prepend above takes AS numbers  as
  1773. argument.
  1774.  
  1775. Once an  rp-attribute is  defined  in the  dictionary,  it  can be  used  to
  1776. describe policy filters  and actions.   Policy analysis  tools are  required
  1777. to fetch the  dictionary object and  recognize newly defined  rp-attributes,
  1778. types, and protocols.   The analysis tools  may approximate policy  analyses
  1779. on rp-attributes that they  do not understand:   a filter method may  always
  1780. match, and an action method may always perform no-operation.  Analysis tools
  1781. may even download  code to perform  appropriate operations using  mechanisms
  1782. outside the scope of RPSL.
  1783.  
  1784.  
  1785.  
  1786. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 32]
  1787. Internet Draft                       RPSL                      July 30, 1997
  1788.  
  1789. We next describe the  syntax and semantics  of the dictionary  class.   This
  1790. description is not essential for understanding dictionary objects (but it is
  1791. essential for creating one).  Please  feel free to skip to the RPSL  Initial
  1792. Dictionary subsection (Section 8.1).
  1793.  
  1794. The attributes  of  the dictionary  class  are shown  in  Figure 14.     The
  1795. dictionary attribute is the name of the dictionary object, obeying the  RPSL
  1796. naming rules.  There can be many dictionary objects, however there is always
  1797. one well-known dictionary object ``RPSL''. All tools use this dictionary  by
  1798. default.
  1799.  
  1800.  
  1801. Attribute      Value                    Type
  1802. dictionary     <object-name>            mandatory, single-valued, class key
  1803. rp-attribute   see description in text  optional, multi valued
  1804. typedef        see description in text  optional, multi valued
  1805. protocol       see description in text  optional, multi valued
  1806. encapsulation  see Section 11           optional, multi valued
  1807.  
  1808.                   Figure 14:  dictionary Class Attributes
  1809.  
  1810.  
  1811.  
  1812. The rp-attribute attribute has the following syntax:
  1813.  
  1814.  
  1815.    rp-attribute: <name>
  1816.       <method-1>(<type-1-1>, ..., <type-1-N1> [, "..."])
  1817.       ...
  1818.       <method-M>(<type-M-1>, ..., <type-M-NM> [, "..."])
  1819.  
  1820.  
  1821. where <name> is the name of the rp-attribute; and <method-i> is the name  of
  1822. an access method for  the rp-attribute, taking Ni  arguments where the  j-th
  1823. argument is of type <type-i-j>.  A method name is either an RPSL name or one
  1824. of the operators defined in Figure 15.   The operator methods can take  only
  1825. one argument.
  1826.  
  1827.  
  1828.    operator=           operator==
  1829.    operator<<=         operator<
  1830.    operator>>=         operator>
  1831.    operator+=          operator>=
  1832.    operator-=          operator<=
  1833.    operator*=          operator!=
  1834.    operator/=          operator()
  1835.    operator.=          operator[]
  1836.  
  1837.  
  1838.                            Figure 15:  Operators
  1839.  
  1840.  
  1841.  
  1842. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 33]
  1843. Internet Draft                       RPSL                      July 30, 1997
  1844.  
  1845. An rp-attribute can have many methods defined  for it.  Some of the  methods
  1846. may even have the same name, in which case their arguments are of  different
  1847. types.   If the argument  list is followed  by ``...'',  the method takes  a
  1848. variable number of arguments.  In this case, the actual arguments after  the
  1849. Nth argument are of type <type-N>.
  1850.  
  1851. Arguments are strongly  typed.   A type  of an  argument can be  one of  the
  1852. predefined types or  one of the  dictionary defined types.   The  predefined
  1853. type names are listed in Figure 16.   The integer and the real types can  be
  1854. followed by a lower and  an upper bound to specify  the set of valid  values
  1855. of the argument.  The  range specification is optional.   We use the ANSI  C
  1856. language conventions for representing integer, real and string values.   The
  1857. enum type is followed by a list of RPSL names which are the valid  values of
  1858. the type.  The boolean  type can take the values true  or false.  as_number,
  1859. ip_address, address_prefix and dns_name types are  as in Section  2.   filter
  1860. type is a policy filter as in Section 7.
  1861.  
  1862.  
  1863.    integer[lower, upper]              as_number
  1864.    real[lower, upper]                 ipv4_address
  1865.    enum[name, name, ...]              address_prefix
  1866.    string                             dns_name
  1867.    boolean                            filter
  1868.    rpsl_word                          as_set_name
  1869.    free_text                          route_set_name
  1870.    email
  1871.  
  1872.  
  1873.                         Figure 16:  Predefined Types
  1874.  
  1875.  
  1876. The typedef attribute specifies a dictionary defined type.  Its syntax is as
  1877. follows:
  1878.  
  1879.  
  1880.    typedef: <name> <type-1> ... <type-N>
  1881.  
  1882.  
  1883. where <name> is the name of the  type being defined and <type-M> is  another
  1884. type name, either predefined or dictionary defined.   The type defined by  a
  1885. typedef is either of the types 1 through N (analogous to unions in C[19]).
  1886.  
  1887. A dictionary defined type can also be a list type, specified as:
  1888.  
  1889.  
  1890.         list [<min_elems>:<max_elems>] of <type>
  1891.  
  1892.  
  1893. where the  list  elements are  of  <type> and  the  list contains  at  least
  1894. <min_elems> and  at most  <max_elems>  elements.   The  size specification  is
  1895. optional.   In this  case, there  is no restriction  in the  number of  list
  1896.  
  1897.  
  1898. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 34]
  1899. Internet Draft                       RPSL                      July 30, 1997
  1900.  
  1901. elements.  A value of a list  type is represented as a sequence of  elements
  1902. separated by the character  ``,'' and enclosed  by the characters ``{''  and
  1903. ``}''.
  1904.  
  1905. A protocol attribute of  the dictionary class defines  a protocol and a  set
  1906. of peering options for  that protocol (which are  used in inet-rtr class  in
  1907. Section 10).  Its syntax is as follows:
  1908.  
  1909.  
  1910.    protocol: <name>
  1911.       MANDATORY | OPTIONAL <option-1>(<type-1-1>, ..., <type-1-N1> [, "..."])
  1912.       ...
  1913.       MANDATORY | OPTIONAL <option-M>(<type-M-1>, ..., <type-M-NM> [, "..."])
  1914.  
  1915.  
  1916. where <name>  is  the name  of  the protocol;  MANDATORY  and  OPTIONAL  are
  1917. keywords; and <option-i> is  a peering option for  this protocol, taking  Ni
  1918. many arguments.   The syntax and  semantics of the arguments  are as in  the
  1919. rp-attribute.  If the keyword MANDATORY is used the option is mandatory  and
  1920. needs to be specified  for each peering  of this protocol.   If the  keyword
  1921. OPTIONAL is used the option can be skipped.
  1922.  
  1923. The  encapsulation  attribute  defines   a  valid  encapsulation  name   for
  1924. inet-tunnel objects.  Please refer to Section 11 for details.
  1925.  
  1926.  
  1927. 8.1 Initial RPSL Dictionary and Example Policy Actions and Filters
  1928.  
  1929.  
  1930. dictionary:   RPSL
  1931. rp-attribute: # preference, smaller values represent higher preferences
  1932.               pref
  1933.               operator=(integer[0, 65535])
  1934. rp-attribute: # BGP multi_exit_discriminator attribute
  1935.               med
  1936.               operator=(integer[0, 65535])
  1937.               # to set med to the IGP metric: med = igp_cost;
  1938.               operator=(enum[igp_cost])
  1939. rp-attribute: # BGP destination preference attribute (dpa)
  1940.               dpa
  1941.               operator=(integer[0, 65535])
  1942. rp-attribute: # BGP aspath attribute
  1943.               aspath
  1944.               # prepends AS numbers from last to first order
  1945.               prepend(as_number, ...)
  1946. typedef:      # a community value in RPSL is either
  1947.               #  - a 4 byte integer
  1948.               #  - internet, no_export, no_advertise (see RFC-1997)
  1949.               #  - two 2-byte integers to be concatanated eg. {3561,70}
  1950.  
  1951.  
  1952. Alaettinoglu et. al.           Expires  January 30, 1998           [Page 35]
  1953. Internet Draft                       RPSL                      July 30, 1997
  1954.  
  1955.               community_elm
  1956.               integer[1, 4294967200],
  1957.               enum[internet, no_export, no_advertise]
  1958.               list[2:2] of integer[0, 65535]
  1959. typedef:      # list of community values { 40, no_export, {3561,70}}
  1960.               community_list
  1961.               list of community_elm
  1962. rp-attribute: # BGP community attribute
  1963.               community
  1964.               # set to a list of communities
  1965.               operator=(community_list)
  1966.               # order independent equality comparison
  1967.               operator==(community_list)
  1968.               # append community values
  1969.               operator.=(community_elm)
  1970.               append(community_elm, ...)
  1971.               # delete community values
  1972.               delete(community_elm, ...)
  1973.               # a filter: true if one of community values is contained
  1974.               contains(community_elm, ...)
  1975.               # shortcut to contains: community(no_export, {3561,70})
  1976.               operator()(community_elm, ...)
  1977. rp-attribute: # next hop router in a static route
  1978.               next-hop
  1979.               operator=(ipv4_address)       # a router address
  1980.               operator=(enum[self])         # router's own address
  1981. rp-attribute: # cost of a static route
  1982.               cost
  1983.               operator=(integer[0, 65535])
  1984. rp-attribute: # IP time-to-live, useful for tunnels
  1985.               ttlscope
  1986.               operator=(integer[0, 65535])
  1987. rp-attribute: # A DVMRP metric, useful for tunnels
  1988.               dvmrp-metric
  1989.               operator=(integer[0, 65535])
  1990. rp-attribute: # for admin scoped multicast
  1991.               boundary
  1992.               operator=(list of address_prefix)
  1993. encapsulation: IPinIP
  1994. encapsulation: IPMOBILITY
  1995. encapsulation: DVMRP
  1996. encapsulation: GRE
  1997. encapsulation: IPv6
  1998. protocol: BGP4
  1999.           # as number of the peer router
  2000.           MANDATORY asno(as_number)
  2001.           # enable flap damping
  2002.           OPTIONAL flap_damp()
  2003. protocol: OSPF
  2004. protocol: RIP
  2005. protocol: IGRP
  2006.  
  2007.  
  2008. Alaettinoglu et. al.           Expires  January 30, 1998           [Page 36]
  2009. Internet Draft                       RPSL                      July 30, 1997
  2010.  
  2011. protocol: IS-IS
  2012. protocol: STATIC
  2013. protocol: RIPng
  2014. protocol: DVMRP
  2015. protocol: PIM-DM
  2016. protocol: PIM-SM
  2017. protocol: CBT
  2018. protocol: MOSPF
  2019.  
  2020.  
  2021.                         Figure 17:  RPSL Dictionary
  2022.  
  2023. The  Figure  17  shows  the  initial   RPSL  dictionary.     It  has   eight
  2024. rp-attributes:   pref to  assign local  preference to  the routes  accepted;
  2025. med to assign a value  to the MULTI_EXIT_DISCRIMINATOR BGP attribute; dpa  to
  2026. assign a value to the  DPA BGP attribute; aspath  to prepend a value to  the
  2027. AS_PATH BGP attribute; community to  assign a value to or to check the  value
  2028. of the  community BGP  attribute; next-hop  to assign  next  hop routers  to
  2029. static routes; and cost to assign a  cost to static routes.  The  dictionary
  2030. defines two types:   community_elm and  community_list.    community_elm  type
  2031. is either a  4-byte unsigned integer,  or one  of the keywords  no_export  or
  2032. no_advertise (defined  in [9]),  or a list  of two  2-byte unsigned  integers
  2033. in which case the  two integers are concatenated  to form a 4-byte  integer.
  2034. (The last form  is often  used in the  Internet to  partition the  community
  2035. space.  A provider uses its AS number as the first two bytes, and  assigns a
  2036. semantics of its choice to the last two bytes.)  The rp-attributes ttlscope,
  2037. dvmrp-metric, boundary  are for  specifying tunnel  characteristics and  are
  2038. described in Section 11.
  2039.  
  2040. The initial  dictionary (Figure  17)  defines only  options for  the  Border
  2041. Gateway Protocol:  asno and flap_damp.   The mandatory asno option is the  AS
  2042. number of the  peer router.    The optional  flap_damp  option instructs  the
  2043. router to damp route flaps when importing routes from the peer router.
  2044.  
  2045. The initial  dictionary  (Figure  17) defines  the  following  encapsulation
  2046. types:  IPinIP  [29], IPMOBILITY  [24], DVMRP   [25],  GRE   [15], and  IPv6
  2047. [10].
  2048.  
  2049.  
  2050. Policy Actions and Filters Using RP-Attributes
  2051.  
  2052.  
  2053. The syntax of  a policy action  or a filter  using an rp-attribute  x is  as
  2054. follows:
  2055.  
  2056.  
  2057.     x.method(arguments)
  2058.     x ``op'' argument
  2059.  
  2060.  
  2061.  
  2062.  
  2063.  
  2064. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 37]
  2065. Internet Draft                       RPSL                      July 30, 1997
  2066.  
  2067. where  method  is  a  method  and  ``op''  is  an  operator  method  of  the
  2068. rp-attribute x.   If an operator  method is used  in specifying a  composite
  2069. policy filter,  it  evaluates  earlier  than  the  composite  policy  filter
  2070. operators (i.e. AND, OR, NOT, and implicit or operator).
  2071.  
  2072. The pref rp-attribute can be assigned a positive integer as follows:
  2073.  
  2074.  
  2075.    pref = 10;
  2076.  
  2077.  
  2078. The med rp-attribute can be assigned  either a positive integer or the  word
  2079. ``igp_cost'' as follows:
  2080.  
  2081.  
  2082.    med = 0;
  2083.    med = igp_cost;
  2084.  
  2085.  
  2086. The dpa rp-attribute can be assigned a positive integer as follows:
  2087.  
  2088.  
  2089.    dpa = 100;
  2090.  
  2091.  
  2092. The BGP  community  attribute is  list-valued,  that  is  it is  a  list  of
  2093. 4-byte integers each representing a  ``community''.  The following  examples
  2094. demonstrate how to add communities to this rp-attribute:
  2095.  
  2096.  
  2097.    community .= 100;
  2098.    community .= NO_EXPORT;
  2099.    community .= {3561,10};
  2100.  
  2101.  
  2102. In the last case, a 4-byte integer is constructed where the more significant
  2103. two bytes equal  3561 and  the less  significant two bytes  equal 10.    The
  2104. following examples demonstrate how to delete communities from the  community
  2105. rp-attribute:
  2106.  
  2107.  
  2108.    community.delete(100, NO_EXPORT, {3561,10});
  2109.  
  2110.  
  2111. Filters that use the community  rp-attribute can be defined as  demonstrated
  2112. by the following examples:
  2113.  
  2114.  
  2115.    community.contains(100, NO_EXPORT, {3561,10});
  2116.  
  2117.  
  2118.  
  2119.  
  2120. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 38]
  2121. Internet Draft                       RPSL                      July 30, 1997
  2122.  
  2123. The community rp-attribute can be set to a list of communities as follows:
  2124.  
  2125.  
  2126.    community = {100, NO_EXPORT, {3561,10}, 200};
  2127.    community = {};
  2128.  
  2129.  
  2130. In this  first case,  the community  rp-attribute contains  the  communities
  2131. 100, NO_EXPORT, {3561,10},  and 200.    In  the latter  case, the  community
  2132. rp-attribute is cleared.  The community rp-attribute can be compared against
  2133. a list of communities as follows:
  2134.  
  2135.  
  2136.    community == {100, NO_EXPORT, {3561,10}, 200};
  2137.  
  2138.  
  2139. To influence the route selection,  the BGP as_path rp-attribute can be  made
  2140. longer by prepending AS numbers to it as follows:
  2141.  
  2142.  
  2143.    aspath.prepend(AS1);
  2144.    aspath.prepend(AS1, AS1, AS1);
  2145.  
  2146.  
  2147. The following examples are invalid:
  2148.  
  2149.  
  2150.    med = -50;                     # -50 is not in the range
  2151.    med = igp;                     # igp is not one of the enum values
  2152.    med.assign(10);                # method assign is not defined
  2153.    community.append({AS3561,20}); # the first argument should be 3561
  2154.  
  2155.  
  2156. Figure 18 shows a  more advanced example  using the rp-attribute  community.
  2157. In this  example,  AS3561  bases  its  route  selection  preference  on  the
  2158. community attribute.    Other  ASes  may indirectly  affect  AS3561's  route
  2159. selection  by  including   the  appropriate  communities   in  their   route
  2160. announcements.
  2161.  
  2162.  
  2163. 9 Advanced route Class
  2164.  
  2165.  
  2166. 9.1 Specifying Static Routes
  2167.  
  2168.  
  2169. The attribute inject-at can be used to specify static routes.  Its syntax is
  2170. as follows:
  2171.  
  2172.  
  2173.  
  2174.  
  2175.  
  2176. Alaettinoglu et. al.           Expires  January 30, 1998           [Page 39]
  2177. Internet Draft                       RPSL                      July 30, 1997
  2178.  
  2179.  
  2180.  aut-num: AS1
  2181.  export: to AS2 action community.={3561,90};
  2182.          to AS3 action community.={3561,80};
  2183.          announce AS1
  2184.  
  2185.  as-set: AS3561:AS-PEERS
  2186.  members: AS2, AS3
  2187.  
  2188.  aut-num: AS3561
  2189.  import: from AS3561:AS-PEERS
  2190.          action pref = 10;
  2191.          accept community.contains({3561,90})
  2192.  import: from AS3561:AS-PEERS
  2193.          action pref = 20;
  2194.          accept community.contains({3561,80})
  2195.  import: from AS3561:AS-PEERS
  2196.          action pref = 20;
  2197.          accept community.contains({3561,70})
  2198.  import: from AS3561:AS-PEERS
  2199.          action pref = 0;
  2200.          accept ANY
  2201.  
  2202.  
  2203.         Figure 18:  Policy example using the community rp-attribute.
  2204.  
  2205.    inject-at: <router> [action <action>]
  2206.  
  2207.  
  2208. where <router>  is an  IP address  of a  router and  <action> is  as in  the
  2209. aut-num class.  <router> executes the <action> and injects the route to  the
  2210. interAS routing system.  <action> may set certain route attributes such as a
  2211. next-hop router or a cost.
  2212.  
  2213. In the following example, the router 7.7.7.1 injects the route 128.7.0.0/16.
  2214. The next-hop routers (in this example,  there are two next-hop routers)  for
  2215. this route are  7.7.7.2 and  7.7.7.3 and  the route has  a cost  of 10  over
  2216. 7.7.7.2 and 20 over 7.7.7.3.
  2217.  
  2218.  
  2219.    route:     128.7.0.0/16
  2220.    origin:    AS1
  2221.    inject-at: 7.7.7.1 action next-hop = 7.7.7.2; cost = 10;
  2222.    inject-at: 7.7.7.1 action next-hop = 7.7.7.3; cost = 20;
  2223.  
  2224.  
  2225.  
  2226.  
  2227.  
  2228.  
  2229.  
  2230.  
  2231.  
  2232. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 40]
  2233. Internet Draft                       RPSL                      July 30, 1997
  2234.  
  2235. 9.2 Specifying Aggregate Routes
  2236.  
  2237.  
  2238. The attributes  aggr-by, inject-at,  export-comps, and  holes  are used  for
  2239. specifying aggregate routes [13].
  2240.  
  2241. The aggr-by attribute  defines what component  routes are used  to form  the
  2242. aggregate.  Its syntax is as follows:
  2243.  
  2244.  
  2245.    aggr-by: [atomic] <filter>
  2246.  
  2247.  
  2248. A router in the origin AS forms the aggregate route if there is at least one
  2249. route in its routing  table that matches  <filter>.   If the keyword  ATOMIC
  2250. is specified, the  aggregation is  done atomically, otherwise  the BGP  path
  2251. attributes of the matching routes are  used to form the BGP path  attributes
  2252. of the aggregate route.   For  example, if atomic  aggregation is done,  the
  2253. aggregate route  would have  an  AS-path that  starts from  the  aggregating
  2254. AS [13].   Otherwise, the aggregate route  would have an AS-path  containing
  2255. AS-sets formed from the AS-paths of the matching routes.
  2256.  
  2257. Figure 19  shows  some example  aggregate  route  objects.    The  aggregate
  2258. 128.9.0.0/16 is  generated if  there  is a  route  that matches  the  filter
  2259. ``128.9.0.0/16^- AND  <^AS226>''  (this  filter matches  more  specifics  of
  2260. 128.9.0.0/16 that are  received form  AS226).   The BGP  path attributes  of
  2261. the matching  routes  are  used to  form  the  BGP path  attributes  of  the
  2262. route 128.9.0.0/16.  Similarly,  the aggregate 128.8.0.0/16 is generated  if
  2263. there is a route  that matches the  filter ``128.8.0.0/16^- AND  <^AS226>''.
  2264. However, its  path attributes  are generated  using the  atomic  aggregation
  2265. rules [13].  The aggregate  128.7.0.0/16 is always and atomically  generated
  2266. since the policy filter ``ANY'' matches any route in the routing table.
  2267.  
  2268. The inject-at attribute lists the routers in the originating AS that  inject
  2269. this route  to the  interAS routing  system.   That  is,  these routers  are
  2270. configured to  perform the  aggregation.    If  the inject-at  attribute  is
  2271. missing, all routers  in the originating  AS perform the  aggregation.   The
  2272. route 128.7.0.0/16 in Figure 19 is  injected by routers 7.7.7.1 and  9.9.9.1
  2273. in AS1.
  2274.  
  2275. When a  set of  routes are  aggregated, the  intent is  to  export only  the
  2276. aggregate route and suppress  the exporting of the  component routes to  the
  2277. outside world.  However, to satisfy certain policy and topology  constraints
  2278. (e.g. a  multi-homed component),  it is  often required  to export  some  of
  2279. the components.    The export-comps  attribute equals  an RPSL  filter  that
  2280. matches the routes that  need to be  exported to the neighboring  ASes.   If
  2281. this attribute is missing,  no component route needs  to be exported to  the
  2282. neighboring ASes.    The export-comps  attribute can  only be  specified  if
  2283. an aggr-by  attribute is  specified for  the route  object.   The  component
  2284. 128.7.9.0/24 of route  128.7.0.0/16 in  Figure 19  needs to  be exported  to
  2285. other ASes.
  2286.  
  2287.  
  2288. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 41]
  2289. Internet Draft                       RPSL                      July 30, 1997
  2290.  
  2291.  
  2292.    route: 128.9.0.0/16
  2293.    origin: AS1
  2294.    aggr-by: {128.9.0.0/16^-} AND <^AS226>
  2295.  
  2296.    route: 128.8.0.0/16
  2297.    origin: AS1
  2298.    aggr-by: ATOMIC {128.8.0.0/16^-} AND <^AS226>
  2299.  
  2300.    route: 128.7.0.0/16
  2301.    origin: AS1
  2302.    aggr-by: ATOMIC ANY
  2303.    inject-at: 7.7.7.1
  2304.    inject-at: 9.9.9.1
  2305.    export-comps: {128.7.9.0/24}
  2306.  
  2307.  
  2308.                     Figure 19:  Aggregate route objects.
  2309.  
  2310. The holes  attribute lists  the  component address  prefixes which  are  not
  2311. reachable through  the aggregate  route (perhaps  that part  of the  address
  2312. space is unallocated).  Figure 20 shows a route object whose two components,
  2313. namely 128.9.0.0/16 and 128.7.0.0/16, are  not reachable via the  aggregate.
  2314. That is, if a data packet destined to a host in 128.9.0.0/16 is sent to AS1,
  2315. AS1 can not deliver it to its final destination (i.e. it is black-holed).
  2316.  
  2317.  
  2318.    route: 128.0.0.0/12
  2319.    origin: AS1
  2320.    aggr-by: {128.0.0.0/12^-}
  2321.    holes: 128.7.0.0/16, 128.9.0.0/16
  2322.  
  2323.  
  2324. Figure 20:    The  route  128.0.0.0/12 does  not  lead  to  destinations  in
  2325. 128.9.0.0/16.
  2326.  
  2327.  
  2328.  
  2329. 10 inet-rtr Class
  2330.  
  2331.  
  2332. Routers are  specified using  the inet-rtr  class.   The  attributes of  the
  2333. inet-rtr class are shown in  Figure 21.  The  inet-rtr attribute is a  valid
  2334. DNS name of the router  described.  Each alias  attribute, if present, is  a
  2335. canonical DNS name for the router.  The local-as attribute specifies the  AS
  2336. number of the AS which owns/operates this router.
  2337.  
  2338. The value of an ifaddr attribute has the following syntax:
  2339.  
  2340.  
  2341.    <ipv4-address> masklen <integer>
  2342.  
  2343.  
  2344. Alaettinoglu et. al.           Expires  January 30, 1998           [Page 42]
  2345. Internet Draft                       RPSL                      July 30, 1997
  2346.  
  2347.  
  2348.   Attribute  Value                    Type
  2349.   inet-rtr   <dns-name>               mandatory, single-valued, class key
  2350.   alias      <dns-name>               optional, multi-valued
  2351.   local-as   <as-number>              mandatory, single-valued
  2352.   ifaddr     see description in text  mandatory, multi-valued
  2353.   peer       see description in text  optional, multi-valued
  2354.  
  2355.  
  2356.                    Figure 21:  inet-rtr Class Attributes
  2357.  
  2358.  
  2359.    [tunnel <inet-tunnel-name>]
  2360.    [action <action>]
  2361.  
  2362.  
  2363. The IP address and  the mask length  are mandatory for each  interface.   If
  2364. the interface is a tunnel, and if there is an inet-tunnel object  describing
  2365. the tunnel, the tunnel's name can also  be specified.  (An example  inet-rtr
  2366. object with tunnels is presented in Section  11.)  Optionally an action  can
  2367. be specified to set other parameters of this interface.
  2368.  
  2369. Figure 22 presents an example  inet-rtr object.  The  name of the router  is
  2370. ``amsterdam.ripe.net''.  ``amsterdam1.ripe.net'' is a canonical name for the
  2371. router.  The router is connected to  4 networks.  Its IP addresses and  mask
  2372. lengths in those networks are specified in the ifaddr attributes.
  2373.  
  2374.  
  2375.  inet-rtr: Amsterdam.ripe.net
  2376.  alias:    amsterdam1.ripe.net
  2377.  local-as: AS3333
  2378.  ifaddr:   192.87.45.190 masklen 24
  2379.  ifaddr:   192.87.4.28   masklen 24
  2380.  ifaddr:   193.0.0.222   masklen 27
  2381.  ifaddr:   193.0.0.158   masklen 27
  2382.  peer:     BGP4 192.87.45.195 asno(AS3334), flap_damp()
  2383.  
  2384.  
  2385.                         Figure 22:  inet-rtr Objects
  2386.  
  2387. Each peer attribute, if present,  specifies a protocol peering with  another
  2388. router.  The value of a peer attribute has the following syntax:
  2389.  
  2390.  
  2391.    <protocol> <ipv4-address> <options>
  2392.  
  2393.  
  2394. where <protocol> is a protocol name, <ipv4-address> is the IP address of the
  2395. peer router,  and <options> is  a comma  separated list  of peering  options
  2396. for <protocol>.  Possible protocol  names and attributes are defined in  the
  2397.  
  2398.  
  2399.  
  2400. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 43]
  2401. Internet Draft                       RPSL                      July 30, 1997
  2402.  
  2403. dictionary (please see Section  8).   In the above  example, the router  has
  2404. a BGP peering  with the router  192.87.45.195 in AS3334  and turns the  flap
  2405. damping on when importing routes from this router.
  2406.  
  2407.  
  2408. 11 inet-tunnel Class and Specifying Tunnels
  2409.  
  2410.  
  2411. Tunneling is a fundamental networking technology  that is used in a  variety
  2412. circumstances.  A common use of  tunneling is to incrementally deploy a  new
  2413. network layer protocol.  The  approach is to encapsulate ("tunnel") the  new
  2414. protocol through the existing network  layer protocol, usually IP.  Examples
  2415. of this approach include include the multicast backbone [3], where multicast
  2416. packets are encapsulated in IP packets using protocol 4 (IP in IP), and IPv6
  2417. backbone [1], where  IPv6 packets are  encapsulated in IP  packets using  IP
  2418. protocol 41 [14].
  2419.  
  2420. Another use of  tunneling is to  force congruence between  the existing  (IP
  2421. unicast) topology and some new topology.  Due the special requirements of IP
  2422. multicast routing, the MBONE is also an example of this use of tunneling.
  2423.  
  2424. This  section  describes  general  tunneling  specification  in  RPSL.  Both
  2425. point-to-point  and  point-to-multipoint  tunnels  of  encapsulation  types,
  2426. including DVMRP,  GRE,  and  IPv6,  are  supported.    In  addition  to  the
  2427. encapsulation, a protocol to run inside the tunnel can also be specified.
  2428.  
  2429. Tunnels are specified using  the inet-tunnel class.   The attributes of  the
  2430. inet-tunnel class are shown in  Figure 23.   The inet-tunnel attribute is  a
  2431. valid RPSL name for  the tunnel described.   The tunnel-source attribute  is
  2432. the IP address of the source end point  of the tunnel.  The inet-tunnel  and
  2433. the tunnel-source attributes form the class key.  That is, a  point-to-point
  2434. tunnel is specified using two tunnel object,  one for each end point of  the
  2435. tunnel.  The tunnel-sink attribute is the IP address of other end points  of
  2436. the tunnel.   If the tunnel  is a multi-point  tunnel, multiple  tunnel-sink
  2437. attributes can be used to list each  end point.  The tunnel-encap  attribute
  2438. is an encapsulation  name.   Valid encapsulation  names are  defined in  the
  2439. dictionary and include IPinIP [29],  IPMOBILITY [24], DVMRP [25], GRE  [15],
  2440. and IPv6 [10].   The  tunnel-protocol attribute  is a protocol  name to  run
  2441. "inside" the tunnel.   Valid  protocol names are  defined in the  dictionary
  2442. and include BGP, RIPng,  DVMRP. See  [27] for an  application that uses  BGP
  2443. tunneled in GRE.  The tunnel-mcast-tree  attribute is used  to describe  the
  2444. multicast tree construction mechanism used on the tunnel.  Examples  include
  2445. PIM-DM and PIM-SM.
  2446.  
  2447. The tunnel-in and tunnel-out attributes have the following format:
  2448.  
  2449.  
  2450.    tunnel-in:  from <ipv4-address> [action <action>] accept   <filter>
  2451.    tunnel-out: to   <ipv4-address> [action <action>] announce <filter>
  2452.  
  2453.  
  2454.  
  2455.  
  2456. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 44]
  2457. Internet Draft                       RPSL                      July 30, 1997
  2458.  
  2459.  
  2460. Attribute          Value                    Type
  2461. inet-tunnel        <rpsl-name>              mandatory, single-valued, class key
  2462. tunnel-source      <ipv4-address>           mandatory, single valued, class key
  2463. tunnel-sink        <ipv4-address>           mandatory, multi-valued, class key
  2464. tunnel-encap       <encapsulation-name>     mandatory, single-valued
  2465. tunnel-protocol    <protocol-name>          mandatory, single valued
  2466. tunnel-mcast-tree  <protocol-name>          optional, single valued
  2467. tunnel-in          see description in text  mandatory, multi-valued
  2468. tunnel-out         see description in text  mandatory, multi-valued
  2469.  
  2470.                   Figure 23:  inet-tunnel Class Attributes
  2471.  
  2472.  
  2473.  
  2474. where <action>  and <filter>  are as  in  the aut-num  class.   The  possible
  2475. actions are defined in the dictionary and include
  2476.  
  2477.  
  2478. ttlscope The minimum IP  time-to-live required for a packet to be  forwarded
  2479.     to the specified endpoint (in the case of multipoint tunnels, there  may
  2480.     be per endpoint scopes).
  2481.  
  2482. boundary A boundary  attribute describes  an administratively defined  class
  2483.     of packets that will not be forwarded through the tunnel [22].
  2484.  
  2485. dvmrp-metric A DVMRP metric.
  2486.  
  2487.  
  2488. These attributes are particularly relevant to multicast routing.  Attributes
  2489. for other tunnels  can later  be defined  in the  dictionary.   The <filter>
  2490. specifications describe  filters  that  are  appropriate  for  the  tunnel's
  2491. routing protocol.  In the case of DVMRP, the filter specification can be the
  2492. list of network prefixes accepted or advertised.
  2493.  
  2494. Figure 24 has two  examples of tunnel  objects.  In  the first example,  the
  2495. router eugene-isp.nero.net  has two  tunnels:   a DVMRP  tunnel to  dec3800-
  2496. 2-fddi-0.SanFrancisco.mci.net  and  a  GRE  tunnel  to  eugene-isp.nero.net.
  2497. The DVMRP  tunnel  object is  called  MBONE-TUNNEL-EUG.  eugene-isp.nero.net
  2498. will accept  any routes  and forward  packets  to the  DVMRP tunnel  if  the
  2499. packet's time-to-live  is  greater  than or  equal  to  64.    In  addition,
  2500. eugene-isp.nero.net will not pass any packets that match the  administrative
  2501. scope boundary filter (in  this case,  239.254.0.0/16).   The GRE tunnel  is
  2502. named GRE-TUNNEL-EUG.
  2503.  
  2504.  
  2505. 12 Security Consideration
  2506.  
  2507.  
  2508. This document describes  RPSL, a language  for expressing routing  policies.
  2509. As such,  it  does  not  itself  have (or  need)  a  security  architecture.
  2510.  
  2511.  
  2512. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 45]
  2513. Internet Draft                       RPSL                      July 30, 1997
  2514.  
  2515.  
  2516.  inet-rtr: eugene-isp.nero.net
  2517.  loacalas: AS4600
  2518.  ifaddr:   166.48.14.6 masklen 30 tunnel MBONE-TUNNEL-EUG
  2519.  ifaddr:   166.48.14.6 masklen 30 tunnel GRE-TUNNEL-EUG
  2520.  admin-c:  DMM65
  2521.  tech-c:   DMM65
  2522.  notify:   nethelp@ns.uoregon.edu
  2523.  mnt-by:   MAINT-AS3582
  2524.  changed:  meyer@ns.uoregon.edu 961122
  2525.  source:   RADB
  2526.  
  2527.  inet-tunnel:     MBONE-TUNNEL-EUG
  2528.  tunnel-source:   166.48.14.6   # eugene-isp.nero.net
  2529.  tunnel-sink:     204.70.158.61 # dec3800-2-fddi-0.SanFrancisco.mci.net
  2530.  tunnel-encap:    DVMRP
  2531.  tunnel-protocol: DVMRP
  2532.  tunnel-in:       from 204.70.158.61 accept ANY
  2533.  tunnel-out:      to 204.70.158.61
  2534.                   action
  2535.                      ttlscope=64;
  2536.                      boundary={239.254.0.0/16};
  2537.                      dvmrp-metric=1;
  2538.                   announce AS-NERO-TRANSIT
  2539.  ...
  2540.  
  2541.  inet-tunnel:       GRE-TUNNEL-EUG
  2542.  tunnel-source:     166.48.14.6
  2543.  tunnel-sink:       206.42.19.240
  2544.  tunnel-protocol:   DVMRP
  2545.  tunnel-mcast-tree: PIM-DM
  2546.  tunnel-encap:      GRE
  2547.  tunnel-in:         from 206.42.19.240 accept ANY
  2548.  tunnel-out:        to 206.42.19.240
  2549.                     action
  2550.                       ttlscope=64;
  2551.                     announce ANY
  2552.  ...
  2553.  
  2554.  
  2555.                       Figure 24:  inet-tunnel Objects
  2556.  
  2557. However,  any registry  that  implements  this  language  should  provide  a
  2558. mechanism for:
  2559.  
  2560.  
  2561. 1.  Data Integrity  and  Origin  Authentication.     Both  data  origin  and
  2562.     integrity can  be provided  by associating  cryptographically  generated
  2563.     digital signatures with  each object  in a IRR.  There may  be a  single
  2564.     private  key  that  signs  for  all  objects  associated  with  a  given
  2565.  
  2566.  
  2567.  
  2568. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 46]
  2569. Internet Draft                       RPSL                      July 30, 1997
  2570.  
  2571.     MAINTAINER object, or there may be finer grained control.  As is common,
  2572.     it is expected that an  implementation will keep the MAINTAINER  private
  2573.     key off-line and  it will be  used to  re-sign all objects  for a  given
  2574.     MAINTAINER.
  2575.  
  2576. 2.  Public Key Distribution.  It  is expected that any IRR implemeting  RPSL
  2577.     will use the Group  Key Management Protocol  (GKMP) [16].   The IETF  IP
  2578.     Security Working Group  is actively  working on GKMP  extensions to  the
  2579.     standards-track ISAKMP key  management protocol being  developed in  the
  2580.     same working group.
  2581.  
  2582. 3.  Transaction Security.   When a  user is querying  a registry for  policy
  2583.     objects, to eliminate snooping and to eliminate third parties  injecting
  2584.     objects, the server and the client may optionally use authentication and
  2585.     encryption techniques [12].
  2586.  
  2587.  
  2588. 13 Acknowledgements
  2589.  
  2590.  
  2591. We would  like  to  thank  Jessica  Yu,  Randy  Bush,  Alan  Barrett,  David
  2592. Kessens, Bill Manning, Sue Hares,  Ramesh Govindan, Kannan Varadhan,  Satish
  2593. Kumar, Craig  Labovitz,  Rusty Eddy,  David  J. LeRoy,  David  Whipple,  Jon
  2594. Postel, Deborah Estrin, Elliot Schwartz,  Joachim Schmitz, Mark Prior,  Tony
  2595. Przygienda, David Woodgate,  and the  participants of the  IETF RPS  Working
  2596. Group for various comments and suggestions.
  2597.  
  2598.  
  2599.  
  2600. References
  2601.  
  2602.  
  2603.  [1] 6BONE. See http://www-6bone.lbl.gov/6bone/.
  2604.  
  2605.  [2] Internet
  2606.      Routing   Registry.  Procedures.    http://www.ra.net/RADB.tools.docs/,
  2607.      http://www.ripe.net/db/doc.html.
  2608.  
  2609.  [3] MBONE. See http://www.best.com/ prince/techinfo/misc.html.
  2610.  
  2611.  [4] C.  Alaettinouglu, D.  Meyer,  and J.  Schmitz. Application  of  Routing
  2612.      Policy Specification  Language (RPSL) on  the Internet. Internet  Draft
  2613.      draft-ietf-rps-appl-rpsl-00.ps, March 1997. Work in progress.
  2614.  
  2615.  [5] T.  Bates. Specifying  an `Internet  Router' in  the Routing  Registry.
  2616.      Technical  Report RIPE-122,  RIPE,  RIPE NCC,  Amsterdam,  Netherlands,
  2617.      October 1994.
  2618.  
  2619.  [6] T.  Bates, E.  Gerich,  L. Joncheray,  J-M. Jouanigot,  D.  Karrenberg,
  2620.      M.  Terpstra,  and  J.  Yu.   Representation  of  IP  Routing  Policies
  2621.      in  a Routing  Registry.  Technical Report  ripe-181, RIPE,  RIPE  NCC,
  2622.  
  2623.  
  2624. Alaettinoglu et. al.           Expires  January 30, 1998           [Page 47]
  2625. Internet Draft                       RPSL                      July 30, 1997
  2626.  
  2627.      Amsterdam, Netherlands, October 1994.
  2628.  
  2629.  [7] T.  Bates, E.  Gerich,  L. Joncheray,  J-M. Jouanigot,  D.  Karrenberg,
  2630.      M.  Terpstra, and  J.  Yu.  Representation of  IP Routing  Policies  in
  2631.      a  Routing Registry.  Technical  Report RFC-1786,  Network  Information
  2632.      Center, March 1995.
  2633.  
  2634.  [8] T. Bates, J-M. Jouanigot, D. Karrenberg, P. Lothberg, and  M. Terpstra.
  2635.      Representation of IP  Routing Policies in the RIPE Database.  Technical
  2636.      Report ripe-81, RIPE, RIPE NCC, Amsterdam, Netherlands, February 1993.
  2637.  
  2638.  [9] R. Chandra,  P. Traina, and T. Li.  BGP Communities Attribute.  Request
  2639.      for Comment RFC-1997, Network Information Center, August 1996.
  2640.  
  2641. [10] A. Conta  and S. Deering. Generic  Packet Tunneling in IPv6.  Technical
  2642.      Report draft-ietf-ipngwg-ipv6-tunnel-04.txt, October 1996.
  2643.  
  2644. [11] D. Crocker.  Standard for  the format of  ARPA Internet text  messages.
  2645.      Request for Comment RFC-822, Network Information Center, August 1982.
  2646.  
  2647. [12] D. Eastlake  and C.  Kaufman. Domain Name  System Security  Extensions.
  2648.      Technical Report RFC2065, January 1997.
  2649.  
  2650. [13] V.  Fuller, T.  Li,  J. Yu,  and  K. Varadhan.  Classless  Inter-Domain
  2651.      Routing (CIDR): an Address Assignment and Aggregation Strategy, 1993.
  2652.  
  2653. [14] R. Gilligan and  E. Nordmark. Transition Mechanisms for IPv6 Hosts  and
  2654.      Routers. Technical Report RFC1933, April 1996.
  2655.  
  2656. [15] S.  Hanks,  T.  Li,  D.  Farinacci,  and  P.  Traina.  Generic  Routing
  2657.      Encapsulation (GRE). Technical Report RFC1701, October 1994.
  2658.  
  2659. [16] H.  Harney.  Group Key  Management Protocol  (GKMP).  Technical  Report
  2660.      draft-harney-gkmp-arch-01.txt,  draft-harney-gkmp-spec-01.txt,   August
  2661.      1996. Informational RFC publication is pending.
  2662.  
  2663. [17] D. Karrenberg  and T. Bates.  Description of  Inter-AS Networks in  the
  2664.      RIPE  Routing Registry.  Technical  Report  RIPE-104, RIPE,  RIPE  NCC,
  2665.      Amsterdam, Netherlands, December 1993.
  2666.  
  2667. [18] D.  Karrenberg  and M.  Terpstra.  Authorisation  and  Notification  of
  2668.      Changes in  the RIPE  Database. Technical Report  ripe-120, RIPE,  RIPE
  2669.      NCC, Amsterdam, Netherlands, October 1994.
  2670.  
  2671. [19] B.  W.  Kernighan  and D.  M.  Ritchie.  The  C  Programming  Language.
  2672.      Prentice-Hall, 1978.
  2673.  
  2674. [20] A.  Lord  and   M.  Terpstra.  RIPE  Database  Template  for   Networks
  2675.      and  Persons. Technical  Report ripe-119,  RIPE,  RIPE NCC,  Amsterdam,
  2676.      Netherlands, October 1994.
  2677.  
  2678.  
  2679.  
  2680. Alaettinoglu et. al.           Expires  January 30, 1998           [Page 48]
  2681. Internet Draft                       RPSL                      July 30, 1997
  2682.  
  2683. [21] A.  M. R.  Magee.  RIPE NCC  Database Documentation.  Technical  Report
  2684.      RIPE-157, RIPE, RIPE NCC, Amsterdam, Netherlands, May 1997.
  2685.  
  2686. [22] D.  Meyer.  Administratively  Scoped  IP  Multicast.  Technical  Report
  2687.      draft-ietf-mboned-admin-ip-space-01.txt, December 1996.
  2688.  
  2689. [23] P. V. Mockapetris. Domain names - concepts and facilities.  Request for
  2690.      Comment RFC-1034, Network Information Center, November 1987.
  2691.  
  2692. [24] C. Perkins. Minimal Encapsulation within IP.  Technical Report RFC2004,
  2693.      October 1996.
  2694.  
  2695. [25] T.  Pusateri. Distance  Vector  Multicast Routing  Protocol.  Technical
  2696.      Report draft-ietf-idmr-dvmrp-v3-03, September 1996.
  2697.  
  2698. [26] Y.   Rekhter.  Inter-Domain   Routing  Protocol  (IDRP).   Journal   of
  2699.      Internetworking Research and Experience, 4:61--80, 1993.
  2700.  
  2701. [27] Y. Rekhter. Auto route injection with tunnelling, October 1996.  NANOG,
  2702.      See http://www.academ.com/nanog/oct1996/multihome.html.
  2703.  
  2704. [28] Y. Rekhter and T. Li. A Border Gateway Protocol 4 (BGP-4).  Request for
  2705.      Comment RFC-1771, Network Information Center, March 1995.
  2706.  
  2707. [29] W.  Simpson. IP  in  IP Tunneling.  Technical Report  RFC1853,  October
  2708.      1995.
  2709.  
  2710.  
  2711. A Routing Registry Sites
  2712.  
  2713.  
  2714. The set of routing registries as of November 1996 are RIPE, RADB, CANet, MCI
  2715. and ANS. You may  contact one of  these registries to  find out the  current
  2716. list of registries.
  2717.  
  2718.  
  2719.  
  2720. B Authors' Addresses
  2721.  
  2722.  
  2723.    Cengiz Alaettinoglu
  2724.    USC Information Sciences Institute
  2725.    4676 Admiralty Way, Suite 1001
  2726.    Marina del Rey, CA  90292
  2727.    email: cengiz@isi.edu
  2728.  
  2729.    Tony Bates
  2730.    Cisco Systems, Inc.
  2731.    170 West Tasman Drive
  2732.    San Jose, CA 95134
  2733.    email: tbates@cisco.com
  2734.  
  2735.  
  2736. Alaettinoglu et. al.           Expires  January 30, 1998           [Page 49]
  2737. Internet Draft                       RPSL                      July 30, 1997
  2738.  
  2739.  
  2740.    Elise Gerich
  2741.    At Home Network
  2742.    385 Ravendale Drive
  2743.    Mountain View, CA 94043
  2744.    email: epg@home.net
  2745.  
  2746.    Daniel Karrenberg
  2747.    RIPE Network Coordination Centre (NCC)
  2748.    Kruislaan 409
  2749.    NL-1098 SJ Amsterdam
  2750.    Netherlands
  2751.    email: dfk@ripe.net
  2752.  
  2753.    David Meyer
  2754.    University of Oregon
  2755.    Eugene, OR 97403
  2756.    email: meyer@antc.uoregon.edu
  2757.  
  2758.    Marten Terpstra
  2759.    c/o Bay Networks, Inc.
  2760.    2 Federal St
  2761.    Billerica MA 01821
  2762.    email: marten@BayNetworks.com
  2763.  
  2764.    Curtis Villamizar
  2765.    ANS
  2766.    email: curtis@ans.net
  2767.  
  2768.  
  2769.  
  2770.  
  2771.  
  2772.  
  2773.  
  2774.  
  2775.  
  2776.  
  2777.  
  2778.  
  2779.  
  2780.  
  2781.  
  2782.  
  2783.  
  2784.  
  2785.  
  2786.  
  2787.  
  2788.  
  2789.  
  2790.  
  2791.  
  2792. Alaettinoglu et.  al.          Expires  January 30, 1998           [Page 50]
  2793.  
  2794.