This is ../../../doc/quagga.info, produced by makeinfo version 4.8 from
../../../doc/quagga.texi.

   Copyright (C) 1999-2005 Kunihiro Ishiguro, et al.

     Permission is granted to make and distribute verbatim copies of
     this manual provided the copyright notice and this permission
     notice are preserved on all copies.

     Permission is granted to copy and distribute modified versions of
     this manual under the conditions for verbatim copying, provided
     that the entire resulting derived work is distributed under the
     terms of a permission notice identical to this one.

     Permission is granted to copy and distribute translations of this
     manual into another language, under the above conditions for
     modified versions, except that this permission notice may be
     stated in a translation approved by Kunihiro Ishiguro.

INFO-DIR-SECTION Routing Software:
START-INFO-DIR-ENTRY
* Quagga: (quagga).		The Quagga Software Routing Suite
END-INFO-DIR-ENTRY

   This file documents the Quagga Software Routing Suite which manages
common TCP/IP routing protocols.

   This is Edition 0.99.1, last updated 10 September 2005 of `The
Quagga Manual', for Quagga Version 0.99.1.

   Copyright (C) 1999-2005 Kunihiro Ishiguro, et al.

     Permission is granted to make and distribute verbatim copies of
     this manual provided the copyright notice and this permission
     notice are preserved on all copies.

     Permission is granted to copy and distribute modified versions of
     this manual under the conditions for verbatim copying, provided
     that the entire resulting derived work is distributed under the
     terms of a permission notice identical to this one.

     Permission is granted to copy and distribute translations of this
     manual into another language, under the above conditions for
     modified versions, except that this permission notice may be
     stated in a translation approved by Kunihiro Ishiguro.


File: quagga.info,  Node: Top,  Next: Overview,  Up: (dir)

Quagga
******

Quagga is an advanced routing software package that provides a suite of
TCP/IP based routing protocols.  This is the Manual for Quagga 0.99.1.
Quagga is a fork of GNU Zebra.

   Copyright (C) 1999-2005 Kunihiro Ishiguro, et al.

     Permission is granted to make and distribute verbatim copies of
     this manual provided the copyright notice and this permission
     notice are preserved on all copies.

     Permission is granted to copy and distribute modified versions of
     this manual under the conditions for verbatim copying, provided
     that the entire resulting derived work is distributed under the
     terms of a permission notice identical to this one.

     Permission is granted to copy and distribute translations of this
     manual into another language, under the above conditions for
     modified versions, except that this permission notice may be
     stated in a translation approved by Kunihiro Ishiguro.

* Menu:

* Overview::
* Installation::
* Basic commands::
* Zebra::
* RIP::
* RIPng::
* OSPFv2::
* OSPFv3::
* BGP::
* Configuring Quagga as a Route Server::
* VTY shell::
* Filtering::
* Route Map::
* IPv6 Support::
* Kernel Interface::
* SNMP Support::
* Zebra Protocol::
* Packet Binary Dump Format::
* Command Index::
* VTY Key Index::
   

File: quagga.info,  Node: Overview,  Next: Installation,  Prev: Top,  Up: Top

1 Overview
**********

Quagga is a routing software package that provides TCP/IP based routing
services with routing protocols support such as RIPv1, RIPv2, RIPng,
OSPFv2, OSPFv3, BGP-4, and BGP-4+ (*note Supported RFC::). Quagga also
supports special BGP Route Reflector and Route Server behavior.  In
addition to traditional IPv4 routing protocols, Quagga also supports
IPv6 routing protocols.  With SNMP daemon which supports SMUX protocol,
Quagga provides routing protocol MIBs (*note SNMP Support::).

   Quagga uses an advanced software architecture to provide you with a
high quality, multi server routing engine. Quagga has an interactive
user interface for each routing protocol and supports common client
commands.  Due to this design, you can add new protocol daemons to
Quagga easily.  You can use Quagga library as your program's client
user interface.

   Quagga is distributed under the GNU General Public License.

* Menu:

* About Quagga::                Basic information about Quagga
* System Architecture::         The Quagga system architecture
* Supported Platforms::         Supported platforms and future plans
* Supported RFC::               Supported RFCs
* How to get Quagga::
* Mailing List::                Mailing list information
* Bug Reports::                 Mail address for bug data


File: quagga.info,  Node: About Quagga,  Next: System Architecture,  Up: Overview

1.1 About Quagga
================

Today, TCP/IP networks are covering all of the world.  The Internet has
been deployed in many countries, companies, and to the home.  When you
connect to the Internet your packet will pass many routers which have
TCP/IP routing functionality.

   A system with Quagga installed acts as a dedicated router.  With
Quagga, your machine exchanges routing information with other routers
using routing protocols.  Quagga uses this information to update the
kernel routing table so that the right data goes to the right place.
You can dynamically change the configuration and you may view routing
table information from the Quagga terminal interface.

   Adding to routing protocol support, Quagga can setup interface's
flags, interface's address, static routes and so on.  If you have a
small network, or a stub network, or xDSL connection, configuring the
Quagga routing software is very easy.  The only thing you have to do is
to set up the interfaces and put a few commands about static routes
and/or default routes.  If the network is rather large, or if the
network structure changes frequently, you will want to take advantage
of Quagga's dynamic routing protocol support for protocols such as RIP,
OSPF or BGP.

   Traditionally, UNIX based router configuration is done by `ifconfig'
and `route' commands.  Status of routing table is displayed by
`netstat' utility.  Almost of these commands work only if the user has
root privileges.  Quagga has a different system administration method.
There are two user modes in Quagga.  One is normal mode, the other is
enable mode.  Normal mode user can only view system status, enable mode
user can change system configuration.  This UNIX account independent
feature will be great help to the router administrator.

   Currently, Quagga supports common unicast routing protocols.
Multicast routing protocols such as BGMP, PIM-SM, PIM-DM may be
supported in Quagga 2.0.  MPLS support is going on.  In the future,
TCP/IP filtering control, QoS control, diffserv configuration will be
added to Quagga. Quagga project's final goal is making a productive,
quality, free TCP/IP routing software.


File: quagga.info,  Node: System Architecture,  Next: Supported Platforms,  Prev: About Quagga,  Up: Overview

1.2 System Architecture
=======================

Traditional routing software is made as a one process program which
provides all of the routing protocol functionalities.  Quagga takes a
different approach.  It is made from a collection of several daemons
that work together to build the routing table.  There may be several
protocol-specific routing daemons and zebra the kernel routing manager.

   The `ripd' daemon handles the RIP protocol, while `ospfd' is a
daemon which supports OSPF version 2.  `bgpd' supports the BGP-4
protocol.  For changing the kernel routing table and for redistribution
of routes between different routing protocols, there is a kernel
routing table manager `zebra' daemon.  It is easy to add a new routing
protocol daemons to the entire routing system without affecting any
other software.  You need to run only the protocol daemon associated
with routing protocols in use.  Thus, user may run a specific daemon
and send routing reports to a central routing console.

   There is no need for these daemons to be running on the same
machine. You can even run several same protocol daemons on the same
machine.  This architecture creates new possibilities for the routing
system.

     +----+  +----+  +-----+  +-----+
     |bgpd|  |ripd|  |ospfd|  |zebra|
     +----+  +----+  +-----+  +-----+
                                 |
     +---------------------------|--+
     |                           v  |
     |  UNIX Kernel  routing table  |
     |                              |
     +------------------------------+

         Quagga System Architecture

   Multi-process architecture brings extensibility, modularity and
maintainability.  At the same time it also brings many configuration
files and terminal interfaces.  Each daemon has it's own configuration
file and terminal interface.  When you configure a static route, it
must be done in `zebra' configuration file.  When you configure BGP
network it must be done in `bgpd' configuration file.  This can be a
very annoying thing.  To resolve the problem, Quagga provides
integrated user interface shell called `vtysh'.  `vtysh' connects to
each daemon with UNIX domain socket and then works as a proxy for user
input.

   Quagga was planned to use multi-threaded mechanism when it runs with
a kernel that supports multi-threads.  But at the moment, the thread
library which comes with GNU/Linux or FreeBSD has some problems with
running reliable services such as routing software, so we don't use
threads at all.  Instead we use the `select(2)' system call for
multiplexing the events.


File: quagga.info,  Node: Supported Platforms,  Next: Supported RFC,  Prev: System Architecture,  Up: Overview

1.3 Supported Platforms
=======================

Currently Quagga supports GNU/Linux, BSD and Solaris. Porting Quagga to
other platforms is not too difficult as platform dependent code should
most be limited to the `zebra' daemon.  Protocol daemons are mostly
platform independent. Please let us know when you find out Quagga runs
on a platform which is not listed below.

   The list of officially supported platforms are listed below. Note
that Quagga may run correctly on other platforms, and may run with
partial functionality on further platforms.


   * GNU/Linux 2.2.x and higher

   * FreeBSD 4.x and higher

   * NetBSD 1.6 and higher

   * OpenBSD 2.5 and higher

   * Solaris 2.6 and higher (IPv6 support requires a patch at moment)


   Some IPv6 stacks are in development.  Quagga supports following IPv6
stacks.  For BSD, we recommend KAME IPv6 stack.  Solaris IPv6 stack is
not yet supported.

   * Linux IPv6 stack for GNU/Linux 2.2.x and higher.

   * KAME IPv6 stack for BSD.

   * INRIA IPv6 stack for BSD.


File: quagga.info,  Node: Supported RFC,  Next: How to get Quagga,  Prev: Supported Platforms,  Up: Overview

1.4 Supported RFC
=================

Below is the list of currently supported RFC's.

RFC1058
     `Routing Information Protocol. C.L. Hedrick. Jun-01-1988.'

RF2082
     `RIP-2 MD5 Authentication. F. Baker, R. Atkinson. January 1997.'

RFC2453
     `RIP Version 2. G. Malkin. November 1998.'

RFC2080
     `RIPng for IPv6. G. Malkin, R. Minnear. January 1997.'

RFC2328
     `OSPF Version 2. J. Moy. April 1998.'

RFC2370
     `The OSPF Opaque LSA Option R. Coltun. July 1998.'

RFC3101
     `The OSPF Not-So-Stubby Area (NSSA) Option P. Murphy. January
     2003.'

RFC2740
     `OSPF for IPv6. R. Coltun, D. Ferguson, J. Moy. December 1999.'

RFC1771
     `A Border Gateway Protocol 4 (BGP-4). Y. Rekhter & T. Li. March
     1995.'

RFC1965
     `Autonomous System Confederations for BGP. P. Traina. June 1996.'

RFC1997
     `BGP Communities Attribute. R. Chandra, P. Traina & T. Li. August
     1996.'

RFC2545
     `Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain
     Routing. P. Marques, F. Dupont. March 1999.'

RFC2796
     `BGP Route Reflection An alternative to full mesh IBGP. T. Bates &
     R. Chandrasekeran. June 1996.'

RFC2858
     `Multiprotocol Extensions for BGP-4. T. Bates, Y. Rekhter, R.
     Chandra, D. Katz. June 2000.'

RFC2842
     `Capabilities Advertisement with BGP-4. R. Chandra, J. Scudder.
     May 2000.'

RFC3137
     `OSPF Stub Router Advertisement, A. Retana, L. Nguyen, R. White,
     A. Zinin, D. McPherson. June 2001'

   When SNMP support is enabled, below RFC is also supported.

RFC1227
     `SNMP MUX protocol and MIB. M.T. Rose. May-01-1991.'

RFC1657
     `Definitions of Managed Objects for the Fourth Version of the
     Border Gateway Protocol (BGP-4) using SMIv2. S. Willis, J. Burruss,
     J. Chu, Editor. July 1994.'

RFC1724
     `RIP Version 2 MIB Extension. G. Malkin & F. Baker. November 1994.'

RFC1850
     `OSPF Version 2 Management Information Base. F. Baker, R. Coltun.
     November 1995.'



File: quagga.info,  Node: How to get Quagga,  Next: Mailing List,  Prev: Supported RFC,  Up: Overview

1.5 How to get Quagga
=====================

Quagga is still beta software and there is no officially released
version.

   Zebra's official web page is located at:

   `http://www.gnu.org/software/zebra/zebra.html'.

   The original Zebra web site is located at:

   `http://www.zebra.org/'.

   As of this writing, development by zebra.org on Zebra has slowed
down. Some work is being done by third-parties to try maintain
bug-fixes and enhancements to the current Zebra code-base, which has
resulted in a fork of Zebra called Quagga, see:

   `http://www.quagga.net/'

   for further information, as well as links to additional zebra
resources.


File: quagga.info,  Node: Mailing List,  Next: Bug Reports,  Prev: How to get Quagga,  Up: Overview

1.6 Mailing List
================

There is a mailing list for discussions about Quagga.  If you have any
comments or suggestions to Quagga, please subscribe to:

   `http://lists.quagga.net/mailman/listinfo/quagga-users'.

   The Quagga site has further information on the available mailing
lists, see:

   	`http://www.quagga.net/lists.php'


File: quagga.info,  Node: Bug Reports,  Prev: Mailing List,  Up: Overview

1.7 Bug Reports
===============

If you think you have found a bug, please send a bug report to:

   `http://bugzilla.quagga.net'

   When you send a bug report, please be careful about the points below.

   * Please note what kind of OS you are using.  If you use the IPv6
     stack please note that as well.

   * Please show us the results of `netstat -rn' and `ifconfig -a'.
     Information from zebra's VTY command `show ip route' will also be
     helpful.

   * Please send your configuration file with the report.  If you
     specify arguments to the configure script please note that too.

   Bug reports are very important for us to improve the quality of
Quagga.  Quagga is still in the development stage, but please don't
hesitate to send a bug report to `http://bugzilla.quagga.net'.


File: quagga.info,  Node: Installation,  Next: Basic commands,  Prev: Overview,  Up: Top

2 Installation
**************

There are three steps for installing the software: configuration,
compilation, and installation.

* Menu:

* Configure the Software::
* Build the Software::
* Install the Software::

   The easiest way to get Quagga running is to issue the following
commands:

     % configure
     % make
     % make install


File: quagga.info,  Node: Configure the Software,  Next: Build the Software,  Up: Installation

2.1 Configure the Software
==========================

* Menu:

* The Configure script and its options::
* Least-Privilege support::
* Linux notes::


File: quagga.info,  Node: The Configure script and its options,  Next: Least-Privilege support,  Up: Configure the Software

2.1.1 The Configure script and its options
------------------------------------------

Quagga has an excellent configure script which automatically detects
most host configurations.  There are several additional configure
options you can use to turn off IPv6 support, to disable the
compilation of specific daemons, and to enable SNMP support.

`--enable-guile'
     Turn on compilation of the zebra-guile interpreter.  You will need
     the guile library to make this.  zebra-guile implementation is not
     yet finished.  So this option is only useful for zebra-guile
     developers.

`--disable-ipv6'
     Turn off IPv6 related features and daemons.  Quagga configure
     script automatically detects IPv6 stack.  But sometimes you might
     want to disable IPv6 support of Quagga.

`--disable-zebra'
     Do not build zebra daemon.

`--disable-ripd'
     Do not build ripd.

`--disable-ripngd'
     Do not build ripngd.

`--disable-ospfd'
     Do not build ospfd.

`--disable-ospf6d'
     Do not build ospf6d.

`--disable-bgpd'
     Do not build bgpd.

`--disable-bgp-announce'
     Make `bgpd' which does not make bgp announcements at all.  This
     feature is good for using `bgpd' as a BGP announcement listener.

`--enable-netlink'
     Force to enable GNU/Linux netlink interface.  Quagga configure
     script detects netlink interface by checking a header file.  When
     the header file does not match to the current running kernel,
     configure script will not turn on netlink support.

`--enable-snmp'
     Enable SNMP support.  By default, SNMP support is disabled.

`--enable-opaque-lsa'
     Enable support for Opaque LSAs (RFC2370) in ospfd.

`--disable-ospfapi'
     Disable support for OSPF-API, an API to interface directly with
     ospfd.  OSPF-API is enabled if -enable-opaque-lsa is set.

`--disable-ospfclient'
     Disable building of the example OSPF-API client.

`--enable-ospf-te'
     Enable support for OSPF Traffic Engineering Extension
     (internet-draft) this requires support for Opaque LSAs.

`--enable-multipath=ARG'
     Enable support for Equal Cost Multipath. ARG is the maximum number
     of ECMP paths to allow, set to 0 to allow unlimited number of
     paths.

`--enable-rtadv'
     Enable support IPV6 router advertisement in zebra.

   You may specify any combination of the above options to the configure
script.  By default, the executables are placed in `/usr/local/sbin'
and the configuration files in `/usr/local/etc'. The `/usr/local/'
installation prefix and other directories may be changed using the
following options to the configuration script.

`--prefix=PREFIX'
     Install architecture-independent files in PREFIX [/usr/local].

`--sysconfdir=DIR'
     Look for configuration files in DIR [PREFIX/etc]. Note that sample
     configuration files will be installed here.

`--localstatedir=DIR'
     Configure zebra to use DIR for local state files, such as pid
     files and unix sockets.

     % ./configure --disable-ipv6

   This command will configure zebra and the routing daemons.


File: quagga.info,  Node: Least-Privilege support,  Next: Linux notes,  Prev: The Configure script and its options,  Up: Configure the Software

2.1.2 Least-Privilege support
-----------------------------

Additionally, you may configure zebra to drop its elevated privileges
shortly after startup and switch to another user. The configure script
will automatically try to configure this support. There are three
configure options to control the behaviour of Quagga daemons.

`--enable-user=USER'
     Switch to user ARG shortly after startup, and run as user ARG in
     normal operation.

`--enable-group=GROUP'
     Switch real and effective group to GROUP shortly after startup.

`--enable-vty-group=GROUP'
     Create Unix Vty sockets (for use with vtysh) with group owndership
     set to GROUP. This allows one to create a seperate group which is
     restricted to accessing only the Vty sockets, hence allowing one to
     delegate this group to individual users, or to run vtysh setgid to
     this group.

   The default user and group which will be configured is 'quagga' if
no user or group is specified. Note that this user or group requires
write access to the local state directory (see -localstatedir) and
requires at least read access, and write access if you wish to allow
daemons to write out their configuration, to the configuration
directory (see -sysconfdir).

   On systems which have the 'libcap' capabilities manipulation library
(currently only linux), the quagga system will retain only minimal
capabilities required, further it will only raise these capabilities for
brief periods. On systems without libcap, quagga will run as the user
specified and only raise its uid back to uid 0 for brief periods.


File: quagga.info,  Node: Linux notes,  Prev: Least-Privilege support,  Up: Configure the Software

2.1.3 Linux Notes
-----------------

There are several options available only to GNU/Linux systems: (1).  If
you use GNU/Linux, make sure that the current kernel configuration is
what you want.  Quagga will run with any kernel configuration but some
recommendations do exist.

CONFIG_NETLINK
     Kernel/User netlink socket. This is a brand new feature which
     enables an advanced interface between the Linux kernel and zebra
     (*note Kernel Interface::).

CONFIG_RTNETLINK
     Routing messages.  This makes it possible to receive netlink
     routing messages.  If you specify this option, `zebra' can detect
     routing information updates directly from the kernel (*note Kernel
     Interface::).

CONFIG_IP_MULTICAST
     IP: multicasting.  This option should be specified when you use
     `ripd' (*note RIP::) or `ospfd' (*note OSPFv2::) because these
     protocols use multicast.


   IPv6 support has been added in GNU/Linux kernel version 2.2.  If you
try to use the Quagga IPv6 feature on a GNU/Linux kernel, please make
sure the following libraries have been installed.  Please note that
these libraries will not be needed when you uses GNU C library 2.1 or
upper.

`inet6-apps'
     The `inet6-apps' package includes basic IPv6 related libraries such
     as `inet_ntop' and `inet_pton'.  Some basic IPv6 programs such as
     `ping', `ftp', and `inetd' are also included. The `inet-apps' can
     be found at `ftp://ftp.inner.net/pub/ipv6/'.

`net-tools'
     The `net-tools' package provides an IPv6 enabled interface and
     routing utility.  It contains `ifconfig', `route', `netstat', and
     other tools.  `net-tools' may be found at
     `http://www.tazenda.demon.co.uk/phil/net-tools/'.


   ---------- Footnotes ----------

   (1) GNU/Linux has very flexible kernel configuration features


File: quagga.info,  Node: Build the Software,  Next: Install the Software,  Prev: Configure the Software,  Up: Installation

2.2 Build the Software
======================

After configuring the software, you will need to compile it for your
system. Simply issue the command `make' in the root of the source
directory and the software will be compiled. If you have *any* problems
at this stage, be certain to send a bug report *Note Bug Reports::.

     % ./configure
     .
     .
     .
     ./configure output
     .
     .
     .
     % make


File: quagga.info,  Node: Install the Software,  Prev: Build the Software,  Up: Installation

2.3 Install the Software
========================

Installing the software to your system consists of copying the compiled
programs and supporting files to a standard location. After the
installation process has completed, these files have been copied from
your work directory to `/usr/local/bin', and `/usr/local/etc'.

   To install the Quagga suite, issue the following command at your
shell prompt: `make install'.

     %
     % make install
     %

   Quagga daemons have their own terminal interface or VTY.  After
installation, you have to setup each beast's port number to connect to
them.  Please add the following entries to `/etc/services'.

     zebrasrv      2600/tcp		  # zebra service
     zebra         2601/tcp		  # zebra vty
     ripd          2602/tcp		  # RIPd vty
     ripngd        2603/tcp		  # RIPngd vty
     ospfd         2604/tcp		  # OSPFd vty
     bgpd          2605/tcp		  # BGPd vty
     ospf6d        2606/tcp		  # OSPF6d vty
     ospfapi       2607/tcp		  # ospfapi
     isisd         2608/tcp		  # ISISd vty

   If you use a FreeBSD newer than 2.2.8, the above entries are already
