INTERNET-DRAFT                                             Ardas Cilingiroglu
File name: draft-ardas-rpcl-00.txt                               FORE Systems
                                                              Tony Przygienda
                                               Bell Labs, Lucent Technologies
                                                      Expires : February 1999












                        Routing Policy Configuration Language (RPCL)






     Status Of This Memo

     This document is an Internet-Draft.  Internet-Drafts  are  working  docu-
     ments  of  the Internet Engineering Task Force (IETF), its areas, and its
     working groups.  Note that other groups may also distribute working docu-
     ments as Internet-Drafts.

     Internet-Drafts are draft documents valid for a maximum of six months and
     may  be  updated,  replaced, or obsoleted by other documents at any time.
     It is inappropriate to use Internet- Drafts as reference material  or  to
     cite them other than as "work in progress".

     To learn the current status  of  any  Internet-Draft,  please  check  the
     "1id-abstracts.txt"  listing  contained  in  the  Internet- Drafts Shadow
     Directories on ftp.ietf.org (US East Coast),  nic.nordu.net  (Europe),
     ftp.isi.edu (US West Coast), or munnari.oz.au (Pacific Rim).











Cilingiroglu, Przygienda    Expires February 1999                     [Page 1]


Internet-Draft                      RPCL                          August 1998


Table Of Contents

   1.0 Introduction ...................................................... 3

   2.0 Basic RPCL Types; Filter, Action and Peering Specifications ....... 4

   2.1 Data Types of Route Attributes .................................... 5

   2.2 Filter Types ...................................................... 6

   2.3 Peering Types ..................................................... 8

   2.4 Filter, Action and Peering Specifications ......................... 9

   3.0 Import Policy Rules ............................................... 10

   4.0 Export Policy Rules ............................................... 14

   5.0 Aggregation Policy Rules .......................................... 17

   6.0 Acknowledgments ................................................... 24

   7.0 Authors' Addresses ................................................ 24

   8.0 References ........................................................ 24

   A. Policy Editor in RPCL .............................................. 25

   A.1 Policy Macros ..................................................... 26

   A.2 Import and Export Policy Configuration ............................ 31

   A.3 Aggregation Policy Configuration .................................. 36

   A.4 Commit Operation .................................................. 37

   B. RPCL Reference ..................................................... 38

   B.1 RPCL Policy Syntax ................................................ 38

   B.2 Policy Editor ..................................................... 41










Cilingiroglu, Przygienda    Expires February 1999                     [Page 2]


Internet-Draft                      RPCL                          August 1998


1. Introduction

   Routing policies define a set of rules and actions to be applied by  proto-
   cols  when they send and receive routing updates.  When a protocol receives
   an updates, routing policies are used to determine if, and with what infor-
   mation  a  route  gets  added  to the Routing Information Base (RIB).  When
   preparing to send a routing update, routing policy is consulted to  see  if
   the  route  is  to be sent and if so, what information is to be included in
   the update.  The Routing Policy Configuration Language (RPCL)  specifies  a
   language for defining routing policies in a router.

   RPCL is derived from the Routing Policy Specification Language  (RPSL)  [1,
   2],  which  is  the  evolving standard for Internet's policy specification.
   RPSL specifies the routing policies, inter-domain  routes,  border  routers
   and  some administrative objects  of an Autonomous System (AS).  Autonomous
   Systems (AS) in the  Internet  registers  its  RPSL  specification  with  a
   cooperatively  maintained  distributed  database,  called  Internet Routing
   Registry (IRR) [3,4]. IRR has the global view of the Internet and its poli-
   cies.  The  IRR  is used to verify the integrity of the Internet's routing,
   and to protect the Internet against accidental and  malicious  distribution
   of  inaccurate  route  information,  such as non-existing routes, incorrect
   aggregation or aggregation boundaries.

   Unlike RPSL, which specifies the policies and other internal objects of  an
   AS,  RPCL  is  used  to configure the policies of an individual router. Its
   syntax and semantics for the policy language is, however, derived from  the
   RPSL. This consistency in policy specification language at the AS level and
   the router level facilitates the conversion from one to the other.

   RPCL is intended to be an extendable language. It provides a uniform syntax
   and  semantics  for policy configuration across various policies and proto-
   cols.  RPCL is designed to be able to add support  for  new  protocols  and
   specifications for new policies.  For example, RPCL currently defines poli-
   cies for unicast protocols, but it can be  extended  to  support  multicast
   protocols as well.

   RPCL currently supports the configuration and evaluation of  the  following
   policies:


      - Import Policy: used by protocols to update  the  content  of  the  RIB
           based  on the routes received. When a protocol receives a route, it
           uses the import policy to determine whether to accept or block  the
           route, and to set the route's attributes (e.g., the route's prefer-
           ence) if the route is accepted.  RIP, OSPF and BGP are example uni-
           cast protocols using import policies.





Cilingiroglu, Przygienda    Expires February 1999                     [Page 3]


Internet-Draft                      RPCL                          August 1998


      - Export Policy: used by protocols to determine what routes and  associ-
           ated  attributes  to send to neighbors based on the contents of the
           RIB. There is a separate policy configured for each protocol  pairs
           (SRC-PR,  DST-PR),  where  DST-PR is the exporting protocol and the
           SRC-PR is the owner protocol of the route considered. Some  example
           protocol pairs are show below:


                           DST PROTOCOL

                       | RIP  | OSPF | BGP  |
               --------+------+------+------+
               Static  |Export|Export|Export|
               --------+------+------+------+
               Direct  |Export|Export|Export|
         SRC   --------+------+------+------+
         PROT  RIP     |Export|Export|Export|
               --------+------+------+------+
               OSPF    |Export| ---- |Export|
               --------+------+------+------+
               BGP     |Export|Export|Export|
               --------+------+------+------+


      - Aggregation Policy: An aggregate route is used to summarize  the  com-
           ponent  routes  of  an  address range. By default when an aggregate
           route is exported to a neighbor, all of its component routes  (i.e.
           routes  that  are more specific than the aggregate) are suppressed.
           This reduces the amount  of  route  propagation  and  controls  the
           growth  of  the  IP  routing  and forwarding tables. Some component
           routes, however, may need to be exported along with  the  aggregate
           to  satisfy  some  topology  constraints  (such as multi-homed com-
           ponents in BGP). Aggregation policy is used by a protocol to deter-
           mine  the  aggregate  routes that a router generates and which com-
           ponent routes to export along with the aggregate. BGP is an example
           protocol using aggregation policy.


2. Basic RPCL Types; Filter, Action and Peering Specifications

   Routes are composed of a set of attributes.  Some attributes are common  to
   all routing protocols, and some are unique to a single protocol.  For exam-
   ple, an address prefix and the preference are common to all routing  proto-
   cols, whereas the tag for RIP and OSPF routes and the aspath for BGP routes
   are protocol specific.






Cilingiroglu, Przygienda    Expires February 1999                     [Page 4]


Internet-Draft                      RPCL                          August 1998


   Policies are configured using policy rules. All policy rules  are  composed
   of the following basic constructs:


      - Filter specification: a logical expression over the route  attributes.
           Filter  specifications are used by the policy rules to select a set
           of routes for a particular operation. For example, the  RIP  import
           rule  "accept (128/8^+ and tag==100)" uses the filter "(128/8^+ and
           tag==100)" to allow the import of the  RIP  routes  that  are  more
           specific than 128/8 and have the tag value of 100.

      - Action specification: an ordered list of commands to set or modify the
           attributes  of  a  route.  For  example, a RIP export rule with the
           action specification  "{tag=10; metric=100}" will set the  tag  and
           metric attributes of a route to 10 and 100, respectively.

      - Peering specification: used by an External  Gateway  Protocols  (EGP),
           such  as  BGP,  to  restrict  the  policy evaluation to a subset of
           peers.  For example, a BGP import rule with a peering "{128.10.5.5,
           AS11}"  will  only be evaluated for the routes coming from the peer
           128.10.5.5 or from a peer in AS11.


2.1 Route Attribute Data Types

   Every route attribute has a specific data type. The route attributes of the
   unicast  routing  protocols and their corresponding data types are shown in
   Figure-1. The basic data types are explained below:

      <ipv4-addr> An IPv4 address is a 32 bit number represented by four 8 bit
           integers   (standard "dotted quad" format).  For example 128.10.9.9
           represents a valid address.

      <prefix> An address prefix is composed of an IPv4  address  followed  by
           its  length, an integer between 0 to 32 which represents the number
           of significant leftmost contiguous  bits  (CIDR-based  addressing).
           Only  the  significant  part of the IPv4 address needs to be speci-
           fied. 0/0, 128.9/16, 150.10.0/16, and 169.144.100/24  are  examples
           of  valid  prefixes,  whereas 128.9/24 is invalid (the IPv4 address
           must include three integers when the mask length is 24).

      <as> An autonomous system (AS) x is denoted by ASx. For  example,  AS312
           represents the AS 312.

      <as-path> AS-path is a BGP attribute that keeps track of the sequence of
           ASes  traversed  by  the  route.  It is represented by a list of AS
           numbers in braces, separated by commas. For example, {AS23,  AS247,
           AS11, AS66} is an AS-path.



Cilingiroglu, Przygienda    Expires February 1999                     [Page 5]


Internet-Draft                      RPCL                          August 1998


      <ospf-type>  OSPF  routes  can  be  of  type   intra-area,   inter-area,
           external-1  or  external-2.  They are represented by the symbols in
           the set {INTRA-AREA, INTER-AREA, EXTERNAL-1, EXTERNAL-2}.

      <comm-list> Community list is a BGP attribute represented by a  list  of
           communities  in  braces,  separated  by  commas.  Each community is
           either a 4-byte unsigned integer, or one of the keywords  NO-EXPORT
           or  NO-ADVERTISE,  or  a list of two 2-byte unsigned integers.  For
           example, {100, NO-EXPORT, {312, 10}, 200} is a community list.

      <peer> A BGP peer is represented by the peer AS and  the  peer  address.
           For  example  AS312 10.9.9.1 represents the peering with the router
           10.9.9.1 in the AS 312.

