Annotation of embedaddon/quagga/doc/routeserver.texi, revision 1.1.1.1

1.1       misho       1: @c -*-texinfo-*-
                      2: @c @value{COPYRIGHT_STR}
                      3: @c See file quagga.texi for copying conditions.
                      4: @c
                      5: @c This file is a modified version of Jose Luis Rubio's TeX sources 
                      6: @c of his RS-Manual document
                      7: 
                      8: @node Configuring Quagga as a Route Server
                      9: @chapter Configuring Quagga as a Route Server
                     10: 
                     11: The purpose of a Route Server is to centralize the peerings between BGP
                     12: speakers. For example if we have an exchange point scenario with four BGP
                     13: speakers, each of which maintaining a BGP peering with the other three
                     14: (@pxref{fig:full-mesh}), we can convert it into a centralized scenario where
                     15: each of the four establishes a single BGP peering against the Route Server
                     16: (@pxref{fig:route-server}).
                     17: 
                     18: We will first describe briefly the Route Server model implemented by Quagga.
                     19: We will explain the commands that have been added for configuring that
                     20: model. And finally we will show a full example of Quagga configured as Route
                     21: Server.
                     22: 
                     23: @menu
                     24: * Description of the Route Server model::
                     25: * Commands for configuring a Route Server::
                     26: * Example of Route Server Configuration::
                     27: @end menu
                     28: 
                     29: @node Description of the Route Server model
                     30: @section Description of the Route Server model
                     31: 
                     32: First we are going to describe the normal processing that BGP announcements
                     33: suffer inside a standard BGP speaker, as shown in @ref{fig:normal-processing},
                     34: it consists of three steps:
                     35: 
                     36: @itemize @bullet
                     37: @item
                     38: When an announcement is received from some peer, the `In' filters
                     39: configured for that peer are applied to the announcement. These filters can
                     40: reject the announcement, accept it unmodified, or accept it with some of its
                     41: attributes modified.
                     42: 
                     43: @item
                     44: The announcements that pass the `In' filters go into the
                     45: Best Path Selection process, where they are compared to other
                     46: announcements referred to the same destination that have been
                     47: received from different peers (in case such other
                     48: announcements exist). For each different destination, the announcement
                     49: which is selected as the best is inserted into the BGP speaker's Loc-RIB.
                     50: 
                     51: @item
                     52: The routes which are inserted in the Loc-RIB are
                     53: considered for announcement to all the peers (except the one
                     54: from which the route came). This is done by passing the routes
                     55: in the Loc-RIB through the `Out' filters corresponding to each
                     56: peer. These filters can reject the route,
                     57: accept it unmodified, or accept it with some of its attributes
                     58: modified. Those routes which are accepted by the `Out' filters
                     59: of a peer are announced to that peer.
                     60: @end itemize
                     61: 
                     62: @float Figure,fig:normal-processing
                     63: @image{fig-normal-processing,400pt,,Normal announcement processing}
                     64: @caption{Announcement processing inside a ``normal'' BGP speaker}
                     65: @end float
                     66: 
                     67: @float Figure,fig:full-mesh
                     68: @image{fig_topologies_full,120pt,,Full Mesh BGP Topology}
                     69: @caption{Full Mesh}
                     70: @end float
                     71: 
                     72: @float Figure,fig:route-server
                     73: @image{fig_topologies_rs,120pt,,Route Server BGP Topology}
                     74: @caption{Route Server and clients} 
                     75: @end float
                     76: 
                     77: Of course we want that the routing tables obtained in each of the routers
                     78: are the same when using the route server than when not. But as a consequence
                     79: of having a single BGP peering (against the route server), the BGP speakers
                     80: can no longer distinguish from/to which peer each announce comes/goes.
                     81: @anchor{filter-delegation}This means that the routers connected to the route
                     82: server are not able to apply by themselves the same input/output filters
                     83: as in the full mesh scenario, so they have to delegate those functions to
                     84: the route server.
                     85: 
                     86: Even more, the ``best path'' selection must be also performed inside
                     87: the route server on behalf of its clients. The reason is that if, after
                     88: applying the filters of the announcer and the (potential) receiver, the
                     89: route server decides to send to some client two or more different
                     90: announcements referred to the same destination, the client will only
                     91: retain the last one, considering it as an implicit withdrawal of the
                     92: previous announcements for the same destination. This is the expected
                     93: behavior of a BGP speaker as defined in @cite{RFC1771}, and even though
                     94: there are some proposals of mechanisms that permit multiple paths for
                     95: the same destination to be sent through a single BGP peering, none are
                     96: currently supported by most existing BGP implementations.
                     97: 
                     98: As a consequence a route server must maintain additional information and
                     99: perform additional tasks for a RS-client that those necessary for common BGP
                    100: peerings. Essentially a route server must:
                    101: 
                    102: @anchor{Route Server tasks}
                    103: @itemize @bullet
                    104: @item
                    105: Maintain a separated Routing Information Base (Loc-RIB)
                    106: for each peer configured as RS-client, containing the routes
                    107: selected as a result of the ``Best Path Selection'' process
                    108: that is performed on behalf of that RS-client.
                    109: 
                    110: @item
                    111: Whenever it receives an announcement from a RS-client,
                    112: it must consider it for the Loc-RIBs of the other RS-clients.
                    113: 
                    114: @anchor{Route-server path filter process}
                    115: @itemize @bullet
                    116: @item
                    117: This means that for each of them the route server must pass the
                    118: announcement through the appropriate `Out' filter of the
                    119: announcer.
                    120: 
                    121: @item
                    122: Then through the  appropriate `In' filter of
                    123: the potential  receiver. 
                    124: 
                    125: @item
                    126: Only if the announcement is accepted by both filters it will be passed
                    127: to the ``Best Path Selection'' process.
                    128: 
                    129: @item
                    130: Finally, it might go into the Loc-RIB of the receiver.
                    131: @end itemize
                    132: @end itemize
                    133: 
                    134: When we talk about the ``appropriate'' filter, both the announcer and the
                    135: receiver of the route must be taken into account. Suppose that the route
                    136: server receives an announcement from client A, and the route server is
                    137: considering it for the Loc-RIB of client B. The filters that should be
                    138: applied are the same that would be used in the full mesh scenario, i.e.,
                    139: first the `Out' filter of router A for announcements going to router B, and
                    140: then the `In' filter of router B for announcements coming from router A.
                    141: 
                    142: We call ``Export Policy'' of a RS-client to the set of `Out' filters that
                    143: the client would use if there was no route server. The same applies for the
                    144: ``Import Policy'' of a RS-client and the set of `In' filters of the client
                    145: if there was no route server.
                    146: 
                    147: It is also common to demand from a route server that it does not
                    148: modify some BGP attributes (next-hop, as-path and MED) that are usually
                    149: modified by standard BGP speakers before announcing a route.
                    150: 
                    151: The announcement processing model implemented by Quagga is shown in
                    152: @ref{fig:rs-processing}. The figure shows a mixture of RS-clients (B, C and D)
                    153: with normal BGP peers (A). There are some details that worth additional
                    154: comments:
                    155: 
                    156: @itemize @bullet
                    157: @item
                    158: Announcements coming from a normal BGP peer are also
                    159: considered for the Loc-RIBs of all the RS-clients. But
                    160: logically they do not pass through any export policy.
                    161: 
                    162: @item
                    163: Those peers that are configured as RS-clients do not
                    164: receive any announce from the `Main' Loc-RIB.
                    165: 
                    166: @item
                    167: Apart from import and export policies,
                    168: `In' and `Out' filters can also be set for RS-clients. `In'
                    169: filters might be useful when the route server has also normal
                    170: BGP peers. On the other hand, `Out' filters for RS-clients are
                    171: probably unnecessary, but we decided not to remove them as
                    172: they do not hurt anybody (they can always be left empty).
                    173: @end itemize
                    174: 
                    175: @float Figure,fig:rs-processing
                    176: @image{fig-rs-processing,450pt,,Route Server Processing Model}
                    177: @caption{Announcement processing model implemented by the Route Server}
                    178: @end float
                    179: 
                    180: @node Commands for configuring a Route Server
                    181: @section Commands for configuring a Route Server
                    182: 
                    183: Now we will describe the commands that have been added to quagga
                    184: in order to support the route server features.
                    185: 
                    186: @deffn {Route-Server} {neighbor @var{peer-group} route-server-client} {}
                    187: @deffnx {Route-Server} {neighbor @var{A.B.C.D} route-server-client} {}
                    188: @deffnx {Route-Server} {neighbor @var{X:X::X:X} route-server-client} {}
                    189: This command configures the peer given by @var{peer}, @var{A.B.C.D} or
                    190: @var{X:X::X:X} as an RS-client.
                    191: 
                    192: Actually this command is not new, it already existed in standard Quagga. It
                    193: enables the transparent mode for the specified peer. This means that some
                    194: BGP attributes (as-path, next-hop and MED) of the routes announced to that
                    195: peer are not modified.
                    196: 
                    197: With the route server patch, this command, apart from setting the
                    198: transparent mode, creates a new Loc-RIB dedicated to the specified peer
                    199: (those named `Loc-RIB for X' in @ref{fig:rs-processing}.). Starting from
                    200: that moment, every announcement received by the route server will be also
                    201: considered for the new Loc-RIB.
                    202: @end deffn
                    203: 
                    204: @deffn {Route-Server} {neigbor @{A.B.C.D|X.X::X.X|peer-group@} route-map WORD @{import|export@}} {}
                    205: This set of commands can be used to specify the route-map that
                    206: represents the Import or Export policy of a peer which is
                    207: configured as a RS-client (with the previous command).
                    208: @end deffn
                    209: 
                    210: @deffn {Route-Server} {match peer @{A.B.C.D|X:X::X:X@}} {}
                    211: This is a new @emph{match} statement for use in route-maps, enabling them to
                    212: describe import/export policies. As we said before, an import/export policy
                    213: represents a set of input/output filters of the RS-client. This statement
                    214: makes possible that a single route-map represents the full set of filters
                    215: that a BGP speaker would use for its different peers in a non-RS scenario.
                    216: 
                    217: The @emph{match peer} statement has different semantics whether it is used
                    218: inside an import or an export route-map. In the first case the statement
                    219: matches if the address of the peer who sends the announce is the same that
                    220: the address specified by @{A.B.C.D|X:X::X:X@}. For export route-maps it
                    221: matches when @{A.B.C.D|X:X::X:X@} is the address of the RS-Client into whose
                    222: Loc-RIB the announce is going to be inserted (how the same export policy is
                    223: applied before different Loc-RIBs is shown in @ref{fig:rs-processing}.).
                    224: @end deffn
                    225: 
                    226: @deffn {Route-map Command} {call @var{WORD}} {}
                    227: This command (also used inside a route-map) jumps into a different
                    228: route-map, whose name is specified by @var{WORD}. When the called
                    229: route-map finishes, depending on its result the original route-map
                    230: continues or not. Apart from being useful for making import/export
                    231: route-maps easier to write, this command can also be used inside
                    232: any normal (in or out) route-map.
                    233: @end deffn
                    234: 
                    235: @node Example of Route Server Configuration
                    236: @section Example of Route Server Configuration
                    237: 
                    238: Finally we are going to show how to configure a Quagga daemon to act as a
                    239: Route Server. For this purpose we are going to present a scenario without
                    240: route server, and then we will show how to use the configurations of the BGP
                    241: routers to generate the configuration of the route server.
                    242: 
                    243: All the configuration files shown in this section have been taken
                    244: from scenarios which were tested using the VNUML tool
                    245: @uref{http://www.dit.upm.es/vnuml,VNUML}. 
                    246: 
                    247: @menu
                    248: * Configuration of the BGP routers without Route Server::
                    249: * Configuration of the BGP routers with Route Server::
                    250: * Configuration of the Route Server itself::
                    251: * Further considerations about Import and Export route-maps::
                    252: @end menu
                    253: 
                    254: @node Configuration of the BGP routers without Route Server
                    255: @subsection Configuration of the BGP routers without Route Server
                    256: 
                    257: We will suppose that our initial scenario is an exchange point with three
                    258: BGP capable routers, named RA, RB and RC. Each of the BGP speakers generates
                    259: some routes (with the @var{network} command), and establishes BGP peerings
                    260: against the other two routers. These peerings have In and Out route-maps
                    261: configured, named like ``PEER-X-IN'' or ``PEER-X-OUT''. For example the
                    262: configuration file for router RA could be the following:
                    263: 
                    264: @exampleindent 0
                    265: @example
                    266: #Configuration for router 'RA'
                    267: !
                    268: hostname RA
                    269: password ****
                    270: !
                    271: router bgp 65001
                    272:   no bgp default ipv4-unicast
                    273:   neighbor 2001:0DB8::B remote-as 65002
                    274:   neighbor 2001:0DB8::C remote-as 65003
                    275: !
                    276:   address-family ipv6
                    277:     network 2001:0DB8:AAAA:1::/64
                    278:     network 2001:0DB8:AAAA:2::/64
                    279:     network 2001:0DB8:0000:1::/64
                    280:     network 2001:0DB8:0000:2::/64
                    281: 
                    282:     neighbor 2001:0DB8::B activate
                    283:     neighbor 2001:0DB8::B soft-reconfiguration inbound
                    284:     neighbor 2001:0DB8::B route-map PEER-B-IN in
                    285:     neighbor 2001:0DB8::B route-map PEER-B-OUT out
                    286: 
                    287:     neighbor 2001:0DB8::C activate
                    288:     neighbor 2001:0DB8::C soft-reconfiguration inbound
                    289:     neighbor 2001:0DB8::C route-map PEER-C-IN in
                    290:     neighbor 2001:0DB8::C route-map PEER-C-OUT out
                    291:   exit-address-family
                    292: !
                    293: ipv6 prefix-list COMMON-PREFIXES seq  5 permit 2001:0DB8:0000::/48 ge 64 le 64
                    294: ipv6 prefix-list COMMON-PREFIXES seq 10 deny any
                    295: !
                    296: ipv6 prefix-list PEER-A-PREFIXES seq  5 permit 2001:0DB8:AAAA::/48 ge 64 le 64
                    297: ipv6 prefix-list PEER-A-PREFIXES seq 10 deny any
                    298: !
                    299: ipv6 prefix-list PEER-B-PREFIXES seq  5 permit 2001:0DB8:BBBB::/48 ge 64 le 64
                    300: ipv6 prefix-list PEER-B-PREFIXES seq 10 deny any
                    301: !
                    302: ipv6 prefix-list PEER-C-PREFIXES seq  5 permit 2001:0DB8:CCCC::/48 ge 64 le 64
                    303: ipv6 prefix-list PEER-C-PREFIXES seq 10 deny any
                    304: !
                    305: route-map PEER-B-IN permit 10
                    306:   match ipv6 address prefix-list COMMON-PREFIXES
                    307:   set metric 100
                    308: route-map PEER-B-IN permit 20
                    309:   match ipv6 address prefix-list PEER-B-PREFIXES
                    310:   set community 65001:11111
                    311: !
                    312: route-map PEER-C-IN permit 10
                    313:   match ipv6 address prefix-list COMMON-PREFIXES
                    314:   set metric 200
                    315: route-map PEER-C-IN permit 20
                    316:   match ipv6 address prefix-list PEER-C-PREFIXES
                    317:   set community 65001:22222
                    318: !
                    319: route-map PEER-B-OUT permit 10
                    320:   match ipv6 address prefix-list PEER-A-PREFIXES
                    321: !
                    322: route-map PEER-C-OUT permit 10
                    323:   match ipv6 address prefix-list PEER-A-PREFIXES
                    324: !
                    325: line vty
                    326: !
                    327: @end example
                    328: 
                    329: @node Configuration of the BGP routers with Route Server
                    330: @subsection Configuration of the BGP routers with Route Server
                    331: 
                    332: To convert the initial scenario into one with route server, first we must
                    333: modify the configuration of routers RA, RB and RC. Now they must not peer
                    334: between them, but only with the route server. For example, RA's
                    335: configuration would turn into:
                    336: 
                    337: @example
                    338: # Configuration for router 'RA'
                    339: !
                    340: hostname RA
                    341: password ****
                    342: !
                    343: router bgp 65001
                    344:   no bgp default ipv4-unicast
                    345:   neighbor 2001:0DB8::FFFF remote-as 65000
                    346: !
                    347:   address-family ipv6
                    348:     network 2001:0DB8:AAAA:1::/64
                    349:     network 2001:0DB8:AAAA:2::/64
                    350:     network 2001:0DB8:0000:1::/64
                    351:     network 2001:0DB8:0000:2::/64
                    352: 
                    353:     neighbor 2001:0DB8::FFFF activate
                    354:     neighbor 2001:0DB8::FFFF soft-reconfiguration inbound
                    355:   exit-address-family
                    356: !
                    357: line vty
                    358: !
                    359: @end example
                    360: 
                    361: Which is logically much simpler than its initial configuration, as it now
                    362: maintains only one BGP peering and all the filters (route-maps) have
                    363: disappeared.
                    364: 
                    365: @node Configuration of the Route Server itself
                    366: @subsection Configuration of the Route Server itself
                    367: 
                    368: As we said when we described the functions of a route server
                    369: (@pxref{Description of the Route Server model}), it is in charge of all the
                    370: route filtering. To achieve that, the In and Out filters from the RA, RB and
                    371: RC configurations must be converted into Import and Export policies in the
                    372: route server.
                    373: 
                    374: This is a fragment of the route server configuration (we only show
                    375: the policies for client RA):
                    376: 
                    377: @example
                    378: # Configuration for Route Server ('RS')
                    379: !
                    380: hostname RS
                    381: password ix
                    382: !
                    383: bgp multiple-instance
                    384: !
                    385: router bgp 65000 view RS
                    386:   no bgp default ipv4-unicast
                    387:   neighbor 2001:0DB8::A  remote-as 65001
                    388:   neighbor 2001:0DB8::B  remote-as 65002
                    389:   neighbor 2001:0DB8::C  remote-as 65003
                    390: !
                    391:   address-family ipv6
                    392:     neighbor 2001:0DB8::A activate
                    393:     neighbor 2001:0DB8::A route-server-client
                    394:     neighbor 2001:0DB8::A route-map RSCLIENT-A-IMPORT import
                    395:     neighbor 2001:0DB8::A route-map RSCLIENT-A-EXPORT export
                    396:     neighbor 2001:0DB8::A soft-reconfiguration inbound
                    397: 
                    398:     neighbor 2001:0DB8::B activate
                    399:     neighbor 2001:0DB8::B route-server-client
                    400:     neighbor 2001:0DB8::B route-map RSCLIENT-B-IMPORT import
                    401:     neighbor 2001:0DB8::B route-map RSCLIENT-B-EXPORT export
                    402:     neighbor 2001:0DB8::B soft-reconfiguration inbound
                    403: 
                    404:     neighbor 2001:0DB8::C activate
                    405:     neighbor 2001:0DB8::C route-server-client
                    406:     neighbor 2001:0DB8::C route-map RSCLIENT-C-IMPORT import
                    407:     neighbor 2001:0DB8::C route-map RSCLIENT-C-EXPORT export
                    408:     neighbor 2001:0DB8::C soft-reconfiguration inbound
                    409:   exit-address-family
                    410: !
                    411: ipv6 prefix-list COMMON-PREFIXES seq  5 permit 2001:0DB8:0000::/48 ge 64 le 64
                    412: ipv6 prefix-list COMMON-PREFIXES seq 10 deny any
                    413: !
                    414: ipv6 prefix-list PEER-A-PREFIXES seq  5 permit 2001:0DB8:AAAA::/48 ge 64 le 64
                    415: ipv6 prefix-list PEER-A-PREFIXES seq 10 deny any
                    416: !
                    417: ipv6 prefix-list PEER-B-PREFIXES seq  5 permit 2001:0DB8:BBBB::/48 ge 64 le 64
                    418: ipv6 prefix-list PEER-B-PREFIXES seq 10 deny any
                    419: !
                    420: ipv6 prefix-list PEER-C-PREFIXES seq  5 permit 2001:0DB8:CCCC::/48 ge 64 le 64
                    421: ipv6 prefix-list PEER-C-PREFIXES seq 10 deny any
                    422: !
                    423: route-map RSCLIENT-A-IMPORT permit 10
                    424:   match peer 2001:0DB8::B
                    425:   call A-IMPORT-FROM-B
                    426: route-map RSCLIENT-A-IMPORT permit 20
                    427:   match peer 2001:0DB8::C
                    428:   call A-IMPORT-FROM-C
                    429: !
                    430: route-map A-IMPORT-FROM-B permit 10
                    431:   match ipv6 address prefix-list COMMON-PREFIXES
                    432:   set metric 100
                    433: route-map A-IMPORT-FROM-B permit 20
                    434:   match ipv6 address prefix-list PEER-B-PREFIXES
                    435:   set community 65001:11111
                    436: !
                    437: route-map A-IMPORT-FROM-C permit 10
                    438:   match ipv6 address prefix-list COMMON-PREFIXES
                    439:   set metric 200
                    440: route-map A-IMPORT-FROM-C permit 20
                    441:   match ipv6 address prefix-list PEER-C-PREFIXES
                    442:   set community 65001:22222
                    443: !
                    444: route-map RSCLIENT-A-EXPORT permit 10
                    445:   match peer 2001:0DB8::B
                    446:   match ipv6 address prefix-list PEER-A-PREFIXES
                    447: route-map RSCLIENT-A-EXPORT permit 20
                    448:   match peer 2001:0DB8::C
                    449:   match ipv6 address prefix-list PEER-A-PREFIXES
                    450: !
                    451: ...
                    452: ...
                    453: ...
                    454: @end example
                    455: 
                    456: If you compare the initial configuration of RA with the route server
                    457: configuration above, you can see how easy it is to generate the Import and
                    458: Export policies for RA from the In and Out route-maps of RA's original
                    459: configuration.
                    460: 
                    461: When there was no route server, RA maintained two peerings, one with RB and
                    462: another with RC. Each of this peerings had an In route-map configured. To
                    463: build the Import route-map for client RA in the route server, simply add
                    464: route-map entries following this scheme:
                    465: 
                    466: @example
                    467: route-map <NAME> permit 10
                    468:     match peer <Peer Address>
                    469:     call <In Route-Map for this Peer>
                    470: route-map <NAME> permit 20
                    471:     match peer <Another Peer Address>
                    472:     call <In Route-Map for this Peer>
                    473: @end example
                    474: 
                    475: This is exactly the process that has been followed to generate the route-map
                    476: RSCLIENT-A-IMPORT. The route-maps that are called inside it (A-IMPORT-FROM-B
                    477: and A-IMPORT-FROM-C) are exactly the same than the In route-maps from the
                    478: original configuration of RA (PEER-B-IN and PEER-C-IN), only the name is
                    479: different.
                    480: 
                    481: The same could have been done to create the Export policy for RA (route-map
                    482: RSCLIENT-A-EXPORT), but in this case the original Out route-maps where so
                    483: simple that we decided not to use the @var{call WORD} commands, and we
                    484: integrated all in a single route-map (RSCLIENT-A-EXPORT).
                    485: 
                    486: The Import and Export policies for RB and RC are not shown, but
                    487: the process would be identical.
                    488: 
                    489: @node Further considerations about Import and Export route-maps
                    490: @subsection Further considerations about Import and Export route-maps
                    491: 
                    492: The current version of the route server patch only allows to specify a
                    493: route-map for import and export policies, while in a standard BGP speaker
                    494: apart from route-maps there are other tools for performing input and output
                    495: filtering (access-lists, community-lists, ...). But this does not represent
                    496: any limitation, as all kinds of filters can be included in import/export
                    497: route-maps. For example suppose that in the non-route-server scenario peer
                    498: RA had the following filters configured for input from peer B:
                    499: 
                    500: @example
                    501:     neighbor 2001:0DB8::B prefix-list LIST-1 in
                    502:     neighbor 2001:0DB8::B filter-list LIST-2 in
                    503:     neighbor 2001:0DB8::B route-map PEER-B-IN in
                    504:     ...
                    505:     ...
                    506: route-map PEER-B-IN permit 10
                    507:   match ipv6 address prefix-list COMMON-PREFIXES
                    508:   set local-preference 100
                    509: route-map PEER-B-IN permit 20
                    510:   match ipv6 address prefix-list PEER-B-PREFIXES
                    511:   set community 65001:11111
                    512: @end example
                    513: 
                    514: It is posible to write a single route-map which is equivalent to
                    515: the three filters (the community-list, the prefix-list and the
                    516: route-map). That route-map can then be used inside the Import
                    517: policy in the route server. Lets see how to do it:
                    518: 
                    519: @example
                    520:     neighbor 2001:0DB8::A route-map RSCLIENT-A-IMPORT import
                    521:     ...
                    522: !
                    523: ...
                    524: route-map RSCLIENT-A-IMPORT permit 10
                    525:   match peer 2001:0DB8::B
                    526:   call A-IMPORT-FROM-B
                    527: ...
                    528: ...
                    529: !
                    530: route-map A-IMPORT-FROM-B permit 1
                    531:   match ipv6 address prefix-list LIST-1
                    532:   match as-path LIST-2
                    533:   on-match goto 10
                    534: route-map A-IMPORT-FROM-B deny 2
                    535: route-map A-IMPORT-FROM-B permit 10
                    536:   match ipv6 address prefix-list COMMON-PREFIXES
                    537:   set local-preference 100
                    538: route-map A-IMPORT-FROM-B permit 20
                    539:   match ipv6 address prefix-list PEER-B-PREFIXES
                    540:   set community 65001:11111
                    541: !
                    542: ...
                    543: ...
                    544: @end example
                    545: 
                    546: The route-map A-IMPORT-FROM-B is equivalent to the three filters
                    547: (LIST-1, LIST-2 and PEER-B-IN). The first entry of route-map
                    548: A-IMPORT-FROM-B (sequence number 1) matches if and only if both
                    549: the prefix-list LIST-1 and the filter-list LIST-2 match. If that
                    550: happens, due to the ``on-match goto 10'' statement the next
                    551: route-map entry to be processed will be number 10, and as of that
                    552: point route-map A-IMPORT-FROM-B is identical to PEER-B-IN. If
                    553: the first entry does not match, `on-match goto 10'' will be
                    554: ignored and the next processed entry will be number 2, which will
                    555: deny the route.
                    556: 
                    557: Thus, the result is the same that with the three original filters,
                    558: i.e., if either LIST-1 or LIST-2 rejects the route, it does not
                    559: reach the route-map PEER-B-IN. In case both LIST-1 and LIST-2
                    560: accept the route, it passes to PEER-B-IN, which can reject, accept
                    561: or modify the route.

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>