added to `/etc/services' so there is no need to add it. If you specify
a port number when starting the daemon, these entries may not be needed.

   You may need to make changes to the config files in
`/etc/quagga/*.conf'. *Note Config Commands::.


File: quagga.info,  Node: Basic commands,  Next: Zebra,  Prev: Installation,  Up: Top

3 Basic commands
****************

There are five routing daemons in use, and there is one manager daemon.
These daemons may be located on separate machines from the manager
daemon.  Each of these daemons will listen on a particular port for
incoming VTY connections.  The routing daemons are:

   * `ripd', `ripngd', `ospfd', `ospf6d', `bgpd'

   * `zebra'

   The following sections discuss commands common to all the routing
daemons.

* Menu:

* Terminal Mode Commands::      Common commands used in a VTY
* Config Commands::             Commands used in config files
* Common Invocation Options::   Starting the daemons
* Virtual Terminal Interfaces:: Interacting with the daemons


File: quagga.info,  Node: Config Commands,  Next: Common Invocation Options,  Prev: Terminal Mode Commands,  Up: Basic commands

3.1 Config Commands
===================

* Menu:

* Basic Config Commands::       Some of the generic config commands
* Sample Config File::          An example config file

   In a config file, you can write the debugging options, a vty's
password, routing daemon configurations, a log file name, and so forth.
This information forms the initial command set for a routing beast as
it is starting.

   Config files are generally found in:

     `/etc/quagga/*.conf'

   Each of the daemons has its own config file.  For example, zebra's
default config file name is:

     `/etc/quagga/zebra.conf'

   The daemon name plus `.conf' is the default config file name. You
can specify a config file using the `-f' or `--config-file' options
when starting the daemon.


File: quagga.info,  Node: Basic Config Commands,  Next: Sample Config File,  Up: Config Commands

3.1.1 Basic Config Commands
---------------------------

 -- Command: hostname HOSTNAME
     Set hostname of the router.

 -- Command: password PASSWORD
     Set password for vty interface.  If there is no password, a vty
     won't accept connections.

 -- Command: enable password PASSWORD
     Set enable password.

 -- Command: log trap LEVEL
 -- Command: no log trap
     These commands are deprecated and are present only for historical
     compatibility.  The log trap command sets the current logging
     level for all enabled logging destinations, and it sets the
     default for all future logging commands that do not specify a
     level.  The normal default logging level is debugging.  The `no'
     form of the command resets the default level for future logging
     commands to debugging, but it does not change the logging level of
     existing logging destinations.

 -- Command: log stdout
 -- Command: log stdout LEVEL
 -- Command: no log stdout
     Enable logging output to stdout.  If the optional second argument
     specifying the logging level is not present, the default logging
     level (typically debugging, but can be changed using the
     deprecated `log trap' command) will be used.  The `no' form of the
     command disables logging to stdout.  The `level' argument must
     have one of these values: emergencies, alerts, critical, errors,
     warnings, notifications, informational, or debugging.  Note that
     the existing code logs its most important messages with severity
     `errors'.

 -- Command: log file FILENAME
 -- Command: log file FILENAME LEVEL
 -- Command: no log file
     If you want to log into a file, please specify `filename' as in
     this example:
          log file /var/log/quagga/bgpd.log informational
     If the optional second argument specifying the logging level is
     not present, the default logging level (typically debugging, but
     can be changed using the deprecated `log trap' command) will be
     used.  The `no' form of the command disables logging to a file.

     Note: if you do not configure any file logging, and a daemon
     crashes due to a signal or an assertion failure, it will attempt
     to save the crash information in a file named
     /var/tmp/quagga.<daemon name>.crashlog.  For security reasons,
     this will not happen if the file exists already, so it is
     important to delete the file after reporting the crash information.

 -- Command: log syslog
 -- Command: log syslog LEVEL
 -- Command: no log syslog
     Enable logging output to syslog.  If the optional second argument
     specifying the logging level is not present, the default logging
     level (typically debugging, but can be changed using the
     deprecated `log trap' command) will be used.  The `no' form of the
     command disables logging to syslog.

 -- Command: log monitor
 -- Command: log monitor LEVEL
 -- Command: no log monitor
     Enable logging output to vty terminals that have enabled logging
     using the `terminal monitor' command.  By default, monitor logging
     is enabled at the debugging level, but this command (or the
     deprecated `log trap' command) can be used to change the monitor
     logging level.  If the optional second argument specifying the
     logging level is not present, the default logging level (typically
     debugging, but can be changed using the deprecated `log trap'
     command) will be used.  The `no' form of the command disables
     logging to terminal monitors.

 -- Command: log facility FACILITY
 -- Command: no log facility
     This command changes the facility used in syslog messages.  The
     default facility is `daemon'.  The `no' form of the command resets
     the facility to the default `daemon' facility.

 -- Command: log record-priority
 -- Command: no log record-priority
     To include the severity in all messages logged to a file, to
     stdout, or to a terminal monitor (i.e. anything except syslog),
     use the `log record-priority' global configuration command.  To
     disable this option, use the `no' form of the command.  By default,
     the severity level is not included in logged messages.  Note: some
     versions of syslogd (including Solaris) can be configured to
     include the facility and level in the messages emitted.

 -- Command: service password-encryption
     Encrypt password.

 -- Command: service advanced-vty
     Enable advanced mode VTY.

 -- Command: service terminal-length <0-512>
     Set system wide line configuration.  This configuration command
     applies to all VTY interfaces.

 -- Command: line vty
     Enter vty configuration mode.

 -- Command: banner motd default
     Set default motd string.

 -- Command: no banner motd
     No motd banner string will be printed.

 -- Line Command: exec-timeout MINUTE
 -- Line Command: exec-timeout MINUTE SECOND
     Set VTY connection timeout value.  When only one argument is
     specified it is used for timeout value in minutes.  Optional
     second argument is used for timeout value in seconds. Default
     timeout value is 10 minutes.  When timeout value is zero, it means
     no timeout.

 -- Line Command: no exec-timeout
     Do not perform timeout at all.  This command is as same as
     `exec-timeout 0 0'.

 -- Line Command: access-class ACCESS-LIST
     Restrict vty connections with an access list.


File: quagga.info,  Node: Sample Config File,  Prev: Basic Config Commands,  Up: Config Commands

3.1.2 Sample Config File
------------------------

Below is a sample configuration file for the zebra daemon.

     !
     ! Zebra configuration file
     !
     hostname Router
     password zebra
     enable password zebra
     !
     log stdout
     !
     !

   '!' and '#' are comment characters.  If the first character of the
word is one of the comment characters then from the rest of the line
forward will be ignored as a comment.

     password zebra!password

   If a comment character is not the first character of the word, it's a
normal character. So in the above example '!' will not be regarded as a
comment and the password is set to 'zebra!password'.


File: quagga.info,  Node: Terminal Mode Commands,  Next: Config Commands,  Up: Basic commands

3.2 Terminal Mode Commands
==========================

 -- Command: write terminal
     Displays the current configuration to the vty interface.

 -- Command: write file
     Write current configuration to configuration file.

 -- Command: configure terminal
     Change to configuration mode.  This command is the first step to
     configuration.

 -- Command: terminal length <0-512>
     Set terminal display length to <0-512>.  If length is 0, no
     display control is performed.

 -- Command: who
     Show a list of currently connected vty sessions.

 -- Command: list
     List all available commands.

 -- Command: show version
     Show the current version of Quagga and its build host information.

 -- Command: show logging
     Shows the current configuration of the logging system.  This
     includes the status of all logging destinations.

 -- Command: logmsg LEVEL MESSAGE
     Send a message to all logging destinations that are enabled for
     messages of the given severity.


File: quagga.info,  Node: Common Invocation Options,  Next: Virtual Terminal Interfaces,  Prev: Config Commands,  Up: Basic commands

3.3 Common Invocation Options
=============================

These options apply to all Quagga daemons.

`-d'
`--daemon'
     Runs in daemon mode.

`-f FILE'
`--config_file=FILE'
     Set configuration file name.

`-h'
`--help'
     Display this help and exit.

`-i FILE'
`--pid_file=FILE'
     Upon startup the process identifier of the daemon is written to a
     file, typically in `/var/run'.  This file can be used by the init
     system to implement commands such as `.../init.d/zebra status',
     `.../init.d/zebra restart' or `.../init.d/zebra stop'.

     The file name is an run-time option rather than a configure-time
     option so that multiple routing daemons can be run simultaneously.
     This is useful when using Quagga to implement a routing looking
     glass.  One machine can be used to collect differing routing views
     from differing points in the network.

`-A ADDRESS'
`--vty_addr=ADDRESS'
     Set the VTY local address to bind to. If set, the VTY socket will
     only be bound to this address.

`-P PORT'
`--vty_port=PORT'
     Set the VTY TCP port number. If set to 0 then the TCP VTY sockets
     will not be opened.

`-u USER'
`--vty_addr=USER'
     Set the user and group to run as.

`-v'
`--version'
     Print program version.



File: quagga.info,  Node: Virtual Terminal Interfaces,  Prev: Common Invocation Options,  Up: Basic commands

3.4 Virtual Terminal Interfaces
===============================

VTY - Virtual Terminal [aka TeletYpe] Interface is a command line
interface (CLI) for user interaction with the routing daemon.

* Menu:

* VTY Overview::                Basics about VTYs
* VTY Modes::                   View, Enable, and Other VTY modes
* VTY CLI Commands::            Commands for movement, edition, and management


File: quagga.info,  Node: VTY Overview,  Next: VTY Modes,  Up: Virtual Terminal Interfaces

3.4.1 VTY Overview
------------------

VTY stands for Virtual TeletYpe interface.  It means you can connect to
the daemon via the telnet protocol.

   To enable a VTY interface, you have to setup a VTY password.  If
there is no VTY password, one cannot connect to the VTY interface at
all.

     % telnet localhost 2601
     Trying 127.0.0.1...
     Connected to localhost.
     Escape character is '^]'.

     Hello, this is Quagga (version 0.99.1)
     Copyright (C) 1999-2005 Kunihiro Ishiguro, et al.

     User Access Verification

     Password: XXXXX
     Router> ?
       enable            Turn on privileged commands
       exit              Exit current mode and down to previous mode
       help              Description of the interactive help system
       list              Print command list
       show              Show running system information
       who               Display who is on a vty
     Router> enable
     Password: XXXXX
     Router# configure terminal
     Router(config)# interface eth0
     Router(config-if)# ip address 10.0.0.1/8
     Router(config-if)# ^Z
     Router#

   '?' is very useful for looking up commands.


File: quagga.info,  Node: VTY Modes,  Next: VTY CLI Commands,  Prev: VTY Overview,  Up: Virtual Terminal Interfaces

3.4.2 VTY Modes
---------------

There are three basic VTY modes:

* Menu:

* VTY View Mode::               Mode for read-only interaction
* VTY Enable Mode::             Mode for read-write interaction
* VTY Other Modes::             Special modes (tftp, etc)

   There are commands that may be restricted to specific VTY modes.


File: quagga.info,  Node: VTY View Mode,  Next: VTY Enable Mode,  Up: VTY Modes

3.4.2.1 VTY View Mode
.....................

This mode is for read-only access to the CLI. One may exit the mode by
leaving the system, or by entering `enable' mode.


File: quagga.info,  Node: VTY Enable Mode,  Next: VTY Other Modes,  Prev: VTY View Mode,  Up: VTY Modes

3.4.2.2 VTY Enable Mode
.......................

This mode is for read-write access to the CLI. One may exit the mode by
leaving the system, or by escaping to view mode.


File: quagga.info,  Node: VTY Other Modes,  Prev: VTY Enable Mode,  Up: VTY Modes

3.4.2.3 VTY Other Modes
.......................

This page is for describing other modes.


File: quagga.info,  Node: VTY CLI Commands,  Prev: VTY Modes,  Up: Virtual Terminal Interfaces

3.4.3 VTY CLI Commands
----------------------

Commands that you may use at the command-line are described in the
following three subsubsections.

* Menu:

* CLI Movement Commands::       Commands for moving the cursor about
* CLI Editing Commands::        Commands for changing text
* CLI Advanced Commands::       Other commands, session management and so on


File: quagga.info,  Node: CLI Movement Commands,  Next: CLI Editing Commands,  Up: VTY CLI Commands

3.4.3.1 CLI Movement Commands
.............................

These commands are used for moving the CLI cursor. The <C> character
means press the Control Key.

`C-f'
`<RIGHT>'
     Move forward one character.

`C-b'
`<LEFT>'
     Move backward one character.

`M-f'
     Move forward one word.

`M-b'
     Move backward one word.

`C-a'
     Move to the beginning of the line.

`C-e'
     Move to the end of the line.



File: quagga.info,  Node: CLI Editing Commands,  Next: CLI Advanced Commands,  Prev: CLI Movement Commands,  Up: VTY CLI Commands

3.4.3.2 CLI Editing Commands
............................

These commands are used for editing text on a line. The <C> character
means press the Control Key.

`C-h'
`<DEL>'
     Delete the character before point.

`C-d'
     Delete the character after point.

`M-d'
     Forward kill word.

`C-w'
     Backward kill word.

`C-k'
     Kill to the end of the line.

`C-u'
     Kill line from the beginning, erasing input.

`C-t'
     Transpose character.



File: quagga.info,  Node: CLI Advanced Commands,  Prev: CLI Editing Commands,  Up: VTY CLI Commands

3.4.3.3 CLI Advanced Commands
.............................

There are several additional CLI commands for command line completions,
insta-help, and VTY session management.

`C-c'
     Interrupt current input and moves to the next line.

`C-z'
     End current configuration session and move to top node.

`C-n'
`<DOWN>'
     Move down to next line in the history buffer.

`C-p'
`<UP>'
     Move up to previous line in the history buffer.

`TAB'
     Use command line completion by typing <TAB>.

`'
     You can use command line help by typing `help' at the beginning of
     the line.  Typing `?' at any point in the line will show possible
     completions.



File: quagga.info,  Node: Zebra,  Next: RIP,  Prev: Basic commands,  Up: Top

4 Zebra
*******

`zebra' is an IP routing manager.  It provides kernel routing table
updates, interface lookups, and redistribution of routes between
different routing protocols.

* Menu:

* Invoking zebra::              Running the program
* Interface Commands::          Commands for zebra interfaces
* Static Route Commands::       Commands for adding static routes
* zebra Terminal Mode Commands::  Commands for zebra's VTY


File: quagga.info,  Node: Invoking zebra,  Next: Interface Commands,  Up: Zebra

4.1 Invoking zebra
==================

Besides the common invocation options (*note Common Invocation
Options::), the `zebra' specific invocation options are listed below.

`-b'
`--batch'
     Runs in batch mode.  `zebra' parses configuration file and
     terminates immediately.

`-k'
`--keep_kernel'
     When zebra starts up, don't delete old self inserted routes.

`-l'
`--log_mode'
     Set verbose logging on.

`-r'
`--retain'
     When program terminates, retain routes added by zebra.



File: quagga.info,  Node: Interface Commands,  Next: Static Route Commands,  Prev: Invoking zebra,  Up: Zebra

4.2 Interface Commands
======================

 -- Command: interface IFNAME

 -- Interface Command: shutdown
 -- Interface Command: no shutdown
     Up or down the current interface.

 -- Interface Command: ip address ADDRESS/PREFIX
 -- Interface Command: ip6 address ADDRESS/PREFIX
 -- Interface Command: no ip address ADDRESS/PREFIX
 -- Interface Command: no ip6 address ADDRESS/PREFIX
     Set the IPv4 or IPv6 address/prefix for the interface.

 -- Interface Command: ip address ADDRESS/PREFIX secondary
 -- Interface Command: no ip address ADDRESS/PREFIX secondary
     Set the secondary flag for this address. This causes ospfd to not
     treat the address as a distinct subnet.

 -- Interface Command: description DESCRIPTION ...
     Set description for the interface.

 -- Interface Command: multicast
 -- Interface Command: no multicast
     Enable or disables multicast flag for the interface.

 -- Interface Command: bandwidth <1-10000000>
 -- Interface Command: no bandwidth <1-10000000>
     Set bandwidth value of the interface in kilobits/sec.  This is for
     calculating OSPF cost. This command does not affect the actual
     device configuration.

 -- Interface Command: link-detect
 -- Interface Command: no link-detect
     Enable/disable link-detect on platforms which support this.
     Currently only linux and with certain drivers - those which
     properly support the IFF_RUNNING flag.


File: quagga.info,  Node: Static Route Commands,  Next: zebra Terminal Mode Commands,  Prev: Interface Commands,  Up: Zebra

4.3 Static Route Commands
=========================

Static routing is a very fundamental feature of routing technology.  It
defines static prefix and gateway.

 -- Command: ip route NETWORK GATEWAY
     NETWORK is destination prefix with format of A.B.C.D/M.  GATEWAY
     is gateway for the prefix.  When GATEWAY is A.B.C.D format.  It is
     taken as a IPv4 address gateway.  Otherwise it is treated as an
     interface name. If the interface name is NULL0 then zebra installs
     a blackhole route.

          ip route 10.0.0.0/8 10.0.0.2
          ip route 10.0.0.0/8 ppp0
          ip route 10.0.0.0/8 null0

     First example defines 10.0.0.0/8 static route with gateway
     10.0.0.2.  Second one defines the same prefix but with gateway to
     interface ppp0. The third install a blackhole route.

 -- Command: ip route NETWORK NETMASK GATEWAY
     This is alternate version of above command.  When NETWORK is
     A.B.C.D format, user must define NETMASK value with A.B.C.D
     format.  GATEWAY is same option as above command

          ip route 10.0.0.0 255.255.255.0 10.0.0.2
          ip route 10.0.0.0 255.255.255.0 ppp0
          ip route 10.0.0.0 255.255.255.0 null0

     These statements are equivalent to those in the previous example.

 -- Command: ip route NETWORK GATEWAY DISTANCE
     Installs the route with the specified distance.

   Multiple nexthop static route

     ip route 10.0.0.1/32 10.0.0.2
     ip route 10.0.0.1/32 10.0.0.3
     ip route 10.0.0.1/32 eth0

   If there is no route to 10.0.0.2 and 10.0.0.3, and interface eth0 is
reachable, then the last route is installed into the kernel.

   If zebra has been compiled with multipath support, and both 10.0.0.2
and 10.0.0.3 are reachable, zebra will install a multipath route via
both nexthops, if the platform supports this.

     zebra> show ip route
     S>  10.0.0.1/32 [1/0] via 10.0.0.2 inactive
                           via 10.0.0.3 inactive
       *                   is directly connected, eth0

     ip route 10.0.0.0/8 10.0.0.2
     ip route 10.0.0.0/8 10.0.0.3
     ip route 10.0.0.0/8 null0 255

   This will install a multihop route via the specified next-hops if
they are reachable, as well as a high-metric blackhole route, which can
be useful to prevent traffic destined for a prefix to match
less-specific routes (eg default) should the specified gateways not be
reachable. Eg:

     zebra> show ip route 10.0.0.0/8
     Routing entry for 10.0.0.0/8
       Known via "static", distance 1, metric 0
         10.0.0.2 inactive
         10.0.0.3 inactive

     Routing entry for 10.0.0.0/8
       Known via "static", distance 255, metric 0
         directly connected, Null0

 -- Command: ipv6 route NETWORK GATEWAY
 -- Command: ipv6 route NETWORK GATEWAY DISTANCE
     These behave similarly to their ipv4 counterparts.

 -- Command: table TABLENO
     Select the primary kernel routing table to be used.  This only
     works for kernels supporting multiple routing tables (like
     GNU/Linux 2.2.x and later).  After setting TABLENO with this
     command, static routes defined after this are added to the
     specified table.


File: quagga.info,  Node: zebra Terminal Mode Commands,  Prev: Static Route Commands,  Up: Zebra

4.4 zebra Terminal Mode Commands
================================

 -- Command: show ip route
     Display current routes which zebra holds in its database.

          Router# show ip route
          Codes: K - kernel route, C - connected, S - static, R - RIP,
                 B - BGP * - FIB route.

          K* 0.0.0.0/0              203.181.89.241
          S  0.0.0.0/0              203.181.89.1
          C* 127.0.0.0/8            lo
          C* 203.181.89.240/28      eth0

 -- Command: show ipv6 route

 -- Command: show interface

 -- Command: show ipforward
     Display whether the host's IP forwarding function is enabled or
     not.  Almost any UNIX kernel can be configured with IP forwarding
     disabled.  If so, the box can't work as a router.

 -- Command: show ipv6forward
     Display whether the host's IP v6 forwarding is enabled or not.


File: quagga.info,  Node: RIP,  Next: RIPng,  Prev: Zebra,  Up: Top

5 RIP
*****

RIP - Routing Information Protocol is widely deployed interior gateway
protocol.  RIP was developed in the 1970s at Xerox Labs as part of the
XNS routing protocol.  RIP is a "distance-vector" protocol and is based
on the "Bellman-Ford" algorithms.  As a distance-vector protocol, RIP
router send updates to its neighbors periodically, thus allowing the
convergence to a known topology.  In each update, the distance to any
given network will be broadcasted to its neighboring router.

   `ripd' supports RIP version 2 as described in RFC2453 and RIP
version 1 as described in RFC1058.

* Menu:

* Starting and Stopping ripd::
* RIP Configuration::
* How to Announce RIP route::
* Filtering RIP Routes::
* RIP Metric Manipulation::
* RIP distance::
* RIP route-map::
* RIP Authentication::
* RIP Timers::
* Show RIP Information::
* RIP Debug Commands::


File: quagga.info,  Node: Starting and Stopping ripd,  Next: RIP Configuration,  Up: RIP

5.1 Starting and Stopping ripd
==============================

The default configuration file name of `ripd''s is `ripd.conf'.  When
invocation `ripd' searches directory /etc/quagga.  If `ripd.conf' is
not there next search current directory.

   RIP uses UDP port 520 to send and receive RIP packets.  So the user
must have the capability to bind the port, generally this means that
the user must have superuser privileges.  RIP protocol requires
interface information maintained by `zebra' daemon.  So running `zebra'
is mandatory to run `ripd'.  Thus minimum sequence for running RIP is
like below:

     # zebra -d
     # ripd -d

   Please note that `zebra' must be invoked before `ripd'.

   To stop `ripd'.  Please use `kill `cat /var/run/ripd.pid`'.  Certain
signals have special meaningss to `ripd'.

`SIGHUP'
     Reload configuration file `ripd.conf'.  All configurations are
     reseted.  All routes learned so far are cleared and removed from
     routing table.

`SIGUSR1'
     Rotate `ripd' logfile.

`SIGINT'
`SIGTERM'
     `ripd' sweeps all installed RIP routes then terminates properly.

   `ripd' invocation options.  Common options that can be specified
(*note Common Invocation Options::).

`-r'
`--retain'
     When the program terminates, retain routes added by `ripd'.

* Menu:

* RIP netmask::


File: quagga.info,  Node: RIP netmask,  Up: Starting and Stopping ripd

5.1.1 RIP netmask
-----------------

The netmask features of `ripd' support both version 1 and version 2 of
RIP.  Version 1 of RIP originally contained no netmask information.  In
RIP version 1, network classes were originally used to determine the
size of the netmask.  Class A networks use 8 bits of mask, Class B
networks use 16 bits of masks, while Class C networks use 24 bits of
mask.  Today, the most widely used method of a network mask is assigned
to the packet on the basis of the interface that received the packet.
Version 2 of RIP supports a variable length subnet mask (VLSM).  By
extending the subnet mask, the mask can be divided and reused.  Each
subnet can be used for different purposes such as large to middle size
LANs and WAN links.  Quagga `ripd' does not support the non-sequential
netmasks that are included in RIP Version 2.

   In a case of similar information with the same prefix and metric, the
old information will be suppressed.  Ripd does not currently support
equal cost multipath routing.


File: quagga.info,  Node: RIP Configuration,  Next: How to Announce RIP route,  Prev: Starting and Stopping ripd,  Up: RIP

5.2 RIP Configuration
=====================

 -- Command: router rip
     The `router rip' command is necessary to enable RIP.  To disable
     RIP, use the `no router rip' command.  RIP must be enabled before
     carrying out any of the RIP commands.

 -- Command: no router rip
     Disable RIP.

   RIP can be configured to process either Version 1 or Version 2
packets, the default mode is Version 2.  If no version is specified,
then the RIP daemon will default to Version 2.  If RIP is set to Version
1, the setting "Version 1" will be displayed, but the setting "Version
2" will not be displayed whether or not Version 2 is set explicitly as
the version of RIP being used. The version can be specified globally,
and also on a per-interface basis (see below).

 -- RIP Command: version VERSION
     Set RIP process's version.  VERSION can be `1" or `2".

 -- RIP Command: network NETWORK
 -- RIP Command: no network NETWORK
     Set the RIP enable interface by NETWORK.  The interfaces which
     have addresses matching with NETWORK are enabled.

     This group of commands either enables or disables RIP interfaces
     between certain numbers of a specified network address.  For
     example, if the network for 10.0.0.0/24 is RIP enabled, this would
     result in all the addresses from 10.0.0.0 to 10.0.0.255 being
     enabled for RIP.  The `no network' command will disable RIP for
     the specified network.

 -- RIP Command: network IFNAME
 -- RIP Command: no network IFNAME
     Set a RIP enabled interface by IFNAME.  Both the sending and
     receiving of RIP packets will be enabled on the port specified in
     the `network ifname' command.  The `no network ifname' command
     will disable RIP on the specified interface.

 -- RIP Command: neighbor A.B.C.D
 -- RIP Command: no neighbor A.B.C.D
     Specify RIP neighbor.  When a neighbor doesn't understand
     multicast, this command is used to specify neighbors.  In some
     cases, not all routers will be able to understand multicasting,
     where packets are sent to a network or a group of addresses.  In a
     situation where a neighbor cannot process multicast packets, it is
     necessary to establish a direct link between routers.  The
     neighbor command allows the network administrator to specify a
     router as a RIP neighbor.  The `no neighbor a.b.c.d' command will
     disable the RIP neighbor.

   Below is very simple RIP configuration.  Interface `eth0' and
interface which address match to `10.0.0.0/8' are RIP enabled.

     !
     router rip
      network 10.0.0.0/8
      network eth0
     !

   Passive interface

 -- RIP command: passive-interface (IFNAME|default)
 -- RIP command: no passive-interface IFNAME
     This command sets the specified interface to passive mode.  On
     passive mode interface, all receiving packets are processed as
     normal and ripd does not send either multicast or unicast RIP
     packets except to RIP neighbors specified with `neighbor' command.
     The interface may be specified as DEFAULT to make ripd default to
     passive on all interfaces.

     The default is to be passive on all interfaces.

   RIP version handling

 -- Interface command: ip rip send version VERSION
     VERSION can be `1', `2', `1 2'.  This configuration command
     overrides the router's rip version setting.  The command will
     enable the selected interface to send packets with RIP Version 1,
     RIP Version 2, or both.  In the case of '1 2', packets will be
     both broadcast and multicast.

     The default is to send only version 2.

 -- Interface command: ip rip receive version VERSION
     Version setting for incoming RIP packets.  This command will
     enable the selected interface to receive packets in RIP Version 1,
     RIP Version 2, or both.

     The default is to receive both versions.

   RIP split-horizon

 -- Interface command: ip split-horizon
 -- Interface command: no ip split-horizon
     Control split-horizon on the interface.  Default is `ip
     split-horizon'.  If you don't perform split-horizon on the
     interface, please specify `no ip split-horizon'.


File: quagga.info,  Node: How to Announce RIP route,  Next: Filtering RIP Routes,  Prev: RIP Configuration,  Up: RIP

5.3 How to Announce RIP route
=============================

 -- RIP command: redistribute kernel
 -- RIP command: redistribute kernel metric <0-16>
 -- RIP command: redistribute kernel route-map ROUTE-MAP
 -- RIP command: no redistribute kernel
     `redistribute kernel' redistributes routing information from
     kernel route entries into the RIP tables. `no redistribute kernel'
     disables the routes.

 -- RIP command: redistribute static
 -- RIP command: redistribute static metric <0-16>
 -- RIP command: redistribute static route-map ROUTE-MAP
 -- RIP command: no redistribute static
     `redistribute static' redistributes routing information from
     static route entries into the RIP tables. `no redistribute static'
     disables the routes.

 -- RIP command: redistribute connected
 -- RIP command: redistribute connected metric <0-16>
 -- RIP command: redistribute connected route-map ROUTE-MAP
 -- RIP command: no redistribute connected
     Redistribute connected routes into the RIP tables.  `no
     redistribute connected' disables the connected routes in the RIP
     tables.  This command redistribute connected of the interface
     which RIP disabled.  The connected route on RIP enabled interface
     is announced by default.

 -- RIP command: redistribute ospf
 -- RIP command: redistribute ospf metric <0-16>
 -- RIP command: redistribute ospf route-map ROUTE-MAP
 -- RIP command: no redistribute ospf
     `redistribute ospf' redistributes routing information from ospf
     route entries into the RIP tables. `no redistribute ospf' disables
     the routes.

 -- RIP command: redistribute bgp
 -- RIP command: redistribute bgp metric <0-16>
 -- RIP command: redistribute bgp route-map ROUTE-MAP
 -- RIP command: no redistribute bgp
     `redistribute bgp' redistributes routing information from bgp
     route entries into the RIP tables. `no redistribute bgp' disables
     the routes.

   If you want to specify RIP only static routes:

 -- RIP command: default-information originate

 -- RIP command: route A.B.C.D/M
 -- RIP command: no route A.B.C.D/M
     This command is specific to Quagga.  The `route' command makes a
     static route only inside RIP. This command should be used only by
     advanced users who are particularly knowledgeable about the RIP
     protocol.  In most cases, we recommend creating a static route in
     Quagga and redistributing it in RIP using `redistribute static'.


File: quagga.info,  Node: Filtering RIP Routes,  Next: RIP Metric Manipulation,  Prev: How to Announce RIP route,  Up: RIP

5.4 Filtering RIP Routes
========================

RIP routes can be filtered by a distribute-list.

 -- Command: distribute-list ACCESS_LIST DIRECT IFNAME
     You can apply access lists to the interface with a
     `distribute-list' command.  ACCESS_LIST is the access list name.
     DIRECT is `in' or `out'.  If DIRECT is `in' the access list is
     applied to input packets.

     The `distribute-list' command can be used to filter the RIP path.
     `distribute-list' can apply access-lists to a chosen interface.
     First, one should specify the access-list.  Next, the name of the
     access-list is used in the distribute-list command.  For example,
     in the following configuration `eth0' will permit only the paths
     that match the route 10.0.0.0/8

          !
          router rip
           distribute-list private in eth0
          !
          access-list private permit 10 10.0.0.0/8
          access-list private deny any
          !

   `distribute-list' can be applied to both incoming and outgoing data.

 -- Command: distribute-list prefix PREFIX_LIST (in|out) IFNAME
     You can apply prefix lists to the interface with a
     `distribute-list' command.  PREFIX_LIST is the prefix list name.
     Next is the direction of `in' or `out'.  If DIRECT is `in' the
     access list is applied to input packets.


File: quagga.info,  Node: RIP Metric Manipulation,  Next: RIP distance,  Prev: Filtering RIP Routes,  Up: RIP

5.5 RIP Metric Manipulation
===========================

RIP metric is a value for distance for the network.  Usually `ripd'
increment the metric when the network information is received.
Redistributed routes' metric is set to 1.

 -- RIP command: default-metric <1-16>
 -- RIP command: no default-metric <1-16>
     This command modifies the default metric value for redistributed
     routes.  The default value is 1.  This command does not affect
     connected route even if it is redistributed by `redistribute
     connected'.  To modify connected route's metric value, please use
     `redistribute connected metric' or `route-map'.  `offset-list' also
     affects connected routes.

 -- RIP command: offset-list ACCESS-LIST (in|out)
 -- RIP command: offset-list ACCESS-LIST (in|out) IFNAME


File: quagga.info,  Node: RIP distance,  Next: RIP route-map,  Prev: RIP Metric Manipulation,  Up: RIP

5.6 RIP distance
================

Distance value is used in zebra daemon.  Default RIP distance is 120.

 -- RIP command: distance <1-255>
 -- RIP command: no distance <1-255>
     Set default RIP distance to specified value.

 -- RIP command: distance <1-255> A.B.C.D/M
 -- RIP command: no distance <1-255> A.B.C.D/M
     Set default RIP distance to specified value when the route's
     source IP address matches the specified prefix.

 -- RIP command: distance <1-255> A.B.C.D/M ACCESS-LIST
 -- RIP command: no distance <1-255> A.B.C.D/M ACCESS-LIST
     Set default RIP distance to specified value when the route's
     source IP address matches the specified prefix and the specified
     access-list.


File: quagga.info,  Node: RIP route-map,  Next: RIP Authentication,  Prev: RIP distance,  Up: RIP

5.7 RIP route-map
=================

Usage of `ripd''s route-map support.

   Optional argument route-map MAP_NAME can be added to each
`redistribute' statement.

     redistribute static [route-map MAP_NAME]
     redistribute connected [route-map MAP_NAME]
     .....

   Cisco applies route-map _before_ routes will exported to rip route
table.  In current Quagga's test implementation, `ripd' applies
route-map after routes are listed in the route table and before routes
will be announced to an interface (something like output filter). I
think it is not so clear, but it is draft and it may be changed at
future.

   Route-map statement (*note Route Map::) is needed to use route-map
functionality.

 -- Route Map: match interface WORD
     This command match to incoming interface.  Notation of this match
     is different from Cisco. Cisco uses a list of interfaces - NAME1
     NAME2 ... NAMEN.  Ripd allows only one name (maybe will change in
     the future).  Next - Cisco means interface which includes next-hop
     of routes (it is somewhat similar to "ip next-hop" statement).
     Ripd means interface where this route will be sent. This
     difference is because "next-hop" of same routes which sends to
     different interfaces must be different. Maybe it'd be better to
     made new matches - say "match interface-out NAME" or something
     like that.

 -- Route Map: match ip address WORD
 -- Route Map: match ip address prefix-list WORD
     Match if route destination is permitted by access-list.

 -- Route Map: match ip next-hop A.B.C.D
     Cisco uses here <access-list>, `ripd' IPv4 address. Match if route
     has this next-hop (meaning next-hop listed in the rip route table
     - "show ip rip")

 -- Route Map: match metric <0-4294967295>
     This command match to the metric value of RIP updates.  For other
     protocol compatibility metric range is shown as <0-4294967295>.
     But for RIP protocol only the value range <0-16> make sense.

 -- Route Map: set ip next-hop A.B.C.D
     This command set next hop value in RIPv2 protocol.  This command
     does not affect RIPv1 because there is no next hop field in the
     packet.

 -- Route Map: set metric <0-4294967295>
     Set a metric for matched route when sending announcement.  The
     metric value range is very large for compatibility with other
     protocols.  For RIP, valid metric values are from 1 to 16.


File: quagga.info,  Node: RIP Authentication,  Next: RIP Timers,  Prev: RIP route-map,  Up: RIP

5.8 RIP Authentication
======================

 -- Interface command: ip rip authentication mode md5
 -- Interface command: no ip rip authentication mode md5
     Set the interface with RIPv2 MD5 authentication.

 -- Interface command: ip rip authentication mode text
 -- Interface command: no ip rip authentication mode text
     Set the interface with RIPv2 simple password authentication.

 -- Interface command: ip rip authentication string STRING
 -- Interface command: no ip rip authentication string STRING
     RIP version 2 has simple text authentication.  This command sets
     authentication string.  The string must be shorter than 16
     characters.

 -- Interface command: ip rip authentication key-chain KEY-CHAIN
 -- Interface command: no ip rip authentication key-chain KEY-CHAIN
     Specifiy Keyed MD5 chain.

     !
     key chain test
      key 1
       key-string test
     !
     interface eth1
      ip rip authentication mode md5
      ip rip authentication key-chain test
     !


File: quagga.info,  Node: RIP Timers,  Next: Show RIP Information,  Prev: RIP Authentication,  Up: RIP

5.9 RIP Timers
==============

 -- RIP command: timers basic UPDATE TIMEOUT GARBAGE
     RIP protocol has several timers.  User can configure those timers'
     values by `timers basic' command.

     The default settings for the timers are as follows:

        * The update timer is 30 seconds. Every update timer seconds,
          the RIP process is awakened to send an unsolicited Response
          message containing the complete routing table to all
          neighboring RIP routers.

        * The timeout timer is 180 seconds. Upon expiration of the
          timeout, the route is no longer valid; however, it is
          retained in the routing table for a short time so that
          neighbors can be notified that the route has been dropped.

        * The garbage collect timer is 120 seconds.  Upon expiration of
          the garbage-collection timer, the route is finally removed
          from the routing table.


     The `timers basic' command allows the the default values of the
     timers listed above to be changed.

 -- RIP command: no timers basic
     The `no timers basic' command will reset the timers to the default
     settings listed above.


File: quagga.info,  Node: Show RIP Information,  Next: RIP Debug Commands,  Prev: RIP Timers,  Up: RIP

5.10 Show RIP Information
=========================

To display RIP routes.

 -- Command: show ip rip
     Show RIP routes.

   The command displays all RIP routes. For routes that are received
through RIP, this command will display the time the packet was sent and
the tag information.  This command will also display this information
for routes redistributed into RIP.

 -- Command: show ip protocols
     The command displays current RIP status.  It includes RIP timer,
     filtering, version, RIP enabled interface and RIP peer inforation.

     ripd> show ip protocols
     Routing Protocol is "rip"
       Sending updates every 30 seconds with +/-50%, next due in 35 seconds
       Timeout after 180 seconds, garbage collect after 120 seconds
       Outgoing update filter list for all interface is not set
       Incoming update filter list for all interface is not set
       Default redistribution metric is 1
       Redistributing: kernel connected
       Default version control: send version 2, receive version 2
         Interface        Send  Recv
       Routing for Networks:
         eth0
         eth1
         1.1.1.1
         203.181.89.241
       Routing Information Sources:
         Gateway          BadPackets BadRoutes  Distance Last Update


File: quagga.info,  Node: RIP Debug Commands,  Prev: Show RIP Information,  Up: RIP

5.11 RIP Debug Commands
=======================

Debug for RIP protocol.

 -- Command: debug rip events
     Debug rip events.

   `debug rip' will show RIP events.  Sending and receiving packets,
timers, and changes in interfaces are events shown with `ripd'.

 -- Command: debug rip packet
     Debug rip packet.

   `debug rip packet' will display detailed information about the RIP
packets.  The origin and port number of the packet as well as a packet
dump is shown.

 -- Command: debug rip zebra
     Debug rip between zebra communication.

   This command will show the communication between `ripd' and `zebra'.
The main information will include addition and deletion of paths to
the kernel and the sending and receiving of interface information.

 -- Command: show debugging rip
     Display `ripd''s debugging option.

   `show debugging rip' will show all information currently set for ripd
debug.


File: quagga.info,  Node: RIPng,  Next: OSPFv2,  Prev: RIP,  Up: Top

6 RIPng
*******

`ripngd' supports the RIPng protocol as described in RFC2080.  It's an
IPv6 reincarnation of the RIP protocol.

* Menu:

* Invoking ripngd::
* ripngd Configuration::
* ripngd Terminal Mode Commands::
* ripngd Filtering Commands::


File: quagga.info,  Node: Invoking ripngd,  Next: ripngd Configuration,  Up: RIPng

6.1 Invoking ripngd
===================

There are no `ripngd' specific invocation options.  Common options can
be specified (*note Common Invocation Options::).


File: quagga.info,  Node: ripngd Configuration,  Next: ripngd Terminal Mode Commands,  Prev: Invoking ripngd,  Up: RIPng

6.2 ripngd Configuration
========================

Currently ripngd supports the following commands:

 -- Command: router ripng
     Enable RIPng.

 -- RIPng Command: flush_timer TIME
     Set flush timer.

 -- RIPng Command: network NETWORK
     Set RIPng enabled interface by NETWORK

 -- RIPng Command: network IFNAME
     Set RIPng enabled interface by IFNAME

 -- RIPng Command: route NETWORK
     Set RIPng static routing announcement of NETWORK.

 -- Command: router zebra
     This command is the default and does not appear in the
     configuration.  With this statement, RIPng routes go to the
     `zebra' daemon.


File: quagga.info,  Node: ripngd Terminal Mode Commands,  Next: ripngd Filtering Commands,  Prev: ripngd Configuration,  Up: RIPng

6.3 ripngd Terminal Mode Commands
=================================

 -- Command: show ip ripng

 -- Command: show debugging ripng

 -- Command: debug ripng events

 -- Command: debug ripng packet

 -- Command: debug ripng zebra


File: quagga.info,  Node: ripngd Filtering Commands,  Prev: ripngd Terminal Mode Commands,  Up: RIPng

6.4 ripngd Filtering Commands
=============================

 -- Command: distribute-list ACCESS_LIST (in|out) IFNAME
     You can apply an access-list to the interface using the
     `distribute-list' command.  ACCESS_LIST is an access-list name.
     DIRECT is `in' or `out'.  If DIRECT is `in', the access-list is
     applied only to incoming packets.

          distribute-list local-only out sit1


File: quagga.info,  Node: OSPFv2,  Next: OSPFv3,  Prev: RIPng,  Up: Top

7 OSPFv2
********

OSPF (Open Shortest Path First) version 2 is a routing protocol which
is described in `RFC2328, OSPF Version 2'.  OSPF is an IGP (Interior
Gateway Protocol)..  Compared with RIP, OSPF can provide scalable
network support and faster convergence times.  OSPF is widely used in
large networks such as ISP (Internet Service Provider) backbone and
enterprise networks.

* Menu:

* Configuring ospfd::
* OSPF router::
* OSPF area::
* OSPF interface::
* Redistribute routes to OSPF::
* Showing OSPF information::
* Debugging OSPF::
* OSPF Configuration Examples::


File: quagga.info,  Node: Configuring ospfd,  Next: OSPF router,  Up: OSPFv2

7.1 Configuring ospfd
=====================

There are no `ospfd' specific options.  Common options can be specified
(*note Common Invocation Options::) to `ospfd'.  `ospfd' needs to
acquire interface information from `zebra' in order to function.
Therefore `zebra' must be running before invoking `ospfd'. Also, if
`zebra' is restarted then `ospfd' must be too.

   Like other daemons, `ospfd' configuration is done in OSPF specific
configuration file `ospfd.conf'.


File: quagga.info,  Node: OSPF router,  Next: OSPF area,  Prev: Configuring ospfd,  Up: OSPFv2

7.2 OSPF router
===============

To start OSPF process you have to specify the OSPF router.  As of this
writing, `ospfd' does not support multiple OSPF processes.

 -- Command: router ospf
 -- Command: no router ospf
     Enable or disable the OSPF process.  `ospfd' does not yet support
     multiple OSPF processes.  So you can not specify an OSPF process
     number.

 -- OSPF Command: ospf router-id A.B.C.D
 -- OSPF Command: no ospf router-id
     This sets the router-ID of the OSPF process. The router-ID may be
     an IP address of the router, but need not be - it can be any
     arbitrary 32bit number. However it MUST be unique within the
     entire OSPF domain to the OSPF speaker - bad things will happen if
     multiple OSPF speakers are configured with the same router-ID! If
     one is not specified then `ospfd' will obtain a router-ID
     automatically from `zebra'.

 -- OSPF Command: ospf abr-type TYPE
 -- OSPF Command: no ospf abr-type TYPE
     TYPE can be cisco|ibm|shortcut|standard.

     More information regarding the behaviour controlled by this
     command can be found in `RFC 3509, Alternative Implementations of
     OSPF Area Border Routers', and
     `draft-ietf-ospf-shortcut-abr-02.txt'.

     Quote: "Though the definition of the ABR (Area Border Router) in
     the OSPF specification does not require a router with multiple
     attached areas to have a backbone connection, it is actually
     necessary to provide successful routing to the inter-area and
     external destinations. If this requirement is not met, all traffic
     destined for the areas not connected to such an ABR or out of the
     OSPF domain, is dropped.  This document describes alternative ABR
     behaviors implemented in Cisco and IBM routers."

     The default ABR type is 'Cisco', allowing an ABR to consider
     summaries from non-backbone areas if, and only if, it has lost its
     link(s) to the backbone area.

 -- OSPF Command: ospf rfc1583compatibility
 -- OSPF Command: no ospf rfc1583compatibility
     This `RFC2328', the sucessor to `RFC1583', suggests according to
     section G.2 (changes) in section 16.4 a change to the path
     preference algorithm that prevents possible routing loops that were
     possible in the old version of OSPFv2. More specifically it demands
     that inter-area paths and intra-area path are now of equal
     preference but still both preferred to external paths.

     This command should NOT be set normally.

 -- OSPF Command: passive interface INTERFACE
 -- OSPF Command: no passive interface INTERFACE
     Do not speak OSPF interface on the given interface, but do
     advertise the interface as a stub link in the router-LSA (Link
     State Advertisement) for this router. This allows one to advertise
     addresses on such connected interfaces without having to originate
     AS-External/Type-5 LSAs (which have global flooding scope) - as
     would occur if connected addresses were redistributed into OSPF,
     *Note Redistribute routes to OSPF::.


 -- OSPF Command: timers throttle spf DELAY INITIAL-HOLDTIME
MAX-HOLDTIME
 -- OSPF Command: no timers throttle spf
     This command sets the initial DELAY, the INITIAL-HOLDTIME and the
     MAXIMUM-HOLDTIME between when SPF is calculated and the event
     which triggered the calculation. The times are specified in
     milliseconds and must be in the range of 0 to 600000 milliseconds.

     The DELAY specifies the minimum amount of time to delay SPF
     calculation (hence it affects how long SPF calculation is delayed
     after an event which occurs outside of the holdtime of any
     previous SPF calculation, and also serves as a minimum holdtime).

     Consecutive SPF calculations will always be seperated by at least
     'hold-time' milliseconds. The hold-time is adaptive and initially
     is set to the INITIAL-HOLDTIME configured with the above command.
     Events which occur within the holdtime of the previous SPF
     calculation will cause the holdtime to be increased by
     INITIAL-HOLDTIME, bounded by the MAXIMUM-HOLDTIME configured with
     this command. If the adaptive hold-time elapses without any
     SPF-triggering event occuring then the current holdtime is reset
     to the INITIAL-HOLDTIME. The current holdtime can be viewed with
     *Note show ip ospf::, where it is expressed as a multiplier of the
     INITIAL-HOLDTIME.

          router ospf
           timers throttle spf 200 400 10000

     In this example, the DELAY is set to 200ms, the INITIAL HOLDTIME
     is set to 400ms and the MAXIMUM HOLDTIME to 10s. Hence there will
     always be at least 200ms between an event which requires SPF
     calculation and the actual SPF calculation. Further consecutive SPF
     calculations will always be seperated by between 400ms to 10s, the
     hold-time increasing by 400ms each time an SPF-triggering event
     occurs within the hold-time of the previous SPF calculation.

     This command supercedes the `timers spf' command in previous Quagga
     releases.

 -- OSPF Command: max-metric router-lsa [on-startup|on-shutdown]
<5-86400>
 -- OSPF Command: max-metric router-lsa administrative
 -- OSPF Command: no max-metric router-lsa
[on-startup|on-shutdown|administrative]
     This enables `RFC3137, OSPF Stub Router Advertisement' support,
     where the OSPF process describes its transit links in its
     router-LSA as having infinite distance so that other routers will
     avoid calculating transit paths through the router while still
     being able to reach networks through the router.

     This support may be enabled administratively (and indefinitely) or
     conditionally. Conditional enabling of max-metric router-lsas can
     be for a period of seconds after startup and/or for a period of
     seconds prior to shutdown.

     Enabling this for a period after startup allows OSPF to converge
     fully first without affecting any existing routes used by other
     routers, while still allowing any connected stub links and/or
     redistributed routes to be reachable. Enabling this for a period
     of time in advance of shutdown allows the router to gracefully
     excuse itself from the OSPF domain.

     Enabling this feature administratively allows for administrative
     intervention for whatever reason, for an indefinite period of time.
     Note that if the configuration is written to file, this
     administrative form of the stub-router command will also be
     written to file. If `ospfd' is restarted later, the command will
     then take effect until manually deconfigured.

     Configured state of this feature as well as current status, such
     as the number of second remaining till on-startup or on-shutdown
     ends, can be viewed with the *Note show ip ospf:: command.

 -- OSPF Command: auto-cost reference-bandwidth <1-4294967>
 -- OSPF Command: no auto-cost reference-bandwidth
     This sets the reference bandwidth for cost calculations, where this
     bandwidth is considered equivalent to an OSPF cost of 1, specified
     in Mbits/s. The default is 100Mbit/s (i.e. a link of bandwidth
     100Mbit/s or higher will have a cost of 1. Cost of lower bandwidth
     links will be scaled with reference to this cost).

     This configuration setting MUST be consistent across all routers
     within the OSPF domain.

 -- OSPF Command: network A.B.C.D/M area A.B.C.D
 -- OSPF Command: network A.B.C.D/M area <0-4294967295>
 -- OSPF Command: no network A.B.C.D/M area A.B.C.D
 -- OSPF Command: no network A.B.C.D/M area <0-4294967295>
     This command specifies the OSPF enabled interface(s).  If the
     interface has an address from range 192.168.1.0/24 then the
     command below enables ospf on this interface so router can provide
     network information to the other ospf routers via this interface.

          router ospf
           network 192.168.1.0/24 area 0.0.0.0

     Prefix length in interface must be equal or bigger (ie. smaller
     network) than prefix length in network statement. For example
     statement above doesn't enable ospf on interface with address
     192.168.1.1/23, but it does on interface with address
     192.168.1.129/25.


File: quagga.info,  Node: OSPF area,  Next: OSPF interface,  Prev: OSPF router,  Up: OSPFv2

7.3 OSPF area
=============

 -- OSPF Command: area A.B.C.D range A.B.C.D/M
 -- OSPF Command: area <0-4294967295> range A.B.C.D/M
 -- OSPF Command: no area A.B.C.D range A.B.C.D/M
 -- OSPF Command: no area <0-4294967295> range A.B.C.D/M
     Summarize intra area paths from specified area into one Type-3
     summary-LSA announced to other areas. This command can be used
     only in ABR and ONLY router-LSAs (Type-1) and network-LSAs
     (Type-2) (ie. LSAs with scope area) can be summarized. Type-5
     AS-external-LSAs can't be summarized - their scope is AS.
     Summarizing Type-7 AS-external-LSAs isn't supported yet by Quagga.

          router ospf
           network 192.168.1.0/24 area 0.0.0.0
           network 10.0.0.0/8 area 0.0.0.10
           area 0.0.0.10 range 10.0.0.0/8

     With configuration above one Type-3 Summary-LSA with routing info
     10.0.0.0/8 is announced into backbone area if area 0.0.0.10
     contains at least one intra-area network (ie. described with
     router or network LSA) from this range.

 -- OSPF Command: area A.B.C.D range IPV4_PREFIX not-advertise
 -- OSPF Command: no area A.B.C.D range IPV4_PREFIX not-advertise
     Instead of summarizing intra area paths filter them - ie. intra
     area paths from this range are not advertised into other areas.
     This command makes sense in ABR only.

 -- OSPF Command: area A.B.C.D range IPV4_PREFIX substitute IPV4_PREFIX
 -- OSPF Command: no area A.B.C.D range IPV4_PREFIX substitute
IPV4_PREFIX
     Substitute summarized prefix with another prefix.

          router ospf
           network 192.168.1.0/24 area 0.0.0.0
           network 10.0.0.0/8 area 0.0.0.10
           area 0.0.0.10 range 10.0.0.0/8 substitute 11.0.0.0/8

     One Type-3 summary-LSA with routing info 11.0.0.0/8 is announced
     into backbone area if area 0.0.0.10 contains at least one
     intra-area network (ie. described with router-LSA or network-LSA)
     from range 10.0.0.0/8.  This command makes sense in ABR only.

 -- OSPF Command: area A.B.C.D virtual-link A.B.C.D
 -- OSPF Command: area <0-4294967295> virtual-link A.B.C.D
 -- OSPF Command: no area A.B.C.D virtual-link A.B.C.D
 -- OSPF Command: no area <0-4294967295> virtual-link A.B.C.D

 -- OSPF Command: area A.B.C.D shortcut
 -- OSPF Command: area <0-4294967295> shortcut
 -- OSPF Command: no area A.B.C.D shortcut
 -- OSPF Command: no area <0-4294967295> shortcut
     Configure th area as Shortcut capable. See `RFC3509'. This requires
     that the 'abr-type' be set to 'shortcut'.

 -- OSPF Command: area A.B.C.D stub
 -- OSPF Command: area <0-4294967295> stub
 -- OSPF Command: no area A.B.C.D stub
 -- OSPF Command: no area <0-4294967295> stub
     Configure the area to be a stub area. That is, an area where no
     router originates routes external to OSPF and hence an area where
     all external routes are via the ABR(s). Hence, ABRs for such an
     area do not need to pass AS-External LSAs (type-5s) or
     ASBR-Summary LSAs (type-4) into the area. They need only pass
     Network-Summary (type-3) LSAs into such an area, just a default
     summary.

 -- OSPF Command: area A.B.C.D stub no-summary
 -- OSPF Command: area <0-4294967295> stub no-summary
 -- OSPF Command: no area A.B.C.D stub no-summary
 -- OSPF Command: no area <0-4294967295> stub no-summary
     Prevents an `ospfd' ABR from injecting inter-area summaries into
     the specified stub area.

 -- OSPF Command: area A.B.C.D default-cost <0-16777215>
 -- OSPF Command: no area A.B.C.D default-cost <0-16777215>
     Set the cost of default-summary LSAs announced to stubby areas.

 -- OSPF Command: area A.B.C.D export-list NAME
 -- OSPF Command: area <0-4294967295> export-list NAME
 -- OSPF Command: no area A.B.C.D export-list NAME
 -- OSPF Command: no area <0-4294967295> export-list NAME
     Filter Type-3 summary-LSAs announced to other areas originated
     from intra- area paths from specified area.

          router ospf
           network 192.168.1.0/24 area 0.0.0.0
           network 10.0.0.0/8 area 0.0.0.10
           area 0.0.0.10 export-list foo
          !
          access-list foo permit 10.10.0.0/16
          access-list foo deny any

     With example above any intra-area paths from area 0.0.0.10 and
     from range 10.10.0.0/16 (for example 10.10.1.0/24 and
     10.10.2.128/30) are announced into other areas as Type-3
     summary-LSA's, but any others (for example 10.11.0.0/16 or
     10.128.30.16/30) aren't.

     This command is only relevant if the router is an ABR for the
     specified area.

 -- OSPF Command: area A.B.C.D import-list NAME
 -- OSPF Command: area <0-4294967295> import-list NAME
 -- OSPF Command: no area A.B.C.D import-list NAME
 -- OSPF Command: no area <0-4294967295> import-list NAME
     Same as export-list, but it applies to paths announced into
     specified area as Type-3 summary-LSAs.

 -- OSPF Command: area A.B.C.D filter-list prefix NAME in
 -- OSPF Command: area A.B.C.D filter-list prefix NAME out
 -- OSPF Command: area <0-4294967295> filter-list prefix NAME in
 -- OSPF Command: area <0-4294967295> filter-list prefix NAME out
 -- OSPF Command: no area A.B.C.D filter-list prefix NAME in
 -- OSPF Command: no area A.B.C.D filter-list prefix NAME out
 -- OSPF Command: no area <0-4294967295> filter-list prefix NAME in
 -- OSPF Command: no area <0-4294967295> filter-list prefix NAME out
     Filtering Type-3 summary-LSAs to/from area using prefix lists.
     This command makes sense in ABR only.

 -- OSPF Command: area A.B.C.D authentication
 -- OSPF Command: area <0-4294967295> authentication
 -- OSPF Command: no area A.B.C.D authentication
 -- OSPF Command: no area <0-4294967295> authentication
     Specify that simple password authentication should be used for the
     given area.

 -- OSPF Command: area A.B.C.D authentication message-digest
 -- OSPF Command: area <0-4294967295> authentication message-digest
     Specify that OSPF packets should be authenticated with MD5 HMACs
     for the given area.


File: quagga.info,  Node: OSPF interface,  Next: Redistribute routes to OSPF,  Prev: OSPF area,  Up: OSPFv2

7.4 OSPF interface
==================

 -- Interface Command: ip ospf authentication-key AUTH_KEY
 -- Interface Command: no ip ospf authentication-key
     Set OSPF authentication key to a simple password.  After setting
     AUTH_KEY, all OSPF packets are authenticated. AUTH_KEY has length
     up to 8 chars.

 -- Interface Command: ip ospf message-digest-key KEYID md5 KEY
 -- Interface Command: no ip ospf message-digest-key
     Set OSPF authentication key to a cryptographic password.  The
     cryptographic algorithm is MD5.  KEYID identifies secret key used
     to create the message digest.  KEY is the actual message digest
     key up to 16 chars.

     Note that OSPF MD5 authentication requires that time never go
     backwards (correct time is NOT important, only that it never goes
     backwards), even across resets, if ospfd is to be able to promptly
     reestabish adjacencies with its neighbours after restarts/reboots.
     The host should have system time be set at boot from an external
     source (eg battery backed clock, NTP, etc.) or else the system
     clock should be periodically saved to non-volative storage and
     restored at boot if MD5 authentication is to be expected to work
     reliably.

 -- Interface Command: ip ospf cost <1-65535>
 -- Interface Command: no ip ospf cost
     Set link cost for the specified interface.  The cost value is set
     to router-LSA's metric field and used for SPF calculation.

 -- Interface Command: ip ospf dead-interval <1-65535>
 -- Interface Command: ip ospf dead-interval minimal hello-multiplier
<2-20>
 -- Interface Command: no ip ospf dead-interval
     Set number of seconds for RouterDeadInterval timer value used for
     Wait Timer and Inactivity Timer.  This value must be the same for
     all routers attached to a common network.  The default value is 40
     seconds.

     If 'minimal' is specified instead, then the dead-interval is set
     to 1 second and one must specify a hello-multiplier. The
     hello-multiplier specifies how many Hellos to send per second,
     from 2 (every 500ms) to 20 (every 50ms). Thus one can have 1s
     convergence time for OSPF. If this form is specified, then the
     hello-interval advertised in Hello packets is set to 0 and the
     hello-interval on received Hello packets is not checked, thus the
     hello-multiplier need NOT be the same across multiple routers on a
     common link.

 -- Interface Command: ip ospf hello-interval <1-65535>
 -- Interface Command: no ip ospf hello-interval
     Set number of seconds for HelloInterval timer value.  Setting this
     value, Hello packet will be sent every timer value seconds on the
     specified interface.  This value must be the same for all routers
     attached to a common network.  The default value is 10 seconds.

     This command has no effect if *Note ip ospf dead-interval
     minimal:: is also specified for the interface.

 -- Interface Command: ip ospf network
(broadcast|non-broadcast|point-to-multipoint|point-to-point)
 -- Interface Command: no ip ospf network
     Set explicitly network type for specifed interface.

 -- Interface Command: ip ospf priority <0-255>
 -- Interface Command: no ip ospf priority
     Set RouterPriority integer value.  Setting higher value, router
     will be more eligible to become Designated Router.  Setting the
     value to 0, router is no longer eligible to Designated Router.
     The default value is 1.

 -- Interface Command: ip ospf retransmit-interval <1-65535>
 -- Interface Command: no ip ospf retransmit interval
     Set number of seconds for RxmtInterval timer value.  This value is
     used when retransmitting Database Description and Link State
     Request packets.  The default value is 5 seconds.

 -- Interface Command: ip ospf transmit-delay
 -- Interface Command: no ip ospf transmit-delay
     Set number of seconds for InfTransDelay value.  LSAs' age should be
     incremented by this value when transmitting.  The default value is
     1 seconds.


File: quagga.info,  Node: Redistribute routes to OSPF,  Next: Showing OSPF information,  Prev: OSPF interface,  Up: OSPFv2

7.5 Redistribute routes to OSPF
===============================

 -- OSPF Command: redistribute (kernel|connected|static|rip|bgp)
 -- OSPF Command: redistribute (kernel|connected|static|rip|bgp)
ROUTE-MAP
 -- OSPF Command: redistribute (kernel|connected|static|rip|bgp)
metric-type (1|2)
 -- OSPF Command: redistribute (kernel|connected|static|rip|bgp)
metric-type (1|2) route-map WORD
 -- OSPF Command: redistribute (kernel|connected|static|rip|bgp) metric
<0-16777214>
 -- OSPF Command: redistribute (kernel|connected|static|rip|bgp) metric
<0-16777214> route-map WORD
 -- OSPF Command: redistribute (kernel|connected|static|rip|bgp)
metric-type (1|2) metric <0-16777214>
 -- OSPF Command: redistribute (kernel|connected|static|rip|bgp)
metric-type (1|2) metric <0-16777214> route-map WORD
 -- OSPF Command: no redistribute (kernel|connected|static|rip|bgp)
     Redistribute routes of the specified protocol or kind into OSPF,
     with the metric type and metric set if specified, filtering the
     routes using the given route-map if specified.

 -- OSPF Command: default-information originate
 -- OSPF Command: default-information originate metric <0-16777214>
 -- OSPF Command: default-information originate metric <0-16777214>
metric-type (1|2)
 -- OSPF Command: default-information originate metric <0-16777214>
metric-type (1|2) route-map WORD
 -- OSPF Command: default-information originate always
 -- OSPF Command: default-information originate always metric
<0-16777214>
 -- OSPF Command: default-information originate always metric
<0-16777214> metric-type (1|2)
 -- OSPF Command: default-information originate always metric
<0-16777214> metric-type (1|2) route-map WORD
 -- OSPF Command: no default-information originate
     Originate an AS-External (type-5) LSA describing a default route
     into all external-routing capable areas, of the specified metric
     and metric type. If the 'always' keyword is given then the default
     is always advertised, even when there is no default present in the
     routing table.

 -- OSPF Command: distribute-list NAME out
(kernel|connected|static|rip|ospf
 -- OSPF Command: no distribute-list NAME out
(kernel|connected|static|rip|ospf

 -- OSPF Command: default-metric <0-16777214>
 -- OSPF Command: no default-metric

 -- OSPF Command: distance <1-255>
 -- OSPF Command: no distance <1-255>

 -- OSPF Command: distance ospf (intra-area|inter-area|external)
          <1-255>
 -- OSPF Command: no distance ospf

 -- Command: router zebra
 -- Command: no router zebra


File: quagga.info,  Node: Showing OSPF information,  Next: Debugging OSPF,  Prev: Redistribute routes to OSPF,  Up: OSPFv2

7.6 Showing OSPF information
============================

 -- Command: show ip ospf
     Show information on a variety of general OSPF and area state and
     configuration information.

 -- Command: show ip ospf interface [INTERFACE]
     Show state and configuration of OSPF the specified interface, or
     all interfaces if no interface is given.

 -- Command: show ip ospf neighbor
 -- Command: show ip ospf neighbor INTERFACE
 -- Command: show ip ospf neighbor detail
 -- Command: show ip ospf neighbor INTERFACE detail

 -- Command: show ip ospf database

 -- Command: show ip ospf database
(asbr-summary|external|network|router|summary)
 -- Command: show ip ospf database
(asbr-summary|external|network|router|summary) LINK-STATE-ID
 -- Command: show ip ospf database
(asbr-summary|external|network|router|summary) LINK-STATE-ID adv-router
ADV-ROUTER
 -- Command: show ip ospf database
(asbr-summary|external|network|router|summary) adv-router ADV-ROUTER
 -- Command: show ip ospf database
(asbr-summary|external|network|router|summary) LINK-STATE-ID
self-originate
 -- Command: show ip ospf database
(asbr-summary|external|network|router|summary) self-originate

 -- Command: show ip ospf database max-age

 -- Command: show ip ospf database self-originate

 -- Command: show ip ospf route
     Show the OSPF routing table, as determined by the most recent SPF
     calculation.


File: quagga.info,  Node: Debugging OSPF,  Next: OSPF Configuration Examples,  Prev: Showing OSPF information,  Up: OSPFv2

7.7 Debugging OSPF
==================

 -- Command: debug ospf packet
(hello|dd|ls-request|ls-update|ls-ack|all) (send|recv) [detail]
 -- Command: no debug ospf packet
(hello|dd|ls-request|ls-update|ls-ack|all) (send|recv) [detail]

 -- Command: debug ospf ism
 -- Command: debug ospf ism (status|events|timers)
 -- Command: no debug ospf ism
 -- Command: no debug ospf ism (status|events|timers)

 -- Command: debug ospf nsm
 -- Command: debug ospf nsm (status|events|timers)
 -- Command: no debug ospf nsm
 -- Command: no debug ospf nsm (status|events|timers)

 -- Command: debug ospf lsa
 -- Command: debug ospf lsa (generate|flooding|refresh)
 -- Command: no debug ospf lsa
 -- Command: no debug ospf lsa (generate|flooding|refresh)

 -- Command: debug ospf zebra
 -- Command: debug ospf zebra (interface|redistribute)
 -- Command: no debug ospf zebra
 -- Command: no debug ospf zebra (interface|redistribute)

 -- Command: show debugging ospf


File: quagga.info,  Node: OSPF Configuration Examples,  Prev: Debugging OSPF,  Up: OSPFv2

7.8 OSPF Configuration Examples
===============================

A simple example, with MD5 authentication enabled:

     !
     interface bge0
      ip ospf authentication message-digest
      ip ospf message-digest-key 1 md5 ABCDEFGHIJK
     !
     router ospf
      network 192.168.0.0/16 area 0.0.0.1
      area 0.0.0.1 authentication message-digest

   An ABR router, with MD5 authentication and performing summarisation
of networks between the areas:

     !
     password ABCDEF
     log file /var/log/quagga/ospfd.log
     service advanced-vty
     !
     interface eth0
      ip ospf authentication message-digest
      ip ospf message-digest-key 1 md5 ABCDEFGHIJK
     !
     interface ppp0
     !
     interface br0
      ip ospf authentication message-digest
      ip ospf message-digest-key 2 md5 XYZ12345
     !
     router ospf
      ospf router-id 192.168.0.1
      redistribute connected
      passive interface ppp0
      network 192.168.0.0/24 area 0.0.0.0
      network 10.0.0.0/16 area 0.0.0.0
      network 192.168.1.0/24 area 0.0.0.1
      area 0.0.0.0 authentication message-digest
      area 0.0.0.0 range 10.0.0.0/16
      area 0.0.0.0 range 192.168.0.0/24
      area 0.0.0.1 authentication message-digest
      area 0.0.0.1 range 10.2.0.0/16
     !


File: quagga.info,  Node: OSPFv3,  Next: BGP,  Prev: OSPFv2,  Up: Top

8 OSPFv3
********

`ospf6d' is a daemon support OSPF version 3 for IPv6 network.  OSPF for
IPv6 is described in RFC2740.

* Menu:

* OSPF6 router::
* OSPF6 area::
* OSPF6 interface::
* Redistribute routes to OSPF6::
* Showing OSPF6 information::
* OSPF6 Configuration Examples::


File: quagga.info,  Node: OSPF6 router,  Next: OSPF6 area,  Up: OSPFv3

8.1 OSPF6 router
================

 -- Command: router ospf6

 -- OSPF6 Command: router-id A.B.C.D
     Set router's Router-ID.

 -- OSPF6 Command: interface IFNAME area AREA
     Bind interface to specified area, and start sending OSPF packets.
     AREA can be specified as 0.


File: quagga.info,  Node: OSPF6 area,  Next: OSPF6 interface,  Prev: OSPF6 router,  Up: OSPFv3

8.2 OSPF6 area
==============

Area support for OSPFv3 is not yet implemented.


File: quagga.info,  Node: OSPF6 interface,  Next: Redistribute routes to OSPF6,  Prev: OSPF6 area,  Up: OSPFv3

8.3 OSPF6 interface
===================

 -- Interface Command: ipv6 ospf6 cost COST
     Sets interface's output cost.  Default value is 1.

 -- Interface Command: ipv6 ospf6 hello-interval HELLOINTERVAL
     Sets interface's Hello Interval.  Default 40

 -- Interface Command: ipv6 ospf6 dead-interval DEADINTERVAL
     Sets interface's Router Dead Interval.  Default value is 40.

 -- Interface Command: ipv6 ospf6 retransmit-interval
          RETRANSMITINTERVAL
     Sets interface's Rxmt Interval.  Default value is 5.

 -- Interface Command: ipv6 ospf6 priority PRIORITY
     Sets interface's Router Priority.  Default value is 1.

 -- Interface Command: ipv6 ospf6 transmit-delay TRANSMITDELAY
     Sets interface's Inf-Trans-Delay.  Default value is 1.


File: quagga.info,  Node: Redistribute routes to OSPF6,  Next: Showing OSPF6 information,  Prev: OSPF6 interface,  Up: OSPFv3

8.4 Redistribute routes to OSPF6
================================

 -- OSPF6 Command: redistribute static
 -- OSPF6 Command: redistribute connected
 -- OSPF6 Command: redistribute ripng


File: quagga.info,  Node: Showing OSPF6 information,  Next: OSPF6 Configuration Examples,  Prev: Redistribute routes to OSPF6,  Up: OSPFv3

8.5 Showing OSPF6 information
=============================

 -- Command: show ipv6 ospf6 [INSTANCE_ID]
     INSTANCE_ID is an optional OSPF instance ID. To see router ID and
     OSPF instance ID, simply type "show ipv6 ospf6 <cr>".

 -- Command: show ipv6 ospf6 database
     This command shows LSA database summary.  You can specify the type
     of LSA.

 -- Command: show ipv6 ospf6 interface
     To see OSPF interface configuration like costs.

 -- Command: show ipv6 ospf6 neighbor
     Shows state and chosen (Backup) DR of neighbor.

 -- Command: show ipv6 ospf6 request-list A.B.C.D
     Shows requestlist of neighbor.

 -- Command: show ipv6 route ospf6
     This command shows internal routing table.


File: quagga.info,  Node: OSPF6 Configuration Examples,  Prev: Showing OSPF6 information,  Up: OSPFv3

8.6 OSPF6 Configuration Examples
================================

Example of ospf6d configured on one interface and area:

     interface eth0
      ipv6 ospf6 instance-id 0
     !
     router ospf6
      router-id 212.17.55.53
      area 0.0.0.0 range 2001:770:105:2::/64
      interface eth0 area 0.0.0.0
     !


File: quagga.info,  Node: BGP,  Next: Configuring Quagga as a Route Server,  Prev: OSPFv3,  Up: Top

9 BGP
*****

BGP stands for a Border Gateway Protocol.  The lastest BGP version is
4.  It is referred as BGP-4.  BGP-4 is one of the Exterior Gateway
Protocols and de-fact standard of Inter Domain routing protocol.  BGP-4
is described in `RFC1771, A Border Gateway Protocol 4 (BGP-4)'.

   Many extensions have been added to `RFC1771'.  `RFC2858,
Multiprotocol Extensions for BGP-4' provides multiprotocol support to
BGP-4.

* Menu:

* Starting BGP::
* BGP router::
* BGP network::
* BGP Peer::
* BGP Peer Group::
* BGP Address Family::
* Autonomous System::
* BGP Communities Attribute::
* BGP Extended Communities Attribute::
* Displaying BGP routes::
* Capability Negotiation::
* Route Reflector::
* Route Server::
* How to set up a 6-Bone connection::
* Dump BGP packets and table::
* BGP Configuration Examples::


File: quagga.info,  Node: Starting BGP,  Next: BGP router,  Up: BGP

9.1 Starting BGP
================

Default configuration file of `bgpd' is `bgpd.conf'.  `bgpd' searches
the current directory first then /etc/quagga/bgpd.conf.  All of bgpd's
command must be configured in `bgpd.conf'.

   `bgpd' specific invocation options are described below.  Common
options may also be specified (*note Common Invocation Options::).

`-p PORT'
`--bgp_port=PORT'
     Set the bgp protocol's port number.

`-r'
`--retain'
     When program terminates, retain BGP routes added by zebra.


File: quagga.info,  Node: BGP router,  Next: BGP network,  Prev: Starting BGP,  Up: BGP

9.2 BGP router
==============

First of all you must configure BGP router with `router bgp' command.
To configure BGP router, you need AS number.  AS number is an
identification of autonomous system.  BGP protocol uses the AS number
for detecting whether the BGP connection is internal one or external
one.

 -- Command: router bgp ASN
     Enable a BGP protocol process with the specified ASN.  After this
     statement you can input any `BGP Commands'.  You can not create
     different BGP process under different ASN without specifying
     `multiple-instance' (*note Multiple instance::).

 -- Command: no router bgp ASN
     Destroy a BGP protocol process with the specified ASN.

 -- BGP: bgp router-id A.B.C.D
     This command specifies the router-ID.  If `bgpd' connects to
     `zebra' it gets interface and address information.  In that case
     default router ID value is selected as the largest IP Address of
     the interfaces.  When `router zebra' is not enabled `bgpd' can't
     get interface information so `router-id' is set to 0.0.0.0.  So
     please set router-id by hand.

* Menu:

* BGP distance::
* BGP decision process::


File: quagga.info,  Node: BGP distance,  Next: BGP decision process,  Up: BGP router

9.2.1 BGP distance
------------------

 -- BGP: distance bgp <1-255> <1-255> <1-255>
     This command change distance value of BGP.  Each argument is
     distance value for external routes, internal routes and local
     routes.

 -- BGP: distance <1-255> A.B.C.D/M
 -- BGP: distance <1-255> A.B.C.D/M WORD
     This command set distance value to


File: quagga.info,  Node: BGP decision process,  Prev: BGP distance,  Up: BGP router

9.2.2 BGP decision process
--------------------------

1. Weight check

2. Local preference check.

3. Local route check.

4. AS path length check.

5. Origin check.

6. MED check.

 -- BGP: bgp bestpath as-path confed
     This command specifies that the length of confederation path sets
     and sequences should should be taken into account during the BGP
     best path decision process.


File: quagga.info,  Node: BGP network,  Next: BGP Peer,  Prev: BGP router,  Up: BGP

9.3 BGP network
===============

* Menu:

* BGP route::
* Route Aggregation::
* Redistribute to BGP::


File: quagga.info,  Node: BGP route,  Next: Route Aggregation,  Up: BGP network

9.3.1 BGP route
---------------

 -- BGP: network A.B.C.D/M
     This command adds the announcement network.
          router bgp 1
           network 10.0.0.0/8
     This configuration example says that network 10.0.0.0/8 will
     be announced to all neighbors.  Some vendors' routers don't
     advertise routes if they aren't present in their IGP routing
     tables; `bgp' doesn't care about IGP routes when announcing its
     routes.

 -- BGP: no network A.B.C.D/M


File: quagga.info,  Node: Route Aggregation,  Next: Redistribute to BGP,  Prev: BGP route,  Up: BGP network

9.3.2 Route Aggregation
-----------------------

 -- BGP: aggregate-address A.B.C.D/M
     This command specifies an aggregate address.

 -- BGP: aggregate-address A.B.C.D/M as-set
     This command specifies an aggregate address.  Resulting routes
     inlucde AS set.

 -- BGP: aggregate-address A.B.C.D/M summary-only
     This command specifies an aggregate address.  Aggreated routes will
     not be announce.

 -- BGP: no aggregate-address A.B.C.D/M


File: quagga.info,  Node: Redistribute to BGP,  Prev: Route Aggregation,  Up: BGP network

9.3.3 Redistribute to BGP
-------------------------

 -- BGP: redistribute kernel
     Redistribute kernel route to BGP process.

 -- BGP: redistribute static
     Redistribute static route to BGP process.

 -- BGP: redistribute connected
     Redistribute connected route to BGP process.

 -- BGP: redistribute rip
     Redistribute RIP route to BGP process.

 -- BGP: redistribute ospf
     Redistribute OSPF route to BGP process.


File: quagga.info,  Node: BGP Peer,  Next: BGP Peer Group,  Prev: BGP network,  Up: BGP

9.4 BGP Peer
============

* Menu:

* Defining Peer::
* BGP Peer commands::
* Peer filtering::


File: quagga.info,  Node: Defining Peer,  Next: BGP Peer commands,  Up: BGP Peer

9.4.1 Defining Peer
-------------------

 -- BGP: neighbor PEER remote-as ASN
     Creates a new neighbor whose remote-as is ASN.  PEER can be an
     IPv4 address or an IPv6 address.
          router bgp 1
           neighbor 10.0.0.1 remote-as 2
     In this case my router, in AS-1, is trying to peer with AS-2
     at 10.0.0.1.

     This command must be the first command used when configuring a
     neighbor.  If the remote-as is not specified, `bgpd' will complain
     like this:
          can't find neighbor 10.0.0.1


File: quagga.info,  Node: BGP Peer commands,  Next: Peer filtering,  Prev: Defining Peer,  Up: BGP Peer

9.4.2 BGP Peer commands
-----------------------

In a `router bgp' clause there are neighbor specific configurations
required.

 -- BGP: neighbor PEER shutdown
 -- BGP: no neighbor PEER shutdown
     Shutdown the peer.  We can delete the neighbor's configuration by
     `no neighbor PEER remote-as AS-NUMBER' but all configuration of
     the neighbor will be deleted.  When you want to preserve the
     configuration, but want to drop the BGP peer, use this syntax.

 -- BGP: neighbor PEER ebgp-multihop
 -- BGP: no neighbor PEER ebgp-multihop

 -- BGP: neighbor PEER description ...
 -- BGP: no neighbor PEER description ...
     Set description of the peer.

 -- BGP: neighbor PEER version VERSION
     Set up the neighbor's BGP version.  VERSION can be 4, 4+ or 4-.
     BGP version 4 is the default value used for BGP peering.  BGP
     version 4+ means that the neighbor supports Multiprotocol
     Extensions for BGP-4.  BGP version 4- is similar but the neighbor
     speaks the old Internet-Draft revision 00's Multiprotocol
     Extensions for BGP-4.  Some routing software is still using this
     version.

 -- BGP: neighbor PEER interface IFNAME
 -- BGP: no neighbor PEER interface IFNAME
     When you connect to a BGP peer over an IPv6 link-local address,
     you have to specify the IFNAME of the interface used for the
     connection.

 -- BGP: neighbor PEER next-hop-self
 -- BGP: no neighbor PEER next-hop-self
     This command specifies an announced route's nexthop as being
     equivalent to the address of the bgp router.

 -- BGP: neighbor PEER update-source
 -- BGP: no neighbor PEER update-source

 -- BGP: neighbor PEER default-originate
 -- BGP: no neighbor PEER default-originate
     `bgpd''s default is to not announce the default route (0.0.0.0/0)
     even it is in routing table.  When you want to announce default
     routes to the peer, use this command.

 -- BGP: neighbor PEER port PORT
 -- BGP: neighbor PEER port PORT

 -- BGP: neighbor PEER send-community
 -- BGP: neighbor PEER send-community

 -- BGP: neighbor PEER weight WEIGHT
 -- BGP: no neighbor PEER weight WEIGHT
     This command specifies a default WEIGHT value for the neighbor's
     routes.

 -- BGP: neighbor PEER maximum-prefix NUMBER
 -- BGP: no neighbor PEER maximum-prefix NUMBER


File: quagga.info,  Node: Peer filtering,  Prev: BGP Peer commands,  Up: BGP Peer

9.4.3 Peer filtering
--------------------

 -- BGP: neighbor PEER distribute-list NAME [in|out]
     This command specifies a distribute-list for the peer.  DIRECT is
     `in' or `out'.

 -- BGP command: neighbor PEER prefix-list NAME [in|out]

 -- BGP command: neighbor PEER filter-list NAME [in|out]

 -- BGP: neighbor PEER route-map NAME [in|out]
     Apply a route-map on the neighbor.  DIRECT must be `in' or `out'.


File: quagga.info,  Node: BGP Peer Group,  Next: BGP Address Family,  Prev: BGP Peer,  Up: BGP

9.5 BGP Peer Group
==================

 -- BGP: neighbor WORD peer-group
     This command defines a new peer group.

 -- BGP: neighbor PEER peer-group WORD
     This command bind specific peer to peer group WORD.


File: quagga.info,  Node: BGP Address Family,  Next: Autonomous System,  Prev: BGP Peer Group,  Up: BGP

9.6 BGP Address Family
======================


File: quagga.info,  Node: Autonomous System,  Next: BGP Communities Attribute,  Prev: BGP Address Family,  Up: BGP

9.7 Autonomous System
=====================

The AS (Autonomous System) number is one of the essential element of
BGP.  BGP is a distance vector routing protocol, and the AS-Path
framework provides distance vector metric and loop detection to BGP.
`RFC1930, Guidelines for creation, selection, and registration of an
Autonomous System (AS)' provides some background on the concepts of an
AS.

   The AS number is a two octet value, ranging in value from 1 to 65535.
The AS numbers 64512 through 65535 are defined as private AS numbers.
Private AS numbers must not to be advertised in the global Internet.

* Menu:

* AS Path Regular Expression::
* Display BGP Routes by AS Path::
* AS Path Access List::
* Using AS Path in Route Map::
* Private AS Numbers::


File: quagga.info,  Node: AS Path Regular Expression,  Next: Display BGP Routes by AS Path,  Up: Autonomous System

9.7.1 AS Path Regular Expression
--------------------------------

AS path regular expression can be used for displaying BGP routes and AS
path access list.  AS path regular expression is based on `POSIX
1003.2' regular expressions.  Following description is just a subset of
`POSIX' regular expression.  User can use full `POSIX' regular
expression.  Adding to that special character '_' is added for AS path
regular expression.

`.'
     Matches any single character.

`*'
     Matches 0 or more occurrences of pattern.

`+'
     Matches 1 or more occurrences of pattern.

`?'
     Match 0 or 1 occurrences of pattern.

`^'
     Matches the beginning of the line.

`$'
     Matches the end of the line.

`_'
     Character `_' has special meanings in AS path regular expression.
     It matches to space and comma , and AS set delimiter { and } and AS
     confederation delimiter `(' and `)'.  And it also matches to the
     beginning of the line and the end of the line.  So `_' can be used
     for AS value boundaries match.  `show ip bgp regexp _7675_'
     matches to all of BGP routes which as AS number include 7675.


File: quagga.info,  Node: Display BGP Routes by AS Path,  Next: AS Path Access List,  Prev: AS Path Regular Expression,  Up: Autonomous System

9.7.2 Display BGP Routes by AS Path
-----------------------------------

To show BGP routes which has specific AS path information `show ip bgp'
command can be used.

 -- Command: show ip bgp regexp LINE
     This commands display BGP routes that matches AS path regular
     expression LINE.


File: quagga.info,  Node: AS Path Access List,  Next: Using AS Path in Route Map,  Prev: Display BGP Routes by AS Path,  Up: Autonomous System

9.7.3 AS Path Access List
-------------------------

AS path access list is user defined AS path.

 -- Command: ip as-path access-list WORD {permit|deny} LINE
     This command defines a new AS path access list.

 -- Command: no ip as-path access-list WORD
 -- Command: no ip as-path access-list WORD {permit|deny} LINE


File: quagga.info,  Node: Using AS Path in Route Map,  Next: Private AS Numbers,  Prev: AS Path Access List,  Up: Autonomous System

9.7.4 Using AS Path in Route Map
--------------------------------

 -- Route Map: match as-path WORD

 -- Route Map: set as-path prepend AS-PATH


File: quagga.info,  Node: Private AS Numbers,  Prev: Using AS Path in Route Map,  Up: Autonomous System

9.7.5 Private AS Numbers
------------------------


File: quagga.info,  Node: BGP Communities Attribute,  Next: BGP Extended Communities Attribute,  Prev: Autonomous System,  Up: BGP

9.8 BGP Communities Attribute
=============================

BGP communities attribute is widely used for implementing policy
routing.  Network operators can manipulate BGP communities attribute
based on their network policy.  BGP communities attribute is defined in
`RFC1997, BGP Communities Attribute' and `RFC1998, An Application of
the BGP Community Attribute in Multi-home Routing'.  It is an optional
transitive attribute, therefore local policy can travel through
different autonomous system.

   Communities attribute is a set of communities values.  Each
communities value is 4 octet long.  The following format is used to
define communities value.

`AS:VAL'
     This format represents 4 octet communities value.  `AS' is high
     order 2 octet in digit format.  `VAL' is low order 2 octet in
     digit format.  This format is useful to define AS oriented policy
     value.  For example, `7675:80' can be used when AS 7675 wants to
     pass local policy value 80 to neighboring peer.

`internet'
     `internet' represents well-known communities value 0.

`no-export'
     `no-export' represents well-known communities value `NO_EXPORT'
     (0xFFFFFF01).  All routes carry this value must not be advertised
     to outside a BGP confederation boundary.  If neighboring BGP peer
     is part of BGP confederation, the peer is considered as inside a
     BGP confederation boundary, so the route will be announced to the
     peer.

`no-advertise'
     `no-advertise' represents well-known communities value
     `NO_ADVERTISE'
     (0xFFFFFF02).  All routes carry this value must not be advertise
     to other BGP peers.

`local-AS'
     `local-AS' represents well-known communities value
     `NO_EXPORT_SUBCONFED' (0xFFFFFF03).  All routes carry this value
     must not be advertised to external BGP peers.  Even if the
     neighboring router is part of confederation, it is considered as
     external BGP peer, so the route will not be announced to the peer.

   When BGP communities attribute is received, duplicated communities
value in the communities attribute is ignored and each communities
values are sorted in numerical order.

* Menu:

* BGP Community Lists::
* Numbered BGP Community Lists::
* BGP Community in Route Map::
* Display BGP Routes by Community::
* Using BGP Communities Attribute::


File: quagga.info,  Node: BGP Community Lists,  Next: Numbered BGP Community Lists,  Up: BGP Communities Attribute

9.8.1 BGP Community Lists
-------------------------

BGP community list is a user defined BGP communites attribute list.
BGP community list can be used for matching or manipulating BGP
communities attribute in updates.

   There are two types of community list.  One is standard community
list and another is expanded community list.  Standard community list
defines communities attribute.  Expanded community list defines
communities attribute string with regular expression.  Standard
community list is compiled into binary format when user define it.
Standard community list will be directly compared to BGP communities
attribute in BGP updates.  Therefore the comparison is faster than
expanded community list.

 -- Command: ip community-list standard NAME {permit|deny} COMMUNITY
     This command defines a new standard community list.  COMMUNITY is
     communities value.  The COMMUNITY is compiled into community
     structure.  We can define multiple community list under same name.
     In that case match will happen user defined order.  Once the
     community list matches to communities attribute in BGP updates it
     return permit or deny by the community list definition.  When
     there is no matched entry, deny will be returned.  When COMMUNITY
     is empty it matches to any routes.

 -- Command: ip community-list expanded NAME {permit|deny} LINE
     This command defines a new expanded community list.  LINE is a
     string expression of communities attribute.  LINE can include
     regular expression to match communities attribute in BGP updates.

 -- Command: no ip community-list NAME
 -- Command: no ip community-list standard NAME
 -- Command: no ip community-list expanded NAME
     These commands delete community lists specified by NAME.  All of
     community lists shares a single name space.  So community lists
     can be removed simpley specifying community lists name.

 -- Command: show ip community-list
 -- Command: show ip community-list NAME
     This command display current community list information.  When
     NAME is specified the specified community list's information is
     shown.

          # show ip community-list
          Named Community standard list CLIST
              permit 7675:80 7675:100 no-export
              deny internet
          Named Community expanded list EXPAND
              permit :

          # show ip community-list CLIST
          Named Community standard list CLIST
              permit 7675:80 7675:100 no-export
              deny internet


File: quagga.info,  Node: Numbered BGP Community Lists,  Next: BGP Community in Route Map,  Prev: BGP Community Lists,  Up: BGP Communities Attribute

9.8.2 Numbered BGP Community Lists
----------------------------------

When number is used for BGP community list name, the number has special
meanings.  Community list number in the range from 1 and 99 is standard
community list.  Community list number in the range from 100 to 199 is
expanded community list.  These community lists are called as numbered
community lists.  On the other hand normal community lists is called as
named community lists.

 -- Command: ip community-list <1-99> {permit|deny} COMMUNITY
     This command defines a new community list.  <1-99> is standard
     community list number.  Community list name within this range
     defines standard community list.  When COMMUNITY is empty it
     matches to any routes.

 -- Command: ip community-list <100-199> {permit|deny} COMMUNITY
     This command defines a new community list.  <100-199> is expanded
     community list number.  Community list name within this range
     defines expanded community list.

 -- Command: ip community-list NAME {permit|deny} COMMUNITY
     When community list type is not specifed, the community list type
     is automatically detected.  If COMMUNITY can be compiled into
     communities attribute, the community list is defined as a standard
     community list.  Otherwise it is defined as an expanded community
     list.  This feature is left for backward compability.  Use of this
     feature is not recommended.


File: quagga.info,  Node: BGP Community in Route Map,  Next: Display BGP Routes by Community,  Prev: Numbered BGP Community Lists,  Up: BGP Communities Attribute

9.8.3 BGP Community in Route Map
--------------------------------

In Route Map (*note Route Map::), we can match or set BGP communities
attribute.  Using this feature network operator can implement their
network policy based on BGP communities attribute.

   Following commands can be used in Route Map.

 -- Route Map: match community WORD
 -- Route Map: match community WORD exact-match
     This command perform match to BGP updates using community list
     WORD.  When the one of BGP communities value match to the one of
     communities value in community list, it is match.  When
     `exact-match' keyword is spcified, match happen only when BGP
     updates have completely same communities value specified in the
     community list.

 -- Route Map: set community none
 -- Route Map: set community COMMUNITY
 -- Route Map: set community COMMUNITY additive
     This command manipulate communities value in BGP updates.  When
     `none' is specified as communities value, it removes entire
     communities attribute from BGP updates.  When COMMUNITY is not
     `none', specified communities value is set to BGP updates.  If BGP
     updates already has BGP communities value, the existing BGP
     communities value is replaced with specified COMMUNITY value.
     When `additive' keyword is specified, COMMUNITY is appended to the
     existing communities value.

 -- Route Map: set comm-list WORD delete
     This command remove communities value from BGP communities
     attribute.  The WORD is community list name.  When BGP route's
     communities value matches to the community list WORD, the
     communities value is removed.  When all of communities value is
     removed eventually, the BGP update's communities attribute is
     completely removed.


File: quagga.info,  Node: Display BGP Routes by Community,  Next: Using BGP Communities Attribute,  Prev: BGP Community in Route Map,  Up: BGP Communities Attribute

9.8.4 Display BGP Routes by Community
-------------------------------------

To show BGP routes which has specific BGP communities attribute, `show
ip bgp' command can be used.  The COMMUNITY value and community list
can be used for `show ip bgp' command.

 -- Command: show ip bgp community
 -- Command: show ip bgp community COMMUNITY
 -- Command: show ip bgp community COMMUNITY exact-match
     `show ip bgp community' displays BGP routes which has communities
     attribute.  When COMMUNITY is specified, BGP routes that matches
     COMMUNITY value is displayed.  For this command, `internet'
     keyword can't be used for COMMUNITY value.  When `exact-match' is
     specified, it display only routes that have an exact match.

 -- Command: show ip bgp community-list WORD
 -- Command: show ip bgp community-list WORD exact-match
     This commands display BGP routes that matches community list WORD.
     When `exact-match' is specified, display only routes that have an
     exact match.


File: quagga.info,  Node: Using BGP Communities Attribute,  Prev: Display BGP Routes by Community,  Up: BGP Communities Attribute

9.8.5 Using BGP Communities Attribute
-------------------------------------

Following configuration is the most typical usage of BGP communities
attribute.  AS 7675 provides upstream Internet connection to AS 100.
When following configuration exists in AS 7675, AS 100 networks
operator can set local preference in AS 7675 network by setting BGP
communities attribute to the updates.

     router bgp 7675
      neighbor 192.168.0.1 remote-as 100
      neighbor 192.168.0.1 route-map RMAP in
     !
     ip community-list 70 permit 7675:70
     ip community-list 70 deny
     ip community-list 80 permit 7675:80
     ip community-list 80 deny
     ip community-list 90 permit 7675:90
     ip community-list 90 deny
     !
     route-map RMAP permit 10
      match community 70
      set local-preference 70
     !
     route-map RMAP permit 20
      match community 80
      set local-preference 80
     !
     route-map RMAP permit 30
      match community 90
      set local-preference 90

   Following configuration announce 10.0.0.0/8 from AS 100 to AS 7675.
The route has communities value 7675:80 so when above configuration
exists in AS 7675, announced route's local preference will be set to
value 80.

     router bgp 100
      network 10.0.0.0/8
      neighbor 192.168.0.2 remote-as 7675
      neighbor 192.168.0.2 route-map RMAP out
     !
     ip prefix-list PLIST permit 10.0.0.0/8
     !
     route-map RMAP permit 10
      match ip address prefix-list PLIST
      set community 7675:80

   Following configuration is an example of BGP route filtering using
communities attribute.  This configuration only permit BGP routes which
has BGP communities value 0:80 or 0:90.  Network operator can put
special internal communities value at BGP border router, then limit the
BGP routes announcement into the internal network.

     router bgp 7675
      neighbor 192.168.0.1 remote-as 100
      neighbor 192.168.0.1 route-map RMAP in
     !
     ip community-list 1 permit 0:80 0:90
     !
     route-map RMAP permit in
      match community 1

   Following exmaple filter BGP routes which has communities value 1:1.
When there is no match community-list returns deny.  To avoid filtering
all of routes, we need to define permit any at last.

     router bgp 7675
      neighbor 192.168.0.1 remote-as 100
      neighbor 192.168.0.1 route-map RMAP in
     !
     ip community-list standard FILTER deny 1:1
     ip community-list standard FILTER permit
     !
     route-map RMAP permit 10
      match community FILTER

   Communities value keyword `internet' has special meanings in
standard community lists.  In below example `internet' act as match
any.  It matches all of BGP routes even if the route does not have
communities attribute at all.  So community list `INTERNET' is same as
above example's `FILTER'.

     ip community-list standard INTERNET deny 1:1
     ip community-list standard INTERNET permit internet

   Following configuration is an example of communities value deletion.
With this configuration communities value 100:1 and 100:2 is removed
from BGP updates.  For communities value deletion, only `permit'
community-list is used.  `deny' community-list is ignored.

     router bgp 7675
      neighbor 192.168.0.1 remote-as 100
      neighbor 192.168.0.1 route-map RMAP in
     !
     ip community-list standard DEL permit 100:1 100:2
     !
     route-map RMAP permit 10
      set comm-list DEL delete


File: quagga.info,  Node: BGP Extended Communities Attribute,  Next: Displaying BGP routes,  Prev: BGP Communities Attribute,  Up: BGP

9.9 BGP Extended Communities Attribute
======================================

BGP extended communities attribute is introduced with MPLS VPN/BGP
technology.  MPLS VPN/BGP expands capability of network infrastructure
to provide VPN functionality.  At the same time it requires a new
framework for policy routing.  With BGP Extended Communities Attribute
we can use Route Target or Site of Origin for implementing network
policy for MPLS VPN/BGP.

   BGP Extended Communities Attribute is similar to BGP Communities
Attribute.  It is an optional transitive attribute.  BGP Extended
Communities Attribute can carry multiple Extended Community value.
Each Extended Community value is eight octet length.

   BGP Extended Communities Attribute provides an extended range
compared with BGP Communities Attribute.  Adding to that there is a
type field in each value to provides community space structure.

   There are two format to define Extended Community value.  One is AS
based format the other is IP address based format.

`AS:VAL'
     This is a format to define AS based Extended Community value.
     `AS' part is 2 octets Global Administrator subfield in Extended
     Community value.  `VAL' part is 4 octets Local Administrator
     subfield.  `7675:100' represents AS 7675 policy value 100.

`IP-Address:VAL'
     This is a format to define IP address based Extended Community
     value.  `IP-Address' part is 4 octets Global Administrator
     subfield.  `VAL' part is 2 octets Local Administrator subfield.
     `10.0.0.1:100' represents

* Menu:

* BGP Extended Community Lists::
* BGP Extended Communities in Route Map::


File: quagga.info,  Node: BGP Extended Community Lists,  Next: BGP Extended Communities in Route Map,  Up: BGP Extended Communities Attribute

9.9.1 BGP Extended Community Lists
----------------------------------

Expanded Community Lists is a user defined BGP Expanded Community Lists.

 -- Command: ip extcommunity-list standard NAME {permit|deny}
EXTCOMMUNITY
     This command defines a new standard extcommunity-list.
     EXTCOMMUNITY is extended communities value.  The EXTCOMMUNITY is
     compiled into extended community structure.  We can define
     multiple extcommunity-list under same name.  In that case match
     will happen user defined order.  Once the extcommunity-list
     matches to extended communities attribute in BGP updates it return
     permit or deny based upon the extcommunity-list definition.  When
     there is no matched entry, deny will be returned.  When
     EXTCOMMUNITY is empty it matches to any routes.

 -- Command: ip extcommunity-list expanded NAME {permit|deny} LINE
     This command defines a new expanded extcommunity-list.  LINE is a
     string expression of extended communities attribute.  LINE can
     include regular expression to match extended communities attribute
     in BGP updates.

 -- Command: no ip extcommunity-list NAME
 -- Command: no ip extcommunity-list standard NAME
 -- Command: no ip extcommunity-list expanded NAME
     These commands delete extended community lists specified by NAME.
     All of extended community lists shares a single name space.  So
     extended community lists can be removed simpley specifying the
     name.

 -- Command: show ip extcommunity-list
 -- Command: show ip extcommunity-list NAME
     This command display current extcommunity-list information.  When
     NAME is specified the community list's information is shown.

          # show ip extcommunity-list


File: quagga.info,  Node: BGP Extended Communities in Route Map,  Prev: BGP Extended Community Lists,  Up: BGP Extended Communities Attribute

9.9.2 BGP Extended Communities in Route Map
-------------------------------------------

 -- Route Map: match extcommunity WORD

 -- Route Map: set extcommunity rt EXTCOMMUNITY
     This command set Route Target value.

 -- Route Map: set extcommunity soo EXTCOMMUNITY
     This command set Site of Origin value.


File: quagga.info,  Node: Displaying BGP routes,  Next: Capability Negotiation,  Prev: BGP Extended Communities Attribute,  Up: BGP

9.10 Displaying BGP Routes
==========================

* Menu:

* Show IP BGP::
* More Show IP BGP::


File: quagga.info,  Node: Show IP BGP,  Next: More Show IP BGP,  Up: Displaying BGP routes

9.10.1 Show IP BGP
------------------

 -- Command: show ip bgp
 -- Command: show ip bgp A.B.C.D
 -- Command: show ip bgp X:X::X:X
     This command displays BGP routes.  When no route is specified it
     display all of IPv4 BGP routes.

     BGP table version is 0, local router ID is 10.1.1.1
     Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
     Origin codes: i - IGP, e - EGP, ? - incomplete

        Network          Next Hop            Metric LocPrf Weight Path
     *> 1.1.1.1/32       0.0.0.0                  0         32768 i

     Total number of prefixes 1


File: quagga.info,  Node: More Show IP BGP,  Prev: Show IP BGP,  Up: Displaying BGP routes

9.10.2 More Show IP BGP
-----------------------

 -- Command: show ip bgp regexp LINE
     This command display BGP routes using AS path regular expression
     (*note Display BGP Routes by AS Path::).

 -- Command: show ip bgp community COMMUNITY
 -- Command: show ip bgp community COMMUNITY exact-match
     This command display BGP routes using COMMUNITY (*note Display BGP
     Routes by Community::).

 -- Command: show ip bgp community-list WORD
 -- Command: show ip bgp community-list WORD exact-match
     This command display BGP routes using community list (*note
     Display BGP Routes by Community::).

 -- Command: show ip bgp summary

 -- Command: show ip bgp neighbor [PEER]

 -- Command: clear ip bgp PEER
     Clear peers which have addresses of X.X.X.X

 -- Command: clear ip bgp PEER soft in
     Clear peer using soft reconfiguration.

 -- Command: show debug

 -- Command: debug event

 -- Command: debug update

 -- Command: debug keepalive

 -- Command: no debug event

 -- Command: no debug update

 -- Command: no debug keepalive


File: quagga.info,  Node: Capability Negotiation,  Next: Route Reflector,  Prev: Displaying BGP routes,  Up: BGP

9.11 Capability Negotiation
===========================

When adding IPv6 routing information exchange feature to BGP.  There
were some proposals.  IETF (Internet Engineering Task Force) IDR (Inter
Domain Routing) WG (Working group) adopted a proposal called
Multiprotocol Extension for BGP.  The specification is described in
`RFC2283'.  The protocol does not define new protocols.  It defines new
attributes to existing BGP.  When it is used exchanging IPv6 routing
information it is called BGP-4+.  When it is used for exchanging
multicast routing information it is called MBGP.

   `bgpd' supports Multiprotocol Extension for BGP.  So if remote peer
supports the protocol, `bgpd' can exchange IPv6 and/or multicast
routing information.

   Traditional BGP did not have the feature to detect remote peer's
capabilities, e.g. whether it can handle prefix types other than IPv4
unicast routes.  This was a big problem using Multiprotocol Extension
for BGP to operational network.  `RFC2842, Capabilities Advertisement
with BGP-4' adopted a feature called Capability Negotiation. `bgpd' use
this Capability Negotiation to detect the remote peer's capabilities.
If the peer is only configured as IPv4 unicast neighbor, `bgpd' does
not send these Capability Negotiation packets (at least not unless
other optional BGP features require capability negotation).

   By default, Quagga will bring up peering with minimal common
capability for the both sides.  For example, local router has unicast
and multicast capabilitie and remote router has unicast capability.  In
this case, the local router will establish the connection with unicast
only capability. When there are no common capabilities, Quagga sends
Unsupported Capability error and then resets the connection.

   If you want to completely match capabilities with remote peer.
Please use `strict-capability-match' command.

 -- BGP: neighbor PEER strict-capability-match
 -- BGP: no neighbor PEER strict-capability-match
     Strictly compares remote capabilities and local capabilities.  If
     capabilities are different, send Unsupported Capability error then
     reset connection.

   You may want to disable sending Capability Negotiation OPEN message
optional parameter to the peer when remote peer does not implement
Capability Negotiation.  Please use `dont-capability-negotiate' command
to disable the feature.

 -- BGP: neighbor PEER dont-capability-negotiate
 -- BGP: no neighbor PEER dont-capability-negotiate
     Suppress sending Capability Negotiation as OPEN message optional
     parameter to the peer.  This command only affects the peer is
     configured other than IPv4 unicast configuration.

   When remote peer does not have capability negotiation feature, remote
peer will not send any capabilities at all.  In that case, bgp
configures the peer with configured capabilities.

   You may prefer locally configured capabilities more than the
negotiated capabilities even though remote peer sends capabilities.  If
the peer is configured by `override-capability', `bgpd' ignores
received capabilities then override negotiated capabilities with
configured values.

 -- BGP: neighbor PEER override-capability
 -- BGP: no neighbor PEER override-capability
     Override the result of Capability Negotiation with local
     configuration.  Ignore remote peer's capability value.


File: quagga.info,  Node: Route Reflector,  Next: Route Server,  Prev: Capability Negotiation,  Up: BGP

9.12 Route Reflector
====================

 -- BGP: bgp cluster-id A.B.C.D

 -- BGP: neighbor PEER route-reflector-client
 -- BGP: no neighbor PEER route-reflector-client


File: quagga.info,  Node: Route Server,  Next: How to set up a 6-Bone connection,  Prev: Route Reflector,  Up: BGP

9.13 Route Server
=================

At an Internet Exchange point, many ISPs are connected to each other by
external BGP peering.  Normally these external BGP connection are done
by `full mesh' method.  As with internal BGP full mesh formation, this
method has a scaling problem.

   This scaling problem is well known.  Route Server is a method to
resolve the problem.  Each ISP's BGP router only peers to Route Server.
Route Server serves as BGP information exchange to other BGP routers.
By applying this method, numbers of BGP connections is reduced from
O(n*(n-1)/2) to O(n).

   Unlike normal BGP router, Route Server must have several routing
tables for managing different routing policies for each BGP speaker.
We call the routing tables as different `view's.  `bgpd' can work as
normal BGP router or Route Server or both at the same time.

* Menu:

* Multiple instance::
* BGP instance and view::
* Routing policy::
* Viewing the view::


File: quagga.info,  Node: Multiple instance,  Next: BGP instance and view,  Up: Route Server

9.13.1 Multiple instance
------------------------

To enable multiple view function of `bgpd', you must turn on multiple
instance feature beforehand.

 -- Command: bgp multiple-instance
     Enable BGP multiple instance feature.  After this feature is
     enabled, you can make multiple BGP instances or multiple BGP views.

 -- Command: no bgp multiple-instance
     Disable BGP multiple instance feature.  You can not disable this
     feature when BGP multiple instances or views exist.

   When you want to make configuration more Cisco like one,

 -- Command: bgp config-type cisco
     Cisco compatible BGP configuration output.

   When bgp config-type cisco is specified,

   "no synchronization" is displayed.  "no auto-summary" is desplayed.

   "network" and "aggregate-address" argument is displayed as "A.B.C.D
M.M.M.M"

   Quagga: network 10.0.0.0/8 Cisco: network 10.0.0.0

   Quagga: aggregate-address 192.168.0.0/24 Cisco: aggregate-address
192.168.0.0 255.255.255.0

   Community attribute handling is also different.  If there is no
configuration is specified community attribute and extended community
attribute are sent to neighbor.  When user manually disable the feature
community attribute is not sent to the neighbor.  In case of `bgp
config-type cisco' is specified, community attribute is not sent to the
neighbor by default.  To send community attribute user has to specify
`neighbor A.B.C.D send-community' command.

     !
     router bgp 1
      neighbor 10.0.0.1 remote-as 1
      no neighbor 10.0.0.1 send-community
     !
     router bgp 1
      neighbor 10.0.0.1 remote-as 1
      neighbor 10.0.0.1 send-community
     !

 -- Command: bgp config-type zebra
     Quagga style BGP configuration.  This is default.


File: quagga.info,  Node: BGP instance and view,  Next: Routing policy,  Prev: Multiple instance,  Up: Route Server

9.13.2 BGP instance and view
----------------------------

BGP instance is a normal BGP process.  The result of route selection
goes to the kernel routing table.  You can setup different AS at the
same time when BGP multiple instance feature is enabled.

 -- Command: router bgp AS-NUMBER
     Make a new BGP instance.  You can use arbitrary word for the NAME.

     bgp multiple-instance
     !
     router bgp 1
      neighbor 10.0.0.1 remote-as 2
      neighbor 10.0.0.2 remote-as 3
     !
     router bgp 2
      neighbor 10.0.0.3 remote-as 4
      neighbor 10.0.0.4 remote-as 5

   BGP view is almost same as normal BGP process. The result of route
selection does not go to the kernel routing table.  BGP view is only
for exchanging BGP routing information.

 -- Command: router bgp AS-NUMBER view NAME
     Make a new BGP view.  You can use arbitrary word for the NAME.
     This view's route selection result does not go to the kernel
     routing table.

   With this command, you can setup Route Server like below.

     bgp multiple-instance
     !
     router bgp 1 view 1
      neighbor 10.0.0.1 remote-as 2
      neighbor 10.0.0.2 remote-as 3
     !
     router bgp 2 view 2
      neighbor 10.0.0.3 remote-as 4
      neighbor 10.0.0.4 remote-as 5


File: quagga.info,  Node: Routing policy,  Next: Viewing the view,  Prev: BGP instance and view,  Up: Route Server

9.13.3 Routing policy
---------------------

You can set different routing policy for a peer.  For example, you can
set different filter for a peer.

     bgp multiple-instance
     !
     router bgp 1 view 1
      neighbor 10.0.0.1 remote-as 2
      neighbor 10.0.0.1 distribute-list 1 in
     !
     router bgp 1 view 2
      neighbor 10.0.0.1 remote-as 2
      neighbor 10.0.0.1 distribute-list 2 in

   This means BGP update from a peer 10.0.0.1 goes to both BGP view 1
and view 2.  When the update is inserted into view 1, distribute-list 1
is applied.  On the other hand, when the update is inserted into view 2,
distribute-list 2 is applied.


File: quagga.info,  Node: Viewing the view,  Prev: Routing policy,  Up: Route Server

9.13.4 Viewing the view
-----------------------

To display routing table of BGP view, you must specify view name.

 -- Command: show ip bgp view NAME
     Display routing table of BGP view NAME.


File: quagga.info,  Node: How to set up a 6-Bone connection,  Next: Dump BGP packets and table,  Prev: Route Server,  Up: BGP

9.14 How to set up a 6-Bone connection
======================================

     zebra configuration
     ===================
     !
     ! Actually there is no need to configure zebra
     !

     bgpd configuration
     ==================
     !
     ! This means that routes go through zebra and into the kernel.
     !
     router zebra
     !
     ! MP-BGP configuration
     !
     router bgp 7675
      bgp router-id 10.0.0.1
      neighbor 3ffe:1cfa:0:2:2a0:c9ff:fe9e:f56 remote-as AS-NUMBER
     !
      address-family ipv6
      network 3ffe:506::/32
      neighbor 3ffe:1cfa:0:2:2a0:c9ff:fe9e:f56 activate
      neighbor 3ffe:1cfa:0:2:2a0:c9ff:fe9e:f56 route-map set-nexthop out
      neighbor 3ffe:1cfa:0:2:2c0:4fff:fe68:a231 remote-as AS-NUMBER
      neighbor 3ffe:1cfa:0:2:2c0:4fff:fe68:a231 route-map set-nexthop out
      exit-address-family
     !
     ipv6 access-list all permit any
     !
     ! Set output nexthop address.
     !
     route-map set-nexthop permit 10
      match ipv6 address all
      set ipv6 nexthop global 3ffe:1cfa:0:2:2c0:4fff:fe68:a225
      set ipv6 nexthop local fe80::2c0:4fff:fe68:a225
     !
     ! logfile FILENAME is obsolete.  Please use log file FILENAME

     log file bgpd.log
     !


File: quagga.info,  Node: Dump BGP packets and table,  Next: BGP Configuration Examples,  Prev: How to set up a 6-Bone connection,  Up: BGP

9.15 Dump BGP packets and table
===============================

 -- Command: dump bgp all PATH
 -- Command: dump bgp all PATH INTERVAL
     Dump all BGP packet and events to PATH file.

 -- Command: dump bgp updates PATH
 -- Command: dump bgp updates PATH INTERVAL
     Dump BGP updates to PATH file.

 -- Command: dump bgp routes PATH
 -- Command: dump bgp routes PATH
     Dump whole BGP routing table to PATH.  This is heavy process.


File: quagga.info,  Node: BGP Configuration Examples,  Prev: Dump BGP packets and table,  Up: BGP

9.16 BGP Configuration Examples
===============================

Example of a session to an upstream, advertising only one prefix to it.

     router bgp 64512
      bgp router-id 10.236.87.1
      network 10.236.87.0/24
      neighbor upstream peer-group
      neighbor upstream remote-as 64515
      neighbor upstream capability dynamic
      neighbor upstream prefix-list pl-allowed-adv out
      neighbor 10.1.1.1 peer-group upstream
      neighbor 10.1.1.1 description ACME ISP
     !
     ip prefix-list pl-allowed-adv seq 5 permit 82.195.133.0/25
     ip prefix-list pl-allowed-adv seq 10 deny any

   A more complex example. With upstream, peer and customer sessions.
Advertising global prefixes and NO_EXPORT prefixes and providing
actions for customer routes based on community values. Extensive use of
route-maps and the 'call' feature to support selective advertising of
prefixes. This example is intended as guidance only, it has NOT been
tested and almost certainly containts silly mistakes, if not serious
flaws.

     router bgp 64512
      bgp router-id 10.236.87.1
      network 10.123.456.0/24
      network 10.123.456.128/25 route-map rm-no-export
      neighbor upstream capability dynamic
      neighbor upstream route-map rm-upstream-out out
      neighbor cust capability dynamic
      neighbor cust route-map rm-cust-in in
      neighbor cust route-map rm-cust-out out
      neighbor cust send-community both
      neighbor peer capability dynamic
      neighbor peer route-map rm-peer-in in
      neighbor peer route-map rm-peer-out out
      neighbor peer send-community both
      neighbor 10.1.1.1 remote-as 64515
      neighbor 10.1.1.1 peer-group upstream
      neighbor 10.2.1.1 remote-as 64516
      neighbor 10.2.1.1 peer-group upstream
      neighbor 10.3.1.1 remote-as 64517
      neighbor 10.3.1.1 peer-group cust-default
      neighbor 10.3.1.1 description customer1
      neighbor 10.3.1.1 prefix-list pl-cust1-network in
      neighbor 10.4.1.1 remote-as 64518
      neighbor 10.4.1.1 peer-group cust
      neighbor 10.4.1.1 prefix-list pl-cust2-network in
      neighbor 10.4.1.1 description customer2
      neighbor 10.5.1.1 remote-as 64519
      neighbor 10.5.1.1 peer-group peer
      neighbor 10.5.1.1 prefix-list pl-peer1-network in
      neighbor 10.5.1.1 description peer AS 1
      neighbor 10.6.1.1 remote-as 64520
      neighbor 10.6.1.1 peer-group peer
      neighbor 10.6.1.1 prefix-list pl-peer2-network in
      neighbor 10.6.1.1 description peer AS 2
     !
     ip prefix-list pl-default permit 0.0.0.0/0
     !
     ip prefix-list pl-upstream-peers permit 10.1.1.1/32
     ip prefix-list pl-upstream-peers permit 10.2.1.1/32
     !
     ip prefix-list pl-cust1-network permit 10.3.1.0/24
     ip prefix-list pl-cust1-network permit 10.3.2.0/24
     !
     ip prefix-list pl-cust2-network permit 10.4.1.0/24
     !
     ip prefix-list pl-peer1-network permit 10.5.1.0/24
     ip prefix-list pl-peer1-network permit 10.5.2.0/24
     ip prefix-list pl-peer1-network permit 192.168.0.0/24
     !
     ip prefix-list pl-peer2-network permit 10.6.1.0/24
     ip prefix-list pl-peer2-network permit 10.6.2.0/24
     ip prefix-list pl-peer2-network permit 192.168.1.0/24
     ip prefix-list pl-peer2-network permit 192.168.2.0/24
     ip prefix-list pl-peer2-network permit 172.16.1/24
     !
     ip as-path access-list asp-own-as permit ^$
     ip as-path access-list asp-own-as permit _64512_
     !
     ! #################################################################
     ! Match communities we provide actions for, on routes receives from
     ! customers. Communities values of <our-ASN>:X, with X, have actions:
     !
     ! 100 - blackhole the prefix
     ! 200 - set no_export
     ! 300 - advertise only to other customers
     ! 400 - advertise only to upstreams
     ! 500 - set no_export when advertising to upstreams
     ! 2X00 - set local_preference to X00
     !
     ! blackhole the prefix of the route
     ip community-list standard cm-blackhole permit 64512:100
     !
     ! set no-export community before advertising
     ip community-list standard cm-set-no-export permit 64512:200
     !
     ! advertise only to other customers
     ip community-list standard cm-cust-only permit 64512:300
     !
     ! advertise only to upstreams
     ip community-list standard cm-upstream-only permit 64512:400
     !
     ! advertise to upstreams with no-export
     ip community-list standard cm-upstream-noexport permit 64512:500
     !
     ! set local-pref to least significant 3 digits of the community
     ip community-list standard cm-prefmod-100 permit 64512:2100
     ip community-list standard cm-prefmod-200 permit 64512:2200
     ip community-list standard cm-prefmod-300 permit 64512:2300
     ip community-list standard cm-prefmod-400 permit 64512:2400
     ip community-list expanded cme-prefmod-range permit 64512:2...
     !
     ! Informational communities
     !
     ! 3000 - learned from upstream
     ! 3100 - learned from customer
     ! 3200 - learned from peer
     !
     ip community-list standard cm-learnt-upstream permit 64512:3000
     ip community-list standard cm-learnt-cust permit 64512:3100
     ip community-list standard cm-learnt-peer permit 64512:3200
     !
     ! ###################################################################
     ! Utility route-maps
     !
     ! These utility route-maps generally should not used to permit/deny
     ! routes, i.e. they do not have meaning as filters, and hence probably
     ! should be used with 'on-match next'. These all finish with an empty
     ! permit entry so as not interfere with processing in the caller.
     !
     route-map rm-no-export permit 10
      set community additive no-export
     route-map rm-no-export permit 20
     !
     route-map rm-blackhole permit 10
      description blackhole, up-pref and ensure it cant escape this AS
      set ip next-hop 127.0.0.1
      set local-preference 10
      set community additive no-export
     route-map rm-blackhole permit 20
     !
     ! Set local-pref as requested
     route-map rm-prefmod permit 10
      match community cm-prefmod-100
      set local-preference 100
     route-map rm-prefmod permit 20
      match community cm-prefmod-200
      set local-preference 200
     route-map rm-prefmod permit 30
      match community cm-prefmod-300
      set local-preference 300
     route-map rm-prefmod permit 40
      match community cm-prefmod-400
      set local-preference 400
     route-map rm-prefmod permit 50
     !
     ! Community actions to take on receipt of route.
     route-map rm-community-in permit 10
      description check for blackholing, no point continuing if it matches.
      match community cm-blackhole
      call rm-blackhole
     route-map rm-community-in permit 20
      match community cm-set-no-export
      call rm-no-export
      on-match next
     route-map rm-community-in permit 30
      match community cme-prefmod-range
      call rm-prefmod
     route-map rm-community-in permit 40
     !
     ! #####################################################################
     ! Community actions to take when advertising a route.
     ! These are filtering route-maps,
     !
     ! Deny customer routes to upstream with cust-only set.
     route-map rm-community-filt-to-upstream deny 10
      match community cm-learnt-cust
      match community cm-cust-only
     route-map rm-community-filt-to-upstream permit 20
     !
     ! Deny customer routes to other customers with upstream-only set.
     route-map rm-community-filt-to-cust deny 10
      match community cm-learnt-cust
      match community cm-upstream-only
     route-map rm-community-filt-to-cust permit 20
     !
     ! ###################################################################
     ! The top-level route-maps applied to sessions. Further entries could
     ! be added obviously..
     !
     ! Customers
     route-map rm-cust-in permit 10
      call rm-community-in
      on-match next
     route-map rm-cust-in permit 20
      set community additive 64512:3100
     route-map rm-cust-in permit 30
     !
     route-map rm-cust-out permit 10
      call rm-community-filt-to-cust
      on-match next
     route-map rm-cust-out permit 20
     !
     ! Upstream transit ASes
     route-map rm-upstream-out permit 10
      description filter customer prefixes which are marked cust-only
      call rm-community-filt-to-upstream
      on-match next
     route-map rm-upstream-out permit 20
      description only customer routes are provided to upstreams/peers
      match community cm-learnt-cust
     !
     ! Peer ASes
     ! outbound policy is same as for upstream
     route-map rm-peer-out permit 10
      call rm-upstream-out
     !
     route-map rm-peer-in permit 10
      set community additive 64512:3200


File: quagga.info,  Node: Configuring Quagga as a Route Server,  Next: VTY shell,  Prev: BGP,  Up: Top

10 Configuring Quagga as a Route Server
***************************************

The purpose of a Route Server is to centralize the peerings between BGP
speakers. For example if we have an exchange point scenario with four
BGP speakers, each of which maintaining a BGP peering with the other
three (*note fig:full-mesh::), we can convert it into a centralized
scenario where each of the four establishes a single BGP peering
against the Route Server (*note fig:route-server::).

   We will first describe briefly the Route Server model implemented by
Quagga.  We will explain the commands that have been added for
configuring that model. And finally we will show a full example of
Quagga configured as Route Server.

* Menu:

* Description of the Route Server model::
* Commands for configuring a Route Server::
* Example of Route Server Configuration::


File: quagga.info,  Node: Description of the Route Server model,  Next: Commands for configuring a Route Server,  Up: Configuring Quagga as a Route Server

10.1 Description of the Route Server model
==========================================

First we are going to describe the normal processing that BGP
announcements suffer inside a standard BGP speaker, as shown in *Note
fig:normal-processing::, it consists of three steps:

   * When an announcement is received from some peer, the `In' filters
     configured for that peer are applied to the announcement. These
     filters can reject the announcement, accept it unmodified, or
     accept it with some of its attributes modified.

   * The announcements that pass the `In' filters go into the Best Path
     Selection process, where they are compared to other announcements
     referred to the same destination that have been received from
     different peers (in case such other announcements exist). For each
     different destination, the announcement which is selected as the
     best is inserted into the BGP speaker's Loc-RIB.

   * The routes which are inserted in the Loc-RIB are considered for
     announcement to all the peers (except the one from which the route
     came). This is done by passing the routes in the Loc-RIB through
     the `Out' filters corresponding to each peer. These filters can
     reject the route, accept it unmodified, or accept it with some of
     its attributes modified. Those routes which are accepted by the
     `Out' filters of a peer are announced to that peer.

 Figure 10.1: Announcement processing inside a "normal" BGP speaker

 Figure 10.2: Full Mesh

 Figure 10.3: Route Server and clients

   Of course we want that the routing tables obtained in each of the
routers are the same when using the route server than when not. But as
a consequence of having a single BGP peering (against the route
server), the BGP speakers can no longer distinguish from/to which peer
each announce comes/goes.  This means that the routers connected to the
route server are not able to apply by themselves the same input/output
filters as in the full mesh scenario, so they have to delegate those
functions to the route server.

   Even more, the "best path" selection must be also performed inside
the route server on behalf of its clients. The reason is that if, after
applying the filters of the announcer and the (potential) receiver, the
route server decides to send to some client two or more different
announcements referred to the same destination, the client will only
retain the last one, considering it as an implicit withdrawal of the
previous announcements for the same destination. This is the expected
behavior of a BGP speaker as defined in `RFC1771', and even though
there are some proposals of mechanisms that permit multiple paths for
the same destination to be sent through a single BGP peering, none of
them are currently supported by most of the existing BGP
implementations.

   As a consequence a route server must maintain additional information
and perform additional tasks for a RS-client that those necessary for
common BGP peerings. Essentially a route server must:

   * Maintain a separated Routing Information Base (Loc-RIB) for each
     peer configured as RS-client, containing the routes selected as a
     result of the "Best Path Selection" process that is performed on
     behalf of that RS-client.

   * Whenever it receives an announcement from a RS-client, it must
     consider it for the Loc-RIBs of the other RS-clients.

        * This means that for each of them the route server must pass
          the announcement through the appropriate `Out' filter of the
          announcer.

        * Then through the  appropriate `In' filter of the potential
          receiver.

        * Only if the announcement is accepted by both filters it will
          be passed to the "Best Path Selection" process.

        * Finally, it might go into the Loc-RIB of the receiver.

   When we talk about the "appropriate" filter, both the announcer and
the receiver of the route must be taken into account. Suppose that the
route server receives an announcement from client A, and the route
server is considering it for the Loc-RIB of client B. The filters that
should be applied are the same that would be used in the full mesh
scenario, i.e., first the `Out' filter of router A for announcements
going to router B, and then the `In' filter of router B for
announcements coming from router A.

   We call "Export Policy" of a RS-client to the set of `Out' filters
that the client would use if there was no route server. The same
applies for the "Import Policy" of a RS-client and the set of `In'
filters of the client if there was no route server.

   It is also common to demand from a route server that it does not
modify some BGP attributes (next-hop, as-path and MED) that are usually
modified by standard BGP speakers before announcing a route.

   The announcement processing model implemented by Quagga is shown in
*Note fig:rs-processing::. The figure shows a mixture of RS-clients (B,
C and D) with normal BGP peers (A). There are some details that worth
additional comments:

   * Announcements coming from a normal BGP peer are also considered
     for the Loc-RIBs of all the RS-clients. But logically they do not
     pass through any export policy.

   * Those peers that are configured as RS-clients do not receive any
     announce from the `Main' Loc-RIB.

   * Apart from import and export policies, `In' and `Out' filters can
     also be set for RS-clients. `In' filters might be useful when the
     route server has also normal BGP peers. On the other hand, `Out'
     filters for RS-clients are probably unnecessary, but we decided
     not to remove them as they do not hurt anybody (they can always be
     left empty).

 [image src="fig-rs-processing.png" alt="Route Server Processing Model" ]

Figure 10.4: Announcement processing model implemented by the Route Server


File: quagga.info,  Node: Commands for configuring a Route Server,  Next: Example of Route Server Configuration,  Prev: Description of the Route Server model,  Up: Configuring Quagga as a Route Server

10.2 Commands for configuring a Route Server
============================================

Now we will describe the commands that have been added to quagga in
order to support the route server features.

 -- Route-Server: neighbor PEER-GROUP route-server-client
 -- Route-Server: neighbor A.B.C.D route-server-client
 -- Route-Server: neighbor X:X::X:X route-server-client
     This command configures the peer given by PEER, A.B.C.D or
     X:X::X:X as an RS-client.

     Actually this command is not new, it already existed in standard
     Quagga. It enables the transparent mode for the specified peer.
     This means that some BGP attributes (as-path, next-hop and MED) of
     the routes announced to that peer are not modified.

     With the route server patch, this command, apart from setting the
     transparent mode, creates a new Loc-RIB dedicated to the specified
     peer (those named `Loc-RIB for X' in *Note Figure 10.4:
     fig:rs-processing.). Starting from that moment, every announcement
     received by the route server will be also considered for the new
     Loc-RIB.

 -- Route-Server: neigbor {A.B.C.D|X.X::X.X|peer-group} route-map WORD
{import|export}
     This set of commands can be used to specify the route-map that
     represents the Import or Export policy of a peer which is
     configured as a RS-client (with the previous command).

 -- Route-Server: match peer {A.B.C.D|X:X::X:X}
     This is a new _match_ statement for use in route-maps, enabling
     them to describe import/export policies. As we said before, an
     import/export policy represents a set of input/output filters of
     the RS-client. This statement makes possible that a single
     route-map represents the full set of filters that a BGP speaker
     would use for its different peers in a non-RS scenario.

     The _match peer_ statement has different semantics whether it is
     used inside an import or an export route-map. In the first case
     the statement matches if the address of the peer who sends the
     announce is the same that the address specified by
     {A.B.C.D|X:X::X:X}. For export route-maps it matches when
     {A.B.C.D|X:X::X:X} is the address of the RS-Client into whose
     Loc-RIB the announce is going to be inserted (how the same export
     policy is applied before different Loc-RIBs is shown in *Note
     Figure 10.4: fig:rs-processing.).

 -- Route-map Command: call WORD
     This command (also used inside a route-map) jumps into a different
     route-map, whose name is specified by WORD. When the called
     route-map finishes, depending on its result the original route-map
     continues or not. Apart from being useful for making import/export
     route-maps easier to write, this command can also be used inside
     any normal (in or out) route-map.


File: quagga.info,  Node: Example of Route Server Configuration,  Prev: Commands for configuring a Route Server,  Up: Configuring Quagga as a Route Server

10.3 Example of Route Server Configuration
==========================================

Finally we are going to show how to configure a Quagga daemon to act as
a Route Server. For this purpose we are going to present a scenario
without route server, and then we will show how to use the
configurations of the BGP routers to generate the configuration of the
route server.

   All the configuration files shown in this section have been taken
from scenarios which were tested using the VNUML tool VNUML
(http://www.dit.upm.es/vnuml).

* Menu:

* Configuration of the BGP routers without Route Server::
* Configuration of the BGP routers with Route Server::
* Configuration of the Route Server itself::
* Further considerations about Import and Export route-maps::


File: quagga.info,  Node: Configuration of the BGP routers without Route Server,  Next: Configuration of the BGP routers with Route Server,  Up: Example of Route Server Configuration

10.3.1 Configuration of the BGP routers without Route Server
------------------------------------------------------------

We will suppose that our initial scenario is an exchange point with
three BGP capable routers, named RA, RB and RC. Each of the BGP
speakers generates some routes (with the NETWORK command), and
establishes BGP peerings against the other two routers. These peerings
have In and Out route-maps configured, named like "PEER-X-IN" or
"PEER-X-OUT". For example the configuration file for router RA could be
the following:

     #Configuration for router 'RA'
     !
     hostname RA
     password ****
     !
     router bgp 65001
       no bgp default ipv4-unicast
       neighbor 2001:0DB8::B remote-as 65002
       neighbor 2001:0DB8::C remote-as 65003
     !
       address-family ipv6
         network 2001:0DB8:AAAA:1::/64
         network 2001:0DB8:AAAA:2::/64
         network 2001:0DB8:0000:1::/64
         network 2001:0DB8:0000:2::/64

         neighbor 2001:0DB8::B activate
         neighbor 2001:0DB8::B soft-reconfiguration inbound
         neighbor 2001:0DB8::B route-map PEER-B-IN in
         neighbor 2001:0DB8::B route-map PEER-B-OUT out

         neighbor 2001:0DB8::C activate
         neighbor 2001:0DB8::C soft-reconfiguration inbound
         neighbor 2001:0DB8::C route-map PEER-C-IN in
         neighbor 2001:0DB8::C route-map PEER-C-OUT out
       exit-address-family
     !
     ipv6 prefix-list COMMON-PREFIXES seq  5 permit 2001:0DB8:0000::/48 ge 64 le 64
     ipv6 prefix-list COMMON-PREFIXES seq 10 deny any
     !
     ipv6 prefix-list PEER-A-PREFIXES seq  5 permit 2001:0DB8:AAAA::/48 ge 64 le 64
     ipv6 prefix-list PEER-A-PREFIXES seq 10 deny any
     !
     ipv6 prefix-list PEER-B-PREFIXES seq  5 permit 2001:0DB8:BBBB::/48 ge 64 le 64
     ipv6 prefix-list PEER-B-PREFIXES seq 10 deny any
     !
     ipv6 prefix-list PEER-C-PREFIXES seq  5 permit 2001:0DB8:CCCC::/48 ge 64 le 64
     ipv6 prefix-list PEER-C-PREFIXES seq 10 deny any
     !
     route-map PEER-B-IN permit 10
       match ipv6 address prefix-list COMMON-PREFIXES
       set metric 100
     route-map PEER-B-IN permit 20
       match ipv6 address prefix-list PEER-B-PREFIXES
       set community 65001:11111
     !
     route-map PEER-C-IN permit 10
       match ipv6 address prefix-list COMMON-PREFIXES
       set metric 200
     route-map PEER-C-IN permit 20
       match ipv6 address prefix-list PEER-C-PREFIXES
       set community 65001:22222
     !
     route-map PEER-B-OUT permit 10
       match ipv6 address prefix-list PEER-A-PREFIXES
     !
     route-map PEER-C-OUT permit 10
       match ipv6 address prefix-list PEER-A-PREFIXES
     !
     line vty
     !


File: quagga.info,  Node: Configuration of the BGP routers with Route Server,  Next: Configuration of the Route Server itself,  Prev: Configuration of the BGP routers without Route Server,  Up: Example of Route Server Configuration

10.3.2 Configuration of the BGP routers with Route Server
---------------------------------------------------------

To convert the initial scenario into one with route server, first we
must modify the configuration of routers RA, RB and RC. Now they must
not peer between them, but only with the route server. For example, RA's
configuration would turn into:

     # Configuration for router 'RA'
     !
     hostname RA
     password ****
     !
     router bgp 65001
       no bgp default ipv4-unicast
       neighbor 2001:0DB8::FFFF remote-as 65000
     !
       address-family ipv6
         network 2001:0DB8:AAAA:1::/64
         network 2001:0DB8:AAAA:2::/64
         network 2001:0DB8:0000:1::/64
         network 2001:0DB8:0000:2::/64

         neighbor 2001:0DB8::FFFF activate
         neighbor 2001:0DB8::FFFF soft-reconfiguration inbound
       exit-address-family
     !
     line vty
     !

   Which is logically much simpler than its initial configuration, as
it now maintains only one BGP peering and all the filters (route-maps)
have disappeared.


File: quagga.info,  Node: Configuration of the Route Server itself,  Next: Further considerations about Import and Export route-maps,  Prev: Configuration of the BGP routers with Route Server,  Up: Example of Route Server Configuration

10.3.3 Configuration of the Route Server itself
-----------------------------------------------

As we said when we described the functions of a route server (*note
Description of the Route Server model::), it is in charge of all the
route filtering. To achieve that, the In and Out filters from the RA,
RB and RC configurations must be converted into Import and Export
policies in the route server.

   This is a fragment of the route server configuration (we only show
the policies for client RA):

     # Configuration for Route Server ('RS')
     !
     hostname RS
     password ix
     !
     bgp multiple-instance
     !
     router bgp 65000 view RS
       no bgp default ipv4-unicast
       neighbor 2001:0DB8::A  remote-as 65001
       neighbor 2001:0DB8::B  remote-as 65002
       neighbor 2001:0DB8::C  remote-as 65003
     !
       address-family ipv6
         neighbor 2001:0DB8::A activate
         neighbor 2001:0DB8::A route-server-client
         neighbor 2001:0DB8::A route-map RSCLIENT-A-IMPORT import
         neighbor 2001:0DB8::A route-map RSCLIENT-A-EXPORT export
         neighbor 2001:0DB8::A soft-reconfiguration inbound

         neighbor 2001:0DB8::B activate
         neighbor 2001:0DB8::B route-server-client
         neighbor 2001:0DB8::B route-map RSCLIENT-B-IMPORT import
         neighbor 2001:0DB8::B route-map RSCLIENT-B-EXPORT export
         neighbor 2001:0DB8::B soft-reconfiguration inbound

         neighbor 2001:0DB8::C activate
         neighbor 2001:0DB8::C route-server-client
         neighbor 2001:0DB8::C route-map RSCLIENT-C-IMPORT import
         neighbor 2001:0DB8::C route-map RSCLIENT-C-EXPORT export
         neighbor 2001:0DB8::C soft-reconfiguration inbound
       exit-address-family
     !
     ipv6 prefix-list COMMON-PREFIXES seq  5 permit 2001:0DB8:0000::/48 ge 64 le 64
     ipv6 prefix-list COMMON-PREFIXES seq 10 deny any
     !
     ipv6 prefix-list PEER-A-PREFIXES seq  5 permit 2001:0DB8:AAAA::/48 ge 64 le 64
     ipv6 prefix-list PEER-A-PREFIXES seq 10 deny any
     !
     ipv6 prefix-list PEER-B-PREFIXES seq  5 permit 2001:0DB8:BBBB::/48 ge 64 le 64
     ipv6 prefix-list PEER-B-PREFIXES seq 10 deny any
     !
     ipv6 prefix-list PEER-C-PREFIXES seq  5 permit 2001:0DB8:CCCC::/48 ge 64 le 64
     ipv6 prefix-list PEER-C-PREFIXES seq 10 deny any
     !
     route-map RSCLIENT-A-IMPORT permit 10
       match peer 2001:0DB8::B
       call A-IMPORT-FROM-B
     route-map RSCLIENT-A-IMPORT permit 20
       match peer 2001:0DB8::C
       call A-IMPORT-FROM-C
     !
     route-map A-IMPORT-FROM-B permit 10
       match ipv6 address prefix-list COMMON-PREFIXES
       set metric 100
     route-map A-IMPORT-FROM-B permit 20
       match ipv6 address prefix-list PEER-B-PREFIXES
       set community 65001:11111
     !
     route-map A-IMPORT-FROM-C permit 10
       match ipv6 address prefix-list COMMON-PREFIXES
       set metric 200
     route-map A-IMPORT-FROM-C permit 20
       match ipv6 address prefix-list PEER-C-PREFIXES
       set community 65001:22222
     !
     route-map RSCLIENT-A-EXPORT permit 10
       match peer 2001:0DB8::B
       match ipv6 address prefix-list PEER-A-PREFIXES
     route-map RSCLIENT-A-EXPORT permit 20
       match peer 2001:0DB8::C
       match ipv6 address prefix-list PEER-A-PREFIXES
     !
     ...
     ...
     ...

   If you compare the initial configuration of RA with the route server
configuration above, you can see how easy it is to generate the Import
and Export policies for RA from the In and Out route-maps of RA's
original configuration.

   When there was no route server, RA maintained two peerings, one with
RB and another with RC. Each of this peerings had an In route-map
configured. To build the Import route-map for client RA in the route
server, simply add route-map entries following this scheme:

     route-map <NAME> permit 10
         match peer <Peer Address>
         call <In Route-Map for this Peer>
     route-map <NAME> permit 20
         match peer <Another Peer Address>
         call <In Route-Map for this Peer>

   This is exactly the process that has been followed to generate the
route-map RSCLIENT-A-IMPORT. The route-maps that are called inside it
(A-IMPORT-FROM-B and A-IMPORT-FROM-C) are exactly the same than the In
route-maps from the original configuration of RA (PEER-B-IN and
PEER-C-IN), only the name is different.

   The same could have been done to create the Export policy for RA
(route-map RSCLIENT-A-EXPORT), but in this case the original Out
route-maps where so simple that we decided not to use the CALL WORD
commands, and we integrated all in a single route-map
(RSCLIENT-A-EXPORT).

   The Import and Export policies for RB and RC are not shown, but the
process would be identical.


File: quagga.info,  Node: Further considerations about Import and Export route-maps,  Prev: Configuration of the Route Server itself,  Up: Example of Route Server Configuration

10.3.4 Further considerations about Import and Export route-maps
----------------------------------------------------------------

The current version of the route server patch only allows to specify a
route-map for import and export policies, while in a standard BGP
speaker apart from route-maps there are other tools for performing
input and output filtering (access-lists, community-lists, ...). But
this does not represent any limitation, as all kinds of filters can be
included in import/export route-maps. For example suppose that in the
non-route-server scenario peer RA had the following filters configured
for input from peer B:

         neighbor 2001:0DB8::B prefix-list LIST-1 in
         neighbor 2001:0DB8::B filter-list LIST-2 in
         neighbor 2001:0DB8::B route-map PEER-B-IN in
         ...
         ...
     route-map PEER-B-IN permit 10
       match ipv6 address prefix-list COMMON-PREFIXES
       set local-preference 100
     route-map PEER-B-IN permit 20
       match ipv6 address prefix-list PEER-B-PREFIXES
       set community 65001:11111

   It is posible to write a single route-map which is equivalent to the
three filters (the community-list, the prefix-list and the route-map).
That route-map can then be used inside the Import policy in the route
server. Lets see how to do it:

         neighbor 2001:0DB8::A route-map RSCLIENT-A-IMPORT import
         ...
     !
     ...
     route-map RSCLIENT-A-IMPORT permit 10
       match peer 2001:0DB8::B
       call A-IMPORT-FROM-B
     ...
     ...
     !
     route-map A-IMPORT-FROM-B permit 1
       match ipv6 address prefix-list LIST-1
       match as-path LIST-2
       on-match goto 10
     route-map A-IMPORT-FROM-B deny 2
     route-map A-IMPORT-FROM-B permit 10
       match ipv6 address prefix-list COMMON-PREFIXES
       set local-preference 100
     route-map A-IMPORT-FROM-B permit 20
       match ipv6 address prefix-list PEER-B-PREFIXES
       set community 65001:11111
     !
     ...
     ...

   The route-map A-IMPORT-FROM-B is equivalent to the three filters
(LIST-1, LIST-2 and PEER-B-IN). The first entry of route-map
A-IMPORT-FROM-B (sequence number 1) matches if and only if both the
prefix-list LIST-1 and the filter-list LIST-2 match. If that happens,
due to the "on-match goto 10" statement the next route-map entry to be
processed will be number 10, and as of that point route-map
A-IMPORT-FROM-B is identical to PEER-B-IN. If the first entry does not
match, `on-match goto 10" will be ignored and the next processed entry
will be number 2, which will deny the route.

   Thus, the result is the same that with the three original filters,
i.e., if either LIST-1 or LIST-2 rejects the route, it does not reach
the route-map PEER-B-IN. In case both LIST-1 and LIST-2 accept the
route, it passes to PEER-B-IN, which can reject, accept or modify the
route.


File: quagga.info,  Node: VTY shell,  Next: Filtering,  Prev: Configuring Quagga as a Route Server,  Up: Top

11 VTY shell
************

`vtysh' is integrated shell of Quagga software.

   To use vtysh please specify --enable-vtysh to configure script.  To
use PAM for authentication use --with-libpam option to configure script.

   vtysh only searches /etc/quagga path for vtysh.conf which is the
vtysh configuration file.  Vtysh does not search current directory for
configuration file because the file includes user authentication
settings.

   Currently, vtysh.conf has only two commands.

* Menu:

* VTY shell username::
* VTY shell integrated configuration::


File: quagga.info,  Node: VTY shell username,  Next: VTY shell integrated configuration,  Up: VTY shell

11.1 VTY shell username
=======================

 -- Command: username USERNAME nopassword
     With this set, user foo does not need password authentication for
     user vtysh.  With PAM vtysh uses PAM authentication mechanism.

     If vtysh is compiled without PAM authentication, every user can
     use vtysh without authentication. vtysh requires read/write
     permission to the various daemons vty sockets, this can be
     accomplished through use of unix groups and the -enable-vty-group
     configure option.



File: quagga.info,  Node: VTY shell integrated configuration,  Prev: VTY shell username,  Up: VTY shell

11.2 VTY shell integrated configuration
=======================================

 -- Command: service integrated-vtysh-config
     Write out integrated Quagga.conf file when 'write file' is issued.

     This command controls the behaviour of vtysh when it is told to
     write out the configuration.  Per default, vtysh will instruct
     each daemon to write out their own config files when `write file'
     is issued.  However, if `service integrated-vtysh-config' is set,
     when `write file' is issued, vtysh will instruct the daemons will
     write out a Quagga.conf with all daemons' commands integrated into
     it.

     Vtysh per default behaves as if `write-conf daemon' is set. Note
     that both may be set at same time if one wishes to have both
     Quagga.conf and daemon specific files written out. Further, note
     that the daemons are hard-coded to first look for the integrated
     Quagga.conf file before looking for their own file.

     We recommend you do not mix the use of the two types of files.
     Further, it is better not to use the integrated Quagga.conf file,
     as any syntax error in it can lead to /all/ of your daemons being
     unable to start up. Per daemon files are more robust as impact of
     errors in configuration are limited to the daemon in whose file
     the error is made.



File: quagga.info,  Node: Filtering,  Next: Route Map,  Prev: VTY shell,  Up: Top

12 Filtering
************

Quagga provides many very flexible filtering features.  Filtering is
used for both input and output of the routing information.  Once
filtering is defined, it can be applied in any direction.

* Menu:

* IP Access List::
* IP Prefix List::


File: quagga.info,  Node: IP Access List,  Next: IP Prefix List,  Up: Filtering

12.1 IP Access List
===================

 -- Command: access-list NAME permit IPV4-NETWORK
 -- Command: access-list NAME deny IPV4-NETWORK

   Basic filtering is done by `access-list' as shown in the following
example.

     access-list filter deny 10.0.0.0/9
     access-list filter permit 10.0.0.0/8


File: quagga.info,  Node: IP Prefix List,  Prev: IP Access List,  Up: Filtering

12.2 IP Prefix List
===================

`ip prefix-list' provides the most powerful prefix based filtering
mechanism.  In addition to `access-list' functionality, `ip
prefix-list' has prefix length range specification and sequential
number specification.  You can add or delete prefix based filters to
arbitrary points of prefix-list using sequential number specification.

   If no ip prefix-list is specified, it acts as permit.  If `ip
prefix-list' is defined, and no match is found, default deny is applied.

 -- Command: ip prefix-list NAME (permit|deny) PREFIX [le LEN] [ge LEN]
 -- Command: ip prefix-list NAME seq NUMBER (permit|deny) PREFIX [le
LEN] [ge LEN]
     You can create `ip prefix-list' using above commands.

    seq
          seq NUMBER can be set either automatically or manually.  In
          the case that sequential numbers are set manually, the user
          may pick any number less than 4294967295.  In the case that
          sequential number are set automatically, the sequential
          number will increase by a unit of five (5) per list.  If a
          list with no specified sequential number is created after a
          list with a specified sequential number, the list will
          automatically pick the next multiple of five (5) as the list
          number.  For example, if a list with number 2 already exists
          and a new list with no specified number is created, the next
          list will be numbered 5.  If lists 2 and 7 already exist and
          a new list with no specified number is created, the new list
          will be numbered 10.

    le
          `le' command specifies prefix length.  The prefix list will be
          applied if the prefix length is less than or equal to the le
          prefix length.

    ge
          `ge' command specifies prefix length.  The prefix list will be
          applied if the prefix length is greater than or equal to the
          ge prefix length.



   Less than or equal to prefix numbers and greater than or equal to
prefix numbers can be used together.  The order of the le and ge
commands does not matter.

   If a prefix list with a different sequential number but with the
exact same rules as a previous list is created, an error will result.
However, in the case that the sequential number and the rules are
exactly similar, no error will result.

   If a list with the same sequential number as a previous list is
created, the new list will overwrite the old list.

   Matching of IP Prefix is performed from the smaller sequential
number to the larger.  The matching will stop once any rule has been
applied.

   In the case of no le or ge command, the prefix length must match
exactly the length specified in the prefix list.

 -- Command: no ip prefix-list NAME

* Menu:

* ip prefix-list description::
* ip prefix-list sequential number control::
* Showing ip prefix-list::
* Clear counter of ip prefix-list::


File: quagga.info,  Node: ip prefix-list description,  Next: ip prefix-list sequential number control,  Up: IP Prefix List

12.2.1 ip prefix-list description
---------------------------------

 -- Command: ip prefix-list NAME description DESC
     Descriptions may be added to prefix lists.  This command adds a
     description to the prefix list.

 -- Command: no ip prefix-list NAME description [DESC]
     Deletes the description from a prefix list.  It is possible to use
     the command without the full description.


File: quagga.info,  Node: ip prefix-list sequential number control,  Next: Showing ip prefix-list,  Prev: ip prefix-list description,  Up: IP Prefix List

12.2.2 ip prefix-list sequential number control
-----------------------------------------------

 -- Command: ip prefix-list sequence-number
     With this command, the IP prefix list sequential number is
     displayed.  This is the default behavior.

 -- Command: no ip prefix-list sequence-number
     With this command, the IP prefix list sequential number is not
     displayed.


File: quagga.info,  Node: Showing ip prefix-list,  Next: Clear counter of ip prefix-list,  Prev: ip prefix-list sequential number control,  Up: IP Prefix List

12.2.3 Showing ip prefix-list
-----------------------------

 -- Command: show ip prefix-list
     Display all IP prefix lists.

 -- Command: show ip prefix-list NAME
     Show IP prefix list can be used with a prefix list name.

 -- Command: show ip prefix-list NAME seq NUM
     Show IP prefix list can be used with a prefix list name and
     sequential number.

 -- Command: show ip prefix-list NAME A.B.C.D/M
     If the command longer is used, all prefix lists with prefix
     lengths equal to or longer than the specified length will be
     displayed.  If the command first match is used, the first prefix
     length match will be displayed.

 -- Command: show ip prefix-list NAME A.B.C.D/M longer

 -- Command: show ip prefix-list NAME A.B.C.D/M first-match

 -- Command: show ip prefix-list summary

 -- Command: show ip prefix-list summary NAME

 -- Command: show ip prefix-list detail

 -- Command: show ip prefix-list detail NAME


File: quagga.info,  Node: Clear counter of ip prefix-list,  Prev: Showing ip prefix-list,  Up: IP Prefix List

12.2.4 Clear counter of ip prefix-list
--------------------------------------

 -- Command: clear ip prefix-list
     Clears the counters of all IP prefix lists.  Clear IP Prefix List
     can be used with a specified name and prefix.

 -- Command: clear ip prefix-list NAME

 -- Command: clear ip prefix-list NAME A.B.C.D/M


File: quagga.info,  Node: Route Map,  Next: IPv6 Support,  Prev: Filtering,  Up: Top

13 Route Map
************

Route maps provide a means to both filter and/or apply actions to
route, hence allowing policy to be applied to routes.

* Menu:

* Route Map Command::
* Route Map Match Command::
* Route Map Set Command::
* Route Map Call Command::
* Route Map Exit Action Command::
* Route Map Examples::

   Route-maps are an ordered list of route-map entries. Each entry may
specify up to four distincts sets of clauses:

`Matching Policy'
     This specifies the policy implied if the `Matching Conditions' are
     met or not met, and which actions of the route-map are to be
     taken, if any. The two possibilities are:

        - `permit': If the entry matches, then carry out the `Set
          Actions'. Then finish processing the route-map, permitting
          the route, unless an `Exit Action' indicates otherwise.

        - `deny': If the entry matches, then finish processing the
          route-map and deny the route (return `deny').

     The `Matching Policy' is specified as part of the command which
     defines the ordered entry in the route-map. See below.

`Matching Conditions'
     A route-map entry may, optionally, specify one or more conditions
     which must be matched if the entry is to be considered further, as
     governed by the Match Policy. If a route-map entry does not
     explicitely specify any matching conditions, then it always
     matches.

`Set Actions'
     A route-map entry may, optionally, specify one or more `Set
     Actions' to set or modify attributes of the route.

`Call Action'
     Call to another route-map, after any `Set Actions' have been
     carried out. If the route-map called returns `deny' then
     processing of the route-map finishes and the route is denied,
     regardless of the `Matching Policy' or the `Exit Policy'. If the
     called route-map returns `permit', then `Matching Policy' and
     `Exit Policy' govern further behaviour, as normal.

`Exit Policy'
     An entry may, optionally, specify an alternative `Exit Policy' to
     take if the entry matched, rather than the normal policy of
     exiting the route-map and permitting the route. The two
     possibilities are:

        - `next': Continue on with processing of the route-map entries.

        - `goto N': Jump ahead to the first route-map entry whose order
          in the route-map is >= N. Jumping to a previous entry is not
          permitted.

   The default action of a route-map, if no entries match, is to deny.
I.e. a route-map essentially has as its last entry an empty `deny'
entry, which matches all routes. To change this behaviour, one must
specify an empty `permit' entry as the last entry in the route-map.

   To summarise the above:

         Match    No Match
----------------------------- 
_Permit_ action   cont
_Deny_   deny     cont

`action'
        - Apply _set_ statements

        - If _call_ is present, call given route-map. If that returns a
          `deny', finish processing and return `deny'.

        - If `Exit Policy' is _next_, goto next route-map entry

        - If `Exit Policy' is _goto_, goto first entry whose order in
          the list is >= the given order.

        - Finish processing the route-map and permit the route.

`deny'
        - The route is denied by the route-map (return `deny').

`cont'
        - goto next route-map entry


File: quagga.info,  Node: Route Map Command,  Next: Route Map Match Command,  Up: Route Map

13.1 Route Map Command
======================

 -- Command: route-map ROUTE-MAP-NAME (permit|deny) ORDER
     Configure the ORDER'th entry in ROUTE-MAP-NAME with `Match Policy'
     of either _permit_ or _deny_.



File: quagga.info,  Node: Route Map Match Command,  Next: Route Map Set Command,  Prev: Route Map Command,  Up: Route Map

13.2 Route Map Match Command
============================

 -- Route-map Command: match ip address ACCESS_LIST
     Matches the specified ACCESS_LIST

 -- Route-map Command: match ip next-hop IPV4_ADDR
     Matches the specified IPV4_ADDR.

 -- Route-map Command: match aspath AS_PATH
     Matches the specified AS_PATH.

 -- Route-map Command: match metric METRIC
     Matches the specified METRIC.

 -- Route-map Command: match community COMMUNITY_LIST
     Matches the specified  COMMUNITY_LIST


File: quagga.info,  Node: Route Map Set Command,  Next: Route Map Call Command,  Prev: Route Map Match Command,  Up: Route Map

13.3 Route Map Set Command
==========================

 -- Route-map Command: set ip next-hop IPV4_ADDRESS
     Set the BGP nexthop address.

 -- Route-map Command: set local-preference LOCAL_PREF
     Set the BGP local preference.

 -- Route-map Command: set weight WEIGHT
     Set the route's weight.

 -- Route-map Command: set metric METRIC
     Set the BGP attribute MED.

 -- Route-map Command: set as-path prepend AS_PATH
     Set the BGP AS path to prepend.

 -- Route-map Command: set community COMMUNITY
     Set the BGP community attribute.

 -- Route-map Command: set ipv6 next-hop global IPV6_ADDRESS
     Set the BGP-4+ global IPv6 nexthop address.

 -- Route-map Command: set ipv6 next-hop local IPV6_ADDRESS
     Set the BGP-4+ link local IPv6 nexthop address.


File: quagga.info,  Node: Route Map Call Command,  Next: Route Map Exit Action Command,  Prev: Route Map Set Command,  Up: Route Map

13.4 Route Map Call Command
===========================

 -- Route-map Command: call NAME
     Call route-map NAME. If it returns deny, deny the route and finish
     processing the route-map.


File: quagga.info,  Node: Route Map Exit Action Command,  Next: Route Map Examples,  Prev: Route Map Call Command,  Up: Route Map

13.5 Route Map Exit Action Command
==================================

 -- Route-map Command: on-match next
 -- Route-map Command: continue
     Proceed on to the next entry in the route-map.

 -- Route-map Command: on-match goto N
 -- Route-map Command: continue N
     Proceed processing the route-map at the first entry whose order is
     >= N


File: quagga.info,  Node: Route Map Examples,  Prev: Route Map Exit Action Command,  Up: Route Map

13.6 Route Map Examples
=======================

A simple example of a route-map:

     route-map test permit 10
      match ip address 10
      set local-preference 200

   This means that if a route matches ip access-list number 10 it's
local-preference value is set to 200.

   See *Note BGP Configuration Examples:: for examples of more
sophisticated useage of route-maps, including of the `call' action.


File: quagga.info,  Node: IPv6 Support,  Next: Kernel Interface,  Prev: Route Map,  Up: Top

14 IPv6 Support
***************

Quagga fully supports IPv6 routing.  As described so far, Quagga
supports RIPng, OSPFv3 and BGP-4+.  You can give IPv6 addresses to an
interface and configure static IPv6 routing information.  Quagga IPv6
also provides automatic address configuration via a feature called
`address auto configuration'.  To do it, the router must send router
advertisement messages to the all nodes that exist on the network.

* Menu:

* Router Advertisement::


File: quagga.info,  Node: Router Advertisement,  Up: IPv6 Support

14.1 Router Advertisement
=========================

 -- Interface Command: no ipv6 nd suppress-ra
     Send router advertisment messages.

 -- Interface Command: ipv6 nd suppress-ra
     Don't send router advertisment messages.

 -- Interface Command: ipv6 nd prefix IPV6PREFIX [VALID-LIFETIME]
[PREFERRED-LIFETIME] [off-link] [no-autoconfig] [router-address]
     Configuring the IPv6 prefix to include in router advertisements.
     Several prefix specific optional parameters and flags may follow:
        * VALID-LIFETIME - the length of time in seconds during what
          the prefix is valid for the purpose of on-link determination.
          Value INFINITE represents infinity (i.e. a value of all one
          bits (`0xffffffff')).

          Range: `<0-4294967295>'  Default: `2592000'

        * PREFERRED-LIFETIME - the length of time in seconds during
          what addresses generated from the prefix remain preferred.
          Value INFINITE represents infinity.

          Range: `<0-4294967295>'  Default: `604800'

        * OFF-LINK - indicates that advertisement makes no statement
          about on-link or off-link properties of the prefix.

          Default: not set, i.e. this prefix can be used for on-link
          determination.

        * NO-AUTOCONFIG - indicates to hosts on the local link that the
          specified prefix cannot be used for IPv6 autoconfiguration.

          Default: not set, i.e. prefix can be used for
          autoconfiguration.

        * ROUTER-ADDRESS - indicates to hosts on the local link that
          the specified prefix contains a complete IP address by
          setting R flag.

          Default: not set, i.e. hosts do not assume a complete IP
          address is placed.

 -- Interface Command: ipv6 nd ra-interval SECONDS
 -- Interface Command: no ipv6 nd ra-interval
     The  maximum  time allowed between sending unsolicited multicast
     router advertisements from the interface, in seconds. Must be no
     less than 3 seconds.

     Default: `600'

 -- Interface Command: ipv6 nd ra-interval msec MILLISECONDS
 -- Interface Command: no ipv6 nd ra-interval msec
     The  maximum  time allowed between sending unsolicited multicast
     router advertisements from the interface, in milliseconds. Must be
     no less than 30 milliseconds.

     Default: `600000'

 -- Interface Command: ipv6 nd ra-lifetime SECONDS
 -- Interface Command: no ipv6 nd ra-lifetime
     The value to be placed in the Router Lifetime field of router
     advertisements sent from the interface, in seconds. Indicates the
     usefulness of the router as a default router on this interface.
     Setting the value to zero indicates that the router should not be
     considered a default router on this interface.  Must be either
     zero or between value specified with IPV6 ND RA-INTERVAL (or
     default) and 9000 seconds.

     Default: `1800'

 -- Interface Command: ipv6 nd reachable-time MILLISECONDS
 -- Interface Command: no ipv6 nd reachable-time
     The value to be placed in the Reachable Time field in the Router
     Advertisement messages sent by the router, in milliseconds. The
     configured time enables the router to detect unavailable
     neighbors. The value zero means unspecified (by this router). Must
     be no greater than `3,600,000' milliseconds (1 hour).

     Default: `0'

 -- Interface Command: ipv6 nd managed-config-flag
 -- Interface Command: no ipv6 nd managed-config-flag
     Set/unset flag in IPv6 router advertisements which indicates to
     hosts that they should use managed (stateful) protocol for
     addresses autoconfiguration in addition to any addresses
     autoconfigured using stateless address autoconfiguration.

     Default: not set

 -- Interface Command: ipv6 nd other-config-flag
 -- Interface Command: no ipv6 nd other-config-flag
     Set/unset flag in IPv6 router advertisements which indicates to
     hosts that they should use administered (stateful) protocol to
     obtain autoconfiguration information other than addresses.

     Default: not set

 -- Interface Command: ipv6 nd home-agent-config-flag
 -- Interface Command: no ipv6 nd home-agent-config-flag
     Set/unset flag in IPv6 router advertisements which indicates to
     hosts that the router acts as a Home Agent and includes a Home
     Agent Option.

     Default: not set

 -- Interface Command: ipv6 nd home-agent-preference
 -- Interface Command: no ipv6 nd home-agent-preference
     The value to be placed in Home Agent Option, when Home Agent
     config flag is set, which indicates to hosts Home Agent preference.

     Default: 0

 -- Interface Command: ipv6 nd home-agent-lifetime
 -- Interface Command: no ipv6 nd home-agent-lifetime
     The value to be placed in Home Agent Option, when Home Agent
     config flag is set, which indicates to hosts Home Agent Lifetime.
     A value of 0 means to place Router Lifetime value.

     Default: 0

 -- Interface Command: ipv6 nd adv-interval-option
 -- Interface Command: no ipv6 nd adv-interval-option
     Include an Advertisement Interval option which indicates to hosts
     the maximum time, in milliseconds, between successive unsolicited
     Router Advertisements.

     Default: not set

     interface eth0
      no ipv6 nd suppress-ra
      ipv6 nd prefix 2001:0DB8:5009::/64

   For more information see `RFC2462 (IPv6 Stateless Address
Autoconfiguration)' , `RFC2461 (Neighbor Discovery for IP Version 6
(IPv6))' and `RFC3775 (Mobility Support in IPv6 (Mobile IPv6))'.


File: quagga.info,  Node: Kernel Interface,  Next: SNMP Support,  Prev: IPv6 Support,  Up: Top

15 Kernel Interface
*******************

There are several different methods for reading kernel routing table
information, updating kernel routing tables, and for looking up
interfaces.

`ioctl'
     The `ioctl' method is a very traditional way for reading or writing
     kernel information.  `ioctl' can be used for looking up interfaces
     and for modifying interface addresses, flags, mtu settings and
     other types of information.  Also, `ioctl' can insert and delete
     kernel routing table entries.  It will soon be available on almost
     any platform which zebra supports, but it is a little bit ugly
     thus far, so if a better method is supported by the kernel, zebra
     will use that.

`sysctl'
     `sysctl' can lookup kernel information using MIB (Management
     Information Base) syntax.  Normally, it only provides a way of
     getting information from the kernel.  So one would usually want to
     change kernel information using another method such as `ioctl'.

`proc filesystem'
     `proc filesystem' provides an easy way of getting kernel
     information.

`routing socket'

`netlink'
     On recent Linux kernels (2.0.x and 2.2.x), there is a kernel/user
     communication support called `netlink'.  It makes asynchronous
     communication between kernel and Quagga possible, similar to a
     routing socket on BSD systems.

     Before you use this feature, be sure to select (in kernel
     configuration) the kernel/netlink support option 'Kernel/User
     network link driver' and 'Routing messages'.

     Today, the /dev/route special device file is obsolete.  Netlink
     communication is done by reading/writing over netlink socket.

     After the kernel configuration, please reconfigure and rebuild
     Quagga.  You can use netlink as a dynamic routing update channel
     between Quagga and the kernel.


File: quagga.info,  Node: SNMP Support,  Next: Zebra Protocol,  Prev: Kernel Interface,  Up: Top

16 SNMP Support
***************

SNMP (Simple Network Managing Protocol) is a widely implemented feature
for collecting network information from router and/or host.  Quagga
itself does not support SNMP agent (server daemon) functionality but is
able to connect to a SNMP agent using the SMUX protocol (`RFC1227') and
make the routing protocol MIBs available through it.

* Menu:

* Getting and installing an SNMP agent::
* SMUX configuration::
* MIB and command reference::
* Handling SNMP Traps::


File: quagga.info,  Node: Getting and installing an SNMP agent,  Next: SMUX configuration,  Up: SNMP Support

16.1 Getting and installing an SNMP agent
=========================================

There are several SNMP agent which support SMUX. We recommend to use
the latest version of `net-snmp' which was formerly known as `ucd-snmp'.
It is free and open software and available at `http://www.net-snmp.org/'
and as binary package for most Linux distributions.  `net-snmp' has to
be compiled with `--with-mib-modules=smux' to be able to accept
connections from Quagga.


File: quagga.info,  Node: SMUX configuration,  Next: MIB and command reference,  Prev: Getting and installing an SNMP agent,  Up: SNMP Support

16.2 SMUX configuration
=======================

To enable SMUX protocol support, Quagga must have been build with the
`--enable-snmp' option.

   A separate connection has then to be established between between the
SNMP agent (snmpd) and each of the Quagga daemons. This connections
each use different OID numbers and passwords. Be aware that this OID
number is not the one that is used in queries by clients, it is solely
used for the intercommunication of the daemons.

   In the following example the ospfd daemon will be connected to the
snmpd daemon using the password "quagga_ospfd". For testing it is
recommending to take exactly the below snmpd.conf as wrong access
restrictions can be hard to debug.

     /etc/snmp/snmpd.conf:
     	#
     	# example access restrictions setup
     	#
     	com2sec readonly default public
     	group MyROGroup v1 readonly
     	view all included .1 80
     	access MyROGroup "" any noauth exact all none none
     	#
     	# the following line is relevant for Quagga
     	#
     	smuxpeer .1.3.6.1.4.1.3317.1.2.5 quagga_ospfd

     /etc/quagga/ospf:
     	! ... the rest of ospfd.conf has been omitted for clarity ...
     	!
     	smux peer .1.3.6.1.4.1.3317.1.2.5 quagga_ospfd
     	!

   After restarting snmpd and quagga, a successful connection can be
verified in the syslog and by querying the SNMP daemon:

     snmpd[12300]: [smux_accept] accepted fd 12 from 127.0.0.1:36255
     snmpd[12300]: accepted smux peer: \
     	oid GNOME-PRODUCT-ZEBRA-MIB::ospfd, quagga-0.96.5

     # snmpwalk -c public -v1 localhost .1.3.6.1.2.1.14.1.1
     OSPF-MIB::ospfRouterId.0 = IpAddress: 192.168.42.109

   Be warned that the current version (5.1.1) of the Net-SNMP daemon
writes a line for every SNMP connect to the syslog which can lead to
enormous log file sizes.  If that is a problem you should consider to
patch snmpd and comment out the troublesome `snmp_log()' line in the
function `netsnmp_agent_check_packet()' in `agent/snmp_agent.c'.


File: quagga.info,  Node: MIB and command reference,  Next: Handling SNMP Traps,  Prev: SMUX configuration,  Up: SNMP Support

16.3 MIB and command reference
==============================

The following OID numbers are used for the interprocess communication
of snmpd and the Quagga daemons. Sadly, SNMP has not been implemented
in all daemons yet.
                 (OIDs below .iso.org.dod.internet.private.enterprises)
     zebra	.1.3.6.1.4.1.3317.1.2.1 .gnome.gnomeProducts.zebra.zserv
     bgpd	.1.3.6.1.4.1.3317.1.2.2 .gnome.gnomeProducts.zebra.bgpd
     ripd	.1.3.6.1.4.1.3317.1.2.3 .gnome.gnomeProducts.zebra.ripd
     ospfd	.1.3.6.1.4.1.3317.1.2.5 .gnome.gnomeProducts.zebra.ospfd
     ospf6d	.1.3.6.1.4.1.3317.1.2.6 .gnome.gnomeProducts.zebra.ospf6d

   The following OID numbers are used for querying the SNMP daemon by a
client:
     zebra	.1.3.6.1.2.1.4.24   .iso.org.dot.internet.mgmt.mib-2.ip.ipForward
     ospfd	.1.3.6.1.2.1.14	    .iso.org.dot.internet.mgmt.mib-2.ospf
     bgpd	.1.3.6.1.2.1.15	    .iso.org.dot.internet.mgmt.mib-2.bgp
     ripd	.1.3.6.1.2.1.23	    .iso.org.dot.internet.mgmt.mib-2.rip2
     ospf6d	.1.3.6.1.3.102	    .iso.org.dod.internet.experimental.ospfv3

   The following syntax is understood by the Quagga daemons for
configuring SNMP:

 -- Command: smux peer OID
 -- Command: no smux peer OID

 -- Command: smux peer OID PASSWORD
 -- Command: no smux peer OID PASSWORD


File: quagga.info,  Node: Handling SNMP Traps,  Prev: MIB and command reference,  Up: SNMP Support

16.4 Handling SNMP Traps
========================

To handle snmp traps make sure your snmp setup of quagga works
correctly as described in the quagga documentation in *Note SNMP
Support::.

   The BGP4 mib will send traps on peer up/down events. These should be
visible in your snmp logs with a message similar to:

   `snmpd[13733]: Got trap from peer on fd 14'

   To react on these traps they should be handled by a trapsink.
Configure your trapsink by adding the following lines to
`/etc/snmpd/snmpd.conf':

       # send traps to the snmptrapd on localhost
       trapsink localhost

   This will send all traps to an snmptrapd running on localhost. You
can of course also use a dedicated management station to catch traps.
Configure the snmptrapd daemon by adding the following line to
`/etc/snmpd/snmptrapd.conf':

       traphandle .1.3.6.1.4.1.3317.1.2.2 /etc/snmp/snmptrap_handle.sh

   This will use the bash script `/etc/snmp/snmptrap_handle.sh' to
handle the BGP4 traps. To add traps for other protocol daemons, lookup
their appropriate OID from their mib. (For additional information about
which traps are supported by your mib, lookup the mib on
`http://www.oidview.com/mibs/detail.html').

   Make sure snmptrapd is started.

   The snmptrap_handle.sh script I personally use for handling BGP4
traps is below. You can of course do all sorts of things when handling
traps, like sound a siren, have your display flash, etc., be creative
;).


  #!/bin/bash

  # routers name
  ROUTER=`hostname -s`

  #email address use to sent out notification
  EMAILADDR="john@doe.com"
  #email address used (allongside above) where warnings should be sent
  EMAILADDR_WARN="sms-john@doe.com"

  # type of notification
  TYPE="Notice"

  # local snmp community for getting AS belonging to peer
  COMMUNITY="<community>"

  # if a peer address is in $WARN_PEERS a warning should be sent
  WARN_PEERS="192.0.2.1"


  # get stdin
  INPUT=`cat -`

  # get some vars from stdin
  uptime=`echo $INPUT | cut -d' ' -f5`
  peer=`echo $INPUT | cut -d' ' -f8 | sed -e 's/SNMPv2-SMI::mib-2.15.3.1.14.//g'`
  peerstate=`echo $INPUT | cut -d' ' -f13`
  errorcode=`echo $INPUT | cut -d' ' -f9 | sed -e 's/\"//g'`
  suberrorcode=`echo $INPUT | cut -d' ' -f10 | sed -e 's/\"//g'`
  remoteas=`snmpget -v2c -c $COMMUNITY localhost SNMPv2-SMI::mib-2.15.3.1.9.$peer | cut -d' ' -f4`

  WHOISINFO=`whois -h whois.ripe.net " -r AS$remoteas" | egrep '(as-name|descr)'`
  asname=`echo "$WHOISINFO" | grep "^as-name:" | sed -e 's/^as-name://g' -e 's/  //g' -e 's/^ //g' | uniq`
  asdescr=`echo "$WHOISINFO" | grep "^descr:" | sed -e 's/^descr://g' -e 's/  //g' -e 's/^ //g' | uniq`

  # if peer address is in $WARN_PEER, the email should also
  # be sent to $EMAILADDR_WARN
  for ip in $WARN_PEERS; do
    if [ "x$ip" == "x$peer" ]; then
      EMAILADDR="$EMAILADDR,$EMAILADDR_WARN"
      TYPE="WARNING"
      break
    fi
  done


  # convert peer state
  case "$peerstate" in
    1) peerstate="Idle" ;;
    2) peerstate="Connect" ;;
    3) peerstate="Active" ;;
    4) peerstate="Opensent" ;;
    5) peerstate="Openconfirm" ;;
    6) peerstate="Established" ;;
    *) peerstate="Unknown" ;;
  esac

  # get textual messages for errors
  case "$errorcode" in
    00)
      error="No error"
      suberror=""
      ;;
    01)
      error="Message Header Error"
      case "$suberrorcode" in
        01) suberror="Connection Not Synchronized" ;;
        02) suberror="Bad Message Length" ;;
        03) suberror="Bad Message Type" ;;
        *) suberror="Unknown" ;;
      esac
      ;;
    02)
      error="OPEN Message Error"
      case "$suberrorcode" in
        01) suberror="Unsupported Version Number" ;;
        02) suberror="Bad Peer AS" ;;
        03) suberror="Bad BGP Identifier" ;;
        04) suberror="Unsupported Optional Parameter" ;;
        05) suberror="Authentication Failure" ;;
        06) suberror="Unacceptable Hold Time" ;;
        *) suberror="Unknown" ;;
      esac
      ;;
    03)
      error="UPDATE Message Error"
      case "$suberrorcode" in
        01) suberror="Malformed Attribute List" ;;
        02) suberror="Unrecognized Well-known Attribute" ;;
        03) suberror="Missing Well-known Attribute" ;;
        04) suberror="Attribute Flags Error" ;;
        05) suberror="Attribute Length Error" ;;
        06) suberror="Invalid ORIGIN Attribute" ;;
        07) suberror="AS Routing Loop" ;;
        08) suberror="Invalid NEXT_HOP Attribute" ;;
        09) suberror="Optional Attribute Error" ;;
        10) suberror="Invalid Network Field" ;;
        11) suberror="Malformed AS_PATH" ;;
        *) suberror="Unknown" ;;
      esac
      ;;
    04)
      error="Hold Timer Expired"
      suberror=""
      ;;
    05)
      error="Finite State Machine Error"
      suberror=""
      ;;
    06)
      error="Cease"
      case "$suberrorcode" in
        01) suberror="Maximum Number of Prefixes Reached" ;;
        02) suberror="Administratively Shutdown" ;;
        03) suberror="Peer Unconfigured" ;;
        04) suberror="Administratively Reset" ;;
        05) suberror="Connection Rejected" ;;
        06) suberror="Other Configuration Change" ;;
        07) suberror="Connection collision resolution" ;;
        08) suberror="Out of Resource" ;;
        09) suberror="MAX" ;;
        *) suberror="Unknown" ;;
      esac
      ;;
    *)
      error="Unknown"
      suberror=""
      ;;
  esac

  # create textual message from errorcodes
  if [ "x$suberror" == "x" ]; then
    NOTIFY="$errorcode ($error)"
  else
    NOTIFY="$errorcode/$suberrorcode ($error/$suberror)"
  fi


  # form a decent subject
  SUBJECT="$TYPE: $ROUTER [bgp] $peer is $peerstate: $NOTIFY"
  # create the email body
  MAIL=`cat << EOF
  BGP notification on router $ROUTER.

  Peer: $peer
  AS: $remoteas
  New state: $peerstate
  Notification: $NOTIFY

  Info:
  $asname
  $asdescr

  Snmpd uptime: $uptime
  EOF`

  # mail the notification
  echo "$MAIL" | mail -s "$SUBJECT" $EMAILADDR


File: quagga.info,  Node: Zebra Protocol,  Next: Packet Binary Dump Format,  Prev: SNMP Support,  Up: Top

Appendix A Zebra Protocol
*************************

Zebra Protocol is a protocol which is used between protocol daemon and
zebra.  Each protocol daemon sends selected routes to zebra daemon.
Then zebra manages which route is installed into the forwarding table.

   Zebra Protocol is a TCP-based protocol.  Below is common header of
Zebra Protocol.

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |           Length (2)          |   Command (1) |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Length is total packet length including this header length.  So
minimum length is three.  Command is Zebra Protocol command.

     ZEBRA_INTERFACE_ADD                1
     ZEBRA_INTERFACE_DELETE             2
     ZEBRA_INTERFACE_ADDRESS_ADD        3
     ZEBRA_INTERFACE_ADDRESS_DELETE     4
     ZEBRA_INTERFACE_UP                 5
     ZEBRA_INTERFACE_DOWN               6
     ZEBRA_IPV4_ROUTE_ADD               7
     ZEBRA_IPV4_ROUTE_DELETE            8
     ZEBRA_IPV6_ROUTE_ADD               9
     ZEBRA_IPV6_ROUTE_DELETE           10
     ZEBRA_REDISTRIBUTE_ADD            11
     ZEBRA_REDISTRIBUTE_DELETE         12
     ZEBRA_REDISTRIBUTE_DEFAULT_ADD    13
     ZEBRA_REDISTRIBUTE_DEFAULT_DELETE 14
     ZEBRA_IPV4_NEXTHOP_LOOKUP         15
     ZEBRA_IPV6_NEXTHOP_LOOKUP         16

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |             Type              |             Flags             |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


File: quagga.info,  Node: Packet Binary Dump Format,  Next: Command Index,  Prev: Zebra Protocol,  Up: Top

Appendix B Packet Binary Dump Format
************************************

Quagga can dump routing protocol packet into file with a binary format
(*note Dump BGP packets and table::).

   It seems to be better that we share the MRT's header format for
backward compatibility with MRT's dump logs. We should also define the
binary format excluding the header, because we must support both IP v4
and v6 addresses as socket addresses and / or routing entries.

   In the last meeting, we discussed to have a version field in the
header. But Masaki told us that we can define new `type' value rather
than having a `version' field, and it seems to be better because we
don't need to change header format.

   Here is the common header format. This is same as that of MRT.

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                              Time                             |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |             Type              |            Subtype            |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                             Length                            |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   If `type' is PROTOCOL_BGP4MP, `subtype' is BGP4MP_STATE_CHANGE, and
Address Family == IP (version 4)

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |        Source AS number       |     Destination AS number     |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |        Interface Index        |      Address Family           |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                        Source IP address                      |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                     Destination IP address                    |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |            Old State          |           New State           |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Where State is the value defined in RFC1771.

   If `type' is PROTOCOL_BGP4MP, `subtype' is BGP4MP_STATE_CHANGE, and
Address Family == IP version 6

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |        Source AS number       |     Destination AS number     |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |        Interface Index        |      Address Family           |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                        Source IP address                      |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                        Source IP address (Cont'd)             |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                        Source IP address (Cont'd)             |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                        Source IP address (Cont'd)             |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                     Destination IP address                    |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                     Destination IP address (Cont'd)           |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                     Destination IP address (Cont'd)           |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                     Destination IP address (Cont'd)           |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |            Old State          |           New State           |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   If `type' is PROTOCOL_BGP4MP, `subtype' is BGP4MP_MESSAGE, and
Address Family == IP (version 4)

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |        Source AS number       |     Destination AS number     |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |        Interface Index        |      Address Family           |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                        Source IP address                      |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                     Destination IP address                    |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                       BGP Message Packet                      |
     |                                                               |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Where BGP Message Packet is the whole contents of the BGP4 message
including header portion.

   If `type' is PROTOCOL_BGP4MP, `subtype' is BGP4MP_MESSAGE, and
Address Family == IP version 6

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |        Source AS number       |     Destination AS number     |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |        Interface Index        |      Address Family           |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                        Source IP address                      |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                        Source IP address (Cont'd)             |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                        Source IP address (Cont'd)             |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                        Source IP address (Cont'd)             |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                     Destination IP address                    |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                     Destination IP address (Cont'd)           |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                     Destination IP address (Cont'd)           |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                     Destination IP address (Cont'd)           |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                       BGP Message Packet                      |
     |                                                               |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   If `type' is PROTOCOL_BGP4MP, `subtype' is BGP4MP_ENTRY, and Address
Family == IP (version 4)

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |            View #             |            Status             |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                        Time Last Change                       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |       Address Family          |    SAFI       | Next-Hop-Len  |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                        Next Hop Address                       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     | Prefix Length |             Address Prefix [variable]         |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |       Attribute Length        |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |      BGP Attribute [variable length]    			|
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   If `type' is PROTOCOL_BGP4MP, `subtype' is BGP4MP_ENTRY, and Address
Family == IP version 6

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |            View #             |            Status             |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                        Time Last Change                       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |       Address Family          |    SAFI       | Next-Hop-Len  |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                        Next Hop Address                       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                        Next Hop Address (Cont'd)              |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                        Next Hop Address (Cont'd)              |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                        Next Hop Address (Cont'd)              |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     | Prefix Length |             Address Prefix [variable]         |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |     Address Prefix (cont'd) [variable]        |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |       Attribute Length        |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |      BGP Attribute [variable length]    			    |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   	BGP4 Attribute must not contain MP_UNREACH_NLRI.  	If BGP Attribute
has MP_REACH_NLRI field, it must has 	zero length NLRI, e.g.,
MP_REACH_NLRI has only Address 	Family, SAFI and next-hop values.

   If `type' is PROTOCOL_BGP4MP and `subtype' is BGP4MP_SNAPSHOT,

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |           View #              |       File Name [variable]    |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   The file specified in "File Name" contains all routing entries,
which are in the format of "subtype == BGP4MP_ENTRY".

     Constants:
       /* type value */
       #define MSG_PROTOCOL_BGP4MP 16
       /* subtype value */
       #define BGP4MP_STATE_CHANGE 0
       #define BGP4MP_MESSAGE 1
       #define BGP4MP_ENTRY 2
       #define BGP4MP_SNAPSHOT 3