2.2 Filter Types

   Unicast protocol filters are shown in  Figure-1.  The  following  describes
   some of the arguments used in these filters:

      ANY-ROUTE is a constant that always evaluates to TRUE.

      <prefix-range> is a prefix followed by one of the following range opera-
           tors:

         ^-  is the exclusive more specific operator. It represents  the  more
              specifics  of an address prefix excluding the prefix itself. For
              example, 128.9/16^- includes all of the more specifics  such  as
              128.9.10/24,   128.9.30.48/28,   and   128.9.50.99/32,  but  not
              128.9/16.

         ^+  is the inclusive more specifics operator. It represents the  more
              specifics  of an address prefix including the prefix itself. For
              example 128.9/16^+ will match all of the more specifics and also
              128.9/16 itself.

         ^n  represents all length n specifics of an address prefix. For exam-
              ple,    169.144.128/17^24    will   match   169.144.128/24   and
              169.144.132/24 but not 169.144.132/22 since the mask is not  24,
              and  not 169.144.96/24 since it is not a more specific (17th bit
              does not match).

         ^n-m represents any more specifics of an address prefix with the mask
              length between n to m. For example, 128.9.0/20^24-32, will match
              128.9.10/24 and 128.9.0.22/31, but  not  128.9.10/23  since  the
              mask  is not in the range of 24-32, and not 129.9.34.24/32 since
              it is not a more specific (19th bit does not match).





Cilingiroglu, Przygienda    Expires February 1999                     [Page 6]


Internet-Draft                      RPCL                          August 1998


      <prefix-range-list> is  a  list  of  address  prefix  ranges  in  braces
           separated  by  commas. It is a filter expression and it matches the
           address prefixes that match one of the prefix ranges  specified  in
           the list. For example,

                                       {10.9.1/24}

           will match the prefix 10.9.1/24, and

                     {10.1/16, 10.122/15^-, 11/8^+, 128.10/16^20-32}

           will match
              - route 10.1/16,
              - more specifics of 10.122/15 excluding 10.122/15  itself,  such
              as 10.123/16,
              -  more  specifics  of  11/8  including  11/8  itself,  such  as
              11.144.10/24, and
              - more specifics of 128.10/16 with the mask length between 20 to
              32, such as 128.10.200/22.


      <as-set> is a set of AS numbers in braces separated by commas,  such  as
           {AS12, AS47, AS111}.

      <aspath-regex> is a regular expression on ASes, enclosed in '<' and '>'.
           It is used as a policy filter for the BGP AS-path attribute.

           The regular expression constructs are as follows:
              ASx       matches ASx
              <as-set>  matches any one of the ASes in the set
              .         matches any AS number
              ^         matches to the empty string at the begining of an AS-path
              $         matches to the empty string at the end of an AS-path

           Regular expression operators are as follows:
              Unary postfix operators (left associative)
                 *         zero or more occurances
                 +         one or more occurances
                 ?         zero or one occurance
                 (m)       m occurances
                 (m,)      m or more occurances
                 (m,n)     m to n occurances

              Binary concetanation operator (lower precedence, left associative)
                 is an implicit operator. If A and B are regular expressions,
                 then A B matches an AS-path if A matches some prefix of the
                 AS-path and B matches the rest of the AS-path.




Cilingiroglu, Przygienda    Expires February 1999                     [Page 7]


Internet-Draft                      RPCL                          August 1998


           In the following, examples of <aspath-regex> expression are given
           along with the description of the aspaths that will match them:

              <AS5>                  aspaths that contain AS5
              <AS5 AS7>              aspaths with the subsequence AS5 AS7
              <AS5 .* AS7$>          aspaths containing AS5 and ending
                                     with AS7
              <^AS5 {AS3 AS7}+ AS9$> aspaths starting with AS5 ending with
                                     AS9 and having at least one occurances
                                     of AS3 and/or AS7 in the middle
              <^. AS5 .?$>           aspaths of length 2 or 3 with AS5 as
                                     the 2nd AS
              <{AS7 AS9 AS11}(2,4)$> aspaths with the  last 2 to 4  ASes
                                     being from the set {AS7 AS9 AS11}

2.3 Peering Types
   The basic peering expressions are as follows:

      ANY-PEER is a constant that will identify all peerings  with  the  local
           router.

      <peer-addr> An IPv4 address that uniquely identifies the peering between
           the local router and the peer router with the given address.

      <peer-as> A Peer AS identifies all the peerings between the local router
           and any of its peer routers in the given AS.

      <peer-set> is a set of Peer addresses and Peer ASes. It  identifies  all
           the  peerings  between the local router and any of its peer routers
           whose address or AS is in the given set.

           Some example peering expressions are given below:
             128.10.12.5              : matches the peering between the local
                                        router and its peer router 128.10.12.5.
             AS17                     : matches all peerings between the local
                                        router and any of its peer routers in
                                        AS17.
             {128.10.12.5, 10.9.64.10}: matches two peerings of the local router,
                                        one with the peer router 128.10.12.5 and
                                        the other with 10.9.64.10.
             {AS17, AS99}             : matches all peerings between the local
                                        router and any of its peer routers in
                                        AS17 or AS99.
             {128.10.12.5, 10.9.64.10, AS17, AS99}: matches all peerings that
                                        matches with the peer sets {128.10.12.5,
                                        10.9.64.10} or {AS17, AS99}.





Cilingiroglu, Przygienda    Expires February 1999                     [Page 8]


Internet-Draft                      RPCL                          August 1998


PROT  | Attribute   Type        Filter                      Action
------+---------------------------------------------------------------------------
STATIC| prefix      <prefix>    <prefix-range-list>          ---
------+---------------------------------------------------------------------------
DIRECT| prefix      <prefix>    <prefix-range-list>          ---
------+---------------------------------------------------------------------------
      | prefix      <prefix>    <prefix-range-list>          ---
      | src-gateway <prefix>    src-gtw==<prefix-range-list> ---
RIP   | preference  <integer>        ---                    pref=<integer>
      | metric      [1-15]           ---                    metric=<integer>
      | tag         <integer>   tag==<integer>              tag=<integer>
------+---------------------------------------------------------------------------
      | prefix      <prefix>    <prefix-range-list>          ---
      | preference  <integer>        ---                    pref=<integer>
OSPF  | metric      [1-65535]        ---                    metric=<integer>
      | tag         <integer>   tag==<integer>              tag=<integer>
      | type        <ospf-type> type==<ospf-type>           type=<ospf-type>
------+---------------------------------------------------------------------------
      | prefix      <prefix>    <prefix-range-list>          ---
      | origin      <as>        <as>                         ---
      | source-peer <peer>      src-peer==<peering-spec>     ---
BGP   | preference  <integer>        ---                    pref=<integer>
      | med         <integer>        ---                    med=<integer>
      | dpa         <integer>        ---                    dpa=<integer>
      | as-path     <as-path>   <aspath-regex>              aspath.prepend<as-path>
      | community   <comm-list> comm==<comm-list>           comm=<comm-list>
      |                         comm.contains<comm-list>    comm.=<comm>
      |                                                     comm.append<comm-list>
      |                                                     comm.delete<comm-list>
------+---------------------------------------------------------------------------

      Figure-1: route attributes, with their corresponding data types, filter
                expressions and action commands.

2.4 Filter, Action and Peering Specifications

   For a protocol PR, filter, action and peering specifications are defined as
   follows:

      <PR-filter> is a logical expression using the connectives  AND,  OR  and
           NOT,  and  the  filter  expressions  over  the attributes of the PR
           routes. Filter expressions for  several  protocols  are  listed  in
           Figure-1.  More  details  on  the  syntax  and  semantics are given
           through examples in the following sections.

      <PR-action> is an ordered list of action commands over the attributes of
           the  PR  routes.  Action  command  types  for several protocols are
           listed in Figure-1.



Cilingiroglu, Przygienda    Expires February 1999                     [Page 9]


Internet-Draft                      RPCL                          August 1998


      <PR-import-action> is an ordered list of action commands to be  used  at
           import  time.  The  command types are a subset of the command types
           available in <PR-action>. In Figure-1, commands associated with the
           tag,  metric and type attributes of RIP and OSPF are used at export
           time only. All other command types can be used during import time.

      <PR-export-action> is an ordered list of action commands to be  used  at
           export  time.  The  command types are a subset of the command types
           available in <PR-action>. In Figure-1, commands associated with the
           preference  attribute in RIP and OSPF are used at import time only.
           All other command types can be used during export time.

      <peering> is either ANY-PEER or of  type  <peer-addr>  or  <peer-AS>  or
           <peer-set>.

3. Import Policy Rules

   A routing protocol imports some of the routes that  it  receives  from  its
   neighbor  by  inserting  them into the RIB. Import policy is configured for
   each protocol to determine:

      - which routes should be imported and which ones should  be  blocked  by
      that protocol, and
      - what should be the route attributes of the routes that are imported.

   Import policy is configured using import rules.  The  basic  syntax  of  an
   import rule  for a protocol PR is the following:

    <PR-Import-Rule>:
       [from <peering>] [action <PR-import-action>] accept <PR-filter> |
       [from <peering>] block <PR-filter>

   where [from <peering>] is used by External Gateway Protocols (EGP), such as
   BGP, but not by Internal Gateway Protocols (IGP), such as RIP and OSPF.

   Evaluation of an import rule for the routes received by the protocol PR  is
   as follows:

      - A route matches the import rule, if it matches the <PR-filter> specif-
      ication and, in case PR is an EGP protocol, the peer it is received from
      matches the <peering> specification.

      - A matching rule is applied by taking the action suggested by the  key-
      word  preceding the <PR-filter>, i.e. importing the route if the keyword
      is "accept", and rejecting it if it is "block".  The  attributes  of  an
      accepted route are updated by the <action> specification. It is optional
      and if not specified the default values are used for the attributes.




Cilingiroglu, Przygienda    Expires February 1999                    [Page 10]


Internet-Draft                      RPCL                          August 1998


   In Figure-2, some of the properties of import policies are listed for  pro-
   tocols RIP, OSPF and BGP. They can be summarized as follows:

      - All three protocols need policy configuration for import decisions.

      - Only RIP is allowed to have a block rule, i.e. a rule with the "block"
      keyword.  OSPF and I-BGP (Internal BGP) cannot block routes, because all
      routers running OSPF or I-BGP should have the similar view of  the  net-
      work. E-BGP (External BGP), on the other hand, does not need block rules
      simply because block is the default action to take.

      - If no rule matches a received route, then the default action is taken.
      It  is  to  accept  the route with default attributes if the protocol is
      RIP, OSPF or I-BGP, and to block it if the protocol is E-BGP.


                                 |  RIP  | OSPF  | I-BGP | E-BGP |
                  ---------------+-------+-------+-------+-------+
                  Configuration  |  YES  |  YES  |  YES  |  YES  |
                  ---------------+-------+-------+-------+-------+
                  Block Rule     |  YES  |  ---  |  ---  |  ---  |
                  ---------------+-------+-------+-------+-------+
                  Default-Action |ACCEPT |ACCEPT |ACCEPT |  BLK  |
                  ---------------+-------+-------+-------+-------+

           Figure-2: Properties of Import policies for several protocols



   We now give examples of import rules for RIP, OSPF, and BGP. The  following
   are examples of RIP import rules:

      block {128.9/16^+} and tag==10

   blocks all routes that are more specifics of 128.9/16 (including  128.9/16)
   and have the tag value of 10.

      action pref=10 accept src-gw=={192.100.100/24^+}

   imports all routes that are received  from  a  gateway  where  the  gateway
   address  is  a   more specific of 192.100.100/24. It sets the preference of
   all such routes to 10.

   Example of OSPF import rules are as follows:

      action pref=5 accept ANY-ROUTE

   imports all OSPF routes with a preference of 5.



