Annotation of embedaddon/quagga/doc/bgpd.texi, revision 1.1.1.2

1.1       misho       1: @c -*-texinfo-*-
                      2: @c This is part of the Quagga Manual.
                      3: @c @value{COPYRIGHT_STR}
                      4: @c See file quagga.texi for copying conditions.
                      5: @node BGP
                      6: @chapter BGP
                      7: 
                      8: @acronym{BGP} stands for a Border Gateway Protocol.  The lastest BGP version
                      9: is 4.  It is referred as BGP-4.  BGP-4 is one of the Exterior Gateway
                     10: Protocols and de-fact standard of Inter Domain routing protocol.
                     11: BGP-4 is described in @cite{RFC1771, A Border Gateway Protocol
                     12: 4 (BGP-4)}.
                     13: 
                     14: Many extensions have been added to @cite{RFC1771}.  @cite{RFC2858,
                     15: Multiprotocol Extensions for BGP-4} provides multiprotocol support to
                     16: BGP-4.
                     17: 
                     18: @menu
                     19: * Starting BGP::                
                     20: * BGP router::                  
                     21: * BGP network::                 
                     22: * BGP Peer::                    
                     23: * BGP Peer Group::              
                     24: * BGP Address Family::          
                     25: * Autonomous System::           
                     26: * BGP Communities Attribute::   
                     27: * BGP Extended Communities Attribute::  
                     28: * Displaying BGP routes::       
                     29: * Capability Negotiation::      
                     30: * Route Reflector::             
                     31: * Route Server::                
                     32: * How to set up a 6-Bone connection::  
                     33: * Dump BGP packets and table::  
                     34: * BGP Configuration Examples::
                     35: @end menu
                     36: 
                     37: @node Starting BGP
                     38: @section Starting BGP
                     39: 
                     40: Default configuration file of @command{bgpd} is @file{bgpd.conf}.
                     41: @command{bgpd} searches the current directory first then
                     42: @value{INSTALL_PREFIX_ETC}/bgpd.conf.  All of bgpd's command must be
                     43: configured in @file{bgpd.conf}.
                     44: 
                     45: @command{bgpd} specific invocation options are described below.  Common
                     46: options may also be specified (@pxref{Common Invocation Options}).
                     47: 
                     48: @table @samp
                     49: @item -p @var{PORT}
                     50: @itemx --bgp_port=@var{PORT}
                     51: Set the bgp protocol's port number.
                     52: 
                     53: @item -r
                     54: @itemx --retain
                     55: When program terminates, retain BGP routes added by zebra.
                     56: @end table
                     57: 
                     58: @node BGP router
                     59: @section BGP router
                     60: 
                     61:   First of all you must configure BGP router with @command{router bgp}
                     62: command.  To configure BGP router, you need AS number.  AS number is an
                     63: identification of autonomous system.  BGP protocol uses the AS number
                     64: for detecting whether the BGP connection is internal one or external one.
                     65: 
                     66: @deffn Command {router bgp @var{asn}} {}
                     67: Enable a BGP protocol process with the specified @var{asn}.  After
                     68: this statement you can input any @code{BGP Commands}.  You can not
                     69: create different BGP process under different @var{asn} without
                     70: specifying @code{multiple-instance} (@pxref{Multiple instance}).
                     71: @end deffn
                     72: 
                     73: @deffn Command {no router bgp @var{asn}} {}
                     74: Destroy a BGP protocol process with the specified @var{asn}.
                     75: @end deffn
                     76: 
                     77: @deffn {BGP} {bgp router-id @var{A.B.C.D}} {}
                     78: This command specifies the router-ID.  If @command{bgpd} connects to @command{zebra} it gets
                     79: interface and address information.  In that case default router ID value
                     80: is selected as the largest IP Address of the interfaces.  When
                     81: @code{router zebra} is not enabled @command{bgpd} can't get interface information
                     82: so @code{router-id} is set to 0.0.0.0.  So please set router-id by hand.
                     83: @end deffn
                     84: 
                     85: @menu
                     86: * BGP distance::                
                     87: * BGP decision process::        
                     88: * BGP route flap dampening::      
                     89: @end menu
                     90: 
                     91: @node BGP distance
                     92: @subsection BGP distance
                     93: 
                     94: @deffn {BGP} {distance bgp <1-255> <1-255> <1-255>} {}
                     95: This command change distance value of BGP.  Each argument is distance
                     96: value for external routes, internal routes and local routes.
                     97: @end deffn
                     98: 
                     99: @deffn {BGP} {distance <1-255> @var{A.B.C.D/M}} {}
                    100: @deffnx {BGP} {distance <1-255> @var{A.B.C.D/M} @var{word}} {}
                    101: This command set distance value to 
                    102: @end deffn
                    103: 
                    104: @node BGP decision process
                    105: @subsection BGP decision process
                    106: 
                    107: @table @asis
                    108: @item 1. Weight check
                    109:   
                    110: @item 2. Local preference check.
                    111: 
                    112: @item 3. Local route check.
                    113: 
                    114: @item 4. AS path length check.
                    115: 
                    116: @item 5. Origin check.
                    117: 
                    118: @item 6. MED check.
                    119: @end table
                    120: 
                    121: @deffn {BGP} {bgp bestpath as-path confed} {}
                    122: This command specifies that the length of confederation path sets and
                    123: sequences should should be taken into account during the BGP best path
                    124: decision process.
                    125: @end deffn
                    126: 
                    127: @node BGP route flap dampening
                    128: @subsection BGP route flap dampening
                    129: 
                    130: @deffn {BGP} {bgp dampening @var{<1-45>} @var{<1-20000>} @var{<1-20000>} @var{<1-255>}} {}
                    131: This command enables BGP route-flap dampening and specifies dampening parameters.
                    132: 
                    133: @table @asis
                    134: @item @asis{half-life}
                    135: Half-life time for the penalty
                    136: @item @asis{reuse-threshold}
                    137: Value to start reusing a route
                    138: @item @asis{suppress-threshold}
                    139: Value to start suppressing a route
                    140: @item @asis{max-suppress}
                    141: Maximum duration to suppress a stable route
                    142: @end table
                    143: 
                    144: The route-flap damping algorithm is compatible with @cite{RFC2439}. The use of this command
                    145: is not recommended nowadays, see @uref{http://www.ripe.net/ripe/docs/ripe-378,,RIPE-378}.
                    146: @end deffn
                    147: 
                    148: @node BGP network
                    149: @section BGP network
                    150: 
                    151: @menu
                    152: * BGP route::                   
                    153: * Route Aggregation::           
                    154: * Redistribute to BGP::         
                    155: @end menu
                    156: 
                    157: @node BGP route
                    158: @subsection BGP route
                    159: 
                    160: @deffn {BGP} {network @var{A.B.C.D/M}} {}
                    161: This command adds the announcement network.
                    162: @example
                    163: @group
                    164: router bgp 1
                    165:  network 10.0.0.0/8
                    166: @end group
                    167: @end example
                    168: This configuration example says that network 10.0.0.0/8 will be
                    169: announced to all neighbors.  Some vendors' routers don't advertise
                    170: routes if they aren't present in their IGP routing tables; @code{bgpd}
                    171: doesn't care about IGP routes when announcing its routes.
                    172: @end deffn
                    173: 
                    174: @deffn {BGP} {no network @var{A.B.C.D/M}} {}
                    175: @end deffn
                    176: 
                    177: @node Route Aggregation
                    178: @subsection Route Aggregation
                    179: 
                    180: @deffn {BGP} {aggregate-address @var{A.B.C.D/M}} {}
                    181: This command specifies an aggregate address.
                    182: @end deffn
                    183: 
                    184: @deffn {BGP} {aggregate-address @var{A.B.C.D/M} as-set} {}
                    185: This command specifies an aggregate address.  Resulting routes inlucde
                    186: AS set.
                    187: @end deffn
                    188: 
                    189: @deffn {BGP} {aggregate-address @var{A.B.C.D/M} summary-only} {}
                    190: This command specifies an aggregate address.  Aggreated routes will
                    191: not be announce.
                    192: @end deffn
                    193: 
                    194: @deffn {BGP} {no aggregate-address @var{A.B.C.D/M}} {}
                    195: @end deffn
                    196: 
                    197: @node Redistribute to BGP
                    198: @subsection Redistribute to BGP
                    199: 
                    200: @deffn {BGP} {redistribute kernel} {}
                    201: Redistribute kernel route to BGP process.
                    202: @end deffn
                    203: 
                    204: @deffn {BGP} {redistribute static} {}
                    205: Redistribute static route to BGP process.
                    206: @end deffn
                    207: 
                    208: @deffn {BGP} {redistribute connected} {}
                    209: Redistribute connected route to BGP process.
                    210: @end deffn
                    211: 
                    212: @deffn {BGP} {redistribute rip} {}
                    213: Redistribute RIP route to BGP process.
                    214: @end deffn
                    215: 
                    216: @deffn {BGP} {redistribute ospf} {}
                    217: Redistribute OSPF route to BGP process.
                    218: @end deffn
                    219: 
                    220: @node BGP Peer
                    221: @section BGP Peer
                    222: 
                    223: @menu
                    224: * Defining Peer::               
                    225: * BGP Peer commands::           
                    226: * Peer filtering::              
                    227: @end menu
                    228: 
                    229: @node Defining Peer
                    230: @subsection Defining Peer
                    231: 
                    232: @deffn {BGP} {neighbor @var{peer} remote-as @var{asn}} {}
                    233: Creates a new neighbor whose remote-as is @var{asn}.  @var{peer}
                    234: can be an IPv4 address or an IPv6 address.
                    235: @example
                    236: @group
                    237: router bgp 1
                    238:  neighbor 10.0.0.1 remote-as 2
                    239: @end group
                    240: @end example
                    241: In this case my router, in AS-1, is trying to peer with AS-2 at
                    242: 10.0.0.1.
                    243: 
                    244: This command must be the first command used when configuring a neighbor.
                    245: If the remote-as is not specified, @command{bgpd} will complain like this:
                    246: @example
                    247: can't find neighbor 10.0.0.1
                    248: @end example
                    249: @end deffn
                    250: 
                    251: @node BGP Peer commands
                    252: @subsection BGP Peer commands
                    253: 
                    254: In a @code{router bgp} clause there are neighbor specific configurations
                    255: required.
                    256: 
                    257: @deffn {BGP} {neighbor @var{peer} shutdown} {}
                    258: @deffnx {BGP} {no neighbor @var{peer} shutdown} {}
                    259: Shutdown the peer.  We can delete the neighbor's configuration by
                    260: @code{no neighbor @var{peer} remote-as @var{as-number}} but all
                    261: configuration of the neighbor will be deleted.  When you want to
                    262: preserve the configuration, but want to drop the BGP peer, use this
                    263: syntax.
                    264: @end deffn
                    265: 
                    266: @deffn {BGP} {neighbor @var{peer} ebgp-multihop} {}
                    267: @deffnx {BGP} {no neighbor @var{peer} ebgp-multihop} {}
                    268: @end deffn
                    269: 
                    270: @deffn {BGP} {neighbor @var{peer} description ...} {}
                    271: @deffnx {BGP} {no neighbor @var{peer} description ...} {}
                    272: Set description of the peer.
                    273: @end deffn
                    274: 
                    275: @deffn {BGP} {neighbor @var{peer} version @var{version}} {}
                    276: Set up the neighbor's BGP version.  @var{version} can be @var{4},
                    277: @var{4+} or @var{4-}.  BGP version @var{4} is the default value used for
                    278: BGP peering.  BGP version @var{4+} means that the neighbor supports
                    279: Multiprotocol Extensions for BGP-4.  BGP version @var{4-} is similar but
                    280: the neighbor speaks the old Internet-Draft revision 00's Multiprotocol
                    281: Extensions for BGP-4.  Some routing software is still using this
                    282: version.
                    283: @end deffn
                    284: 
                    285: @deffn {BGP} {neighbor @var{peer} interface @var{ifname}} {}
                    286: @deffnx {BGP} {no neighbor @var{peer} interface @var{ifname}} {}
                    287: When you connect to a BGP peer over an IPv6 link-local address, you 
                    288: have to specify the @var{ifname} of the interface used for the 
                    289: connection. To specify IPv4 session addresses, see the 
                    290: @code{neighbor @var{peer} update-source} command below.
                    291: 
                    292: This command is deprecated and may be removed in a future release. Its
                    293: use should be avoided.
                    294: @end deffn
                    295: 
                    296: @deffn {BGP} {neighbor @var{peer} next-hop-self} {}
                    297: @deffnx {BGP} {no neighbor @var{peer} next-hop-self} {}
                    298: This command specifies an announced route's nexthop as being equivalent
                    299: to the address of the bgp router.
                    300: @end deffn
                    301: 
                    302: @deffn {BGP} {neighbor @var{peer} update-source @var{<ifname|address>}} {}
                    303: @deffnx {BGP} {no neighbor @var{peer} update-source} {}
                    304: Specify the IPv4 source address to use for the @acronym{BGP} session to this
                    305: neighbour, may be specified as either an IPv4 address directly or
                    306: as an interface name (in which case the @command{zebra} daemon MUST be running
                    307: in order for @command{bgpd} to be able to retrieve interface state).
                    308: @example
                    309: @group
                    310: router bgp 64555
                    311:  neighbor foo update-source 192.168.0.1
                    312:  neighbor bar update-source lo0
                    313: @end group
                    314: @end example
                    315: @end deffn
                    316: 
                    317: @deffn {BGP} {neighbor @var{peer} default-originate} {}
                    318: @deffnx {BGP} {no neighbor @var{peer} default-originate} {}
                    319: @command{bgpd}'s default is to not announce the default route (0.0.0.0/0) even it
                    320: is in routing table.  When you want to announce default routes to the
                    321: peer, use this command.
                    322: @end deffn
                    323: 
                    324: @deffn {BGP} {neighbor @var{peer} port @var{port}} {}
                    325: @deffnx {BGP} {neighbor @var{peer} port @var{port}} {}
                    326: @end deffn
                    327: 
                    328: @deffn {BGP} {neighbor @var{peer} send-community} {}
                    329: @deffnx {BGP} {neighbor @var{peer} send-community} {}
                    330: @end deffn
                    331: 
                    332: @deffn {BGP} {neighbor @var{peer} weight @var{weight}} {}
                    333: @deffnx {BGP} {no neighbor @var{peer} weight @var{weight}} {}
                    334: This command specifies a default @var{weight} value for the neighbor's
                    335: routes.
                    336: @end deffn
                    337: 
                    338: @deffn {BGP} {neighbor @var{peer} maximum-prefix @var{number}} {}
                    339: @deffnx {BGP} {no neighbor @var{peer} maximum-prefix @var{number}} {}
                    340: @end deffn
                    341: 
1.1.1.2 ! misho     342: @deffn {BGP} {neighbor @var{peer} local-as @var{as-number}} {}
        !           343: @deffnx {BGP} {neighbor @var{peer} local-as @var{as-number} no-prepend} {}
        !           344: @deffnx {BGP} {neighbor @var{peer} local-as @var{as-number} no-prepend replace-as} {}
        !           345: @deffnx {BGP} {no neighbor @var{peer} local-as} {}
        !           346: Specify an alternate AS for this BGP process when interacting with the
        !           347: specified peer.  With no modifiers, the specified local-as is prepended to
        !           348: the received AS_PATH when receiving routing updates from the peer, and
        !           349: prepended to the outgoing AS_PATH (after the process local AS) when
        !           350: transmitting local routes to the peer.
        !           351: 
        !           352: If the no-prepend attribute is specified, then the supplied local-as is not
        !           353: prepended to the received AS_PATH.
        !           354: 
        !           355: If the replace-as attribute is specified, then only the supplied local-as is
        !           356: prepended to the AS_PATH when transmitting local-route updates to this peer.
        !           357: 
        !           358: Note that replace-as can only be specified if no-prepend is.
        !           359: 
        !           360: This command is only allowed for eBGP peers.
        !           361: @end deffn
        !           362: 
1.1       misho     363: @node Peer filtering
                    364: @subsection Peer filtering
                    365: 
                    366: @deffn {BGP} {neighbor @var{peer} distribute-list @var{name} [in|out]} {}
                    367: This command specifies a distribute-list for the peer.  @var{direct} is
                    368: @samp{in} or @samp{out}.
                    369: @end deffn
                    370: 
                    371: @deffn {BGP command} {neighbor @var{peer} prefix-list @var{name} [in|out]} {}
                    372: @end deffn
                    373: 
                    374: @deffn {BGP command} {neighbor @var{peer} filter-list @var{name} [in|out]} {}
                    375: @end deffn
                    376: 
                    377: @deffn {BGP} {neighbor @var{peer} route-map @var{name} [in|out]} {}
                    378: Apply a route-map on the neighbor.  @var{direct} must be @code{in} or
                    379: @code{out}.
                    380: @end deffn
                    381: 
                    382: @c -----------------------------------------------------------------------
                    383: @node BGP Peer Group
                    384: @section BGP Peer Group
                    385: 
                    386: @deffn {BGP} {neighbor @var{word} peer-group} {}
                    387: This command defines a new peer group.
                    388: @end deffn
                    389: 
                    390: @deffn {BGP} {neighbor @var{peer} peer-group @var{word}} {}
                    391: This command bind specific peer to peer group @var{word}.
                    392: @end deffn
                    393: 
                    394: @node BGP Address Family
                    395: @section BGP Address Family
                    396: 
                    397: @c -----------------------------------------------------------------------
                    398: @node Autonomous System
                    399: @section Autonomous System
                    400: 
                    401: The @acronym{AS,Autonomous System} number is one of the essential
                    402: element of BGP.  BGP is a distance vector routing protocol, and the
                    403: AS-Path framework provides distance vector metric and loop detection to
                    404: BGP. @cite{RFC1930, Guidelines for creation, selection, and
                    405: registration of an Autonomous System (AS)} provides some background on
                    406: the concepts of an AS.
                    407: 
                    408: The AS number is a two octet value, ranging in value from 1 to 65535.
                    409: The AS numbers 64512 through 65535 are defined as private AS numbers. 
                    410: Private AS numbers must not to be advertised in the global Internet.
                    411: 
                    412: @menu
                    413: * AS Path Regular Expression::  
                    414: * Display BGP Routes by AS Path::  
                    415: * AS Path Access List::         
                    416: * Using AS Path in Route Map::  
                    417: * Private AS Numbers::          
                    418: @end menu
                    419: 
                    420: @node AS Path Regular Expression
                    421: @subsection AS Path Regular Expression
                    422: 
                    423: AS path regular expression can be used for displaying BGP routes and
                    424: AS path access list.  AS path regular expression is based on
                    425: @code{POSIX 1003.2} regular expressions.  Following description is
                    426: just a subset of @code{POSIX} regular expression.  User can use full
                    427: @code{POSIX} regular expression.  Adding to that special character '_'
                    428: is added for AS path regular expression.
                    429: 
                    430: @table @code
                    431: @item .
                    432: Matches any single character.
                    433: @item *
                    434: Matches 0 or more occurrences of pattern.
                    435: @item +
                    436: Matches 1 or more occurrences of pattern.
                    437: @item ?
                    438: Match 0 or 1 occurrences of pattern.
                    439: @item ^
                    440: Matches the beginning of the line.
                    441: @item $
                    442: Matches the end of the line.
                    443: @item _
                    444: Character @code{_} has special meanings in AS path regular expression.
                    445: It matches to space and comma , and AS set delimiter @{ and @} and AS
                    446: confederation delimiter @code{(} and @code{)}.  And it also matches to
                    447: the beginning of the line and the end of the line.  So @code{_} can be
                    448: used for AS value boundaries match.  @code{show ip bgp regexp _7675_}
                    449: matches to all of BGP routes which as AS number include @var{7675}.
                    450: @end table
                    451: 
                    452: @node Display BGP Routes by AS Path
                    453: @subsection Display BGP Routes by AS Path
                    454: 
                    455: To show BGP routes which has specific AS path information @code{show
                    456: ip bgp} command can be used.  
                    457: 
                    458: @deffn Command {show ip bgp regexp @var{line}} {}
                    459: This commands display BGP routes that matches AS path regular
                    460: expression @var{line}.
                    461: @end deffn
                    462: 
                    463: @node AS Path Access List
                    464: @subsection AS Path Access List
                    465: 
                    466: AS path access list is user defined AS path.
                    467: 
                    468: @deffn {Command} {ip as-path access-list @var{word} @{permit|deny@} @var{line}} {}
                    469: This command defines a new AS path access list.
                    470: @end deffn
                    471: 
                    472: @deffn {Command} {no ip as-path access-list @var{word}} {}
                    473: @deffnx {Command} {no ip as-path access-list @var{word} @{permit|deny@} @var{line}} {}
                    474: @end deffn
                    475: 
                    476: @node Using AS Path in Route Map
                    477: @subsection Using AS Path in Route Map
                    478: 
                    479: @deffn {Route Map} {match as-path @var{word}} {}
                    480: @end deffn
                    481: 
                    482: @deffn {Route Map} {set as-path prepend @var{as-path}} {}
                    483: @end deffn
                    484: 
                    485: @node Private AS Numbers
                    486: @subsection Private AS Numbers
                    487: 
                    488: @c -----------------------------------------------------------------------
                    489: @node BGP Communities Attribute
                    490: @section BGP Communities Attribute
                    491: 
                    492: BGP communities attribute is widely used for implementing policy
                    493: routing.  Network operators can manipulate BGP communities attribute
                    494: based on their network policy.  BGP communities attribute is defined
                    495: in @cite{RFC1997, BGP Communities Attribute} and
                    496: @cite{RFC1998, An Application of the BGP Community Attribute
                    497: in Multi-home Routing}.  It is an optional transitive attribute,
                    498: therefore local policy can travel through different autonomous system.
                    499: 
                    500: Communities attribute is a set of communities values.  Each
                    501: communities value is 4 octet long.  The following format is used to
                    502: define communities value.
                    503: 
                    504: @table @code
                    505: @item AS:VAL
                    506: This format represents 4 octet communities value.  @code{AS} is high
                    507: order 2 octet in digit format.  @code{VAL} is low order 2 octet in
                    508: digit format.  This format is useful to define AS oriented policy
                    509: value.  For example, @code{7675:80} can be used when AS 7675 wants to
                    510: pass local policy value 80 to neighboring peer.
                    511: @item internet
                    512: @code{internet} represents well-known communities value 0.
                    513: @item no-export
                    514: @code{no-export} represents well-known communities value @code{NO_EXPORT}@*
                    515: @r{(0xFFFFFF01)}.  All routes carry this value must not be advertised
                    516: to outside a BGP confederation boundary.  If neighboring BGP peer is
                    517: part of BGP confederation, the peer is considered as inside a BGP
                    518: confederation boundary, so the route will be announced to the peer.
                    519: @item no-advertise
                    520: @code{no-advertise} represents well-known communities value
                    521: @code{NO_ADVERTISE}@*@r{(0xFFFFFF02)}.  All routes carry this value
                    522: must not be advertise to other BGP peers.
                    523: @item local-AS
                    524: @code{local-AS} represents well-known communities value
                    525: @code{NO_EXPORT_SUBCONFED} @r{(0xFFFFFF03)}.  All routes carry this
                    526: value must not be advertised to external BGP peers.  Even if the
                    527: neighboring router is part of confederation, it is considered as
                    528: external BGP peer, so the route will not be announced to the peer.
                    529: @end table
                    530: 
                    531:   When BGP communities attribute is received, duplicated communities
                    532: value in the communities attribute is ignored and each communities
                    533: values are sorted in numerical order.
                    534:   
                    535: @menu
                    536: * BGP Community Lists::         
                    537: * Numbered BGP Community Lists::  
                    538: * BGP Community in Route Map::  
                    539: * Display BGP Routes by Community::  
                    540: * Using BGP Communities Attribute::  
                    541: @end menu
                    542: 
                    543: @node BGP Community Lists
                    544: @subsection BGP Community Lists
                    545: 
                    546:   BGP community list is a user defined BGP communites attribute list.
                    547: BGP community list can be used for matching or manipulating BGP
                    548: communities attribute in updates.
                    549: 
                    550: There are two types of community list.  One is standard community
                    551: list and another is expanded community list.  Standard community list
                    552: defines communities attribute.  Expanded community list defines
                    553: communities attribute string with regular expression.  Standard
                    554: community list is compiled into binary format when user define it.
                    555: Standard community list will be directly compared to BGP communities
                    556: attribute in BGP updates.  Therefore the comparison is faster than
                    557: expanded community list.
                    558: 
                    559: @deffn Command {ip community-list standard @var{name} @{permit|deny@} @var{community}} {}
                    560: This command defines a new standard community list.  @var{community}
                    561: is communities value.  The @var{community} is compiled into community
                    562: structure.  We can define multiple community list under same name.  In
                    563: that case match will happen user defined order.  Once the
                    564: community list matches to communities attribute in BGP updates it
                    565: return permit or deny by the community list definition.  When there is
                    566: no matched entry, deny will be returned.  When @var{community} is
                    567: empty it matches to any routes.
                    568: @end deffn
                    569: 
                    570: @deffn Command {ip community-list expanded @var{name} @{permit|deny@} @var{line}} {}
                    571: This command defines a new expanded community list.  @var{line} is a
                    572: string expression of communities attribute.  @var{line} can include
                    573: regular expression to match communities attribute in BGP updates.
                    574: @end deffn
                    575: 
                    576: @deffn Command {no ip community-list @var{name}} {}
                    577: @deffnx Command {no ip community-list standard @var{name}} {}
                    578: @deffnx Command {no ip community-list expanded @var{name}} {}
                    579: These commands delete community lists specified by @var{name}.  All of
                    580: community lists shares a single name space.  So community lists can be
                    581: removed simpley specifying community lists name.
                    582: @end deffn
                    583: 
                    584: @deffn {Command} {show ip community-list} {}
                    585: @deffnx {Command} {show ip community-list @var{name}} {}
                    586: This command display current community list information.  When
                    587: @var{name} is specified the specified community list's information is
                    588: shown.
                    589: 
                    590: @example
                    591: # show ip community-list 
                    592: Named Community standard list CLIST
                    593:     permit 7675:80 7675:100 no-export
                    594:     deny internet
                    595: Named Community expanded list EXPAND
                    596:     permit :
                    597: 
                    598: # show ip community-list CLIST
                    599: Named Community standard list CLIST
                    600:     permit 7675:80 7675:100 no-export
                    601:     deny internet
                    602: @end example
                    603: @end deffn
                    604: 
                    605: @node Numbered BGP Community Lists
                    606: @subsection Numbered BGP Community Lists
                    607: 
                    608: When number is used for BGP community list name, the number has
                    609: special meanings.  Community list number in the range from 1 and 99 is
                    610: standard community list.  Community list number in the range from 100
                    611: to 199 is expanded community list.  These community lists are called
                    612: as numbered community lists.  On the other hand normal community lists
                    613: is called as named community lists.
                    614: 
                    615: @deffn Command {ip community-list <1-99> @{permit|deny@} @var{community}} {}
                    616: This command defines a new community list.  <1-99> is standard
                    617: community list number.  Community list name within this range defines
                    618: standard community list.  When @var{community} is empty it matches to
                    619: any routes.
                    620: @end deffn
                    621: 
                    622: @deffn Command {ip community-list <100-199> @{permit|deny@} @var{community}} {}
                    623: This command defines a new community list.  <100-199> is expanded
                    624: community list number.  Community list name within this range defines
                    625: expanded community list.
                    626: @end deffn
                    627: 
                    628: @deffn Command {ip community-list @var{name} @{permit|deny@} @var{community}} {}
                    629: When community list type is not specifed, the community list type is
                    630: automatically detected.  If @var{community} can be compiled into
                    631: communities attribute, the community list is defined as a standard
                    632: community list.  Otherwise it is defined as an expanded community
                    633: list.  This feature is left for backward compability.  Use of this
                    634: feature is not recommended.
                    635: @end deffn
                    636: 
                    637: @node BGP Community in Route Map
                    638: @subsection BGP Community in Route Map
                    639: 
                    640: In Route Map (@pxref{Route Map}), we can match or set BGP
                    641: communities attribute.  Using this feature network operator can
                    642: implement their network policy based on BGP communities attribute.
                    643: 
                    644: Following commands can be used in Route Map.
                    645: 
                    646: @deffn {Route Map} {match community @var{word}} {}
                    647: @deffnx {Route Map} {match community @var{word} exact-match} {}
                    648: This command perform match to BGP updates using community list
                    649: @var{word}.  When the one of BGP communities value match to the one of
                    650: communities value in community list, it is match.  When
                    651: @code{exact-match} keyword is spcified, match happen only when BGP
                    652: updates have completely same communities value specified in the
                    653: community list.
                    654: @end deffn
                    655: 
                    656: @deffn {Route Map} {set community none} {}
                    657: @deffnx {Route Map} {set community @var{community}} {}
                    658: @deffnx {Route Map} {set community @var{community} additive} {}
                    659: This command manipulate communities value in BGP updates.  When
                    660: @code{none} is specified as communities value, it removes entire
                    661: communities attribute from BGP updates.  When @var{community} is not
                    662: @code{none}, specified communities value is set to BGP updates.  If
                    663: BGP updates already has BGP communities value, the existing BGP
                    664: communities value is replaced with specified @var{community} value.
                    665: When @code{additive} keyword is specified, @var{community} is appended
                    666: to the existing communities value.
                    667: @end deffn
                    668: 
                    669: @deffn {Route Map} {set comm-list @var{word} delete} {}
                    670: This command remove communities value from BGP communities attribute.
                    671: The @var{word} is community list name.  When BGP route's communities
                    672: value matches to the community list @var{word}, the communities value
                    673: is removed.  When all of communities value is removed eventually, the
                    674: BGP update's communities attribute is completely removed.
                    675: @end deffn
                    676: 
                    677: @node Display BGP Routes by Community
                    678: @subsection Display BGP Routes by Community
                    679: 
                    680: To show BGP routes which has specific BGP communities attribute,
                    681: @code{show ip bgp} command can be used.  The @var{community} value and
                    682: community list can be used for @code{show ip bgp} command.
                    683: 
                    684: @deffn Command {show ip bgp community} {}
                    685: @deffnx Command {show ip bgp community @var{community}} {}
                    686: @deffnx Command {show ip bgp community @var{community} exact-match} {}
                    687: @code{show ip bgp community} displays BGP routes which has communities
                    688: attribute.  When @var{community} is specified, BGP routes that matches
                    689: @var{community} value is displayed.  For this command, @code{internet}
                    690: keyword can't be used for @var{community} value.  When
                    691: @code{exact-match} is specified, it display only routes that have an
                    692: exact match.
                    693: @end deffn
                    694: 
                    695: @deffn Command {show ip bgp community-list @var{word}} {}
                    696: @deffnx Command {show ip bgp community-list @var{word} exact-match} {}
                    697: This commands display BGP routes that matches community list
                    698: @var{word}.  When @code{exact-match} is specified, display only routes
                    699: that have an exact match.
                    700: @end deffn
                    701: 
                    702: @node Using BGP Communities Attribute
                    703: @subsection Using BGP Communities Attribute
                    704: 
                    705: Following configuration is the most typical usage of BGP communities
                    706: attribute.  AS 7675 provides upstream Internet connection to AS 100.
                    707: When following configuration exists in AS 7675, AS 100 networks
                    708: operator can set local preference in AS 7675 network by setting BGP
                    709: communities attribute to the updates.
                    710: 
                    711: @example
                    712: router bgp 7675
                    713:  neighbor 192.168.0.1 remote-as 100
                    714:  neighbor 192.168.0.1 route-map RMAP in
                    715: !
                    716: ip community-list 70 permit 7675:70
                    717: ip community-list 70 deny
                    718: ip community-list 80 permit 7675:80
                    719: ip community-list 80 deny
                    720: ip community-list 90 permit 7675:90
                    721: ip community-list 90 deny
                    722: !
                    723: route-map RMAP permit 10
                    724:  match community 70
                    725:  set local-preference 70
                    726: !
                    727: route-map RMAP permit 20
                    728:  match community 80
                    729:  set local-preference 80
                    730: !
                    731: route-map RMAP permit 30
                    732:  match community 90
                    733:  set local-preference 90
                    734: @end example
                    735: 
                    736: Following configuration announce 10.0.0.0/8 from AS 100 to AS 7675.
                    737: The route has communities value 7675:80 so when above configuration
                    738: exists in AS 7675, announced route's local preference will be set to
                    739: value 80.
                    740: 
                    741: @example
                    742: router bgp 100
                    743:  network 10.0.0.0/8
                    744:  neighbor 192.168.0.2 remote-as 7675
                    745:  neighbor 192.168.0.2 route-map RMAP out
                    746: !
                    747: ip prefix-list PLIST permit 10.0.0.0/8
                    748: !
                    749: route-map RMAP permit 10
                    750:  match ip address prefix-list PLIST
                    751:  set community 7675:80
                    752: @end example
                    753: 
                    754: Following configuration is an example of BGP route filtering using
                    755: communities attribute.  This configuration only permit BGP routes
                    756: which has BGP communities value 0:80 or 0:90.  Network operator can
                    757: put special internal communities value at BGP border router, then
                    758: limit the BGP routes announcement into the internal network.
                    759: 
                    760: @example
                    761: router bgp 7675
                    762:  neighbor 192.168.0.1 remote-as 100
                    763:  neighbor 192.168.0.1 route-map RMAP in
                    764: !
                    765: ip community-list 1 permit 0:80 0:90
                    766: !
                    767: route-map RMAP permit in
                    768:  match community 1
                    769: @end example
                    770: 
                    771: Following exmaple filter BGP routes which has communities value 1:1.
                    772: When there is no match community-list returns deny.  To avoid
                    773: filtering all of routes, we need to define permit any at last.
                    774: 
                    775: @example
                    776: router bgp 7675
                    777:  neighbor 192.168.0.1 remote-as 100
                    778:  neighbor 192.168.0.1 route-map RMAP in
                    779: !
                    780: ip community-list standard FILTER deny 1:1
                    781: ip community-list standard FILTER permit
                    782: !
                    783: route-map RMAP permit 10
                    784:  match community FILTER
                    785: @end example
                    786: 
                    787: Communities value keyword @code{internet} has special meanings in
                    788: standard community lists.  In below example @code{internet} act as
                    789: match any.  It matches all of BGP routes even if the route does not
                    790: have communities attribute at all.  So community list @code{INTERNET}
                    791: is same as above example's @code{FILTER}.
                    792: 
                    793: @example
                    794: ip community-list standard INTERNET deny 1:1
                    795: ip community-list standard INTERNET permit internet
                    796: @end example
                    797: 
                    798: Following configuration is an example of communities value deletion.
                    799: With this configuration communities value 100:1 and 100:2 is removed
                    800: from BGP updates.  For communities value deletion, only @code{permit}
                    801: community-list is used.  @code{deny} community-list is ignored.
                    802: 
                    803: @example
                    804: router bgp 7675
                    805:  neighbor 192.168.0.1 remote-as 100
                    806:  neighbor 192.168.0.1 route-map RMAP in
                    807: !
                    808: ip community-list standard DEL permit 100:1 100:2
                    809: !
                    810: route-map RMAP permit 10
                    811:  set comm-list DEL delete
                    812: @end example
                    813: 
                    814: @c -----------------------------------------------------------------------
                    815: @node BGP Extended Communities Attribute
                    816: @section BGP Extended Communities Attribute
                    817: 
                    818: BGP extended communities attribute is introduced with MPLS VPN/BGP
                    819: technology.  MPLS VPN/BGP expands capability of network infrastructure
                    820: to provide VPN functionality.  At the same time it requires a new
                    821: framework for policy routing.  With BGP Extended Communities Attribute
                    822: we can use Route Target or Site of Origin for implementing network
                    823: policy for MPLS VPN/BGP.
                    824: 
                    825: BGP Extended Communities Attribute is similar to BGP Communities
                    826: Attribute.  It is an optional transitive attribute.  BGP Extended
                    827: Communities Attribute can carry multiple Extended Community value.
                    828: Each Extended Community value is eight octet length.
                    829: 
                    830: BGP Extended Communities Attribute provides an extended range
                    831: compared with BGP Communities Attribute.  Adding to that there is a
                    832: type field in each value to provides community space structure.
                    833: 
                    834: There are two format to define Extended Community value.  One is AS
                    835: based format the other is IP address based format.
                    836: 
                    837: @table @code
                    838: @item AS:VAL
                    839: This is a format to define AS based Extended Community value.
                    840: @code{AS} part is 2 octets Global Administrator subfield in Extended
                    841: Community value.  @code{VAL} part is 4 octets Local Administrator
                    842: subfield.  @code{7675:100} represents AS 7675 policy value 100.
                    843: @item IP-Address:VAL
                    844: This is a format to define IP address based Extended Community value.
                    845: @code{IP-Address} part is 4 octets Global Administrator subfield.
                    846: @code{VAL} part is 2 octets Local Administrator subfield.
                    847: @code{10.0.0.1:100} represents 
                    848: @end table
                    849: 
                    850: @menu
                    851: * BGP Extended Community Lists::  
                    852: * BGP Extended Communities in Route Map::  
                    853: @end menu
                    854: 
                    855: @node BGP Extended Community Lists
                    856: @subsection BGP Extended Community Lists
                    857: 
                    858: Expanded Community Lists is a user defined BGP Expanded Community
                    859: Lists.
                    860: 
                    861: @deffn Command {ip extcommunity-list standard @var{name} @{permit|deny@} @var{extcommunity}} {}
                    862: This command defines a new standard extcommunity-list.
                    863: @var{extcommunity} is extended communities value.  The
                    864: @var{extcommunity} is compiled into extended community structure.  We
                    865: can define multiple extcommunity-list under same name.  In that case
                    866: match will happen user defined order.  Once the extcommunity-list
                    867: matches to extended communities attribute in BGP updates it return
                    868: permit or deny based upon the extcommunity-list definition.  When
                    869: there is no matched entry, deny will be returned.  When
                    870: @var{extcommunity} is empty it matches to any routes.
                    871: @end deffn
                    872: 
                    873: @deffn Command {ip extcommunity-list expanded @var{name} @{permit|deny@} @var{line}} {}
                    874: This command defines a new expanded extcommunity-list.  @var{line} is
                    875: a string expression of extended communities attribute.  @var{line} can
                    876: include regular expression to match extended communities attribute in
                    877: BGP updates.
                    878: @end deffn
                    879: 
                    880: @deffn Command {no ip extcommunity-list @var{name}} {}
                    881: @deffnx Command {no ip extcommunity-list standard @var{name}} {}
                    882: @deffnx Command {no ip extcommunity-list expanded @var{name}} {}
                    883: These commands delete extended community lists specified by
                    884: @var{name}.  All of extended community lists shares a single name
                    885: space.  So extended community lists can be removed simpley specifying
                    886: the name.
                    887: @end deffn
                    888: 
                    889: @deffn {Command} {show ip extcommunity-list} {}
                    890: @deffnx {Command} {show ip extcommunity-list @var{name}} {}
                    891: This command display current extcommunity-list information.  When
                    892: @var{name} is specified the community list's information is shown.
                    893: 
                    894: @example
                    895: # show ip extcommunity-list 
                    896: @end example
                    897: @end deffn
                    898: 
                    899: @node BGP Extended Communities in Route Map
                    900: @subsection BGP Extended Communities in Route Map
                    901: 
                    902: @deffn {Route Map} {match extcommunity @var{word}} {}
                    903: @end deffn
                    904: 
                    905: @deffn {Route Map} {set extcommunity rt @var{extcommunity}} {}
                    906: This command set Route Target value.
                    907: @end deffn
                    908: 
                    909: @deffn {Route Map} {set extcommunity soo @var{extcommunity}} {}
                    910: This command set Site of Origin value.
                    911: @end deffn
                    912: 
                    913: @c -----------------------------------------------------------------------
                    914: @node Displaying BGP routes
                    915: @section Displaying BGP Routes
                    916: 
                    917: @menu
                    918: * Show IP BGP::                 
                    919: * More Show IP BGP::            
                    920: @end menu
                    921: 
                    922: @node Show IP BGP
                    923: @subsection Show IP BGP
                    924: 
                    925: @deffn {Command} {show ip bgp} {}
                    926: @deffnx {Command} {show ip bgp @var{A.B.C.D}} {}
                    927: @deffnx {Command} {show ip bgp @var{X:X::X:X}} {}
                    928: This command displays BGP routes.  When no route is specified it
                    929: display all of IPv4 BGP routes.
                    930: @end deffn
                    931: 
                    932: @example
                    933: BGP table version is 0, local router ID is 10.1.1.1
                    934: Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
                    935: Origin codes: i - IGP, e - EGP, ? - incomplete
                    936: 
                    937:    Network          Next Hop            Metric LocPrf Weight Path
                    938: *> 1.1.1.1/32       0.0.0.0                  0         32768 i
                    939: 
                    940: Total number of prefixes 1
                    941: @end example
                    942: 
                    943: @node More Show IP BGP
                    944: @subsection More Show IP BGP
                    945: 
                    946: @deffn {Command} {show ip bgp regexp @var{line}} {}
                    947: This command display BGP routes using AS path regular expression (@pxref{Display BGP Routes by AS Path}).
                    948: @end deffn
                    949: 
                    950: @deffn Command {show ip bgp community @var{community}} {}
                    951: @deffnx Command {show ip bgp community @var{community} exact-match} {}
                    952: This command display BGP routes using @var{community} (@pxref{Display
                    953: BGP Routes by Community}).
                    954: @end deffn
                    955: 
                    956: @deffn Command {show ip bgp community-list @var{word}} {}
                    957: @deffnx Command {show ip bgp community-list @var{word} exact-match} {}
                    958: This command display BGP routes using community list (@pxref{Display
                    959: BGP Routes by Community}).
                    960: @end deffn
                    961: 
                    962: @deffn {Command} {show ip bgp summary} {}
                    963: @end deffn
                    964: 
                    965: @deffn {Command} {show ip bgp neighbor [@var{peer}]} {}
                    966: @end deffn
                    967: 
                    968: @deffn {Command} {clear ip bgp @var{peer}} {}
                    969: Clear peers which have addresses of X.X.X.X
                    970: @end deffn
                    971: 
                    972: @deffn {Command} {clear ip bgp @var{peer} soft in} {}
                    973: Clear peer using soft reconfiguration.
                    974: @end deffn
                    975: 
                    976: @deffn {Command} {show ip bgp dampened-paths} {}
                    977: Display paths suppressed due to dampening
                    978: @end deffn
                    979: 
                    980: @deffn {Command} {show ip bgp flap-statistics} {}
                    981: Display flap statistics of routes
                    982: @end deffn
                    983: 
                    984: @deffn {Command} {show debug} {}
                    985: @end deffn
                    986: 
                    987: @deffn {Command} {debug event} {}
                    988: @end deffn
                    989: 
                    990: @deffn {Command} {debug update} {}
                    991: @end deffn
                    992: 
                    993: @deffn {Command} {debug keepalive} {}
                    994: @end deffn
                    995: 
                    996: @deffn {Command} {no debug event} {}
                    997: @end deffn
                    998: 
                    999: @deffn {Command} {no debug update} {}
                   1000: @end deffn
                   1001: 
                   1002: @deffn {Command} {no debug keepalive} {}
                   1003: @end deffn
                   1004: 
                   1005: @node Capability Negotiation
                   1006: @section Capability Negotiation
                   1007: 
                   1008: When adding IPv6 routing information exchange feature to BGP.  There
                   1009: were some proposals.  @acronym{IETF,Internet Engineering Task Force}
                   1010: @acronym{IDR, Inter Domain Routing} @acronym{WG, Working group} adopted
                   1011: a proposal called Multiprotocol Extension for BGP.  The specification
                   1012: is described in @cite{RFC2283}.  The protocol does not define new protocols. 
                   1013: It defines new attributes to existing BGP.  When it is used exchanging
                   1014: IPv6 routing information it is called BGP-4+.  When it is used for
                   1015: exchanging multicast routing information it is called MBGP.
                   1016: 
                   1017: @command{bgpd} supports Multiprotocol Extension for BGP.  So if remote
                   1018: peer supports the protocol, @command{bgpd} can exchange IPv6 and/or
                   1019: multicast routing information.
                   1020: 
                   1021: Traditional BGP did not have the feature to detect remote peer's
                   1022: capabilities, e.g. whether it can handle prefix types other than IPv4
                   1023: unicast routes.  This was a big problem using Multiprotocol Extension
                   1024: for BGP to operational network.  @cite{RFC2842, Capabilities
                   1025: Advertisement with BGP-4} adopted a feature called Capability
                   1026: Negotiation. @command{bgpd} use this Capability Negotiation to detect
                   1027: the remote peer's capabilities.  If the peer is only configured as IPv4
                   1028: unicast neighbor, @command{bgpd} does not send these Capability
                   1029: Negotiation packets (at least not unless other optional BGP features
                   1030: require capability negotation).
                   1031: 
                   1032: By default, Quagga will bring up peering with minimal common capability
                   1033: for the both sides.  For example, local router has unicast and
                   1034: multicast capabilitie and remote router has unicast capability.  In
                   1035: this case, the local router will establish the connection with unicast
                   1036: only capability. When there are no common capabilities, Quagga sends
                   1037: Unsupported Capability error and then resets the connection.
                   1038: 
                   1039: If you want to completely match capabilities with remote peer.  Please
                   1040: use @command{strict-capability-match} command.
                   1041:   
                   1042: @deffn {BGP} {neighbor @var{peer} strict-capability-match} {}
                   1043: @deffnx {BGP} {no neighbor @var{peer} strict-capability-match} {}
                   1044: Strictly compares remote capabilities and local capabilities.  If capabilities
                   1045: are different, send Unsupported Capability error then reset connection.
                   1046: @end deffn
                   1047: 
                   1048: You may want to disable sending Capability Negotiation OPEN message
                   1049: optional parameter to the peer when remote peer does not implement
                   1050: Capability Negotiation.  Please use @command{dont-capability-negotiate}
                   1051: command to disable the feature.
                   1052: 
                   1053: @deffn {BGP} {neighbor @var{peer} dont-capability-negotiate} {}
                   1054: @deffnx {BGP} {no neighbor @var{peer} dont-capability-negotiate} {}
                   1055: Suppress sending Capability Negotiation as OPEN message optional
                   1056: parameter to the peer.  This command only affects the peer is configured
                   1057: other than IPv4 unicast configuration.
                   1058: @end deffn
                   1059: 
                   1060: When remote peer does not have capability negotiation feature, remote
                   1061: peer will not send any capabilities at all.  In that case, bgp
                   1062: configures the peer with configured capabilities.
                   1063: 
                   1064: You may prefer locally configured capabilities more than the negotiated
                   1065: capabilities even though remote peer sends capabilities.  If the peer
                   1066: is configured by @command{override-capability}, @command{bgpd} ignores
                   1067: received capabilities then override negotiated capabilities with
                   1068: configured values.
                   1069: 
                   1070: @deffn {BGP} {neighbor @var{peer} override-capability} {}
                   1071: @deffnx {BGP} {no neighbor @var{peer} override-capability} {}
                   1072: Override the result of Capability Negotiation with local configuration.
                   1073: Ignore remote peer's capability value.
                   1074: @end deffn
                   1075: 
                   1076: @node Route Reflector
                   1077: @section Route Reflector
                   1078: 
                   1079: @deffn {BGP} {bgp cluster-id @var{a.b.c.d}} {}
                   1080: @end deffn
                   1081: 
                   1082: @deffn {BGP} {neighbor @var{peer} route-reflector-client} {}
                   1083: @deffnx {BGP} {no neighbor @var{peer} route-reflector-client} {}
                   1084: @end deffn
                   1085: 
                   1086: @node Route Server
                   1087: @section Route Server
                   1088: 
                   1089: At an Internet Exchange point, many ISPs are connected to each other by
                   1090: external BGP peering.  Normally these external BGP connection are done by
                   1091: @samp{full mesh} method.  As with internal BGP full mesh formation,
                   1092: this method has a scaling problem.
                   1093: 
                   1094: This scaling problem is well known.  Route Server is a method to resolve
                   1095: the problem.  Each ISP's BGP router only peers to Route Server.  Route
                   1096: Server serves as BGP information exchange to other BGP routers.  By
                   1097: applying this method, numbers of BGP connections is reduced from
                   1098: O(n*(n-1)/2) to O(n).
                   1099: 
                   1100: Unlike normal BGP router, Route Server must have several routing tables
                   1101: for managing different routing policies for each BGP speaker.  We call the
                   1102: routing tables as different @code{view}s.  @command{bgpd} can work as
                   1103: normal BGP router or Route Server or both at the same time.
                   1104: 
                   1105: @menu
                   1106: * Multiple instance::           
                   1107: * BGP instance and view::       
                   1108: * Routing policy::              
                   1109: * Viewing the view::            
                   1110: @end menu
                   1111: 
                   1112: @node Multiple instance
                   1113: @subsection Multiple instance
                   1114: 
                   1115: To enable multiple view function of @code{bgpd}, you must turn on
                   1116: multiple instance feature beforehand.
                   1117: 
                   1118: @deffn {Command} {bgp multiple-instance} {}
                   1119: Enable BGP multiple instance feature.  After this feature is enabled,
                   1120: you can make multiple BGP instances or multiple BGP views.
                   1121: @end deffn
                   1122: 
                   1123: @deffn {Command} {no bgp multiple-instance} {}
                   1124: Disable BGP multiple instance feature.  You can not disable this feature
                   1125: when BGP multiple instances or views exist.
                   1126: @end deffn
                   1127: 
                   1128: When you want to make configuration more Cisco like one, 
                   1129: 
                   1130: @deffn {Command} {bgp config-type cisco} {}
                   1131: Cisco compatible BGP configuration output.
                   1132: @end deffn
                   1133: 
                   1134: When bgp config-type cisco is specified, 
                   1135: 
                   1136: ``no synchronization'' is displayed.
                   1137: ``no auto-summary'' is displayed.
                   1138: 
                   1139: ``network'' and ``aggregate-address'' argument is displayed as
                   1140: ``A.B.C.D M.M.M.M''
                   1141: 
                   1142: Quagga: network 10.0.0.0/8
                   1143: Cisco: network 10.0.0.0
                   1144: 
                   1145: Quagga: aggregate-address 192.168.0.0/24
                   1146: Cisco: aggregate-address 192.168.0.0 255.255.255.0
                   1147: 
                   1148: Community attribute handling is also different.  If there is no
                   1149: configuration is specified community attribute and extended community
                   1150: attribute are sent to neighbor.  When user manually disable the
                   1151: feature community attribute is not sent to the neighbor.  In case of
                   1152: @command{bgp config-type cisco} is specified, community attribute is not
                   1153: sent to the neighbor by default.  To send community attribute user has
                   1154: to specify @command{neighbor A.B.C.D send-community} command.
                   1155: 
                   1156: @example
                   1157: !
                   1158: router bgp 1
                   1159:  neighbor 10.0.0.1 remote-as 1
                   1160:  no neighbor 10.0.0.1 send-community
                   1161: !
                   1162: router bgp 1
                   1163:  neighbor 10.0.0.1 remote-as 1
                   1164:  neighbor 10.0.0.1 send-community
                   1165: !
                   1166: @end example
                   1167: 
                   1168: @deffn {Command} {bgp config-type zebra} {}
                   1169: Quagga style BGP configuration.  This is default.
                   1170: @end deffn
                   1171: 
                   1172: @node BGP instance and view
                   1173: @subsection BGP instance and view
                   1174: 
                   1175: BGP instance is a normal BGP process.  The result of route selection
                   1176: goes to the kernel routing table.  You can setup different AS at the
                   1177: same time when BGP multiple instance feature is enabled.
                   1178: 
                   1179: @deffn {Command} {router bgp @var{as-number}} {}
                   1180: Make a new BGP instance.  You can use arbitrary word for the @var{name}.
                   1181: @end deffn
                   1182: 
                   1183: @example
                   1184: @group
                   1185: bgp multiple-instance
                   1186: !
                   1187: router bgp 1
                   1188:  neighbor 10.0.0.1 remote-as 2
                   1189:  neighbor 10.0.0.2 remote-as 3
                   1190: !
                   1191: router bgp 2
                   1192:  neighbor 10.0.0.3 remote-as 4
                   1193:  neighbor 10.0.0.4 remote-as 5
                   1194: @end group
                   1195: @end example
                   1196: 
                   1197: BGP view is almost same as normal BGP process. The result of
                   1198: route selection does not go to the kernel routing table.  BGP view is
                   1199: only for exchanging BGP routing information.
                   1200: 
                   1201: @deffn {Command} {router bgp @var{as-number} view @var{name}} {}
                   1202: Make a new BGP view.  You can use arbitrary word for the @var{name}.  This
                   1203: view's route selection result does not go to the kernel routing table.
                   1204: @end deffn
                   1205: 
                   1206: With this command, you can setup Route Server like below.
                   1207: 
                   1208: @example
                   1209: @group
                   1210: bgp multiple-instance
                   1211: !
                   1212: router bgp 1 view 1
                   1213:  neighbor 10.0.0.1 remote-as 2
                   1214:  neighbor 10.0.0.2 remote-as 3
                   1215: !
                   1216: router bgp 2 view 2
                   1217:  neighbor 10.0.0.3 remote-as 4
                   1218:  neighbor 10.0.0.4 remote-as 5
                   1219: @end group
                   1220: @end example
                   1221: 
                   1222: @node Routing policy
                   1223: @subsection Routing policy
                   1224: 
                   1225: You can set different routing policy for a peer.  For example, you can
                   1226: set different filter for a peer.
                   1227: 
                   1228: @example
                   1229: @group
                   1230: bgp multiple-instance
                   1231: !
                   1232: router bgp 1 view 1
                   1233:  neighbor 10.0.0.1 remote-as 2
                   1234:  neighbor 10.0.0.1 distribute-list 1 in
                   1235: !
                   1236: router bgp 1 view 2
                   1237:  neighbor 10.0.0.1 remote-as 2
                   1238:  neighbor 10.0.0.1 distribute-list 2 in
                   1239: @end group
                   1240: @end example
                   1241: 
                   1242: This means BGP update from a peer 10.0.0.1 goes to both BGP view 1 and view
                   1243: 2.  When the update is inserted into view 1, distribute-list 1 is
                   1244: applied.  On the other hand, when the update is inserted into view 2,
                   1245: distribute-list 2 is applied.
                   1246: 
                   1247: @node Viewing the view
                   1248: @subsection Viewing the view
                   1249: 
                   1250: To display routing table of BGP view, you must specify view name.
                   1251: 
                   1252: @deffn {Command} {show ip bgp view @var{name}} {}
                   1253: Display routing table of BGP view @var{name}.
                   1254: @end deffn
                   1255: 
                   1256: @node How to set up a 6-Bone connection
                   1257: @section How to set up a 6-Bone connection
                   1258: 
                   1259: 
                   1260: @example
                   1261: @group
                   1262: zebra configuration 
                   1263: =================== 
                   1264: !  
                   1265: ! Actually there is no need to configure zebra 
                   1266: !
                   1267: 
                   1268: bgpd configuration
                   1269: ==================
                   1270: !
                   1271: ! This means that routes go through zebra and into the kernel.
                   1272: !
                   1273: router zebra
                   1274: !
                   1275: ! MP-BGP configuration
                   1276: !
                   1277: router bgp 7675
                   1278:  bgp router-id 10.0.0.1
                   1279:  neighbor 3ffe:1cfa:0:2:2a0:c9ff:fe9e:f56 remote-as @var{as-number}
                   1280: !
                   1281:  address-family ipv6
                   1282:  network 3ffe:506::/32
                   1283:  neighbor 3ffe:1cfa:0:2:2a0:c9ff:fe9e:f56 activate
                   1284:  neighbor 3ffe:1cfa:0:2:2a0:c9ff:fe9e:f56 route-map set-nexthop out
                   1285:  neighbor 3ffe:1cfa:0:2:2c0:4fff:fe68:a231 remote-as @var{as-number}
                   1286:  neighbor 3ffe:1cfa:0:2:2c0:4fff:fe68:a231 route-map set-nexthop out
                   1287:  exit-address-family
                   1288: !
                   1289: ipv6 access-list all permit any
                   1290: !
                   1291: ! Set output nexthop address.
                   1292: !
                   1293: route-map set-nexthop permit 10
                   1294:  match ipv6 address all
                   1295:  set ipv6 nexthop global 3ffe:1cfa:0:2:2c0:4fff:fe68:a225
                   1296:  set ipv6 nexthop local fe80::2c0:4fff:fe68:a225
                   1297: !
                   1298: ! logfile FILENAME is obsolete.  Please use log file FILENAME
                   1299: 
                   1300: log file bgpd.log
                   1301: !
                   1302: @end group
                   1303: @end example
                   1304: 
                   1305: @node Dump BGP packets and table
                   1306: @section Dump BGP packets and table
                   1307: 
                   1308: @deffn Command {dump bgp all @var{path}} {}
                   1309: @deffnx Command {dump bgp all @var{path} @var{interval}} {}
                   1310: Dump all BGP packet and events to @var{path} file.
                   1311: @end deffn 
                   1312: 
                   1313: @deffn Command {dump bgp updates @var{path}} {}
                   1314: @deffnx Command {dump bgp updates @var{path} @var{interval}} {}
                   1315: Dump BGP updates to @var{path} file.
                   1316: @end deffn
                   1317: 
                   1318: @deffn Command {dump bgp routes @var{path}} {}
                   1319: @deffnx Command {dump bgp routes @var{path}} {}
                   1320: Dump whole BGP routing table to @var{path}.  This is heavy process.
                   1321: @end deffn
                   1322: 
                   1323: @node BGP Configuration Examples
                   1324: @section BGP Configuration Examples
                   1325: 
                   1326: Example of a session to an upstream, advertising only one prefix to it.
                   1327: 
                   1328: @example
                   1329: router bgp 64512
                   1330:  bgp router-id 10.236.87.1
                   1331:  network 10.236.87.0/24
                   1332:  neighbor upstream peer-group
                   1333:  neighbor upstream remote-as 64515
                   1334:  neighbor upstream capability dynamic
                   1335:  neighbor upstream prefix-list pl-allowed-adv out
                   1336:  neighbor 10.1.1.1 peer-group upstream
                   1337:  neighbor 10.1.1.1 description ACME ISP
                   1338: !
                   1339: ip prefix-list pl-allowed-adv seq 5 permit 82.195.133.0/25
                   1340: ip prefix-list pl-allowed-adv seq 10 deny any
                   1341: 
                   1342: @end example
                   1343: 
                   1344: A more complex example. With upstream, peer and customer sessions.
                   1345: Advertising global prefixes and NO_EXPORT prefixes and providing
                   1346: actions for customer routes based on community values. Extensive use of
                   1347: route-maps and the 'call' feature to support selective advertising of
                   1348: prefixes. This example is intended as guidance only, it has NOT been
                   1349: tested and almost certainly containts silly mistakes, if not serious
                   1350: flaws.
                   1351: 
                   1352: @example
                   1353: router bgp 64512
                   1354:  bgp router-id 10.236.87.1
                   1355:  network 10.123.456.0/24
                   1356:  network 10.123.456.128/25 route-map rm-no-export
                   1357:  neighbor upstream capability dynamic
                   1358:  neighbor upstream route-map rm-upstream-out out
                   1359:  neighbor cust capability dynamic
                   1360:  neighbor cust route-map rm-cust-in in
                   1361:  neighbor cust route-map rm-cust-out out
                   1362:  neighbor cust send-community both
                   1363:  neighbor peer capability dynamic
                   1364:  neighbor peer route-map rm-peer-in in
                   1365:  neighbor peer route-map rm-peer-out out
                   1366:  neighbor peer send-community both
                   1367:  neighbor 10.1.1.1 remote-as 64515
                   1368:  neighbor 10.1.1.1 peer-group upstream
                   1369:  neighbor 10.2.1.1 remote-as 64516
                   1370:  neighbor 10.2.1.1 peer-group upstream
                   1371:  neighbor 10.3.1.1 remote-as 64517
                   1372:  neighbor 10.3.1.1 peer-group cust-default
                   1373:  neighbor 10.3.1.1 description customer1
                   1374:  neighbor 10.3.1.1 prefix-list pl-cust1-network in
                   1375:  neighbor 10.4.1.1 remote-as 64518
                   1376:  neighbor 10.4.1.1 peer-group cust
                   1377:  neighbor 10.4.1.1 prefix-list pl-cust2-network in
                   1378:  neighbor 10.4.1.1 description customer2
                   1379:  neighbor 10.5.1.1 remote-as 64519
                   1380:  neighbor 10.5.1.1 peer-group peer
                   1381:  neighbor 10.5.1.1 prefix-list pl-peer1-network in
                   1382:  neighbor 10.5.1.1 description peer AS 1
                   1383:  neighbor 10.6.1.1 remote-as 64520
                   1384:  neighbor 10.6.1.1 peer-group peer
                   1385:  neighbor 10.6.1.1 prefix-list pl-peer2-network in
                   1386:  neighbor 10.6.1.1 description peer AS 2
                   1387: !
                   1388: ip prefix-list pl-default permit 0.0.0.0/0
                   1389: !
                   1390: ip prefix-list pl-upstream-peers permit 10.1.1.1/32
                   1391: ip prefix-list pl-upstream-peers permit 10.2.1.1/32
                   1392: !
                   1393: ip prefix-list pl-cust1-network permit 10.3.1.0/24
                   1394: ip prefix-list pl-cust1-network permit 10.3.2.0/24
                   1395: !
                   1396: ip prefix-list pl-cust2-network permit 10.4.1.0/24
                   1397: !
                   1398: ip prefix-list pl-peer1-network permit 10.5.1.0/24
                   1399: ip prefix-list pl-peer1-network permit 10.5.2.0/24
                   1400: ip prefix-list pl-peer1-network permit 192.168.0.0/24
                   1401: !
                   1402: ip prefix-list pl-peer2-network permit 10.6.1.0/24
                   1403: ip prefix-list pl-peer2-network permit 10.6.2.0/24
                   1404: ip prefix-list pl-peer2-network permit 192.168.1.0/24
                   1405: ip prefix-list pl-peer2-network permit 192.168.2.0/24
                   1406: ip prefix-list pl-peer2-network permit 172.16.1/24
                   1407: !
                   1408: ip as-path access-list asp-own-as permit ^$
                   1409: ip as-path access-list asp-own-as permit _64512_
                   1410: !
                   1411: ! #################################################################
                   1412: ! Match communities we provide actions for, on routes receives from
                   1413: ! customers. Communities values of <our-ASN>:X, with X, have actions:
                   1414: !
                   1415: ! 100 - blackhole the prefix
                   1416: ! 200 - set no_export
                   1417: ! 300 - advertise only to other customers
                   1418: ! 400 - advertise only to upstreams
                   1419: ! 500 - set no_export when advertising to upstreams
                   1420: ! 2X00 - set local_preference to X00
                   1421: !
                   1422: ! blackhole the prefix of the route
                   1423: ip community-list standard cm-blackhole permit 64512:100
                   1424: !
                   1425: ! set no-export community before advertising
                   1426: ip community-list standard cm-set-no-export permit 64512:200
                   1427: !
                   1428: ! advertise only to other customers
                   1429: ip community-list standard cm-cust-only permit 64512:300
                   1430: !
                   1431: ! advertise only to upstreams
                   1432: ip community-list standard cm-upstream-only permit 64512:400
                   1433: !
                   1434: ! advertise to upstreams with no-export
                   1435: ip community-list standard cm-upstream-noexport permit 64512:500
                   1436: !
                   1437: ! set local-pref to least significant 3 digits of the community
                   1438: ip community-list standard cm-prefmod-100 permit 64512:2100
                   1439: ip community-list standard cm-prefmod-200 permit 64512:2200
                   1440: ip community-list standard cm-prefmod-300 permit 64512:2300
                   1441: ip community-list standard cm-prefmod-400 permit 64512:2400
                   1442: ip community-list expanded cme-prefmod-range permit 64512:2...
                   1443: !
                   1444: ! Informational communities
                   1445: !
                   1446: ! 3000 - learned from upstream
                   1447: ! 3100 - learned from customer
                   1448: ! 3200 - learned from peer
                   1449: !
                   1450: ip community-list standard cm-learnt-upstream permit 64512:3000
                   1451: ip community-list standard cm-learnt-cust permit 64512:3100
                   1452: ip community-list standard cm-learnt-peer permit 64512:3200
                   1453: !
                   1454: ! ###################################################################
                   1455: ! Utility route-maps
                   1456: !
                   1457: ! These utility route-maps generally should not used to permit/deny
                   1458: ! routes, i.e. they do not have meaning as filters, and hence probably
                   1459: ! should be used with 'on-match next'. These all finish with an empty
                   1460: ! permit entry so as not interfere with processing in the caller.
                   1461: !
                   1462: route-map rm-no-export permit 10
                   1463:  set community additive no-export
                   1464: route-map rm-no-export permit 20
                   1465: !
                   1466: route-map rm-blackhole permit 10
                   1467:  description blackhole, up-pref and ensure it cant escape this AS
                   1468:  set ip next-hop 127.0.0.1
                   1469:  set local-preference 10
                   1470:  set community additive no-export
                   1471: route-map rm-blackhole permit 20
                   1472: !
                   1473: ! Set local-pref as requested
                   1474: route-map rm-prefmod permit 10
                   1475:  match community cm-prefmod-100
                   1476:  set local-preference 100
                   1477: route-map rm-prefmod permit 20
                   1478:  match community cm-prefmod-200
                   1479:  set local-preference 200
                   1480: route-map rm-prefmod permit 30
                   1481:  match community cm-prefmod-300
                   1482:  set local-preference 300
                   1483: route-map rm-prefmod permit 40
                   1484:  match community cm-prefmod-400
                   1485:  set local-preference 400
                   1486: route-map rm-prefmod permit 50
                   1487: !
                   1488: ! Community actions to take on receipt of route.
                   1489: route-map rm-community-in permit 10
                   1490:  description check for blackholing, no point continuing if it matches.
                   1491:  match community cm-blackhole
                   1492:  call rm-blackhole
                   1493: route-map rm-community-in permit 20
                   1494:  match community cm-set-no-export
                   1495:  call rm-no-export
                   1496:  on-match next
                   1497: route-map rm-community-in permit 30
                   1498:  match community cme-prefmod-range
                   1499:  call rm-prefmod
                   1500: route-map rm-community-in permit 40
                   1501: !
                   1502: ! #####################################################################
                   1503: ! Community actions to take when advertising a route.
                   1504: ! These are filtering route-maps, 
                   1505: !
                   1506: ! Deny customer routes to upstream with cust-only set.
                   1507: route-map rm-community-filt-to-upstream deny 10
                   1508:  match community cm-learnt-cust
                   1509:  match community cm-cust-only
                   1510: route-map rm-community-filt-to-upstream permit 20
                   1511: !
                   1512: ! Deny customer routes to other customers with upstream-only set.
                   1513: route-map rm-community-filt-to-cust deny 10
                   1514:  match community cm-learnt-cust
                   1515:  match community cm-upstream-only
                   1516: route-map rm-community-filt-to-cust permit 20
                   1517: !
                   1518: ! ###################################################################
                   1519: ! The top-level route-maps applied to sessions. Further entries could
                   1520: ! be added obviously..
                   1521: !
                   1522: ! Customers
                   1523: route-map rm-cust-in permit 10
                   1524:  call rm-community-in
                   1525:  on-match next
                   1526: route-map rm-cust-in permit 20
                   1527:  set community additive 64512:3100
                   1528: route-map rm-cust-in permit 30
                   1529: !
                   1530: route-map rm-cust-out permit 10
                   1531:  call rm-community-filt-to-cust
                   1532:  on-match next
                   1533: route-map rm-cust-out permit 20
                   1534: !
                   1535: ! Upstream transit ASes
                   1536: route-map rm-upstream-out permit 10
                   1537:  description filter customer prefixes which are marked cust-only
                   1538:  call rm-community-filt-to-upstream
                   1539:  on-match next
                   1540: route-map rm-upstream-out permit 20
                   1541:  description only customer routes are provided to upstreams/peers
                   1542:  match community cm-learnt-cust
                   1543: !
                   1544: ! Peer ASes
                   1545: ! outbound policy is same as for upstream
                   1546: route-map rm-peer-out permit 10
                   1547:  call rm-upstream-out
                   1548: !
                   1549: route-map rm-peer-in permit 10
                   1550:  set community additive 64512:3200
                   1551: @end example

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