Annotation of embedaddon/quagga/doc/routeserver.texi, revision 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>