Cilingiroglu, Przygienda    Expires February 1999                    [Page 11]


Internet-Draft                      RPCL                          August 1998


      action pref=10
      accept {10.3/16^-, 20/8^+} and (type==INTER-AREA or tag==100)

   imports any more specifics of 10.3/16 (excluding 10.3/16) and more  specif-
   ics  of  20/8  (including 20/8) that are of type INTER-AREA or have the tag
   value 100.  All imported routes will be assigned the preference 10.

   Examples of BGP Import rules are as follows:

      from 10.9.9.6 action pref=1 accept AS11 or {128.9/16^+}

   imports all routes received from the peer router 10.9.9.6, that are  either
   originated  from AS11 or match 128.9/16^+. All imported routes will get the
   preference 1.

      from {10.9.9.1, 10.9.9.5, AS17, AS25}
      action med=0; community.append(3261,NO-EXPORT); aspath.append(AS5)
      accept {169.9/16^24-32} and <^AS11 AS26 .* AS7> and
             community.contains(10250)

   imports all routes that:
      - are received from the peer router 10.9.9.1 or 10.9.9.5, or from a peer
      router that is in AS17 or AS25, and
      - are more specifics of 169.9/16 with a length between 24 to 32, and
      - have an aspath that starts with AS11, AS26 and contains AS7, and
      - have a community list that contains the community 10250.

   All routes that are imported will  have  the  following  changes  in  their
   attributes:
      - multi-exit-discriminator set to 0
      - community-list appended with the community 3261 and NO-EXPORT
      - aspath appended with AS5.

   So far only the basic forms of import rules are described. They can also be
   structured.  The  two  types of structured rules, compound rules and refine
   rules, are described below.

   A compound rule is of the form:

      <PR-Import-Compound-Rule>: {<PR-Import-Rule>; <PR-Import-Rule>; ...}

   It is an ordered list of import rules with the following semantics:

      - A route matches a compound rule if it matches  at  least  one  of  the
      rules in its list, and
      - if there are matching rules, then the first such rule  is  applied  to
      the route.




Cilingiroglu, Przygienda    Expires February 1999                    [Page 12]


Internet-Draft                      RPCL                          August 1998


   As an example, consider the following BGP rule:

      {
        from 10.9.9.5 action pref=1;  accept ANY-ROUTE;
        from AS5      action pref=5;  accept AS5;
        from AS5      action pref=10; accept ANY-ROUTE;
      }

   Assume that the router 10.9.9.5 is in AS 5.  The  above  rule  imports  any
   route coming  from AS 5, but with different preferences. Routes coming from
   the peer router 10.9.9.5 are given the preference 1.  If  they  are  coming
   from another peer router in AS 5, then the ones that are originated by AS 5
   are given the preference 5, and all the others are given the preference 10.

   The other type of structured rule is a refine rule with the following  syn-
   tax:

        <PR-Import-Refine-Rule>: <PR-Import-Rule> refine <PR-Import-Rule>

   It is used to refine, i.e. extend, one rule by another one.  Its  semantics
   is as follows:

      -A route matches a refine rule if it matches the component rules on both
      sides.
      -If it matches, then the rule on the left is  applied  followed  by  the
      rule on the right. One restriction in refine rules is that rules on both
      sides should be composed of either all accept rules or all block  rules.
      Otherwise,  the  semantics become ambigious if an accept rule matches on
      one side and a block rule on the other.

   Consider the following examples of BGP import rules:

      from AS5 action pref=1; accept <^AS12>
      refine
         from 10.9.9.5
         action community.append(1210);
         accept {10/8^+} and <AS39>

   Assume that the router 10.9.9.5  is  in  AS  5.  Then  the  above  rule  is
   equivalent to

      from 10.9.9.5
      action pref=1; community.append(1210);
      accept {10/8^+} and <^AS12 .* AS39>

   Notice that the two rules on both sides of the refine are combined by  and-
   ing  their peering and the filter specifications and appending their action
   specifications.



Cilingiroglu, Przygienda    Expires February 1999                    [Page 13]


Internet-Draft                      RPCL                          August 1998


   from ANY-PEER accept AS5;
      refine
        {
          from ANY-PEER action pref=1;  accept community.contains(1210);
          from ANY-PEER action pref=5;  accept community.contains(1410);
          from ANY-PEER action pref=10; accept ANY-ROUTE;
        }
        refine
          {
            from 10.9.9.5 action med=100; accept ANY-ROUTE;
            from AS5      action med=50;  accept ANY-ROUTE;
            from ANY-PEER action med=0;   accept ANY-ROUTE;
          }

   imports all routes that are originated by AS5, but with  different  prefer-
   ence  and  med   values based on the content of their community strings and
   the peers that they are  received  from,  respectively.  Specifically,  the
   routes  that  have  the community 1210 are given the preference 1, the ones
   that have the community 1410 are given the preference 5, and all the others
   are  given  the preference 10. Similarly, the routes that are received from
   the peer router 10.9.9.5 are given the med value 100,  the  ones  that  are
   received  from  another  peer router in AS 5 are given the med value of 50,
   and the ones that are received from elsewhere are given the med value of 0.

   Finally, the full syntax of an import rule for protocol PR is:

    <PR-Import-Rule>:
       [from <peering>] [action <PR-import-action>] accept <PR-filter> |
       [from <peering>] block <PR-filter>                              |
       {<PR-Import-Rule>; <PR-Import-Rule>; ...}                       |
       <PR-Import-Rule> refine <PR-Import-Rule>


4. Export Policy Rules

   A routing protocol exports (i.e. advertizes) some of the routes in the  RIB
   to its neighbors. The exported route might belong to the exporting protocol
   or to another protocol. Export policy is configured from a protocol  SRC_PR
   (the  owner  protocol)  to  a  protocol  DST_PR (the exporting protocol) to
   determine:

      -which SRC_PR routes should be exported by DST_PR protocol to its neigh-
      bors, which ones should be blocked, and
      -with what attributes should the routes be  exported.  Notice  that  the
      SRC_PR  routes  will be exported as DST_PR routes, therefore they should
      be exported with DST_PR attributes.





Cilingiroglu, Przygienda    Expires February 1999                    [Page 14]


Internet-Draft                      RPCL                          August 1998


   Export policy is configured using export rules. The  syntax  of  an  export
   rule from a protocol SRC_PR to a protocol DST_PR is as follows:

   <SRC_PR-to-DST_PR-export-rule>:
     [to <peering>] [action <DST_PR-export-action>] announce <SRC_PR-filter> |
     [to <peering>] block <SRC_PR-filter>

   where [to <peering>] is used by External Gateway Protocols,  such  as  BGP,
   but not by Internal Gateway Protocols, such as RIP and OSPF.

   The evaluation of an export policy rule is similar to the import rules. For
   a  rule  from protocol SRC_PR to protocol DST_PR, the rule evaluation is as
   follows:

      -A SRC_PR route matches the export rule,  if  it  matches  the  <SRC_PR-
      filter>  and, in case DST_PR is an EGP protocol, the peer that the route
      is sent to matches the <peering> specification.

      -Matching routes are exported if the <SRC_PR-filter> is preceded by  the
      keyword  "announce",  and  they are blocked otherwise. An exported route
      will be a DST_PR route, and some its  attributes  will  be  set  by  the
      optional  <DST_PR-export-action>,  and  the others will take its default
      values.

                    SRC PROTOCOL                         SRC PROTOCOL

                | RIP |OSPF | BGP |               |  RIP | OSPF |  BGP |
      ----------+-----+-----+-----+       --------+------+------+------+
      Static    | YES | YES | YES |       Static  | BLK  | BLK  | BLK  |
      ----------+-----+-----+-----+       --------+------+------+------+
      Direct    | YES | YES | YES |       Direct  | BLK  | BLK  | BLK  |
 DST  ----------+-----+-----+-----+  DST  --------+------+------+------+
 PROT RIP       | YES | YES | YES |  PROT RIP     |ACCEPT| BLK  | BLK  |
      ----------+-----+-----+-----+       --------+------+------+------+
      OSPF      | YES | --- | YES |       OSPF    | BLK  |ACCEPT| BLK  |
      ----------+-----+-----+-----+       --------+------+------+------+
      BGP       | YES | YES | YES |       I-BGP   | BLK  | BLK  |ACCEPT|
      ----------+-----+-----+-----+       --------+------+------+------+
      Block Rule| YES | --- | --- |       E-BGP   | BLK  | BLK  | BLK  |
      ----------+-----+-----+-----+       --------+------+------+------+
    (a) Configuration and Block Rule             (b) Default-Action

        Figure-3: Properties of Export policies for several protocols


   In Figure-3, some properties of export policies are listed for some of  the
   protocol pairs. They can be summarized as follows:




Cilingiroglu, Przygienda    Expires February 1999                    [Page 15]


Internet-Draft                      RPCL                          August 1998


      -Export policy need not be configured for every protocol pair. For exam-
      ple, OSPF has to export all OSPF internal routes to all of its neighbors
      without any attribute change. Therefore, there is no  policy  configura-
      tion needed for an export from OSPF to OSPF.

      -Only RIP is allowed to have a block rule. The other  protocols  do  not
      have  it  either  because  they  cannot  block any route from export, or
      because their default actions are block and they don't need it.

      -The default action is taken in case no rule matches the route. It is to
      export  the route with default attributes, in case RIP, OSPF or I-BGP is
      exporting its own route, and it is to block for all other cases.

   Following are examples of export policy rules:

   The following rule from RIP to RIP

      action tag=100; metric=1210
      announce tgt-gw=={120.100/16^+} and src-gw=={196.122.44/24^+}

   is used by RIP to export all  RIP  routes  received  from  a  gateway  that
   matches  196.122.44/24^+,  to a gateway that matches 120.100/16^+. All such
   routes are exported with the tag value of 100 and the metric value of 1210.

   The rule from BGP to RIP

      action tag=200;
      announce src-peer==AS11 or AS11

   is used by RIP to export BGP routes that are either originated by AS 11  or
   received  from  a  peer in AS 11. All such routes are exported with the tag
   value of 200.

   The rule from BGP to OSPF

      action tag=100; type=EXTERNAL-2;
      announce community.contains(3210)

   is used by OSPF to export BGP routes that has the community 3210, with  the
   tag value of 100 and the OSPF type EXTERNAL 2.

   The rule from RIP to BGP

      to AS11
      action med=10; aspath.append(AS9);
      announce {120.100/16^+} and src-gw=={196.122.44.12}

   is used by BGP to export RIP routes to peers in AS 11,  that  are  received