File: quagga.info,  Node: Command Index,  Next: VTY Key Index,  Prev: Packet Binary Dump Format,  Up: Top

Command Index
*************

 [index ]
* Menu:

* access-class ACCESS-LIST:              Basic Config Commands.
                                                              (line 128)
* access-list NAME deny IPV4-NETWORK:    IP Access List.      (line   8)
* access-list NAME permit IPV4-NETWORK:  IP Access List.      (line   7)
* aggregate-address A.B.C.D/M:           Route Aggregation.   (line   7)
* aggregate-address A.B.C.D/M as-set:    Route Aggregation.   (line  10)
* aggregate-address A.B.C.D/M summary-only: Route Aggregation.
                                                              (line  14)
* area <0-4294967295> authentication:    OSPF area.           (line 127)
* area <0-4294967295> authentication message-digest: OSPF area.
                                                              (line 134)
* area <0-4294967295> export-list NAME:  OSPF area.           (line  85)
* area <0-4294967295> filter-list prefix NAME in: OSPF area.  (line 117)
* area <0-4294967295> filter-list prefix NAME out: OSPF area. (line 118)
* area <0-4294967295> import-list NAME:  OSPF area.           (line 109)
* area <0-4294967295> range A.B.C.D/M:   OSPF area.           (line   8)
* area <0-4294967295> shortcut:          OSPF area.           (line  55)
* area <0-4294967295> stub:              OSPF area.           (line  62)
* area <0-4294967295> stub no-summary:   OSPF area.           (line  74)
* area <0-4294967295> virtual-link A.B.C.D: OSPF area.        (line  50)
* area A.B.C.D authentication:           OSPF area.           (line 126)
* area A.B.C.D authentication message-digest: OSPF area.      (line 133)
* area A.B.C.D default-cost <0-16777215>: OSPF area.          (line  80)
* area A.B.C.D export-list NAME:         OSPF area.           (line  84)
* area A.B.C.D filter-list prefix NAME in: OSPF area.         (line 115)
* area A.B.C.D filter-list prefix NAME out: OSPF area.        (line 116)
* area A.B.C.D import-list NAME:         OSPF area.           (line 108)
* area A.B.C.D range A.B.C.D/M:          OSPF area.           (line   7)
* area A.B.C.D range IPV4_PREFIX not-advertise: OSPF area.    (line  28)
* area A.B.C.D range IPV4_PREFIX substitute IPV4_PREFIX: OSPF area.
                                                              (line  34)
