File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / doc / bgpd.texi
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Sun Jul 21 23:54:38 2013 UTC (10 years, 11 months ago) by misho
Branches: quagga, MAIN
CVS tags: v0_99_22p0, v0_99_22, HEAD
0.99.22

    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: 
  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: 
  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>