Cilingiroglu, Przygienda    Expires February 1999                    [Page 16]


Internet-Draft                      RPCL                          August 1998


   from  the gateway 196.122.44.12 and match 120.100/16^+. All such routes are
   exported with a med value of 10 and with AS9 appended to their aspath.

   The rule from BGP to BGP

      to {12.10.10.3, 12.10.10.7, AS11}
      action community.append(NO-EXPORT)
      announce <^AS19 .* AS54>

   is used by BGP to export BGP routes that have an aspath starting with AS 19
   and  including AS 54, to peers 12.10.10.3, 12.10.10.7 or the ones in AS 11.
   Routes are exported with NO-EXPORT community appended  to  their  community
   string.

   Export rules can be compounded and refined just like import rules. The full
   syntax for an export rule is the following:

   <SRC_PR-to-DST_PR-export-rule>:
      [to <peering>] [action <DST_PR-export-action>] announce <SRC_PR-filter> |
      [to <peering>] block <SRC_PR-filter>                                    |
      {<SRC_PR-to-DST_PR-Export-Rule>; <SRC_PR-to-DST_PR-Export-Rule>; ...}   |
      <SRC_PR-to-DST_PR-Export-Rule> refine <SRC_PR-to-DST_PR-Export-Rule>


5. Aggregation Policy Rules

   An aggregate route is used to summarize the component routes of an  address
   range. By default when an aggregate route is exported to a neighbor, all of
   its component routes (i.e. routes that are more specific  than  the  aggre-
   gate)  are  suppressed.   This  reduces the amount of route propagation and
   controls the growth of the IP routing and forwarding tables. Some component
   routes,  however,  may  need  to  be  exported  along with the aggregate to
   satisfy some topology constraints (such as multi-homed components in  BGP).
   Aggregation  policy is used by a protocol to determine the aggregate routes
   that a router generates and which component routes to export along with the
   aggregate.

   Some protocols, such as BGP, perform aggregation via a  configured  policy.
   Based on  the current state of the RIB, the configured aggregation rules of
   a protocol PR determine:

      -what aggregates to generate and the route attributes  of  those  aggre-
      gates (aggregate activation evaluation)
      -in case PR exports an aggregate route to a  neighbor,  what  components
      (i.e.  more  specifics) to export along with the aggregate and what com-
      ponents to suppress (aggregate export evaluation)

   The syntax of an aggregation rule for a protocol PR is as follows:



Cilingiroglu, Przygienda    Expires February 1999                    [Page 17]


Internet-Draft                      RPCL                          August 1998


      <PR-aggregation-rule>:
         aggregate into     <prefix>
         triggered by       AND/OR of HC{<prefix-range-list>} and
                                      EX{<prefix-range-list>}
         components         ATOMIC | [protocol <PR_1>] <PR_1-filter>
                                    [[protocol <PR_2>] <PR_2-filter>] ...
         action             <PR-action>
         export components  from <PR_1> <PR_1-to-PR-export-rule>
                           [from <PR_2> <PR_2-to-PR-export-rule>] ...
         holes              <prefix-range-list>

   The semantics of an aggregation rule for a protocol PR is best described by
   explaining each of its attributes as follows:


      aggregate: specifies the prefix of the aggregate for which the  rule  is
           defined.


      trigger: determines, along with the components attribute, the conditions
           needed to generate the aggregate. The trigger requires certain pre-
           fix ranges to be present and certain others to be absent in the RIB
           as a precondition for generation.

           The trigger is specified by a logical expression using the  connec-
           tives  AND  and  OR, and the constructs HC (Have-Components) and EX
           (EXclude) defined as follows:

              HC{<prefix-range-list>}: true iff there is a matching route
                                       in the RIB for every
                                       prefix-range in the list.

              EX{<prefix-range-list>}: true iff there is no matching route
                                       in the RIB for any of the
                                       prefix-ranges in the list.

           The aggregate route is generated and put  into  the  RIB  when  the
           trigger  condition  becomes  true, and removed from the RIB when it
           becomes false. For example, the rule

             aggregate into 10/8
             triggered by   HC{10.1/16^24-32, 10.2.2/24^+} AND EX{11/8^+}

           specifies that the aggregate 10/8 will be added to the RIB only  if
           there  are  routes  matching  10.1/16^24-32 and 10.2.2/24^+, and no
           routes matching 11/8^+ in the RIB.





Cilingiroglu, Przygienda    Expires February 1999                    [Page 18]


Internet-Draft                      RPCL                          August 1998


      components: determines the route attributes of the aggregate, if  it  is
           generated. This attribute has the following syntax:

              components ATOMIC | [protocol <PR_1>] <PR_1-filter>
                                 [[protocol <PR_2>] <PR_2-filter>] ...

           The components attribute is either specified by the keyword  ATOMIC
           or  by a list of filters and their corresponding protocols.  In the
           former case attributes of  the  aggregate  are  assigned  to  their
           default  values,  and in the latter they are computed from a subset
           of the component routes, called attribute-components.

           Attribute-components consist of the more specifics of the aggregate
           that  match one of the filters and are learned from the correspond-
           ing protocol. If the protocol is omitted in front of a filter  then
           it defaults to any protocol.

           The properties of the attribute computation are as follows:

              - the computation might result in a conflict of some of the com-
              ponent  attributes, in which case the aggregate will not be gen-
              erated. An example conflict is the  case  where  the  routes  in
              attribute-components do not have the same next-hop.
              - the attributes of the aggregate have to be  re-computed  every
              time  the  state  of the attribute-components change (i.e. a new
              component passes the components filter),  when  a  component  no
              longer  passes  the components filter, or when a component still
              passes the components filter but  had  a  change  in  its  route
              attributes.
              - if no trigger attribute  is  specified,  then  the  components
              attribute is used to decide whether to generate the aggregate or
              not. It will be generated only if  the  attribute-components  is
              not  empty  (i.e.  at least one of the more specifics in the RIB
              matches the components filter).

           For example,

              aggregate into 128.64/10
              components
                 protocol BGP  {128/8^+}
                 protocol OSPF {128.70/15^16-24} and type==INTER-AREA

           uses BGP routes that are more specifics of 128.64/10 and inter-area
           OSPF  routes  that  match  128.70/15^16-24  for computing the route
           attributes of the aggregate 128.64/10. Notice that since  the  more
           specifics  are exclusively used in the computation, all filters are
           implicitly ANDed with {128.64/10^-}.




Cilingiroglu, Przygienda    Expires February 1999                    [Page 19]


Internet-Draft                      RPCL                          August 1998


      action: a list of PR actions applied each time the route  attributes  of
           the  aggregate  are (re-)evaluated. The action attribute is used to
           modify some of the attributes that are either set to their  default
           values (i.e. ATOMIC) or computed from the more specifics.

           For example,

              action  {comm.delete(NO-EXPORT); med=100}

           if present, removes the NO-EXPORT community from the community list
           of the aggregate and set its med to 100.


      export components: allows some of the more  specific  components  of  an
           aggregate  to  be  exported.  In  general, when a set of routes are
           aggregated, the intent is to export only the aggregate and suppress
           all  the  more  specifics.   However, to satisfy some topology con-
           straints such as a multi-homed  component,  this  attribute  allows
           some  of the components to be exported. Using the export components
           attribute a list of export policy rules from a number of  protocols
           to  the  protocol  PR  (the aggregator protocol) is specified.  The
           export components attribute is of the form:

              export components  from <PR_1> <PR_1-to-PR-export-rule>
                                [from <PR_2> <PR_2-to-PR-export-rule>] ...

           The following specifies the evaluation of an aggregate and its more
           specifics for export:

              - Every time the aggregate is generated or has a change  in  its
              attributes:
                 - it is (re)evaluated for export to all the neighbors.
                 - to the neighbors that the aggregate was exported before but
                 blocked now, the export of more specifics are evaluated using
                 the configured export policy.
                 - to the neighbors that the aggregate was not exported before
                 but  exported now, the export of more specifics are evaluated
                 using the export components of  the  corresponding  aggregate
                 rule.

              - When the aggregate is removed from the RIB (either because the
              trigger became false or the component attributes conflict):
                 - to the neighbors that the aggregate  was  exported  before,
                 the  export of more specifics are evaluated using the config-
                 ured export policy.

           The following are some examples of the export components attribute:




Cilingiroglu, Przygienda    Expires February 1999                    [Page 20]


Internet-Draft                      RPCL                          August 1998


              aggregate into     10/8
              export components  from ANY-PROTOCOL announce {10.1/16^-}

           specifies that when the aggregate 10/8 is exported to  a  neighbor,
           all  the more specifics are suppressed from export to that neighbor
           except the ones that are also more specifics of 10.1/16.

              aggregate into 128.100/16
              export components
                 from OSPF
                    to {AS17, AS126} action dpa=50 announce ANY-ROUTE

           is a BGP aggregate rule where OSPF more specifics of 128.100/16 are
           exported  to  the  peers in AS17 or AS126 along with the aggregate,
           and in all other cases the more specifics are suppressed.


      holes: a prefix range list that specifies the holes  in  the  aggregate,
           i.e.   the  more  specific address ranges not reachable through the
           aggregate route (perhaps they are not allocated).  Holes  attribute
           has no functional role, it is for diagnostic purposes only.

   Here is an example BGP aggregation rule that uses all the rule attributes:

      aggregate into     10/8
      triggered by       HC{10.1/16^24-32, 10.2.2/24^+} AND EX{11/8^+}
      components         protocol RIP  {10.3/16^+} AND
                                       src-gw=={50.10/16^+}
                         protocol BGP  AS5
                         protocol OSPF ANY-ROUTE
      action             {med=100; community.delete(NO-EXPORT);}
      export components  from OSPF
                            to {AS10, 128.10.9.9} announce ANY-ROUTE
                         from BGP
                            to {AS10} announce AS5
      holes              {10.100.100/24^+}


   In case of overlapping aggregation rules, where the aggregate of  one  rule
   is  a  lesser  specific of another one, the semantics of rule evaluation is
   extended as follows:

      - activation evaluation: is performed starting from  the  rule  for  the
           most  specific  aggregate  to  the rule for the least specific one.
           This ensures that, the activation evaluation for an aggregate  will
           consider  the  most  current  activation state of the more specific
           aggregates (i.e. whether they are present in the  RIB  or  not  and
           their route attributes if they are in the RIB).