* area A.B.C.D shortcut:                 OSPF area.           (line  54)
* area A.B.C.D stub:                     OSPF area.           (line  61)
* area A.B.C.D stub no-summary:          OSPF area.           (line  73)
* area A.B.C.D virtual-link A.B.C.D:     OSPF area.           (line  49)
* auto-cost reference-bandwidth <1-4294967>: OSPF router.     (line 143)
* bandwidth <1-10000000>:                Interface Commands.  (line  31)
* banner motd default:                   Basic Config Commands.
                                                              (line 110)
* bgp bestpath as-path confed:           BGP decision process.
                                                              (line  19)
* bgp cluster-id A.B.C.D:                Route Reflector.     (line   7)
* bgp config-type cisco:                 Multiple instance.   (line  20)
* bgp config-type zebra:                 Multiple instance.   (line  53)
* bgp multiple-instance:                 Multiple instance.   (line  10)
* bgp router-id A.B.C.D:                 BGP router.          (line  22)
* call NAME:                             Route Map Call Command.
                                                              (line   7)
* call WORD:                             Commands for configuring a Route Server.
                                                              (line  52)
* clear ip bgp PEER:                     More Show IP BGP.    (line  25)
* clear ip bgp PEER soft in:             More Show IP BGP.    (line  28)
* clear ip prefix-list:                  Clear counter of ip prefix-list.
                                                              (line   7)
* clear ip prefix-list NAME:             Clear counter of ip prefix-list.
                                                              (line  11)
* clear ip prefix-list NAME A.B.C.D/M:   Clear counter of ip prefix-list.
                                                              (line  13)
* configure terminal:                    Terminal Mode Commands.
                                                              (line  13)
* continue:                              Route Map Exit Action Command.
                                                              (line   8)
* continue N:                            Route Map Exit Action Command.
                                                              (line  12)
* debug event:                           More Show IP BGP.    (line  33)
* debug keepalive:                       More Show IP BGP.    (line  37)
* debug ospf ism:                        Debugging OSPF.      (line  12)
* debug ospf ism (status|events|timers): Debugging OSPF.      (line  13)
* debug ospf lsa:                        Debugging OSPF.      (line  22)
* debug ospf lsa (generate|flooding|refresh): Debugging OSPF. (line  23)
* debug ospf nsm:                        Debugging OSPF.      (line  17)
* debug ospf nsm (status|events|timers): Debugging OSPF.      (line  18)
* debug ospf packet (hello|dd|ls-request|ls-update|ls-ack|all) (send|recv) [detail]: Debugging OSPF.
                                                              (line   8)
* debug ospf zebra:                      Debugging OSPF.      (line  27)
* debug ospf zebra (interface|redistribute): Debugging OSPF.  (line  28)
* debug rip events:                      RIP Debug Commands.  (line   9)
* debug rip packet:                      RIP Debug Commands.  (line  15)
* debug rip zebra:                       RIP Debug Commands.  (line  22)
* debug ripng events:                    ripngd Terminal Mode Commands.
                                                              (line  11)