Cilingiroglu, Przygienda    Expires February 1999                    [Page 21]


Internet-Draft                      RPCL                          August 1998


      - export evaluation: a route is exported to a neighbor iff:
              - it is the least specific aggregate in the RIB that passes  the
              export policy, or
              - it passes the export components attribute  of  an  aggregation
              rule whose aggregate is exported, or
              - there are no aggregates of this route that passes  the  export
              policy, but the route itself passes it.

           Notice  that  the  above  conditions  describe  chains  of  routes,
           A1,A2,...,An,Rn+1, where:
              - all Ai are active aggregates, and
              - A1 is the least specific aggregate in the RIB that passes  the
              export policy, and
              - each Ai is a more specific of Ai-1 and Ai  passes  the  export
              components of Aj for some j<i, and
              - Rn+1 is a non-aggregate route which  passes  the  export  com-
              ponents of Aj for some j<n+1.

   Consider the following example of overlapping aggregate rules for BGP:

      aggregate into 10/8
      triggered by
         HC{10.3/16, 10.16/15, 10.72.3/24}
      export components
         from BGP to {AS2} announce {10.3/16}
         from BGP to {AS1, AS2} announce {10.16/12^12-15}

      aggregate into 10.16/15
      triggered by
         HC{10.16/16}
      export components
         from BGP to {AS1, AS2} announce {10.16/15^16}

      aggregate into 10.16/16
      triggered by
         HC{10.16.0/18^+, 10.16.128/18^+}
      export components
         from RIP to ANY-PEER announce {10.16.100/24^+}

      aggregate into 10.17/16
      triggered by
         HC{10.17/16^-}
      export components
         from OSPF to {AS2} announce {10.17/16^24}

      aggregate into 10.3/16
      triggered by
         HC{10.3/16^-}



Cilingiroglu, Przygienda    Expires February 1999                    [Page 22]


Internet-Draft                      RPCL                          August 1998


   The aggregate rules form the following tree:

                           10/8
                             |
                      +------+------+
                      |             |
                   10.16/15      10.3/16
                      |
                 +----+----+
                 |         |
             10.16/16   10.17/16

   Activation evaluation for the aggregates proceed bottom up (i.e., from  the
   leaf  nodes to the root node). For example, consider the activation evalua-
   tion of 10/8 (assuming no conflicts in route attributes):

      - 10/8 will be generated only if 10.3/16, 10.16/15, and  10.72.3/24  are
      all  in  the  RIB.  Notice  that  10.3/16 and 10.16/15 can themselves be
      active aggregates or non-aggregate routes exported from a neighbor.
      - if 10.3/16 is an active aggregate then the  generation  of  10/8  also
      depends on the existance of a route in the RIB that matches 10.3/16^-.
      - similarly, if 10.16/15 is an active aggregate then the  generation  of
      10/8  depends  on  the  existance  of  a  route  in the RIB that matches
      10.16.0/18^+ and another one that matches 10.16.128/18^+.

   Export evaluation, on the other hand, is performed top down (i.e. from  the
   least  specific active aggregate to the most specific). For example, in the
   above configured policy, the following  routes  will  be  exported  to  AS1
   (assuming that all aggregates  are active and 10/8 passes the export policy
   for AS1):

      - 10/8 is the least specific aggregate that passes the export policy, so
      it will be exported.
      - 10.16/15 will be exported, since it passes the  export  components  of
      the rule for 10/8
      - Both 10.16/16 and 10.17/16 will  be  exported,  since  they  pass  the
      export components of the rule for 10.16/15.
      - Any RIP route that matches 10.16.100/24^+ will also be exported, since
      it matches the export components of the rule for 10.16/16.












Cilingiroglu, Przygienda    Expires February 1999                    [Page 23]


Internet-Draft                      RPCL                          August 1998


6. Acknowledgments

   We would like to thank Rob Coltun and Sanjay  Wadhwa  for  their  contribu-
   tions, valuable comments and suggestions.

7. Authors' Addresses

   Ardas Cilingiroglu
   FORE Systems
   1595 Spring Hill rd. 5th floor,
   Vienna, VA 22182
   acilingi@fore.com

   Tony Przygienda
   Bell Labs, Lucent Technologies
   101 Crawfords Corner rd.
   Holmdel, NJ 07733-3030
   prz@dnrc.bell-labs.com

8. References

   [1] C. Alaettinoglu, T. Bates, E. Gerich, D. Karrenberg, D. Meyer,
       M. Terpstra, and C. Villamizar. "Routing Policy Specification
       Language (RPSL)". Request for Comment RFC-2280, January 1998.

   [2] Alaettinouglu, C., Meyer, D., and J.  Schmitz. "Application of
       Routing Policy Specification Language (RPSL) on the Internet",
       Work in Progress.

   [3] Internet Routing Registry. Procedures.
       http://www.ra.net/RADB.tools.docs/,
       http://www.ripe.net/db/doc.html.

   [4] A. M. R. Magee. "RIPE NCC Database Documentation".  Technical
       Report RIPE-157, RIPE, RIPE NCC, Amsterdam, Netherlands, May
       1997.















Cilingiroglu, Przygienda    Expires February 1999                    [Page 24]


Internet-Draft                      RPCL                          August 1998


APPENDIX A. A Policy Editor for RPCL

   Previous sections have described the syntax and semantics of a language  to
   specify  routing  policies.  This section describes an editor to to be used
   for configuring RPCL policies on a router.

   On a physical router device, there can be multiple IP instances, where each
   instance identifies the implementation of a logical router with its own RIB
   running its own instances of routing protocols and policies. The command

      (1) set ip-instance <ip-inst-id>

   is used to set the current ip instance on a  physical  router  device.  The
   commands  following (1) are used to configure the protocols and policies of
   the logical router specified by the given IP instance.

   Each IP instance stores its routing policies in a database, where each pol-
   icy  of  a  protocol  is  configured on a separate global policy table. The
   names and contents of these tables are listed below:


      IMPORT-<PR>: defines the ordered list of import rules used by the proto-
           col  <PR> to decide which of the received routes to import and with
           what route attributes. This list is of the form:

              IMPORT-<PR> :
                   {<PR-Import-Rule>; <PR-Import-Rule>; ... }


      EXPORT-<SRC_PR>-<DST_PR>: defines the ordered list of export rules  used
           by  the protocol <DST_PR> to decide which <SRC_PR> routes to export
           to a neighbor and with what route attributes. This list is  of  the
           form:

              EXPORT-<SRC_PR>-<DST_PR> :
                   {<SRC_PR-to-DST_PR-Export-Rule>;
                    <SRC_PR-to-DST_PR-Export-Rule>; ... }


      AGGREGATE-<PR>: defines the unordered set of aggregation rules  used  by
           the  protocol  <PR>  to decide what <PR> aggregates to generate and
           which more specifics of these aggregates to suppress  from  export.
           This set is of the form:

              AGGREGATE-<PR>:
                  {<PR-Aggregation-Rule>; <PR-Aggregation-Rule>; ... }





Cilingiroglu, Przygienda    Expires February 1999                    [Page 25]


Internet-Draft                      RPCL                          August 1998


   Rules in an import or export table are ordered. When a  protocol  evaluates
   its  import or export policy for a route, the decision is taken by applying
   the first matching rule in the corresponding global  policy  table.  If  no
   rule  in  the  table matches, then the appropriate default action is taken.
   Default actions depend on the policy and the protocols involved,  and  they
   are shown in Figures 2 and 3.

   Rules in an aggregation policy table, on the other hand, are  not  ordered.
   Every  time  the  state  of  the RIB changes (i.e. some route R gets added,
   removed or changed), all aggregation rules that define an aggregate  for  R
   are  evaluated  in  the  order  of the most specific aggregate to the least
   specific one.

   Initially, when the router is started, all global tables  are  empty.  This
   means  that  the  default  actions  will be taken for all import and export
   decisions, and no aggregate will be generated. Later, policies are  config-
   ured  (and  re-configured)  by changing the contents of their corresponding
   global tables.

   Parts of global tables that are repeatedly used can be defined as a  macro.
   The  macros are explained in section A.1. Configuration commands to insert,
   remove and reorder policy rules in a global policy table are given in  sec-
   tions A.2 and A.3.

   Changing the contents of the policy database is an expensive operation. All
   current policy decisions that might get affected by the policy changes have
   to be re-evaluated by the protocols. Therefore, changes in the database (as
   requested  by the configuration commands that are issued) are not committed
   after each configuration command but delayed until an explicit commit  com-
   mand is specified. The details of commiting is explained in A.4.

A.1 Policy Macros

   Some policy pieces that are used repeatedly during policy configuration can
   be defined as a macro. The generic syntax of a macro is:

      define <macro-name> <object>

   All macro references, <macro-name>, in the configuration  are  replaced  by
   its object definition, <object>.

   Naming of macros are restricted based on the type of the policy piece  they
   define.  Each macro name is made up of two parts separated by the character
   hyphen "-". The first part is a constant string specifying the type of  the
   policy  piece, and the second part is a free string of 8 characters assign-
   ing a unique name to the macro. For  example  "peer-internal"  is  a  valid
   macro name where "peer" specifies that it defines a peer set and "internal"
   results in a unique name for the macro.



Cilingiroglu, Przygienda    Expires February 1999                    [Page 26]