* debug ripng packet:                    ripngd Terminal Mode Commands.
                                                              (line  13)
* debug ripng zebra:                     ripngd Terminal Mode Commands.
                                                              (line  15)
* debug update:                          More Show IP BGP.    (line  35)
* default-information originate <1>:     Redistribute routes to OSPF.
                                                              (line  27)
* default-information originate:         How to Announce RIP route.
                                                              (line  51)
* default-information originate always:  Redistribute routes to OSPF.
                                                              (line  33)
* default-information originate always metric <0-16777214>: Redistribute routes to OSPF.
                                                              (line  35)
* default-information originate always metric <0-16777214> metric-type (1|2): Redistribute routes to OSPF.
                                                              (line  37)
* default-information originate always metric <0-16777214> metric-type (1|2) route-map WORD: Redistribute routes to OSPF.
                                                              (line  39)
* default-information originate metric <0-16777214>: Redistribute routes to OSPF.
                                                              (line  28)
* default-information originate metric <0-16777214> metric-type (1|2): Redistribute routes to OSPF.
                                                              (line  30)
* default-information originate metric <0-16777214> metric-type (1|2) route-map WORD: Redistribute routes to OSPF.
                                                              (line  32)
* default-metric <0-16777214>:           Redistribute routes to OSPF.
                                                              (line  52)
* default-metric <1-16>:                 RIP Metric Manipulation.
                                                              (line  11)
* description DESCRIPTION ...:           Interface Commands.  (line  24)
* distance <1-255> <1>:                  Redistribute routes to OSPF.
                                                              (line  55)
* distance <1-255>:                      RIP distance.        (line   9)
* distance <1-255> A.B.C.D/M <1>:        BGP distance.        (line  12)
* distance <1-255> A.B.C.D/M:            RIP distance.        (line  13)
* distance <1-255> A.B.C.D/M ACCESS-LIST: RIP distance.       (line  18)
* distance <1-255> A.B.C.D/M WORD:       BGP distance.        (line  13)
* distance bgp <1-255> <1-255> <1-255>:  BGP distance.        (line   7)
* distance ospf (intra-area|inter-area|external) <1-255>: Redistribute routes to OSPF.
                                                              (line  59)
* distribute-list ACCESS_LIST (in|out) IFNAME: ripngd Filtering Commands.
                                                              (line   7)
* distribute-list ACCESS_LIST DIRECT IFNAME: Filtering RIP Routes.
                                                              (line   9)
* distribute-list NAME out (kernel|connected|static|rip|ospf: Redistribute routes to OSPF.
                                                              (line  48)
* distribute-list prefix PREFIX_LIST (in|out) IFNAME: Filtering RIP Routes.
                                                              (line  32)
* dump bgp all PATH:                     Dump BGP packets and table.
                                                              (line   7)
* dump bgp all PATH INTERVAL:            Dump BGP packets and table.
                                                              (line   8)
* dump bgp routes PATH:                  Dump BGP packets and table.
                                                              (line  15)
* dump bgp updates PATH:                 Dump BGP packets and table.
                                                              (line  11)
* dump bgp updates PATH INTERVAL:        Dump BGP packets and table.
                                                              (line  12)
* enable password PASSWORD:              Basic Config Commands.
                                                              (line  14)
* exec-timeout MINUTE:                   Basic Config Commands.
                                                              (line 116)
* exec-timeout MINUTE SECOND:            Basic Config Commands.
                                                              (line 117)
* flush_timer TIME:                      ripngd Configuration.
                                                              (line  12)
* hostname HOSTNAME:                     Basic Config Commands.
                                                              (line   7)
* interface IFNAME:                      Interface Commands.  (line   7)
* interface IFNAME area AREA:            OSPF6 router.        (line  12)
* ip address ADDRESS/PREFIX:             Interface Commands.  (line  13)
* ip address ADDRESS/PREFIX secondary:   Interface Commands.  (line  19)
* ip as-path access-list WORD {permit|deny} LINE: AS Path Access List.
                                                              (line   9)
* ip community-list <1-99> {permit|deny} COMMUNITY: Numbered BGP Community Lists.
                                                              (line  14)
* ip community-list <100-199> {permit|deny} COMMUNITY: Numbered BGP Community Lists.
                                                              (line  20)
* ip community-list expanded NAME {permit|deny} LINE: BGP Community Lists.
                                                              (line  30)
* ip community-list NAME {permit|deny} COMMUNITY: Numbered BGP Community Lists.
                                                              (line  25)
* ip community-list standard NAME {permit|deny} COMMUNITY: BGP Community Lists.
                                                              (line  20)
* ip extcommunity-list expanded NAME {permit|deny} LINE: BGP Extended Community Lists.
                                                              (line  21)
* ip extcommunity-list standard NAME {permit|deny} EXTCOMMUNITY: BGP Extended Community Lists.
                                                              (line  10)
* ip ospf authentication-key AUTH_KEY:   OSPF interface.      (line   7)
* ip ospf cost <1-65535>:                OSPF interface.      (line  30)
* ip ospf dead-interval <1-65535>:       OSPF interface.      (line  35)
* ip ospf dead-interval minimal hello-multiplier <2-20>: OSPF interface.
                                                              (line  37)
* ip ospf hello-interval <1-65535>:      OSPF interface.      (line  54)
* ip ospf message-digest-key KEYID md5 KEY: OSPF interface.   (line  13)
* ip ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point): OSPF interface.
                                                              (line  65)
* ip ospf priority <0-255>:              OSPF interface.      (line  69)
* ip ospf retransmit-interval <1-65535>: OSPF interface.      (line  76)
* ip ospf transmit-delay:                OSPF interface.      (line  82)
* ip prefix-list NAME (permit|deny) PREFIX [le LEN] [ge LEN]: IP Prefix List.
                                                              (line  16)
* ip prefix-list NAME description DESC:  ip prefix-list description.
                                                              (line   7)
* ip prefix-list NAME seq NUMBER (permit|deny) PREFIX [le LEN] [ge LEN]: IP Prefix List.
                                                              (line  18)
* ip prefix-list sequence-number:        ip prefix-list sequential number control.
                                                              (line   7)
* ip rip authentication key-chain KEY-CHAIN: RIP Authentication.
                                                              (line  21)
* ip rip authentication mode md5:        RIP Authentication.  (line   7)
* ip rip authentication mode text:       RIP Authentication.  (line  11)
* ip rip authentication string STRING:   RIP Authentication.  (line  15)
* ip rip receive version VERSION:        RIP Configuration.   (line  90)
* ip rip send version VERSION:           RIP Configuration.   (line  81)
* ip route NETWORK GATEWAY:              Static Route Commands.
                                                              (line  10)
* ip route NETWORK GATEWAY DISTANCE:     Static Route Commands.
                                                              (line  36)
* ip route NETWORK NETMASK GATEWAY:      Static Route Commands.
                                                              (line  25)
* ip split-horizon:                      RIP Configuration.   (line  99)
* ip6 address ADDRESS/PREFIX:            Interface Commands.  (line  14)
* ipv6 nd adv-interval-option:           Router Advertisement.
                                                              (line 127)
* ipv6 nd home-agent-config-flag:        Router Advertisement.
                                                              (line 104)
* ipv6 nd home-agent-lifetime:           Router Advertisement.
                                                              (line 119)
* ipv6 nd home-agent-preference:         Router Advertisement.
                                                              (line 112)
* ipv6 nd managed-config-flag:           Router Advertisement.
                                                              (line  87)
* ipv6 nd other-config-flag:             Router Advertisement.
                                                              (line  96)
* ipv6 nd prefix IPV6PREFIX [VALID-LIFETIME] [PREFERRED-LIFETIME] [off-link] [no-autoconfig] [router-address]: Router Advertisement.
                                                              (line  14)
* ipv6 nd ra-interval msec MILLISECONDS: Router Advertisement.
                                                              (line  57)
* ipv6 nd ra-interval SECONDS:           Router Advertisement.
                                                              (line  49)
* ipv6 nd ra-lifetime SECONDS:           Router Advertisement.
                                                              (line  65)
* ipv6 nd reachable-time MILLISECONDS:   Router Advertisement.
                                                              (line  77)
* ipv6 nd suppress-ra:                   Router Advertisement.
                                                              (line  10)
* ipv6 ospf6 cost COST:                  OSPF6 interface.     (line   7)
* ipv6 ospf6 dead-interval DEADINTERVAL: OSPF6 interface.     (line  13)
* ipv6 ospf6 hello-interval HELLOINTERVAL: OSPF6 interface.   (line  10)
* ipv6 ospf6 priority PRIORITY:          OSPF6 interface.     (line  20)
* ipv6 ospf6 retransmit-interval RETRANSMITINTERVAL: OSPF6 interface.
                                                              (line  17)
* ipv6 ospf6 transmit-delay TRANSMITDELAY: OSPF6 interface.   (line  23)
* ipv6 route NETWORK GATEWAY:            Static Route Commands.
                                                              (line  77)
* ipv6 route NETWORK GATEWAY DISTANCE:   Static Route Commands.
                                                              (line  78)
* line vty:                              Basic Config Commands.
                                                              (line 107)
* link-detect:                           Interface Commands.  (line  37)
* list:                                  Terminal Mode Commands.
                                                              (line  24)
* log facility FACILITY:                 Basic Config Commands.
                                                              (line  81)
* log file FILENAME:                     Basic Config Commands.
                                                              (line  41)
* log file FILENAME LEVEL:               Basic Config Commands.
                                                              (line  42)
* log monitor:                           Basic Config Commands.
                                                              (line  68)
* log monitor LEVEL:                     Basic Config Commands.
                                                              (line  69)
* log record-priority:                   Basic Config Commands.
                                                              (line  87)
* log stdout:                            Basic Config Commands.
                                                              (line  28)
* log stdout LEVEL:                      Basic Config Commands.
                                                              (line  29)
* log syslog:                            Basic Config Commands.
                                                              (line  59)
* log syslog LEVEL:                      Basic Config Commands.
                                                              (line  60)
* log trap LEVEL:                        Basic Config Commands.
                                                              (line  17)
* logmsg LEVEL MESSAGE:                  Terminal Mode Commands.
                                                              (line  34)
* match as-path WORD:                    Using AS Path in Route Map.
                                                              (line   7)
* match aspath AS_PATH:                  Route Map Match Command.
                                                              (line  13)
* match community COMMUNITY_LIST:        Route Map Match Command.
                                                              (line  19)
* match community WORD:                  BGP Community in Route Map.
                                                              (line  13)
* match community WORD exact-match:      BGP Community in Route Map.
                                                              (line  14)
* match extcommunity WORD:               BGP Extended Communities in Route Map.
                                                              (line   7)
* match interface WORD:                  RIP route-map.       (line  26)
* match ip address ACCESS_LIST:          Route Map Match Command.
                                                              (line   7)
* match ip address prefix-list WORD:     RIP route-map.       (line  39)
* match ip address WORD:                 RIP route-map.       (line  38)
* match ip next-hop A.B.C.D:             RIP route-map.       (line  42)
* match ip next-hop IPV4_ADDR:           Route Map Match Command.
                                                              (line  10)
* match metric <0-4294967295>:           RIP route-map.       (line  47)
* match metric METRIC:                   Route Map Match Command.
                                                              (line  16)
* match peer {A.B.C.D|X:X::X:X}:         Commands for configuring a Route Server.
                                                              (line  34)
* max-metric router-lsa [on-startup|on-shutdown] <5-86400>: OSPF router.
                                                              (line 110)
* max-metric router-lsa administrative:  OSPF router.         (line 111)
* multicast:                             Interface Commands.  (line  27)
* neigbor {A.B.C.D|X.X::X.X|peer-group} route-map WORD {import|export}: Commands for configuring a Route Server.
                                                              (line  29)
* neighbor A.B.C.D:                      RIP Configuration.   (line  45)
* neighbor A.B.C.D route-server-client:  Commands for configuring a Route Server.
                                                              (line  11)
* neighbor PEER default-originate:       BGP Peer commands.   (line  47)
* neighbor PEER description ...:         BGP Peer commands.   (line  20)
* neighbor PEER distribute-list NAME [in|out]: Peer filtering.
                                                              (line   7)
* neighbor PEER dont-capability-negotiate: Capability Negotiation.
                                                              (line  51)
* neighbor PEER ebgp-multihop:           BGP Peer commands.   (line  17)
* neighbor PEER filter-list NAME [in|out]: Peer filtering.    (line  13)
* neighbor PEER interface IFNAME:        BGP Peer commands.   (line  33)
* neighbor PEER maximum-prefix NUMBER:   BGP Peer commands.   (line  64)
* neighbor PEER next-hop-self:           BGP Peer commands.   (line  39)
* neighbor PEER override-capability:     Capability Negotiation.
                                                              (line  67)
* neighbor PEER peer-group WORD:         BGP Peer Group.      (line  10)
* neighbor PEER port PORT:               BGP Peer commands.   (line  53)
* neighbor PEER prefix-list NAME [in|out]: Peer filtering.    (line  11)
* neighbor PEER remote-as ASN:           Defining Peer.       (line   7)
* neighbor PEER route-map NAME [in|out]: Peer filtering.      (line  15)
* neighbor PEER route-reflector-client:  Route Reflector.     (line   9)
* neighbor PEER send-community:          BGP Peer commands.   (line  56)
* neighbor PEER shutdown:                BGP Peer commands.   (line  10)
* neighbor PEER strict-capability-match: Capability Negotiation.
                                                              (line  40)
* neighbor PEER update-source:           BGP Peer commands.   (line  44)
* neighbor PEER version VERSION:         BGP Peer commands.   (line  24)
* neighbor PEER weight WEIGHT:           BGP Peer commands.   (line  59)
* neighbor PEER-GROUP route-server-client: Commands for configuring a Route Server.
                                                              (line  10)
* neighbor WORD peer-group:              BGP Peer Group.      (line   7)
* neighbor X:X::X:X route-server-client: Commands for configuring a Route Server.
                                                              (line  12)
* network A.B.C.D/M:                     BGP route.           (line   7)
* network A.B.C.D/M area <0-4294967295>: OSPF router.         (line 155)
* network A.B.C.D/M area A.B.C.D:        OSPF router.         (line 154)
* network IFNAME <1>:                    ripngd Configuration.
                                                              (line  18)
* network IFNAME:                        RIP Configuration.   (line  38)
* network NETWORK <1>:                   ripngd Configuration.
                                                              (line  15)
* network NETWORK:                       RIP Configuration.   (line  26)
* no aggregate-address A.B.C.D/M:        Route Aggregation.   (line  18)
* no area <0-4294967295> authentication: OSPF area.           (line 129)
* no area <0-4294967295> export-list NAME: OSPF area.         (line  87)
* no area <0-4294967295> filter-list prefix NAME in: OSPF area.
                                                              (line 121)