Internet-Draft                      RPCL                          August 1998


   Some macros define attributes of a policy rule. Their syntax  are  as  fol-
   lows:

      (2) define peer-<str8>  <peer-set>

      (3) define fltr-<str8>  <filter>

      (4) define act-<str8>   <action>

   The following is an example of their use:

      define peer-nghbors {as17, 128,166.9.9, as57}

      define fltr-for128  {128.176/20^+, 128.0/9^20-24} and
                          (as12 or <as12>)

      define act-for128   {pref=10; aspath.prepend(as99)}

   Using the above macros one can define the following BGP import rule:

      from peer-nghbors
      action act-for128
      accept (fltr-for128 and {as217, as61, as126})

   which expands to

      from {as17, 128,166.9.9, as57}
      action {pref=10; aspath.prepend(as99)}
      accept ({128.176/20^+, 128.0/9^20-24} and
              (as12 or <as12>) and
              {as217, as61, as126})

   Macros may also be used for defining list of policy rules. The following is
   the syntax for import, export and aggregation rule lists, respectively:

      (5) define imp-<str8>
             protocol <PR>
             {<PR-Import-Rule>; <PR-Import-Rule>; ... }

      (6) define exp-<str8>
             protocol <SRC_PR> into <DST_PR>
             {<SRC_PR-to-DST_PR-Export-Rule>;
              <SRC_PR-to-DST_PR-Export-Rule>; ... }

      (7) define aggr-<str8>
             protocol <PR>
             {<PR-Aggregation-Rule>; <PR-Aggregation-Rule>; ... }




Cilingiroglu, Przygienda    Expires February 1999                    [Page 27]


Internet-Draft                      RPCL                          August 1998


   As explained before, rules in an import or export policy list are  ordered.
   When defining a macro, this ordering is explicitly specified by listing the
   rules. However, macros can also be  modified  by  inserting/removing  rules
   to/from them, in which case the ordering has to be specified implicitly. An
   integer, called a rule number, is assigned to individual rules of  a  macro
   to  impose  this ordering. A rule with a smaller rule number comes before a
   rule with a larger one. Rule numbers are also used to refer to the rules of
   an  import  or  export policy macro. The syntax for rule referrals can take
   the following forms:

      <macro-name>: refers to all the rules of that macro.

      <macro-name> <rule-num>: refers to the rule  in  <macro-name>  with  the
           rule number <rule-num>.

      <macro-name> <rule-num-1>-<rule-num-2>:  refers  to  all  the  rules  in
           <macro-name>  with  the  rule  number  in  between <rule-num-1> and
           <rule-num-2>, both inclusive.

   For example, "imp-mypol 5-7" refers to the rules in imp-mypol with the rule
   numbers 5, 6 or 7. In rule referrals, the character "$" denotes the maximum
   rule number used in a macro. For example "exp-pol5 $" refers  to  the  last
   rule in exp-pol5.

   Initially, when an import or export policy  macro  is  defined,  rules  are
   assigned  consecutive  rule numbers starting from 1. Later the contents and
   the rule numbers of macros can be modified using the following commands:

      (8) insert imp-<str8>
             {<PR-Import-Rule>; <PR-Import-Rule>; ... }
             [<rule-num>]

            appends the specified import rules after imp-<str8>  [<rule-num>].
            If  <rule-num>  is  not specified it defaults to $, i.e. rules are
            appended to the end. The inserted rules are  assigned  consecutive
            rule  numbers starting from the <rule-num> plus one. If any of the
            rule numbers are already assigned to another rule, then the inser-
            tion  is  aborted.  In such cases, the move command has to be used
            first to open up the space for insertion.

      (9) remove imp-<str8>
             <rule-num>[-<rule-num>]

            removes the rules that  match  imp-<str8>  <rule-num>[-<rule-num>]
            from the macro imp-<str8>.

      (10) move imp-<str8>
              <rule-num>[-<rule-num>]  up | down  <num>



Cilingiroglu, Przygienda    Expires February 1999                    [Page 28]


Internet-Draft                      RPCL                          August 1998


            assigns new rule  numbers  to  the  rules  that  match  imp-<str8>
            <rule-num>[-<rule-num>].  If "up" is specified in the command, the
            rules are assigned their current rule numbers  plus  <num>.  Simi-
            larly,  if  "down"  is  specified, they are assigned their current
            rule numbers minus <num>. If any  of  the  new  rule  numbers  are
            already  assigned  to  another  rule,  then  the move operation is
            aborted. Notice that move does not change the relative ordering of
            the  rules in a macro. It is used to open up the rule number space
            for inserting new rules.

      (11) compact imp-<str8>

            is useful when rule numbers are too sparse  in  a  macro.  Without
            changing  the  current rule ordering, they assign new rule numbers
            to the rules incrementally starting from 1.

   The commands that modify export macros have the same semantics as  that  of
   import macros. They are listed below:

      (12) insert exp-<str8>
              {<SRC_PR-to-DST_PR-Export-Rule>;
               <SRC_PR-to-DST_PR-Export-Rule>; ... }
              [<rule-num>]

      (13) remove exp-<str8>
              <rule-num>[-<rule-num>]

      (14) move exp-<str8>
              <rule-num>[-<rule-num>]  up | down  <num>

      (15) compact exp-<str8>

   An example import/export macro definition and modification is given  below.
   Text following the character "#" in a line are considered comments and they
   are used to explain the affects of the example commands.

       # Rules are not specified explicitly, but represented by identifiers
       # such as R1, R2 etc. Numbers shown before each rule denotes its rule
       # number. The content of the macro is shown after each configuration
       # command as if they are committed right away.

      define imp-as57pol  protocol bgp  {R1; R2; R3; R4}

       #   Initially the content of imp-as57pol is
       #
       #     imp-as57pol = {
       #                     (1) R1; (2) R2; (3) R3; (4) R4
       #                   }



Cilingiroglu, Przygienda    Expires February 1999                    [Page 29]


Internet-Draft                      RPCL                          August 1998


      insert imp-as57pol  {Y1; Y2}  2

       #     rejected because rule numbers 3 and 4 are in use

      move imp-as57pol  3-$  down 3

       #     imp-as57pol = {
       #                     (1) R1; (2) R2; (6) R3; (7) R4
       #                   }

      insert imp-as57pol  {Y1; Y2}  2

       #     imp-as57pol = {
       #                     (1) R1; (2) R2; (3) Y1; (4) Y2; (6) R3; (7) R4
       #                   }

      remove imp-as57pol  4-6

       #     imp-as57pol = {
       #                     (1) R1; (2) R2; (3) Y1; (7) R4
       #                   }

      compact imp-as57pol

       #     imp-as57pol = {
       #                     (1) R1; (2) R2; (3) Y1; (4) R4
       #                   }

   Since aggregation policy rules are not ordered, there  is  no  rule  number
   assigned  to  the  individual  rules. Instead, rules can be referred by the
   aggregation prefix that it defines. The syntax for  an  aggregation  policy
   macro  definition is already given in (7). The commands to modify an aggre-
   gation macro are described below:

      (16) insert aggr-<str8>
              {<PR-Aggregation-Rule>; <PR-Aggregation-Rule>; ... }

            adds the specified aggregation rules to aggr-<str8>.

      (17) remove aggr-<str8>
              <prefix-range-list>

            removes the aggregation rules  from  aggr-<str8>  that  define  an
            aggregate matching <prefix-range-list>.

   An example aggregation macro definition and modification is given below.





Cilingiroglu, Przygienda    Expires February 1999                    [Page 30]


Internet-Draft                      RPCL                          August 1998


       # For brevity, the rules are not completely specified. The content of
       # the macro is shown after some of the commands as if changes are
       # committed right away.

      define aggr-net10
         protocol bgp
         {
           aggregate 10/8  ...;
           aggregate 10.9.9/24  ...;
           aggregate 10.10.9/24  ...;
         }

      insert aggr-net10
         {
           aggregate 10.10/16  ...;
           aggregate 10.10.9.128/25  ...;
           aggregate 10.20/16  ...;
         }

       #       aggr-net10 = {
       #                       aggregate 10/8  ...;
       #                       aggregate 10.10/16  ...;
       #                       aggregate 10.20/16  ...;
       #                       aggregate 10.9.9/24  ...;
       #                       aggregate 10.10.9/24  ...;
       #                       aggregate 10.10.9.128/25  ...;
       #                    }

      remove aggr-net10  {10.0/12^16-24}

       #       aggr-net10 = {
       #                       aggregate 10/8  ...;
       #                       aggregate 10.10.9.128/25  ...;
       #                       aggregate 10.20/16  ...;
       #                    }

A.2 Import and Export Policy Configuration

   Import policy for a  protocol  <PR>  is  configured  in  the  global  table
   IMPORT-<PR>.  Similarly, export policy from a protocol <SRC_PR> to a proto-
   col <DST_PR> is configured in the  global  table  EXPORT-<SRC_PR>-<DST_PR>.
   These global tables are made up of policy macros, where the ordering of the
   rules is specified hierarchically as follows:

      - the ordering within the rules of a member macro is determined  by  the
      rule numbers
      - the ordering of the member macros is  determined  by  unique  integers
      assigned to individual macros, named macro numbers. In the global table,



Cilingiroglu, Przygienda    Expires February 1999                    [Page 31]


Internet-Draft                      RPCL                          August 1998


      the rules of a member macro with a smaller macro number comes before the
      rules of a member macro with a larger one.

   Assigning unique macro numbers to member macros allow another way to  refer
   to them, in addition to using macro names. The syntax is as follows:

      import-<PR> <macro-num>: refers to the import macro  for  protocol  <PR>
           that  is  inserted  into  import-<PR> with the macro number <macro-
           num>.

      export-<SRC_PR>-<DST_PR> <macro-num>: refers to the export macro for the
           protocol  pair  (<SRC_PR>,  <DST_PR>) that is inserted into export-
           <SRC_PR>-<DST_PR> with the macro number <macro-num>.

   A member macro in a global table can be assigned  a  new  macro  number  in
   order  to reorder its rules relative to the rest of the global table.  When
   this happens, referring to the macro from the global table  changes,  using
   the new macro number.

   Not all macros that are used in a global table have to  be  defined  previ-
   ously.   Some  macros  are  defined  on  the fly by listing their rules and
   inserting them into a global table with a unique macro number. Such  macros
   are  called  on-the-fly  macros  and they do not have macro names. They are
   temporary in the sense that when such a macro is removed  from  the  global
   table,  its definition is lost. To prevent that, an on-the-fly macro can be
   changed into a permenant one by assigning a macro name to it.

   Notice that global tables for import and export policies are  tightly  cou-
   pled  with  their  member  macros. Any change in a macro changes the global
   policy tables that it is a member of, which in turn changes the correspond-
   ing  protocol  policies.  To decouple a global table from one of its member
   macros, the member macro can be replaced by an exact copy of it and can  be
   given  a  new macro name or can be made an on-the-fly macro. This operation
   does not change the rules that are in the global table, but prevents future
   changes in the decoupled macro to be reflected to the global table and vice
   versa.

   Import and Export policies are configured using the following commands:

      (18) insert-macro import-<PR>
              imp-<str8>  <macro-num>

            inserts the macro imp-<str8> into the  table  import-<PR>  with  a
            unique macro number <macro-num>. If the protocol in the imp-<str8>
            definition does not match with <PR>, or the <macro-num> is already
            assigned  to  another  macro, the insertion operation is rejected.
            Notice that after this operation, imp-<str8> can also be  referred
            as import-<PR> <macro-num>.