* no area <0-4294967295> filter-list prefix NAME out: OSPF area.
                                                              (line 122)
* no area <0-4294967295> import-list NAME: OSPF area.         (line 111)
* no area <0-4294967295> range A.B.C.D/M: OSPF area.          (line  10)
* no area <0-4294967295> shortcut:       OSPF area.           (line  57)
* no area <0-4294967295> stub:           OSPF area.           (line  64)
* no area <0-4294967295> stub no-summary: OSPF area.          (line  76)
* no area <0-4294967295> virtual-link A.B.C.D: OSPF area.     (line  52)
* no area A.B.C.D authentication:        OSPF area.           (line 128)
* no area A.B.C.D default-cost <0-16777215>: OSPF area.       (line  81)
* no area A.B.C.D export-list NAME:      OSPF area.           (line  86)
* no area A.B.C.D filter-list prefix NAME in: OSPF area.      (line 119)
* no area A.B.C.D filter-list prefix NAME out: OSPF area.     (line 120)
* no area A.B.C.D import-list NAME:      OSPF area.           (line 110)
* no area A.B.C.D range A.B.C.D/M:       OSPF area.           (line   9)
* no area A.B.C.D range IPV4_PREFIX not-advertise: OSPF area. (line  29)
* no area A.B.C.D range IPV4_PREFIX substitute IPV4_PREFIX: OSPF area.
                                                              (line  36)
* no area A.B.C.D shortcut:              OSPF area.           (line  56)
* no area A.B.C.D stub:                  OSPF area.           (line  63)
* no area A.B.C.D stub no-summary:       OSPF area.           (line  75)
* no area A.B.C.D virtual-link A.B.C.D:  OSPF area.           (line  51)
* no auto-cost reference-bandwidth:      OSPF router.         (line 144)
* no bandwidth <1-10000000>:             Interface Commands.  (line  32)
* no banner motd:                        Basic Config Commands.
                                                              (line 113)
* no bgp multiple-instance:              Multiple instance.   (line  14)
* no debug event:                        More Show IP BGP.    (line  39)
* no debug keepalive:                    More Show IP BGP.    (line  43)
* no debug ospf ism:                     Debugging OSPF.      (line  14)
* no debug ospf ism (status|events|timers): Debugging OSPF.   (line  15)
* no debug ospf lsa:                     Debugging OSPF.      (line  24)
* no debug ospf lsa (generate|flooding|refresh): Debugging OSPF.
                                                              (line  25)
* no debug ospf nsm:                     Debugging OSPF.      (line  19)
* no debug ospf nsm (status|events|timers): Debugging OSPF.   (line  20)
* no debug ospf packet (hello|dd|ls-request|ls-update|ls-ack|all) (send|recv) [detail]: Debugging OSPF.
                                                              (line  10)
* no debug ospf zebra:                   Debugging OSPF.      (line  29)
* no debug ospf zebra (interface|redistribute): Debugging OSPF.
                                                              (line  30)
* no debug update:                       More Show IP BGP.    (line  41)
* no default-information originate:      Redistribute routes to OSPF.
                                                              (line  40)
* no default-metric:                     Redistribute routes to OSPF.
                                                              (line  53)
* no default-metric <1-16>:              RIP Metric Manipulation.
                                                              (line  12)
* no distance <1-255> <1>:               Redistribute routes to OSPF.
                                                              (line  56)
* no distance <1-255>:                   RIP distance.        (line  10)
* no distance <1-255> A.B.C.D/M:         RIP distance.        (line  14)
* no distance <1-255> A.B.C.D/M ACCESS-LIST: RIP distance.    (line  19)
* no distance ospf:                      Redistribute routes to OSPF.
                                                              (line  60)
* no distribute-list NAME out (kernel|connected|static|rip|ospf: Redistribute routes to OSPF.
                                                              (line  50)
* no exec-timeout:                       Basic Config Commands.
                                                              (line 124)
* no ip address ADDRESS/PREFIX:          Interface Commands.  (line  15)
* no ip address ADDRESS/PREFIX secondary: Interface Commands. (line  20)
* no ip as-path access-list WORD:        AS Path Access List. (line  12)
* no ip as-path access-list WORD {permit|deny} LINE: AS Path Access List.
                                                              (line  13)
* no ip community-list expanded NAME:    BGP Community Lists. (line  37)
* no ip community-list NAME:             BGP Community Lists. (line  35)
* no ip community-list standard NAME:    BGP Community Lists. (line  36)
* no ip extcommunity-list expanded NAME: BGP Extended Community Lists.
                                                              (line  29)
* no ip extcommunity-list NAME:          BGP Extended Community Lists.
                                                              (line  27)
* no ip extcommunity-list standard NAME: BGP Extended Community Lists.
                                                              (line  28)
* no ip ospf authentication-key:         OSPF interface.      (line   8)
* no ip ospf cost:                       OSPF interface.      (line  31)
* no ip ospf dead-interval:              OSPF interface.      (line  38)
* no ip ospf hello-interval:             OSPF interface.      (line  55)
* no ip ospf message-digest-key:         OSPF interface.      (line  14)
* no ip ospf network:                    OSPF interface.      (line  66)
* no ip ospf priority:                   OSPF interface.      (line  70)
* no ip ospf retransmit interval:        OSPF interface.      (line  77)
* no ip ospf transmit-delay:             OSPF interface.      (line  83)
* no ip prefix-list NAME:                IP Prefix List.      (line  67)
* no ip prefix-list NAME description [DESC]: ip prefix-list description.
                                                              (line  11)
* no ip prefix-list sequence-number:     ip prefix-list sequential number control.
                                                              (line  11)
* no ip rip authentication key-chain KEY-CHAIN: RIP Authentication.
                                                              (line  22)
* no ip rip authentication mode md5:     RIP Authentication.  (line   8)
* no ip rip authentication mode text:    RIP Authentication.  (line  12)
* no ip rip authentication string STRING: RIP Authentication. (line  16)
* no ip split-horizon:                   RIP Configuration.   (line 100)
* no ip6 address ADDRESS/PREFIX:         Interface Commands.  (line  16)
* no ipv6 nd adv-interval-option:        Router Advertisement.
                                                              (line 128)
* no ipv6 nd home-agent-config-flag:     Router Advertisement.
                                                              (line 105)
* no ipv6 nd home-agent-lifetime:        Router Advertisement.
                                                              (line 120)
* no ipv6 nd home-agent-preference:      Router Advertisement.
                                                              (line 113)
* no ipv6 nd managed-config-flag:        Router Advertisement.
                                                              (line  88)
* no ipv6 nd other-config-flag:          Router Advertisement.
                                                              (line  97)
* no ipv6 nd ra-interval:                Router Advertisement.
                                                              (line  50)
* no ipv6 nd ra-interval msec:           Router Advertisement.
                                                              (line  58)
* no ipv6 nd ra-lifetime:                Router Advertisement.
                                                              (line  66)
* no ipv6 nd reachable-time:             Router Advertisement.
                                                              (line  78)
* no ipv6 nd suppress-ra:                Router Advertisement.
                                                              (line   7)
* no link-detect:                        Interface Commands.  (line  38)
* no log facility:                       Basic Config Commands.
                                                              (line  82)
* no log file:                           Basic Config Commands.
                                                              (line  43)
* no log monitor:                        Basic Config Commands.
                                                              (line  70)
* no log record-priority:                Basic Config Commands.
                                                              (line  88)
* no log stdout:                         Basic Config Commands.
                                                              (line  30)
* no log syslog:                         Basic Config Commands.
                                                              (line  61)
* no log trap:                           Basic Config Commands.
                                                              (line  18)
* no max-metric router-lsa [on-startup|on-shutdown|administrative]: OSPF router.
                                                              (line 113)
* no multicast:                          Interface Commands.  (line  28)
* no neighbor A.B.C.D:                   RIP Configuration.   (line  46)
* no neighbor PEER default-originate:    BGP Peer commands.   (line  48)
* no neighbor PEER description ...:      BGP Peer commands.   (line  21)
* no neighbor PEER dont-capability-negotiate: Capability Negotiation.
                                                              (line  52)
* no neighbor PEER ebgp-multihop:        BGP Peer commands.   (line  18)
* no neighbor PEER interface IFNAME:     BGP Peer commands.   (line  34)
* no neighbor PEER maximum-prefix NUMBER: BGP Peer commands.  (line  65)
* no neighbor PEER next-hop-self:        BGP Peer commands.   (line  40)
* no neighbor PEER override-capability:  Capability Negotiation.
                                                              (line  68)
* no neighbor PEER route-reflector-client: Route Reflector.   (line  10)
* no neighbor PEER shutdown:             BGP Peer commands.   (line  11)
* no neighbor PEER strict-capability-match: Capability Negotiation.
                                                              (line  41)
* no neighbor PEER update-source:        BGP Peer commands.   (line  45)
* no neighbor PEER weight WEIGHT:        BGP Peer commands.   (line  60)
* no network A.B.C.D/M:                  BGP route.           (line  17)
* no network A.B.C.D/M area <0-4294967295>: OSPF router.      (line 157)
* no network A.B.C.D/M area A.B.C.D:     OSPF router.         (line 156)
* no network IFNAME:                     RIP Configuration.   (line  39)
* no network NETWORK:                    RIP Configuration.   (line  27)
* no ospf abr-type TYPE:                 OSPF router.         (line  27)
* no ospf rfc1583compatibility:          OSPF router.         (line  49)
* no ospf router-id:                     OSPF router.         (line  17)
* no passive interface INTERFACE:        OSPF router.         (line  60)
* no passive-interface IFNAME:           RIP Configuration.   (line  69)
* no redistribute (kernel|connected|static|rip|bgp): Redistribute routes to OSPF.
                                                              (line  22)
* no redistribute bgp:                   How to Announce RIP route.
                                                              (line  44)
* no redistribute connected:             How to Announce RIP route.
                                                              (line  26)
* no redistribute kernel:                How to Announce RIP route.
                                                              (line  10)
* no redistribute ospf:                  How to Announce RIP route.
                                                              (line  36)
* no redistribute static:                How to Announce RIP route.
                                                              (line  18)
* no route A.B.C.D/M:                    How to Announce RIP route.
                                                              (line  54)
* no router bgp ASN:                     BGP router.          (line  19)
* no router ospf:                        OSPF router.         (line  11)
* no router rip:                         RIP Configuration.   (line  12)
* no router zebra:                       Redistribute routes to OSPF.
                                                              (line  63)
* no shutdown:                           Interface Commands.  (line  10)
* no smux peer OID:                      MIB and command reference.
                                                              (line  29)
* no smux peer OID PASSWORD:             MIB and command reference.
                                                              (line  32)
* no timers basic:                       RIP Timers.          (line  31)
* no timers throttle spf:                OSPF router.         (line  72)
* offset-list ACCESS-LIST (in|out):      RIP Metric Manipulation.
                                                              (line  20)
* offset-list ACCESS-LIST (in|out) IFNAME: RIP Metric Manipulation.
                                                              (line  21)
* on-match goto N:                       Route Map Exit Action Command.
                                                              (line  11)
* on-match next:                         Route Map Exit Action Command.
                                                              (line   7)
* ospf abr-type TYPE:                    OSPF router.         (line  26)
* ospf rfc1583compatibility:             OSPF router.         (line  48)
* ospf router-id A.B.C.D:                OSPF router.         (line  16)
* passive interface INTERFACE:           OSPF router.         (line  59)
* passive-interface (IFNAME|default):    RIP Configuration.   (line  68)
* password PASSWORD:                     Basic Config Commands.
                                                              (line  10)
* redistribute (kernel|connected|static|rip|bgp): Redistribute routes to OSPF.
                                                              (line   7)
* redistribute (kernel|connected|static|rip|bgp) metric <0-16777214>: Redistribute routes to OSPF.
                                                              (line  15)
* redistribute (kernel|connected|static|rip|bgp) metric <0-16777214> route-map WORD: Redistribute routes to OSPF.
                                                              (line  17)
* redistribute (kernel|connected|static|rip|bgp) metric-type (1|2): Redistribute routes to OSPF.
                                                              (line  11)
* redistribute (kernel|connected|static|rip|bgp) metric-type (1|2) metric <0-16777214>: Redistribute routes to OSPF.
                                                              (line  19)
* redistribute (kernel|connected|static|rip|bgp) metric-type (1|2) metric <0-16777214> route-map WORD: Redistribute routes to OSPF.
                                                              (line  21)
* redistribute (kernel|connected|static|rip|bgp) metric-type (1|2) route-map WORD: Redistribute routes to OSPF.
                                                              (line  13)
* redistribute (kernel|connected|static|rip|bgp) ROUTE-MAP: Redistribute routes to OSPF.
                                                              (line   9)
* redistribute bgp:                      How to Announce RIP route.
                                                              (line  41)
* redistribute bgp metric <0-16>:        How to Announce RIP route.
                                                              (line  42)
* redistribute bgp route-map ROUTE-MAP:  How to Announce RIP route.
                                                              (line  43)
* redistribute connected <1>:            Redistribute to BGP. (line  13)
* redistribute connected <2>:            Redistribute routes to OSPF6.
                                                              (line   8)
* redistribute connected:                How to Announce RIP route.
                                                              (line  23)
* redistribute connected metric <0-16>:  How to Announce RIP route.
                                                              (line  24)
* redistribute connected route-map ROUTE-MAP: How to Announce RIP route.
                                                              (line  25)
* redistribute kernel <1>:               Redistribute to BGP. (line   7)
* redistribute kernel:                   How to Announce RIP route.
                                                              (line   7)
* redistribute kernel metric <0-16>:     How to Announce RIP route.
                                                              (line   8)
* redistribute kernel route-map ROUTE-MAP: How to Announce RIP route.
                                                              (line   9)
* redistribute ospf <1>:                 Redistribute to BGP. (line  19)
* redistribute ospf:                     How to Announce RIP route.
                                                              (line  33)
* redistribute ospf metric <0-16>:       How to Announce RIP route.
                                                              (line  34)
* redistribute ospf route-map ROUTE-MAP: How to Announce RIP route.
                                                              (line  35)
* redistribute rip:                      Redistribute to BGP. (line  16)
* redistribute ripng:                    Redistribute routes to OSPF6.
                                                              (line   9)
* redistribute static <1>:               Redistribute to BGP. (line  10)
* redistribute static <2>:               Redistribute routes to OSPF6.
                                                              (line   7)
* redistribute static:                   How to Announce RIP route.
                                                              (line  15)
* redistribute static metric <0-16>:     How to Announce RIP route.
                                                              (line  16)
* redistribute static route-map ROUTE-MAP: How to Announce RIP route.
                                                              (line  17)
* route A.B.C.D/M:                       How to Announce RIP route.
                                                              (line  53)
* route NETWORK:                         ripngd Configuration.
                                                              (line  21)
* route-map ROUTE-MAP-NAME (permit|deny) ORDER: Route Map Command.
                                                              (line   7)
* router bgp AS-NUMBER:                  BGP instance and view.
                                                              (line  11)
* router bgp AS-NUMBER view NAME:        BGP instance and view.
                                                              (line  28)
* router bgp ASN:                        BGP router.          (line  13)
* router ospf:                           OSPF router.         (line  10)
* router ospf6:                          OSPF6 router.        (line   7)
* router rip:                            RIP Configuration.   (line   7)
* router ripng:                          ripngd Configuration.
                                                              (line   9)
* router zebra <1>:                      Redistribute routes to OSPF.
                                                              (line  62)
* router zebra:                          ripngd Configuration.
                                                              (line  24)
* router-id A.B.C.D:                     OSPF6 router.        (line   9)
* service advanced-vty:                  Basic Config Commands.
                                                              (line 100)
* service integrated-vtysh-config:       VTY shell integrated configuration.
                                                              (line   7)
* service password-encryption:           Basic Config Commands.
                                                              (line  97)
* service terminal-length <0-512>:       Basic Config Commands.
                                                              (line 103)
* set as-path prepend AS-PATH:           Using AS Path in Route Map.
                                                              (line   9)
* set as-path prepend AS_PATH:           Route Map Set Command.
                                                              (line  19)
* set comm-list WORD delete:             BGP Community in Route Map.
                                                              (line  34)
* set community COMMUNITY <1>:           Route Map Set Command.
                                                              (line  22)
* set community COMMUNITY:               BGP Community in Route Map.
                                                              (line  23)
* set community COMMUNITY additive:      BGP Community in Route Map.
                                                              (line  24)
* set community none:                    BGP Community in Route Map.
                                                              (line  22)
* set extcommunity rt EXTCOMMUNITY:      BGP Extended Communities in Route Map.
                                                              (line   9)
* set extcommunity soo EXTCOMMUNITY:     BGP Extended Communities in Route Map.
                                                              (line  12)
* set ip next-hop A.B.C.D:               RIP route-map.       (line  52)
* set ip next-hop IPV4_ADDRESS:          Route Map Set Command.
                                                              (line   7)
* set ipv6 next-hop global IPV6_ADDRESS: Route Map Set Command.
                                                              (line  25)
* set ipv6 next-hop local IPV6_ADDRESS:  Route Map Set Command.
                                                              (line  28)
* set local-preference LOCAL_PREF:       Route Map Set Command.
                                                              (line  10)
* set metric <0-4294967295>:             RIP route-map.       (line  57)
* set metric METRIC:                     Route Map Set Command.
                                                              (line  16)
* set weight WEIGHT:                     Route Map Set Command.
                                                              (line  13)
* show debug:                            More Show IP BGP.    (line  31)
* show debugging ospf:                   Debugging OSPF.      (line  32)
* show debugging rip:                    RIP Debug Commands.  (line  29)
* show debugging ripng:                  ripngd Terminal Mode Commands.
                                                              (line   9)
* show interface:                        zebra Terminal Mode Commands.
                                                              (line  21)
* show ip bgp:                           Show IP BGP.         (line   7)
* show ip bgp A.B.C.D:                   Show IP BGP.         (line   8)
* show ip bgp community:                 Display BGP Routes by Community.
                                                              (line  11)
* show ip bgp community COMMUNITY <1>:   More Show IP BGP.    (line  11)
* show ip bgp community COMMUNITY:       Display BGP Routes by Community.
                                                              (line  12)
* show ip bgp community COMMUNITY exact-match <1>: More Show IP BGP.
                                                              (line  12)
* show ip bgp community COMMUNITY exact-match: Display BGP Routes by Community.
                                                              (line  13)
* show ip bgp community-list WORD <1>:   More Show IP BGP.    (line  16)
* show ip bgp community-list WORD:       Display BGP Routes by Community.
                                                              (line  20)
* show ip bgp community-list WORD exact-match <1>: More Show IP BGP.
                                                              (line  17)
* show ip bgp community-list WORD exact-match: Display BGP Routes by Community.
                                                              (line  21)
* show ip bgp neighbor [PEER]:           More Show IP BGP.    (line  23)
* show ip bgp regexp LINE <1>:           More Show IP BGP.    (line   7)
* show ip bgp regexp LINE:               Display BGP Routes by AS Path.
                                                              (line  10)
* show ip bgp summary:                   More Show IP BGP.    (line  21)
* show ip bgp view NAME:                 Viewing the view.    (line   9)
* show ip bgp X:X::X:X:                  Show IP BGP.         (line   9)
* show ip community-list:                BGP Community Lists. (line  42)
* show ip community-list NAME:           BGP Community Lists. (line  43)
* show ip extcommunity-list:             BGP Extended Community Lists.
                                                              (line  35)
* show ip extcommunity-list NAME:        BGP Extended Community Lists.
                                                              (line  36)
* show ip ospf:                          Showing OSPF information.
                                                              (line   7)
* show ip ospf database:                 Showing OSPF information.
                                                              (line  20)
* show ip ospf database (asbr-summary|external|network|router|summary): Showing OSPF information.
                                                              (line  23)
* show ip ospf database (asbr-summary|external|network|router|summary) adv-router ADV-ROUTER: Showing OSPF information.
                                                              (line  30)
* show ip ospf database (asbr-summary|external|network|router|summary) LINK-STATE-ID: Showing OSPF information.
                                                              (line  25)
* show ip ospf database (asbr-summary|external|network|router|summary) LINK-STATE-ID adv-router ADV-ROUTER: Showing OSPF information.
                                                              (line  28)
* show ip ospf database (asbr-summary|external|network|router|summary) LINK-STATE-ID self-originate: Showing OSPF information.
                                                              (line  33)
* show ip ospf database (asbr-summary|external|network|router|summary) self-originate: Showing OSPF information.
                                                              (line  35)
* show ip ospf database max-age:         Showing OSPF information.
                                                              (line  37)
* show ip ospf database self-originate:  Showing OSPF information.
                                                              (line  39)
* show ip ospf interface [INTERFACE]:    Showing OSPF information.
                                                              (line  11)
* show ip ospf neighbor:                 Showing OSPF information.
                                                              (line  15)
* show ip ospf neighbor detail:          Showing OSPF information.
                                                              (line  17)
* show ip ospf neighbor INTERFACE:       Showing OSPF information.
                                                              (line  16)
* show ip ospf neighbor INTERFACE detail: Showing OSPF information.
                                                              (line  18)
* show ip ospf route:                    Showing OSPF information.
                                                              (line  41)
* show ip prefix-list:                   Showing ip prefix-list.
                                                              (line   7)
* show ip prefix-list detail:            Showing ip prefix-list.
                                                              (line  31)
* show ip prefix-list detail NAME:       Showing ip prefix-list.
                                                              (line  33)
* show ip prefix-list NAME:              Showing ip prefix-list.
                                                              (line  10)
* show ip prefix-list NAME A.B.C.D/M:    Showing ip prefix-list.
                                                              (line  17)
* show ip prefix-list NAME A.B.C.D/M first-match: Showing ip prefix-list.
                                                              (line  25)
* show ip prefix-list NAME A.B.C.D/M longer: Showing ip prefix-list.
                                                              (line  23)
* show ip prefix-list NAME seq NUM:      Showing ip prefix-list.
                                                              (line  13)
* show ip prefix-list summary:           Showing ip prefix-list.
                                                              (line  27)
* show ip prefix-list summary NAME:      Showing ip prefix-list.
                                                              (line  29)
* show ip protocols:                     Show RIP Information.
                                                              (line  17)
* show ip rip:                           Show RIP Information.
                                                              (line   9)
* show ip ripng:                         ripngd Terminal Mode Commands.
                                                              (line   7)
* show ip route:                         zebra Terminal Mode Commands.
                                                              (line   7)
* show ipforward:                        zebra Terminal Mode Commands.
                                                              (line  23)
* show ipv6 ospf6 [INSTANCE_ID]:         Showing OSPF6 information.
                                                              (line   7)
* show ipv6 ospf6 database:              Showing OSPF6 information.
                                                              (line  11)
* show ipv6 ospf6 interface:             Showing OSPF6 information.
                                                              (line  15)
* show ipv6 ospf6 neighbor:              Showing OSPF6 information.
                                                              (line  18)
* show ipv6 ospf6 request-list A.B.C.D:  Showing OSPF6 information.
                                                              (line  21)
* show ipv6 route:                       zebra Terminal Mode Commands.
                                                              (line  19)
* show ipv6 route ospf6:                 Showing OSPF6 information.
                                                              (line  24)
* show ipv6forward:                      zebra Terminal Mode Commands.
                                                              (line  28)
* show logging:                          Terminal Mode Commands.
                                                              (line  30)
* show version:                          Terminal Mode Commands.
                                                              (line  27)
* shutdown:                              Interface Commands.  (line   9)
* smux peer OID:                         MIB and command reference.
                                                              (line  28)
* smux peer OID PASSWORD:                MIB and command reference.
                                                              (line  31)
* table TABLENO:                         Static Route Commands.
                                                              (line  81)
* terminal length <0-512>:               Terminal Mode Commands.
                                                              (line  17)
* timers basic UPDATE TIMEOUT GARBAGE:   RIP Timers.          (line   7)
* timers throttle spf DELAY INITIAL-HOLDTIME MAX-HOLDTIME: OSPF router.
                                                              (line  71)
* username USERNAME nopassword:          VTY shell username.  (line   7)
* version VERSION:                       RIP Configuration.   (line  23)
* who:                                   Terminal Mode Commands.
                                                              (line  21)
* write file:                            Terminal Mode Commands.
                                                              (line  10)
* write terminal:                        Terminal Mode Commands.
                                                              (line   7)


File: quagga.info,  Node: VTY Key Index,  Prev: Command Index,  Up: Top

VTY Key Index
*************

 [index ]
* Menu:

* <DEL>:                                 CLI Editing Commands. (line 11)
* <DOWN>:                                CLI Advanced Commands.
                                                               (line 17)
* <LEFT>:                                CLI Movement Commands.
                                                               (line 15)
* <RIGHT>:                               CLI Movement Commands.
                                                               (line 11)
* <TAB>:                                 CLI Advanced Commands.
                                                               (line 24)
* <UP>:                                  CLI Advanced Commands.
                                                               (line 21)
* ?:                                     CLI Advanced Commands.
                                                               (line 27)
* C-a:                                   CLI Movement Commands.
                                                               (line 24)
* C-b:                                   CLI Movement Commands.
                                                               (line 15)
* C-c:                                   CLI Advanced Commands.
                                                               (line 10)
* C-d:                                   CLI Editing Commands. (line 14)
* C-e:                                   CLI Movement Commands.
                                                               (line 27)
* C-f:                                   CLI Movement Commands.
                                                               (line 11)
* C-h:                                   CLI Editing Commands. (line 11)
* C-k:                                   CLI Editing Commands. (line 23)
* C-n:                                   CLI Advanced Commands.
                                                               (line 17)
* C-p:                                   CLI Advanced Commands.
                                                               (line 21)
* C-t:                                   CLI Editing Commands. (line 29)
* C-u:                                   CLI Editing Commands. (line 26)
* C-w:                                   CLI Editing Commands. (line 20)
* C-z:                                   CLI Advanced Commands.
                                                               (line 13)
* M-b:                                   CLI Movement Commands.
                                                               (line 21)
* M-d:                                   CLI Editing Commands. (line 17)
* M-f:                                   CLI Movement Commands.
                                                               (line 18)



Tag Table:
Node: Top1971
Node: Overview3329
Node: About Quagga4730
Node: System Architecture6983
Node: Supported Platforms9673
Node: Supported RFC10814
Node: How to get Quagga12896
Node: Mailing List13650
Node: Bug Reports14097
Node: Installation14975
Node: Configure the Software15409
Node: The Configure script and its options15657
Node: Least-Privilege support18845
Node: Linux notes20581
Ref: Linux notes-Footnote-122439
Node: Build the Software22505
Node: Install the Software23053
Node: Basic commands24513
Node: Config Commands25288
Node: Basic Config Commands26181
Node: Sample Config File31671
Node: Terminal Mode Commands32441
Node: Common Invocation Options33538
Node: Virtual Terminal Interfaces34945
Node: VTY Overview35456
Node: VTY Modes36707
Node: VTY View Mode37157
Node: VTY Enable Mode37407
Node: VTY Other Modes37685
Node: VTY CLI Commands37861
Node: CLI Movement Commands38321
Node: CLI Editing Commands38844
Node: CLI Advanced Commands39432
Node: Zebra40198
Node: Invoking zebra40707
Node: Interface Commands41286
Node: Static Route Commands42818
Node: zebra Terminal Mode Commands46091
Node: RIP47056
Node: Starting and Stopping ripd47993
Node: RIP netmask49406
Node: RIP Configuration50505
Node: How to Announce RIP route54770
Node: Filtering RIP Routes57333
Node: RIP Metric Manipulation58800
Node: RIP distance59713
Node: RIP route-map60528
Node: RIP Authentication63044
Node: RIP Timers64151
Node: Show RIP Information65437
Node: RIP Debug Commands66810
Node: RIPng67806
Node: Invoking ripngd68126
Node: ripngd Configuration68375
Node: ripngd Terminal Mode Commands69126
Node: ripngd Filtering Commands69490
Node: OSPFv269999
Node: Configuring ospfd70651
Node: OSPF router71199
Node: OSPF area79525
Node: OSPF interface85650
Ref: ip ospf dead-interval minimal87219
Node: Redistribute routes to OSPF89791
Node: Showing OSPF information92449
Ref: show ip ospf92634
Node: Debugging OSPF93965
Node: OSPF Configuration Examples95040
Node: OSPFv396410
Node: OSPF6 router96763
Node: OSPF6 area97117
Node: OSPF6 interface97295
Node: Redistribute routes to OSPF698172
Node: Showing OSPF6 information98488
Node: OSPF6 Configuration Examples99345
Node: BGP99766
Node: Starting BGP100688
Node: BGP router101265
Node: BGP distance102509
Node: BGP decision process102947
Node: BGP network103429
Node: BGP route103619
Node: Route Aggregation104175
Node: Redistribute to BGP104744
Node: BGP Peer105271
Node: Defining Peer105458
Node: BGP Peer commands106071
Node: Peer filtering108475
Node: BGP Peer Group108983
Node: BGP Address Family109296
Node: Autonomous System109450
Node: AS Path Regular Expression110327
Node: Display BGP Routes by AS Path111574
Node: AS Path Access List112014
Node: Using AS Path in Route Map112481
Node: Private AS Numbers112762
Node: BGP Communities Attribute112920
Node: BGP Community Lists115381
Node: Numbered BGP Community Lists118035
Node: BGP Community in Route Map119622
Node: Display BGP Routes by Community121565
Node: Using BGP Communities Attribute122734
Node: BGP Extended Communities Attribute126302
Node: BGP Extended Community Lists128074
Node: BGP Extended Communities in Route Map129949
Node: Displaying BGP routes130408
Node: Show IP BGP130645
Node: More Show IP BGP131345
Node: Capability Negotiation132496
Node: Route Reflector135968
Node: Route Server136247
Node: Multiple instance137313
Node: BGP instance and view139158
Node: Routing policy140538
Node: Viewing the view141306
Node: How to set up a 6-Bone connection141591
Node: Dump BGP packets and table142963
Node: BGP Configuration Examples143545
Node: Configuring Quagga as a Route Server152496
Node: Description of the Route Server model153457
Ref: fig:normal-processing155034
Ref: fig:full-mesh155103
Ref: fig:route-server155128
Ref: filter-delegation155470
Ref: Route Server tasks156654
Ref: Route-server path filter process157025
Ref: fig:rs-processing159339
Node: Commands for configuring a Route Server159492
Node: Example of Route Server Configuration162519
Node: Configuration of the BGP routers without Route Server163440
Node: Configuration of the BGP routers with Route Server166323
Node: Configuration of the Route Server itself167624
Node: Further considerations about Import and Export route-maps172623
Node: VTY shell175667
Node: VTY shell username176336
Node: VTY shell integrated configuration176968
Node: Filtering178416
Node: IP Access List178769
Node: IP Prefix List179155
Node: ip prefix-list description182174
Node: ip prefix-list sequential number control182701
Node: Showing ip prefix-list183243
Node: Clear counter of ip prefix-list184351
Node: Route Map184790
Node: Route Map Command188235
Node: Route Map Match Command188544
Node: Route Map Set Command189168
Node: Route Map Call Command190076
Node: Route Map Exit Action Command190406
Node: Route Map Examples190888
Node: IPv6 Support191400
Node: Router Advertisement191972
Node: Kernel Interface197588
Node: SNMP Support199545
Node: Getting and installing an SNMP agent200144
Node: SMUX configuration200717
Node: MIB and command reference202853
Node: Handling SNMP Traps204268
Node: Zebra Protocol210347
Node: Packet Binary Dump Format212261
Node: Command Index223871
Node: VTY Key Index282532

End Tag Table