Cilingiroglu, Przygienda    Expires February 1999                    [Page 32]


Internet-Draft                      RPCL                          August 1998


      (19) insert-macro import-<PR>
              {<PR-Import-Rule>; ...}  <macro-num>

            inserts an on-the-fly macro into  the  table  import-<PR>  with  a
            unique macro number <macro-num>. The rules of the macro are speci-
            fied explicitly in the  command.   Like  (18),  the  operation  is
            rejected  if  <macro-num>  is  already  in  use.  Notice  that the
            inserted on-the-fly macro can  only  be  referred  as  import-<PR>
            <macro-num>.

      (20) remove-macro import-<PR>
              <macro-num>

            removes the macro referred by  import-<PR>  <macro-num>  from  the
            table  import-<PR>.   If  the removed macro is defined on-the-fly,
            then its definition is lost after this operation. To prevent this,
            link operation can be used as described below.

      (21) move-macro import-<PR>
              <src-macro-num> to <dst-macro-num>

            relocates the macro referred  by  import-<PR>  <src-macro-num>  by
            assigning a new macro number, <dst-macro-num>, to it. This changes
            the ordering of the rules in this macro relative to  the  rest  of
            the  rules  in the table import-<PR>. It also changes the way this
            macro is referred, from import-<PR> <src-macro-num> to import-<PR>
            <dst-macro-num>.

      (22) insert import-<PR>
              {<PR-Import-Rule>; ...}  <macro-num>[.<rule-num>]
      (23) remove import-<PR>
              <macro-num>.<rule-num>[-<rule-num>]
      (24) move import-<PR>
              <macro-num>.<rule-num>[-<rule-num>]  up | down  <num>
      (25) compact import-<PR>  <macro-num>

            commands (22)-(25) are used to change the contents of import  mac-
            ros. Their semantics are the same as the commands (8)-(11), except
            that here the macros are referred by their macro  numbers  instead
            of their macro names.

      (26) link import-<PR>  <macro-num> to imp-<str8>

            replaces the macro that is  inserted  in  import-<PR>  <macro-num>
            with  a  fresh  copy of it, and assigns the name imp-<str8> to the
            new copy. If the replaced macro was already assigned a name  (i.e.
            was  not  an  on-the-fly macro), then this operation decouples the
            global table import-<PR>  from  the  replaced  macro,  meaning  no



Cilingiroglu, Przygienda    Expires February 1999                    [Page 33]


Internet-Draft                      RPCL                          August 1998


            changes in one will affect the other. If the replaced macro was an
            on-the-fly macro, then the operation makes it permanent, i.e.  the
            macro  definition  will  not  be lost after it is removed from the
            global table import-<PR>.

      (27) unlink import-<PR>  <macro-num> from imp-<str8>

            replaces the macro that is  inserted  in  import-<PR>  <macro-num>
            with  a  fresh on-the-fly copy of it. It decouples the import-<PR>
            from the replaced macro.  Notice that since the  new  copy  is  an
            on-the-fly  macro, its definition will be lost after it is removed
            from the global table import-<PR>.

   The commands to configure export policies have the same semantics  as  that
   of import policies. They are listed below:

      (28) insert-macro  export-<SRC_PR>-<DST_PR>
              exp-<str8>  <macro-num>

      (29) insert-macro  export-<SRC_PR>-<DST_PR>
              {<SRC_PR-to-DST_PR-Export-Rule>; ...}  <macro-num>

      (30) remove-macro  export-<SRC_PR>-<DST_PR>
              <macro-num>

      (31) move-macro  export-<SRC_PR>-<DST_PR>
              <src-macro-num> to <dst-macro-num>

      (32) insert  export-<SRC_PR>-<DST_PR>
              {<SRC_PR-to-DST_PR-Export-Rule>; ...}  <macro-num>[.<rule-num>]

      (33) remove  export-<SRC_PR>-<DST_PR>
              <macro-num>.<rule-num>[-<rule-num>]

      (34) move  export-<SRC_PR>-<DST_PR>
              <macro-num>.<rule-num>[-<rule-num>]  up | down  <num>

      (35) compact  export-<SRC_PR>-<DST_PR>  <macro-num>

      (36) link  export-<SRC_PR>-<DST_PR>  <macro-num> to exp-<str8>

      (37) unlink  export-<SRC_PR>-<DST_PR>  <macro-num> from exp-<str8>

   An example is shown below for an import policy configuration of BGP:







Cilingiroglu, Przygienda    Expires February 1999                    [Page 34]


Internet-Draft                      RPCL                          August 1998


       # For brevity, the rules are not explicitly specified but represented
       # by identifiers such as R1, R2 etc.
       # The example assumes that initially the IMPORT-BGP is empty.
       # The contents of the global table and some of the macros are shown after
       # some of the commands as if the changes are committed right away.

      define imp-rippol  protocol rip  {M1; M2}

      define imp-bgppol  protocol bgp  {X1; X2; X3}

      insert-macro import-bgp  imp-rippol  100

       #     rejected because of the mismatch of protocols

      insert-macro import-bgp  imp-bgppol  100

      insert-macro import-bgp  {Y1; Y2}  100

       #     rejected because macro is 100 is already in use

      insert import-bgp  {Y1; Y2} 100

       #     IMPORT-BGP =                imp-bgppol =
       #        {                           {
       #          (100 = imp-bgppol)          (1) X1;
       #              (1) X1;                 (2) X2;
       #              (2) X2;                 (3) X3;
       #              (3) X3;                 (4) Y1;
       #              (4) Y1;                 (5) Y2;
       #              (5) Y2;               }
       #        }

      move import-bgp  3-$  down 1

      insert import-bgp  {Z1}  2

      insert-macro import-bgp  {R1; R2}  200

       #     IMPORT-BGP =                imp-bgppol =
       #        {                           {
       #          (100 = imp-bgppol)          (1) X1;
       #              (1) X1;                 (2) X2;
       #              (2) X2;                 (3) Z1;
       #              (3) Z1;                 (4) X3;
       #              (4) X3;                 (5) Y1;
       #              (5) Y1;                 (6) Y2;
       #              (6) Y2;               }
       #



Cilingiroglu, Przygienda    Expires February 1999                    [Page 35]


Internet-Draft                      RPCL                          August 1998


       #          (200 = ON-THE-FLY)
       #              (1) R1;
       #              (2) R2;
       #        }

      move-macro import-bgp  100 to 500

      unlink import-bgp  500 from imp-bgppol

      link import-bgp  200 to imp-newrules

       #     IMPORT-BGP =                imp-bgppol =      imp-newrules =
       #        {                           {                 {
       #          (200 = imp-newrules)        (1) X1;           (1) R1;
       #              (1) R1;                 (2) X2;           (2) R2;
       #              (2) R2;                 (3) Z1;         }
       #                                      (4) X3;
       #          (500 = ON-THE-FLY)          (5) Y1;
       #              (1) X1;                 (6) Y2;
       #              (2) X2;               }
       #              (3) Z1;
       #              (4) X3;
       #              (5) Y1;
       #              (6) Y2;
       #        }

      remove import-bgp  500  3-6

      remove imp-bgppol  1-3

      remove-macro import-bgp  200

       #     IMPORT-BGP =                imp-bgppol =      imp-newrules =
       #        {                           {                 {
       #          (500 = ON-THE-FLY)          (4) X3;           (1) R1;
       #              (1) X1;                 (5) Y1;           (2) R2;
       #              (2) X2;                 (6) Y2;         }
       #        }                           }

A.3 Aggregation Policy Configuration

   The aggregation policy for a protocol <PR>  is  configured  in  the  global
   table  AGGREGATE-<PR>. Aggregation tables are different than the import and
   export tables in the following ways:

      - Rules in a global aggregation table are not ordered.
      - There is no rule number assigned to  individual  rules.  Instead,  the
      rules are referred by the aggregate prefix that they define.



Cilingiroglu, Przygienda    Expires February 1999                    [Page 36]


Internet-Draft                      RPCL                          August 1998


      - Global aggregation tables are not  coupled  with  aggregation  macros.
      When  a  macro  is inserted into a global aggregation table, the current
      contents of the macro is copied into the global  table.  Future  changes
      made in the macro are not reflected into the global table.

   The following are the commands to configure an aggregation policy:

      (38) insert aggregate-<PR>
              {<PR-Aggregation-Rule>; <PR-Aggregation-Rule>; ... }

            adds  the  specified  aggregation  rules  to  the   global   table
            aggregate-<PR>.

      (39) insert aggregate-<PR>
              aggr-<str8>

            creates a copy of the rules in aggr-<str8> and adds  them  to  the
            global  table  aggregate-<PR>. Note that, the global table and the
            macro each have their own copies of the rules, and therefore there
            is no coupling between them.

      (40) remove aggregate-<PR>
              <prefix-range-list>

            removes all the rules from the table aggregate-<PR> that define an
            aggregate matching <prefix-range-list>.

      (41) remove aggregate-<PR>
              aggr-<str8>

            removes all the rules  from  the  table  aggregate-<PR>  that  was
            inserted from the macro aggr-<str8>.

A.4 Commit Operation

   Any run-time policy change of a protocol results in an expensive series  of
   operations.  All  current  policy  decisions that might get affected by the
   policy change have to be re-evaluated by the protocol. Therefore,  changing
   the  global  policy tables after each command is very inefficient. Instead,
   all changes are committed simultaneously at well-defined  points  in  time.
   The following command is used for this purpose:

      (42) commit [changes]

            changes all the policies of all the  protocols  according  to  the
            commands that are issued between the previous commit operation and
            now.




Cilingiroglu, Przygienda    Expires February 1999                    [Page 37]


Internet-Draft                      RPCL                          August 1998


APPENDIX B. RPCL Reference

   This appendix section provides the complete syntax of  RPCL  in  BNF  form.
   The  first  subsection, B.1, gives the syntax of RPCL policy rules, and the
   next subsection, B.2, gives the syntax of the RPCL policy editor.

B.1 RPCL Policy Syntax

B.1.1 Basic Types

   <IPv4Addr>: [0-255] |
               [0-255].[0-255] |
               [0-255].[0-255].[0-255] |
               [0-255].[0-255].[0-255].[0-255]

   <Mask>: [0-32]

   <protocol>: STATIC | DIRECT | RIP | OSPF | BGP

   <policy-protocol>: RIP | OSPF | BGP

   <prefix>: <IPv4Addr>/<Mask>

   <preference>: <integer>

   <tag> : <integer>

   <rip-metric>: [1-15]

   <ospf-metric>: [1-65535]

   <ospf-type>: INTRA-AREA | INTER-AREA | EXTERNAL-1 | EXTERNAL-2

   <as>: AS<integer>

   <as-set>: {<as>, <as>, ..., <as>}

   <as-path>: {<as>, <as>, ..., <as>}

   <community>: <integer>

   <comm-list>: {<community>, <community>, ... }

   <peer-AS>: <as>

   <peer-IPv4Addr>: [0-255].[0-255].[0-255].[0-255]

   <bgp-peer>: <peer-AS> <peer-IPv4Addr>



Cilingiroglu, Przygienda    Expires February 1999                    [Page 38]


Internet-Draft                      RPCL                          August 1998


   <peer-element>: <peer-AS> | <peer-IPv4Addr>

   <peer-set>: {<peer-element>, <peer-element>, ... }

B.1.2 Filter Types

   # m and n are [0-32]
   <prefix-range>: <prefix> [ ^- | ^+ | ^m | ^m-n ]

   <prefix-range-list>: {<prefix-range>, <prefix-range>, ... } |
                        <pfx-setname>

   <aspath-regex-member>: <as> | <as-set> | <as-setname> | .

   <aspath-regex-operator>: * | + | ? | (m) | (m,) | (m,n) | <empty>

   <aspath-unit>: <aspath-regex-member> <aspath-regex-operator>

   <aspath-regex>: '<' [^] <aspath-unit> <aspath-unit> ... [$] '>'

B.1.3 Policy Filters

   <STATIC-filter>: <prefix-range-list>

   <DIRECT-filter>: <prefix-range-list>

   <RIP-filter>: <prefix-range-list> |
                 src-gw==<prefix-range-list> |
                 tag==<tag>

   <OSPF-filter>: <prefix-range-list> |
                  type==<ospf-type> |
                  tag==<tag>

   <BGP-filter>: <prefix-range-list> |
                 <aspath-regex> |
                 <as> |
                 <as-set> |
                 community == <comm-list> |
                 community.contains <comm-list>

B.1.4 Policy Actions

   <RIP-import-single-action>:
      pref=<preference>

   <RIP-import-action>:
      {<RIP-import-single-action>; <RIP-import-single-action>; ...}



Cilingiroglu, Przygienda    Expires February 1999                    [Page 39]


Internet-Draft                      RPCL                          August 1998


   <RIP-export-single-action>:
      tag=<tag> |
      metric=<rip-metric>

   <RIP-export-action>:
      {<RIP-export-single-action>; <RIP-export-single-action>; ...}

   <OSPF-import-single-action>:
      pref=<preference>

   <OSPF-import-action>:
      {<OSPF-import-single-action>; <OSPF-import-single-action>; ...}

   <OSPF-export-single-action>:
      tag=<tag> |
      metric=<ospf-metric> |
      type=<ospf-type>

   <OSPF-export-action>:
      {<OSPF-export-single-action>; <OSPF-export-single-action>; ...}

   <BGP-single-action>:
      pref=<preference> |
      med=<med> |
      dpa=<dpa> |
      aspath.prepend <peer-AS-list> |
      community=<comm-list> |
      community.=<comm> |             # append a single community
      community.append <comm-list> |  # append multiple communities
      community.delete <comm-list>    # delete the ones that exist

   <BGP-import-action>:
      {<BGP-single-action>, <BGP-single-action>, ...}

   <BGP-export-action>:
      {<BGP-single-action>, <BGP-single-action>, ...}

B.1.5 Policy Peering Specification

   <peering>: <peer-AS> | <peer-IPv4Addr> | <peer-set>

B.1.6 Policy Rules

   <PR-import-rule>:
      [from <peering>] [action <PR-import-action>] accept <PR-filter> |
      [from <peering>] block <PR-filter>                              |
      {<PR-Import-Rule>; <PR-Import-Rule>; ...}                       |
      <PR-Import-Rule> refine <PR-Import-Rule>



Cilingiroglu, Przygienda    Expires February 1999                    [Page 40]


Internet-Draft                      RPCL                          August 1998


   <SRC_PR-to-DST_PR-export-rule>:
      [to <peering>] [action <DST_PR-export-action>] announce <SRC_PR-filter> |
      [to <peering>] block <SRC_PR-filter>                                    |
      {<SRC_PR-to-DST_PR-Export-Rule>; <SRC_PR-to-DST_PR-Export-Rule>; ...}   |
      <SRC_PR-to-DST_PR-Export-Rule> refine <SRC_PR-to-DST_PR-Export-Rule>

   <PR-aggregation-rule>:
      aggregate into     <prefix>

      triggered by       AND/OR of HC{<prefix-range-list>} and
                                   EX{<prefix-range-list>}

      components         ATOMIC |
                        [protocol <PR_1>] <PR_1-filter>
                       [[protocol <PR_2>] <PR_2-filter>] ...

      action             <PR-action>

      export components  from <PR_1> <PR_1-to-PR-export-rule>
                        [from <PR_2> <PR_2-to-PR-export-rule>] ...

      holes              <prefix-range-list>

B.2 Policy Editor

   <str8> : string of {[a-z], [A-Z], [0-9], "-", "_"} of length 8

B.2.1 Policy Attribute Macros

   define peer-<str8>  <peer-set>

   define fltr-<str8>  <filter>

   define act-<str8>   <action>

   undefine peer-<str8>

   undefine fltr-<str8>

   undefine act-<str8>

   show peer[-<str8>]

   show fltr[-<str8>]

   show act[-<str8>]

B.2.2 Import Policy Macros



Cilingiroglu, Przygienda    Expires February 1999                    [Page 41]


Internet-Draft                      RPCL                          August 1998


   define imp-<str8>
       protocol <PR>
       {<PR-Import-Rule>; <PR-Import-Rule>; ... }

   undefine imp-<str8>

   insert imp-<str8>
       {<PR-Import-Rule>; <PR-Import-Rule>; ... }
       [<rule-num>]

   remove imp-<str8>
       <rule-num>[-<rule-num>]

   move imp-<str8>
       <rule-num>[-<rule-num>]  up | down  <num>

   compact imp-<str8>

   show imp[-<str8>]

B.2.3 Export Policy Macros

   define exp-<str8>
       protocol <SRC_PR> into <DST_PR>
       {<SRC_PR-to-DST_PR-Export-Rule>; <SRC_PR-to-DST_PR-Export-Rule>;

   undefine exp-<str8>

   insert exp-<str8>
       {<SRC_PR-to-DST_PR-Export-Rule>; <SRC_PR-to-DST_PR-Export-Rule>; ... }
       [<rule-num>]

   remove exp-<str8>
       <rule-num>[-<rule-num>]

   move exp-<str8>
       <rule-num>[-<rule-num>]  up | down  <num>

   compact exp-<str8>

   show exp[-<str8>]

B.2.4 Aggregation Policy Macros

   define aggr-<str8>
       protocol <PR>
       {<PR-Aggregation-Rule>; <PR-Aggregation-Rule>; ... }




Cilingiroglu, Przygienda    Expires February 1999                    [Page 42]


Internet-Draft                      RPCL                          August 1998


   undefine aggr-<str8>

   insert aggr-<str8>
       {<PR-Aggregation-Rule>; <PR-Aggregation-Rule>; ... }

   remove aggr-<str8>
       <prefix-range-list>

   show aggr[-<str8>] [<prefix-range-list>] [forest]

B.2.5 Import Policy Configuration

   insert-macro import-<PR>
       imp-<str8>  <macro-num>

   insert-macro import-<PR>
       {<PR-Import-Rule>; ...}  <macro-num>

   remove-macro import-<PR>
       <macro-num>

   move-macro import-<PR>
       <src-macro-num> to <dst-macro-num>

   insert import-<PR>
       {<PR-Import-Rule>; ...}  <macro-num>[.<rule-num>]

   remove import-<PR>
       <macro-num>.<rule-num>[-<rule-num>]

   move import-<PR>
       <macro-num>.<rule-num>[-<rule-num>]  up | down  <num>

   compact import-<PR>  <macro-num>

   link import-<PR>  <macro-num> to imp-<str8>

   unlink import-<PR>  <macro-num> from imp-<str8>

   show import-<PR> [<macro-num>]

B.2.6 Export Policy Configuration

   insert-macro  export-<SRC_PR>-<DST_PR>
       exp-<str8>  <macro-num>

   insert-macro  export-<SRC_PR>-<DST_PR>
       {<SRC_PR-to-DST_PR-Export-Rule>; ...}  <macro-num>



Cilingiroglu, Przygienda    Expires February 1999                    [Page 43]


Internet-Draft                      RPCL                          August 1998


   remove-macro  export-<SRC_PR>-<DST_PR>
       <macro-num>

   move-macro  export-<SRC_PR>-<DST_PR>
       <src-macro-num> to <dst-macro-num>

   insert  export-<SRC_PR>-<DST_PR>
       {<SRC_PR-to-DST_PR-Export-Rule>; ...}  <macro-num>[.<rule-num>]

   remove  export-<SRC_PR>-<DST_PR>
       <macro-num>.<rule-num>[-<rule-num>]

   move  export-<SRC_PR>-<DST_PR>
       <macro-num>.<rule-num>[-<rule-num>]  up | down  <num>

   compact  export-<SRC_PR>-<DST_PR>  <macro-num>

   link  export-<SRC_PR>-<DST_PR>  <macro-num> to exp-<str8>

   unlink  export-<SRC_PR>-<DST_PR>  <macro-num> from exp-<str8>

   show export-<SRC_PR>-<DST_PR> [<macro-num>]

B.2.7 Aggregation Policy Configuration

   insert aggregate-<PR>
       {<PR-Aggregation-Rule>; <PR-Aggregation-Rule>; ... }

   insert aggregate-<PR>
       aggr-<str8>

   remove aggregate-<PR>
       <prefix-range-list>

   remove aggregate-<PR>
       aggr-<str8>

   show aggregate-<PR> [<prefix-range-list>] [forest]

B.2.8 Commit Operation

   commit [changes]









Cilingiroglu, Przygienda    Expires February 1999                    [Page 44]