source: src/router/quagga/doc/quagga.info-1

Last change on this file was 20860, checked in by BrainSlayer, 3 months ago

Update quagga

File size: 241.7 KB
Line 
1This is quagga.info, produced by makeinfo version 4.13 from quagga.texi.
2
3Copyright (C) 1999-2005 Kunihiro Ishiguro, et al.
4
5     Permission is granted to make and distribute verbatim copies of
6     this manual provided the copyright notice and this permission
7     notice are preserved on all copies.
8
9     Permission is granted to copy and distribute modified versions of
10     this manual under the conditions for verbatim copying, provided
11     that the entire resulting derived work is distributed under the
12     terms of a permission notice identical to this one.
13
14     Permission is granted to copy and distribute translations of this
15     manual into another language, under the above conditions for
16     modified versions, except that this permission notice may be
17     stated in a translation approved by Kunihiro Ishiguro.
18
19INFO-DIR-SECTION Routing Software:
20START-INFO-DIR-ENTRY
21* Quagga: (quagga).             The Quagga Software Routing Suite
22END-INFO-DIR-ENTRY
23
24   This file documents the Quagga Software Routing Suite which manages
25common TCP/IP routing protocols.
26
27   This is Edition 0.99.22, last updated 27 January 2013 of `The Quagga
28Manual', for Quagga Version 0.99.22.
29
30   Copyright (C) 1999-2005 Kunihiro Ishiguro, et al.
31
32     Permission is granted to make and distribute verbatim copies of
33     this manual provided the copyright notice and this permission
34     notice are preserved on all copies.
35
36     Permission is granted to copy and distribute modified versions of
37     this manual under the conditions for verbatim copying, provided
38     that the entire resulting derived work is distributed under the
39     terms of a permission notice identical to this one.
40
41     Permission is granted to copy and distribute translations of this
42     manual into another language, under the above conditions for
43     modified versions, except that this permission notice may be
44     stated in a translation approved by Kunihiro Ishiguro.
45
46
47File: quagga.info,  Node: Top,  Next: Overview,  Up: (dir)
48
49Quagga
50******
51
52Quagga is an advanced routing software package that provides a suite of
53TCP/IP based routing protocols.  This is the Manual for Quagga 0.99.22.
54Quagga is a fork of GNU Zebra.
55
56   Copyright (C) 1999-2005 Kunihiro Ishiguro, et al.
57
58     Permission is granted to make and distribute verbatim copies of
59     this manual provided the copyright notice and this permission
60     notice are preserved on all copies.
61
62     Permission is granted to copy and distribute modified versions of
63     this manual under the conditions for verbatim copying, provided
64     that the entire resulting derived work is distributed under the
65     terms of a permission notice identical to this one.
66
67     Permission is granted to copy and distribute translations of this
68     manual into another language, under the above conditions for
69     modified versions, except that this permission notice may be
70     stated in a translation approved by Kunihiro Ishiguro.
71
72* Menu:
73
74* Overview::
75* Installation::
76* Basic commands::
77* Zebra::
78* RIP::
79* RIPng::
80* OSPFv2::
81* OSPFv3::
82* Babel::
83* BGP::
84* Configuring Quagga as a Route Server::
85* VTY shell::
86* Filtering::
87* Route Map::
88* IPv6 Support::
89* Kernel Interface::
90* SNMP Support::
91* Zebra Protocol::
92* Packet Binary Dump Format::
93* Command Index::
94* VTY Key Index::
95* Index::
96   
97
98File: quagga.info,  Node: Overview,  Next: Installation,  Prev: Top,  Up: Top
99
1001 Overview
101**********
102
103Quagga is a routing software package that provides TCP/IP based routing
104services with routing protocols support such as RIPv1, RIPv2, RIPng,
105OSPFv2, OSPFv3, IS-IS, BGP-4, and BGP-4+ (*note Supported RFCs::).
106Quagga also supports special BGP Route Reflector and Route Server
107behavior.  In addition to traditional IPv4 routing protocols, Quagga
108also supports IPv6 routing protocols.  With SNMP daemon which supports
109SMUX and AgentX protocol, Quagga provides routing protocol MIBs (*note
110SNMP Support::).
111
112   Quagga uses an advanced software architecture to provide you with a
113high quality, multi server routing engine. Quagga has an interactive
114user interface for each routing protocol and supports common client
115commands.  Due to this design, you can add new protocol daemons to
116Quagga easily.  You can use Quagga library as your program's client
117user interface.
118
119   Quagga is distributed under the GNU General Public License.
120
121* Menu:
122
123* About Quagga::                Basic information about Quagga
124* System Architecture::         The Quagga system architecture
125* Supported Platforms::         Supported platforms and future plans
126* Supported RFCs::               Supported RFCs
127* How to get Quagga::
128* Mailing List::                Mailing list information
129* Bug Reports::                 Mail address for bug data
130
131
132File: quagga.info,  Node: About Quagga,  Next: System Architecture,  Up: Overview
133
1341.1 About Quagga
135================
136
137Today, TCP/IP networks are covering all of the world.  The Internet has
138been deployed in many countries, companies, and to the home.  When you
139connect to the Internet your packet will pass many routers which have
140TCP/IP routing functionality.
141
142   A system with Quagga installed acts as a dedicated router.  With
143Quagga, your machine exchanges routing information with other routers
144using routing protocols.  Quagga uses this information to update the
145kernel routing table so that the right data goes to the right place.
146You can dynamically change the configuration and you may view routing
147table information from the Quagga terminal interface.
148
149   Adding to routing protocol support, Quagga can setup interface's
150flags, interface's address, static routes and so on.  If you have a
151small network, or a stub network, or xDSL connection, configuring the
152Quagga routing software is very easy.  The only thing you have to do is
153to set up the interfaces and put a few commands about static routes
154and/or default routes.  If the network is rather large, or if the
155network structure changes frequently, you will want to take advantage
156of Quagga's dynamic routing protocol support for protocols such as RIP,
157OSPF, IS-IS or BGP.
158
159   Traditionally, UNIX based router configuration is done by `ifconfig'
160and `route' commands.  Status of routing table is displayed by
161`netstat' utility.  Almost of these commands work only if the user has
162root privileges.  Quagga has a different system administration method.
163There are two user modes in Quagga.  One is normal mode, the other is
164enable mode.  Normal mode user can only view system status, enable mode
165user can change system configuration.  This UNIX account independent
166feature will be great help to the router administrator.
167
168   Currently, Quagga supports common unicast routing protocols, that is
169BGP, OSPF, RIP and IS-IS.  Upcoming for MPLS support, an implementation
170of LDP is currently being prepared for merging.  Implementations of BFD
171and PIM-SSM (IPv4) also exist, but are not actively being worked on.
172
173   The ultimate goal of the Quagga project is making a productive,
174quality, free TCP/IP routing software package.
175
176
177File: quagga.info,  Node: System Architecture,  Next: Supported Platforms,  Prev: About Quagga,  Up: Overview
178
1791.2 System Architecture
180=======================
181
182Traditional routing software is made as a one process program which
183provides all of the routing protocol functionalities.  Quagga takes a
184different approach.  It is made from a collection of several daemons
185that work together to build the routing table.  There may be several
186protocol-specific routing daemons and zebra the kernel routing manager.
187
188   The `ripd' daemon handles the RIP protocol, while `ospfd' is a
189daemon which supports OSPF version 2.  `bgpd' supports the BGP-4
190protocol.  For changing the kernel routing table and for redistribution
191of routes between different routing protocols, there is a kernel
192routing table manager `zebra' daemon.  It is easy to add a new routing
193protocol daemons to the entire routing system without affecting any
194other software.  You need to run only the protocol daemon associated
195with routing protocols in use.  Thus, user may run a specific daemon
196and send routing reports to a central routing console.
197
198   There is no need for these daemons to be running on the same
199machine. You can even run several same protocol daemons on the same
200machine.  This architecture creates new possibilities for the routing
201system.
202
203     +----+  +----+  +-----+  +-----+
204     |bgpd|  |ripd|  |ospfd|  |zebra|
205     +----+  +----+  +-----+  +-----+
206                                 |
207     +---------------------------|--+
208     |                           v  |
209     |  UNIX Kernel  routing table  |
210     |                              |
211     +------------------------------+
212
213         Quagga System Architecture
214
215   Multi-process architecture brings extensibility, modularity and
216maintainability.  At the same time it also brings many configuration
217files and terminal interfaces.  Each daemon has it's own configuration
218file and terminal interface.  When you configure a static route, it
219must be done in `zebra' configuration file.  When you configure BGP
220network it must be done in `bgpd' configuration file.  This can be a
221very annoying thing.  To resolve the problem, Quagga provides
222integrated user interface shell called `vtysh'.  `vtysh' connects to
223each daemon with UNIX domain socket and then works as a proxy for user
224input.
225
226   Quagga was planned to use multi-threaded mechanism when it runs with
227a kernel that supports multi-threads.  But at the moment, the thread
228library which comes with GNU/Linux or FreeBSD has some problems with
229running reliable services such as routing software, so we don't use
230threads at all.  Instead we use the `select(2)' system call for
231multiplexing the events.
232
233
234File: quagga.info,  Node: Supported Platforms,  Next: Supported RFCs,  Prev: System Architecture,  Up: Overview
235
2361.3 Supported Platforms
237=======================
238
239Currently Quagga supports GNU/Linux and BSD. Porting Quagga to other
240platforms is not too difficult as platform dependent code should most
241be limited to the `zebra' daemon.  Protocol daemons are mostly platform
242independent. Please let us know when you find out Quagga runs on a
243platform which is not listed below.
244
245   The list of officially supported platforms are listed below. Note
246that Quagga may run correctly on other platforms, and may run with
247partial functionality on further platforms.
248
249
250   * GNU/Linux
251
252   * FreeBSD
253
254   * NetBSD
255
256   * OpenBSD
257
258   Versions of these platforms that are older than around 2 years from
259the point of their original release (in case of GNU/Linux, this is
260since the kernel's release on kernel.org) may need some work.
261Similarly, the following platforms may work with some effort:
262
263
264   * Solaris
265
266   * Mac OSX
267
268   Also note that, in particular regarding proprietary platforms,
269compiler and C library choice will affect Quagga.  Only recent versions
270of the following C compilers are well-tested:
271
272
273   * GNU's GCC
274
275   * LLVM's clang
276
277   * Intel's ICC
278
279
280File: quagga.info,  Node: Supported RFCs,  Next: How to get Quagga,  Prev: Supported Platforms,  Up: Overview
281
2821.4 Supported RFCs
283==================
284
285Below is the list of currently supported RFC's.
286
287RFC1058
288     `Routing Information Protocol. C.L. Hedrick. Jun-01-1988.'
289
290RF2082
291     `RIP-2 MD5 Authentication. F. Baker, R. Atkinson. January 1997.'
292
293RFC2453
294     `RIP Version 2. G. Malkin. November 1998.'
295
296RFC2080
297     `RIPng for IPv6. G. Malkin, R. Minnear. January 1997.'
298
299RFC2328
300     `OSPF Version 2. J. Moy. April 1998.'
301
302RFC2370
303     `The OSPF Opaque LSA Option R. Coltun. July 1998.'
304
305RFC3101
306     `The OSPF Not-So-Stubby Area (NSSA) Option P. Murphy. January
307     2003.'
308
309RFC2740
310     `OSPF for IPv6. R. Coltun, D. Ferguson, J. Moy. December 1999.'
311
312RFC1771
313     `A Border Gateway Protocol 4 (BGP-4). Y. Rekhter & T. Li. March
314     1995.'
315
316RFC1965
317     `Autonomous System Confederations for BGP. P. Traina. June 1996.'
318
319RFC1997
320     `BGP Communities Attribute. R. Chandra, P. Traina & T. Li. August
321     1996.'
322
323RFC2545
324     `Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain
325     Routing. P. Marques, F. Dupont. March 1999.'
326
327RFC2796
328     `BGP Route Reflection An alternative to full mesh IBGP. T. Bates &
329     R. Chandrasekeran. June 1996.'
330
331RFC2858
332     `Multiprotocol Extensions for BGP-4. T. Bates, Y. Rekhter, R.
333     Chandra, D. Katz. June 2000.'
334
335RFC2842
336     `Capabilities Advertisement with BGP-4. R. Chandra, J. Scudder.
337     May 2000.'
338
339RFC3137
340     `OSPF Stub Router Advertisement, A. Retana, L. Nguyen, R. White,
341     A. Zinin, D. McPherson. June 2001'
342
343   When SNMP support is enabled, below RFC is also supported.
344
345RFC1227
346     `SNMP MUX protocol and MIB. M.T. Rose. May-01-1991.'
347
348RFC1657
349     `Definitions of Managed Objects for the Fourth Version of the
350     Border Gateway Protocol (BGP-4) using SMIv2. S. Willis, J. Burruss,
351     J. Chu, Editor. July 1994.'
352
353RFC1724
354     `RIP Version 2 MIB Extension. G. Malkin & F. Baker. November 1994.'
355
356RFC1850
357     `OSPF Version 2 Management Information Base. F. Baker, R. Coltun.
358     November 1995.'
359
360RFC2741
361     `Agent Extensibility (AgentX) Protocol. M. Daniele, B. Wijnen.
362     January 2000.'
363
364
365
366File: quagga.info,  Node: How to get Quagga,  Next: Mailing List,  Prev: Supported RFCs,  Up: Overview
367
3681.5 How to get Quagga
369=====================
370
371The official Quagga web-site is located at:
372
373   `http://www.quagga.net/'
374
375   and contains further information, as well as links to additional
376resources.
377
378   Quagga (http://www.quagga.net/) is a fork of GNU Zebra, whose
379web-site is located at:
380
381   `http://www.zebra.org/'.
382
383
384File: quagga.info,  Node: Mailing List,  Next: Bug Reports,  Prev: How to get Quagga,  Up: Overview
385
3861.6 Mailing List
387================
388
389There is a mailing list for discussions about Quagga.  If you have any
390comments or suggestions to Quagga, please subscribe to:
391
392   `http://lists.quagga.net/mailman/listinfo/quagga-users'.
393
394   The Quagga site has further information on the available mailing
395lists, see:
396
397        `http://www.quagga.net/lists.php'
398
399
400File: quagga.info,  Node: Bug Reports,  Prev: Mailing List,  Up: Overview
401
4021.7 Bug Reports
403===============
404
405If you think you have found a bug, please send a bug report to:
406
407   `http://bugzilla.quagga.net'
408
409   When you send a bug report, please be careful about the points below.
410
411   * Please note what kind of OS you are using.  If you use the IPv6
412     stack please note that as well.
413
414   * Please show us the results of `netstat -rn' and `ifconfig -a'.
415     Information from zebra's VTY command `show ip route' will also be
416     helpful.
417
418   * Please send your configuration file with the report.  If you
419     specify arguments to the configure script please note that too.
420
421   Bug reports are very important for us to improve the quality of
422Quagga.  Quagga is still in the development stage, but please don't
423hesitate to send a bug report to `http://bugzilla.quagga.net'.
424
425
426File: quagga.info,  Node: Installation,  Next: Basic commands,  Prev: Overview,  Up: Top
427
4282 Installation
429**************
430
431There are three steps for installing the software: configuration,
432compilation, and installation.
433
434* Menu:
435
436* Configure the Software::
437* Build the Software::
438* Install the Software::
439
440   The easiest way to get Quagga running is to issue the following
441commands:
442
443     % configure
444     % make
445     % make install
446
447
448File: quagga.info,  Node: Configure the Software,  Next: Build the Software,  Up: Installation
449
4502.1 Configure the Software
451==========================
452
453* Menu:
454
455* The Configure script and its options::
456* Least-Privilege support::
457* Linux notes::
458
459
460File: quagga.info,  Node: The Configure script and its options,  Next: Least-Privilege support,  Up: Configure the Software
461
4622.1.1 The Configure script and its options
463------------------------------------------
464
465Quagga has an excellent configure script which automatically detects
466most host configurations.  There are several additional configure
467options you can use to turn off IPv6 support, to disable the
468compilation of specific daemons, and to enable SNMP support.
469
470`--enable-guile'
471     Turn on compilation of the zebra-guile interpreter.  You will need
472     the guile library to make this.  zebra-guile implementation is not
473     yet finished.  So this option is only useful for zebra-guile
474     developers.
475
476`--disable-ipv6'
477     Turn off IPv6 related features and daemons.  Quagga configure
478     script automatically detects IPv6 stack.  But sometimes you might
479     want to disable IPv6 support of Quagga.
480
481`--disable-zebra'
482     Do not build zebra daemon.
483
484`--disable-ripd'
485     Do not build ripd.
486
487`--disable-ripngd'
488     Do not build ripngd.
489
490`--disable-ospfd'
491     Do not build ospfd.
492
493`--disable-ospf6d'
494     Do not build ospf6d.
495
496`--disable-bgpd'
497     Do not build bgpd.
498
499`--disable-bgp-announce'
500     Make `bgpd' which does not make bgp announcements at all.  This
501     feature is good for using `bgpd' as a BGP announcement listener.
502
503`--enable-netlink'
504     Force to enable GNU/Linux netlink interface.  Quagga configure
505     script detects netlink interface by checking a header file.  When
506     the header file does not match to the current running kernel,
507     configure script will not turn on netlink support.
508
509`--enable-snmp'
510     Enable SNMP support.  By default, SNMP support is disabled.
511
512`--disable-opaque-lsa'
513     Disable support for Opaque LSAs (RFC2370) in ospfd.
514
515`--disable-ospfapi'
516     Disable support for OSPF-API, an API to interface directly with
517     ospfd.  OSPF-API is enabled if -enable-opaque-lsa is set.
518
519`--disable-ospfclient'
520     Disable building of the example OSPF-API client.
521
522`--disable-ospf-te'
523     Disable support for OSPF Traffic Engineering Extension
524     (internet-draft) this requires support for Opaque LSAs.
525
526`--enable-multipath=ARG'
527     Enable support for Equal Cost Multipath. ARG is the maximum number
528     of ECMP paths to allow, set to 0 to allow unlimited number of
529     paths.
530
531`--disable-rtadv'
532     Disable support IPV6 router advertisement in zebra.
533
534`--disable-tests'
535     Do not build tests.  Test programs are built by default, but not
536     ran or installed.  They can be excluded from build with this
537     option, which will minimally decrease compile time and overhead.
538     They can always be built and executed at a later time by running
539     `make check' in the `tests/' subdirectory, even if they're
540     excluded from build.
541
542   You may specify any combination of the above options to the configure
543script.  By default, the executables are placed in `/usr/local/sbin'
544and the configuration files in `/usr/local/etc'. The `/usr/local/'
545installation prefix and other directories may be changed using the
546following options to the configuration script.
547
548`--prefix=PREFIX'
549     Install architecture-independent files in PREFIX [/usr/local].
550
551`--sysconfdir=DIR'
552     Look for configuration files in DIR [PREFIX/etc]. Note that sample
553     configuration files will be installed here.
554
555`--localstatedir=DIR'
556     Configure zebra to use DIR for local state files, such as pid
557     files and unix sockets.
558
559     % ./configure --disable-ipv6
560
561   This command will configure zebra and the routing daemons.
562
563
564File: quagga.info,  Node: Least-Privilege support,  Next: Linux notes,  Prev: The Configure script and its options,  Up: Configure the Software
565
5662.1.2 Least-Privilege support
567-----------------------------
568
569Additionally, you may configure zebra to drop its elevated privileges
570shortly after startup and switch to another user. The configure script
571will automatically try to configure this support. There are three
572configure options to control the behaviour of Quagga daemons.
573
574`--enable-user=USER'
575     Switch to user ARG shortly after startup, and run as user ARG in
576     normal operation.
577
578`--enable-group=GROUP'
579     Switch real and effective group to GROUP shortly after startup.
580
581`--enable-vty-group=GROUP'
582     Create Unix Vty sockets (for use with vtysh) with group owndership
583     set to GROUP. This allows one to create a seperate group which is
584     restricted to accessing only the Vty sockets, hence allowing one to
585     delegate this group to individual users, or to run vtysh setgid to
586     this group.
587
588   The default user and group which will be configured is 'quagga' if
589no user or group is specified. Note that this user or group requires
590write access to the local state directory (see -localstatedir) and
591requires at least read access, and write access if you wish to allow
592daemons to write out their configuration, to the configuration
593directory (see -sysconfdir).
594
595   On systems which have the 'libcap' capabilities manipulation library
596(currently only linux), the quagga system will retain only minimal
597capabilities required, further it will only raise these capabilities for
598brief periods. On systems without libcap, quagga will run as the user
599specified and only raise its uid back to uid 0 for brief periods.
600
601
602File: quagga.info,  Node: Linux notes,  Prev: Least-Privilege support,  Up: Configure the Software
603
6042.1.3 Linux Notes
605-----------------
606
607There are several options available only to GNU/Linux systems: (1).  If
608you use GNU/Linux, make sure that the current kernel configuration is
609what you want.  Quagga will run with any kernel configuration but some
610recommendations do exist.
611
612CONFIG_NETLINK
613     Kernel/User netlink socket. This is a brand new feature which
614     enables an advanced interface between the Linux kernel and zebra
615     (*note Kernel Interface::).
616
617CONFIG_RTNETLINK
618     Routing messages.  This makes it possible to receive netlink
619     routing messages.  If you specify this option, `zebra' can detect
620     routing information updates directly from the kernel (*note Kernel
621     Interface::).
622
623CONFIG_IP_MULTICAST
624     IP: multicasting.  This option should be specified when you use
625     `ripd' (*note RIP::) or `ospfd' (*note OSPFv2::) because these
626     protocols use multicast.
627
628
629   IPv6 support has been added in GNU/Linux kernel version 2.2.  If you
630try to use the Quagga IPv6 feature on a GNU/Linux kernel, please make
631sure the following libraries have been installed.  Please note that
632these libraries will not be needed when you uses GNU C library 2.1 or
633upper.
634
635`inet6-apps'
636     The `inet6-apps' package includes basic IPv6 related libraries such
637     as `inet_ntop' and `inet_pton'.  Some basic IPv6 programs such as
638     `ping', `ftp', and `inetd' are also included. The `inet-apps' can
639     be found at `ftp://ftp.inner.net/pub/ipv6/'.
640
641`net-tools'
642     The `net-tools' package provides an IPv6 enabled interface and
643     routing utility.  It contains `ifconfig', `route', `netstat', and
644     other tools.  `net-tools' may be found at
645     `http://www.tazenda.demon.co.uk/phil/net-tools/'.
646
647
648   ---------- Footnotes ----------
649
650   (1) GNU/Linux has very flexible kernel configuration features
651
652
653File: quagga.info,  Node: Build the Software,  Next: Install the Software,  Prev: Configure the Software,  Up: Installation
654
6552.2 Build the Software
656======================
657
658After configuring the software, you will need to compile it for your
659system. Simply issue the command `make' in the root of the source
660directory and the software will be compiled. If you have *any* problems
661at this stage, be certain to send a bug report *Note Bug Reports::.
662
663     % ./configure
664     .
665     .
666     .
667     ./configure output
668     .
669     .
670     .
671     % make
672
673
674File: quagga.info,  Node: Install the Software,  Prev: Build the Software,  Up: Installation
675
6762.3 Install the Software
677========================
678
679Installing the software to your system consists of copying the compiled
680programs and supporting files to a standard location. After the
681installation process has completed, these files have been copied from
682your work directory to `/usr/local/bin', and `/usr/local/etc'.
683
684   To install the Quagga suite, issue the following command at your
685shell prompt: `make install'.
686
687     %
688     % make install
689     %
690
691   Quagga daemons have their own terminal interface or VTY.  After
692installation, you have to setup each beast's port number to connect to
693them.  Please add the following entries to `/etc/services'.
694
695     zebrasrv      2600/tcp               # zebra service
696     zebra         2601/tcp               # zebra vty
697     ripd          2602/tcp               # RIPd vty
698     ripngd        2603/tcp               # RIPngd vty
699     ospfd         2604/tcp               # OSPFd vty
700     bgpd          2605/tcp               # BGPd vty
701     ospf6d        2606/tcp               # OSPF6d vty
702     ospfapi       2607/tcp               # ospfapi
703     isisd         2608/tcp               # ISISd vty
704
705   If you use a FreeBSD newer than 2.2.8, the above entries are already
706added to `/etc/services' so there is no need to add it. If you specify
707a port number when starting the daemon, these entries may not be needed.
708
709   You may need to make changes to the config files in
710`/etc/quagga/*.conf'. *Note Config Commands::.
711
712
713File: quagga.info,  Node: Basic commands,  Next: Zebra,  Prev: Installation,  Up: Top
714
7153 Basic commands
716****************
717
718There are five routing daemons in use, and there is one manager daemon.
719These daemons may be located on separate machines from the manager
720daemon.  Each of these daemons will listen on a particular port for
721incoming VTY connections.  The routing daemons are:
722
723   * `ripd', `ripngd', `ospfd', `ospf6d', `bgpd'
724
725   * `zebra'
726
727   The following sections discuss commands common to all the routing
728daemons.
729
730* Menu:
731
732* Terminal Mode Commands::      Common commands used in a VTY
733* Config Commands::             Commands used in config files
734* Common Invocation Options::   Starting the daemons
735* Virtual Terminal Interfaces:: Interacting with the daemons
736
737
738File: quagga.info,  Node: Config Commands,  Next: Common Invocation Options,  Prev: Terminal Mode Commands,  Up: Basic commands
739
7403.1 Config Commands
741===================
742
743* Menu:
744
745* Basic Config Commands::       Some of the generic config commands
746* Sample Config File::          An example config file
747
748   In a config file, you can write the debugging options, a vty's
749password, routing daemon configurations, a log file name, and so forth.
750This information forms the initial command set for a routing beast as
751it is starting.
752
753   Config files are generally found in:
754
755     `/etc/quagga/*.conf'
756
757   Each of the daemons has its own config file.  For example, zebra's
758default config file name is:
759
760     `/etc/quagga/zebra.conf'
761
762   The daemon name plus `.conf' is the default config file name. You
763can specify a config file using the `-f' or `--config-file' options
764when starting the daemon.
765
766
767File: quagga.info,  Node: Basic Config Commands,  Next: Sample Config File,  Up: Config Commands
768
7693.1.1 Basic Config Commands
770---------------------------
771
772 -- Command: hostname HOSTNAME
773     Set hostname of the router.
774
775 -- Command: password PASSWORD
776     Set password for vty interface.  If there is no password, a vty
777     won't accept connections.
778
779 -- Command: enable password PASSWORD
780     Set enable password.
781
782 -- Command: log trap LEVEL
783 -- Command: no log trap
784     These commands are deprecated and are present only for historical
785     compatibility.  The log trap command sets the current logging
786     level for all enabled logging destinations, and it sets the
787     default for all future logging commands that do not specify a
788     level.  The normal default logging level is debugging.  The `no'
789     form of the command resets the default level for future logging
790     commands to debugging, but it does not change the logging level of
791     existing logging destinations.
792
793 -- Command: log stdout
794 -- Command: log stdout LEVEL
795 -- Command: no log stdout
796     Enable logging output to stdout.  If the optional second argument
797     specifying the logging level is not present, the default logging
798     level (typically debugging, but can be changed using the
799     deprecated `log trap' command) will be used.  The `no' form of the
800     command disables logging to stdout.  The `level' argument must
801     have one of these values: emergencies, alerts, critical, errors,
802     warnings, notifications, informational, or debugging.  Note that
803     the existing code logs its most important messages with severity
804     `errors'.
805
806 -- Command: log file FILENAME
807 -- Command: log file FILENAME LEVEL
808 -- Command: no log file
809     If you want to log into a file, please specify `filename' as in
810     this example:
811          log file /var/log/quagga/bgpd.log informational
812     If the optional second argument specifying the logging level is
813     not present, the default logging level (typically debugging, but
814     can be changed using the deprecated `log trap' command) will be
815     used.  The `no' form of the command disables logging to a file.
816
817     Note: if you do not configure any file logging, and a daemon
818     crashes due to a signal or an assertion failure, it will attempt
819     to save the crash information in a file named
820     /var/tmp/quagga.<daemon name>.crashlog.  For security reasons,
821     this will not happen if the file exists already, so it is
822     important to delete the file after reporting the crash information.
823
824 -- Command: log syslog
825 -- Command: log syslog LEVEL
826 -- Command: no log syslog
827     Enable logging output to syslog.  If the optional second argument
828     specifying the logging level is not present, the default logging
829     level (typically debugging, but can be changed using the
830     deprecated `log trap' command) will be used.  The `no' form of the
831     command disables logging to syslog.
832
833 -- Command: log monitor
834 -- Command: log monitor LEVEL
835 -- Command: no log monitor
836     Enable logging output to vty terminals that have enabled logging
837     using the `terminal monitor' command.  By default, monitor logging
838     is enabled at the debugging level, but this command (or the
839     deprecated `log trap' command) can be used to change the monitor
840     logging level.  If the optional second argument specifying the
841     logging level is not present, the default logging level (typically
842     debugging, but can be changed using the deprecated `log trap'
843     command) will be used.  The `no' form of the command disables
844     logging to terminal monitors.
845
846 -- Command: log facility FACILITY
847 -- Command: no log facility
848     This command changes the facility used in syslog messages.  The
849     default facility is `daemon'.  The `no' form of the command resets
850     the facility to the default `daemon' facility.
851
852 -- Command: log record-priority
853 -- Command: no log record-priority
854     To include the severity in all messages logged to a file, to
855     stdout, or to a terminal monitor (i.e. anything except syslog),
856     use the `log record-priority' global configuration command.  To
857     disable this option, use the `no' form of the command.  By default,
858     the severity level is not included in logged messages.  Note: some
859     versions of syslogd (including Solaris) can be configured to
860     include the facility and level in the messages emitted.
861
862 -- Command: log timestamp precision <0-6>
863 -- Command: no log timestamp precision
864     This command sets the precision of log message timestamps to the
865     given number of digits after the decimal point.  Currently, the
866     value must be in the range 0 to 6 (i.e. the maximum precision is
867     microseconds).  To restore the default behavior (1-second
868     accuracy), use the `no' form of the command, or set the precision
869     explicitly to 0.
870
871          log timestamp precision 3
872
873     In this example, the precision is set to provide timestamps with
874     millisecond accuracy.
875
876 -- Command: service password-encryption
877     Encrypt password.
878
879 -- Command: service advanced-vty
880     Enable advanced mode VTY.
881
882 -- Command: service terminal-length <0-512>
883     Set system wide line configuration.  This configuration command
884     applies to all VTY interfaces.
885
886 -- Command: line vty
887     Enter vty configuration mode.
888
889 -- Command: banner motd default
890     Set default motd string.
891
892 -- Command: no banner motd
893     No motd banner string will be printed.
894
895 -- Line Command: exec-timeout MINUTE
896 -- Line Command: exec-timeout MINUTE SECOND
897     Set VTY connection timeout value.  When only one argument is
898     specified it is used for timeout value in minutes.  Optional
899     second argument is used for timeout value in seconds. Default
900     timeout value is 10 minutes.  When timeout value is zero, it means
901     no timeout.
902
903 -- Line Command: no exec-timeout
904     Do not perform timeout at all.  This command is as same as
905     `exec-timeout 0 0'.
906
907 -- Line Command: access-class ACCESS-LIST
908     Restrict vty connections with an access list.
909
910
911File: quagga.info,  Node: Sample Config File,  Prev: Basic Config Commands,  Up: Config Commands
912
9133.1.2 Sample Config File
914------------------------
915
916Below is a sample configuration file for the zebra daemon.
917
918     !
919     ! Zebra configuration file
920     !
921     hostname Router
922     password zebra
923     enable password zebra
924     !
925     log stdout
926     !
927     !
928
929   '!' and '#' are comment characters.  If the first character of the
930word is one of the comment characters then from the rest of the line
931forward will be ignored as a comment.
932
933     password zebra!password
934
935   If a comment character is not the first character of the word, it's a
936normal character. So in the above example '!' will not be regarded as a
937comment and the password is set to 'zebra!password'.
938
939
940File: quagga.info,  Node: Terminal Mode Commands,  Next: Config Commands,  Up: Basic commands
941
9423.2 Terminal Mode Commands
943==========================
944
945 -- Command: write terminal
946     Displays the current configuration to the vty interface.
947
948 -- Command: write file
949     Write current configuration to configuration file.
950
951 -- Command: configure terminal
952     Change to configuration mode.  This command is the first step to
953     configuration.
954
955 -- Command: terminal length <0-512>
956     Set terminal display length to <0-512>.  If length is 0, no
957     display control is performed.
958
959 -- Command: who
960     Show a list of currently connected vty sessions.
961
962 -- Command: list
963     List all available commands.
964
965 -- Command: show version
966     Show the current version of Quagga and its build host information.
967
968 -- Command: show logging
969     Shows the current configuration of the logging system.  This
970     includes the status of all logging destinations.
971
972 -- Command: logmsg LEVEL MESSAGE
973     Send a message to all logging destinations that are enabled for
974     messages of the given severity.
975
976
977File: quagga.info,  Node: Common Invocation Options,  Next: Virtual Terminal Interfaces,  Prev: Config Commands,  Up: Basic commands
978
9793.3 Common Invocation Options
980=============================
981
982These options apply to all Quagga daemons.
983
984`-d'
985`--daemon'
986     Runs in daemon mode.
987
988`-f FILE'
989`--config_file=FILE'
990     Set configuration file name.
991
992`-h'
993`--help'
994     Display this help and exit.
995
996`-i FILE'
997`--pid_file=FILE'
998     Upon startup the process identifier of the daemon is written to a
999     file, typically in `/var/run'.  This file can be used by the init
1000     system to implement commands such as `.../init.d/zebra status',
1001     `.../init.d/zebra restart' or `.../init.d/zebra stop'.
1002
1003     The file name is an run-time option rather than a configure-time
1004     option so that multiple routing daemons can be run simultaneously.
1005     This is useful when using Quagga to implement a routing looking
1006     glass.  One machine can be used to collect differing routing views
1007     from differing points in the network.
1008
1009`-A ADDRESS'
1010`--vty_addr=ADDRESS'
1011     Set the VTY local address to bind to. If set, the VTY socket will
1012     only be bound to this address.
1013
1014`-P PORT'
1015`--vty_port=PORT'
1016     Set the VTY TCP port number. If set to 0 then the TCP VTY sockets
1017     will not be opened.
1018
1019`-u USER'
1020`--vty_addr=USER'
1021     Set the user and group to run as.
1022
1023`-v'
1024`--version'
1025     Print program version.
1026
1027
1028
1029File: quagga.info,  Node: Virtual Terminal Interfaces,  Prev: Common Invocation Options,  Up: Basic commands
1030
10313.4 Virtual Terminal Interfaces
1032===============================
1033
1034VTY - Virtual Terminal [aka TeletYpe] Interface is a command line
1035interface (CLI) for user interaction with the routing daemon.
1036
1037* Menu:
1038
1039* VTY Overview::                Basics about VTYs
1040* VTY Modes::                   View, Enable, and Other VTY modes
1041* VTY CLI Commands::            Commands for movement, edition, and management
1042
1043
1044File: quagga.info,  Node: VTY Overview,  Next: VTY Modes,  Up: Virtual Terminal Interfaces
1045
10463.4.1 VTY Overview
1047------------------
1048
1049VTY stands for Virtual TeletYpe interface.  It means you can connect to
1050the daemon via the telnet protocol.
1051
1052   To enable a VTY interface, you have to setup a VTY password.  If
1053there is no VTY password, one cannot connect to the VTY interface at
1054all.
1055
1056     % telnet localhost 2601
1057     Trying 127.0.0.1...
1058     Connected to localhost.
1059     Escape character is '^]'.
1060
1061     Hello, this is Quagga (version 0.99.22)
1062     Copyright (C) 1999-2005 Kunihiro Ishiguro, et al.
1063
1064     User Access Verification
1065
1066     Password: XXXXX
1067     Router> ?
1068       enable            Turn on privileged commands
1069       exit              Exit current mode and down to previous mode
1070       help              Description of the interactive help system
1071       list              Print command list
1072       show              Show running system information
1073       who               Display who is on a vty
1074     Router> enable
1075     Password: XXXXX
1076     Router# configure terminal
1077     Router(config)# interface eth0
1078     Router(config-if)# ip address 10.0.0.1/8
1079     Router(config-if)# ^Z
1080     Router#
1081
1082   '?' is very useful for looking up commands.
1083
1084
1085File: quagga.info,  Node: VTY Modes,  Next: VTY CLI Commands,  Prev: VTY Overview,  Up: Virtual Terminal Interfaces
1086
10873.4.2 VTY Modes
1088---------------
1089
1090There are three basic VTY modes:
1091
1092* Menu:
1093
1094* VTY View Mode::               Mode for read-only interaction
1095* VTY Enable Mode::             Mode for read-write interaction
1096* VTY Other Modes::             Special modes (tftp, etc)
1097
1098   There are commands that may be restricted to specific VTY modes.
1099
1100
1101File: quagga.info,  Node: VTY View Mode,  Next: VTY Enable Mode,  Up: VTY Modes
1102
11033.4.2.1 VTY View Mode
1104.....................
1105
1106This mode is for read-only access to the CLI. One may exit the mode by
1107leaving the system, or by entering `enable' mode.
1108
1109
1110File: quagga.info,  Node: VTY Enable Mode,  Next: VTY Other Modes,  Prev: VTY View Mode,  Up: VTY Modes
1111
11123.4.2.2 VTY Enable Mode
1113.......................
1114
1115This mode is for read-write access to the CLI. One may exit the mode by
1116leaving the system, or by escaping to view mode.
1117
1118
1119File: quagga.info,  Node: VTY Other Modes,  Prev: VTY Enable Mode,  Up: VTY Modes
1120
11213.4.2.3 VTY Other Modes
1122.......................
1123
1124This page is for describing other modes.
1125
1126
1127File: quagga.info,  Node: VTY CLI Commands,  Prev: VTY Modes,  Up: Virtual Terminal Interfaces
1128
11293.4.3 VTY CLI Commands
1130----------------------
1131
1132Commands that you may use at the command-line are described in the
1133following three subsubsections.
1134
1135* Menu:
1136
1137* CLI Movement Commands::       Commands for moving the cursor about
1138* CLI Editing Commands::        Commands for changing text
1139* CLI Advanced Commands::       Other commands, session management and so on
1140
1141
1142File: quagga.info,  Node: CLI Movement Commands,  Next: CLI Editing Commands,  Up: VTY CLI Commands
1143
11443.4.3.1 CLI Movement Commands
1145.............................
1146
1147These commands are used for moving the CLI cursor. The <C> character
1148means press the Control Key.
1149
1150`C-f'
1151`<RIGHT>'
1152     Move forward one character.
1153
1154`C-b'
1155`<LEFT>'
1156     Move backward one character.
1157
1158`M-f'
1159     Move forward one word.
1160
1161`M-b'
1162     Move backward one word.
1163
1164`C-a'
1165     Move to the beginning of the line.
1166
1167`C-e'
1168     Move to the end of the line.
1169
1170
1171
1172File: quagga.info,  Node: CLI Editing Commands,  Next: CLI Advanced Commands,  Prev: CLI Movement Commands,  Up: VTY CLI Commands
1173
11743.4.3.2 CLI Editing Commands
1175............................
1176
1177These commands are used for editing text on a line. The <C> character
1178means press the Control Key.
1179
1180`C-h'
1181`<DEL>'
1182     Delete the character before point.
1183
1184`C-d'
1185     Delete the character after point.
1186
1187`M-d'
1188     Forward kill word.
1189
1190`C-w'
1191     Backward kill word.
1192
1193`C-k'
1194     Kill to the end of the line.
1195
1196`C-u'
1197     Kill line from the beginning, erasing input.
1198
1199`C-t'
1200     Transpose character.
1201
1202
1203
1204File: quagga.info,  Node: CLI Advanced Commands,  Prev: CLI Editing Commands,  Up: VTY CLI Commands
1205
12063.4.3.3 CLI Advanced Commands
1207.............................
1208
1209There are several additional CLI commands for command line completions,
1210insta-help, and VTY session management.
1211
1212`C-c'
1213     Interrupt current input and moves to the next line.
1214
1215`C-z'
1216     End current configuration session and move to top node.
1217
1218`C-n'
1219`<DOWN>'
1220     Move down to next line in the history buffer.
1221
1222`C-p'
1223`<UP>'
1224     Move up to previous line in the history buffer.
1225
1226`TAB'
1227     Use command line completion by typing <TAB>.
1228
1229`'
1230     You can use command line help by typing `help' at the beginning of
1231     the line.  Typing `?' at any point in the line will show possible
1232     completions.
1233
1234
1235
1236File: quagga.info,  Node: Zebra,  Next: RIP,  Prev: Basic commands,  Up: Top
1237
12384 Zebra
1239*******
1240
1241`zebra' is an IP routing manager.  It provides kernel routing table
1242updates, interface lookups, and redistribution of routes between
1243different routing protocols.
1244
1245* Menu:
1246
1247* Invoking zebra::              Running the program
1248* Interface Commands::          Commands for zebra interfaces
1249* Static Route Commands::       Commands for adding static routes
1250* zebra Route Filtering::       Commands for zebra route filtering
1251* zebra FIB push interface::    Interface to optional FPM component
1252* zebra Terminal Mode Commands::  Commands for zebra's VTY
1253
1254
1255File: quagga.info,  Node: Invoking zebra,  Next: Interface Commands,  Up: Zebra
1256
12574.1 Invoking zebra
1258==================
1259
1260Besides the common invocation options (*note Common Invocation
1261Options::), the `zebra' specific invocation options are listed below.
1262
1263`-b'
1264`--batch'
1265     Runs in batch mode.  `zebra' parses configuration file and
1266     terminates immediately.
1267
1268`-k'
1269`--keep_kernel'
1270     When zebra starts up, don't delete old self inserted routes.
1271
1272`-r'
1273`--retain'
1274     When program terminates, retain routes added by zebra.
1275
1276
1277
1278File: quagga.info,  Node: Interface Commands,  Next: Static Route Commands,  Prev: Invoking zebra,  Up: Zebra
1279
12804.2 Interface Commands
1281======================
1282
1283 -- Command: interface IFNAME
1284
1285 -- Interface Command: shutdown
1286 -- Interface Command: no shutdown
1287     Up or down the current interface.
1288
1289 -- Interface Command: ip address ADDRESS/PREFIX
1290 -- Interface Command: ipv6 address ADDRESS/PREFIX
1291 -- Interface Command: no ip address ADDRESS/PREFIX
1292 -- Interface Command: no ipv6 address ADDRESS/PREFIX
1293     Set the IPv4 or IPv6 address/prefix for the interface.
1294
1295 -- Interface Command: ip address ADDRESS/PREFIX secondary
1296 -- Interface Command: no ip address ADDRESS/PREFIX secondary
1297     Set the secondary flag for this address. This causes ospfd to not
1298     treat the address as a distinct subnet.
1299
1300 -- Interface Command: description DESCRIPTION ...
1301     Set description for the interface.
1302
1303 -- Interface Command: multicast
1304 -- Interface Command: no multicast
1305     Enable or disables multicast flag for the interface.
1306
1307 -- Interface Command: bandwidth <1-10000000>
1308 -- Interface Command: no bandwidth <1-10000000>
1309     Set bandwidth value of the interface in kilobits/sec.  This is for
1310     calculating OSPF cost. This command does not affect the actual
1311     device configuration.
1312
1313 -- Interface Command: link-detect
1314 -- Interface Command: no link-detect
1315     Enable/disable link-detect on platforms which support this.
1316     Currently only Linux and Solaris, and only where network interface
1317     drivers support reporting link-state via the IFF_RUNNING flag.
1318
1319
1320File: quagga.info,  Node: Static Route Commands,  Next: zebra Route Filtering,  Prev: Interface Commands,  Up: Zebra
1321
13224.3 Static Route Commands
1323=========================
1324
1325Static routing is a very fundamental feature of routing technology.  It
1326defines static prefix and gateway.
1327
1328 -- Command: ip route NETWORK GATEWAY
1329     NETWORK is destination prefix with format of A.B.C.D/M.  GATEWAY
1330     is gateway for the prefix.  When GATEWAY is A.B.C.D format.  It is
1331     taken as a IPv4 address gateway.  Otherwise it is treated as an
1332     interface name. If the interface name is NULL0 then zebra installs
1333     a blackhole route.
1334
1335          ip route 10.0.0.0/8 10.0.0.2
1336          ip route 10.0.0.0/8 ppp0
1337          ip route 10.0.0.0/8 null0
1338
1339     First example defines 10.0.0.0/8 static route with gateway
1340     10.0.0.2.  Second one defines the same prefix but with gateway to
1341     interface ppp0. The third install a blackhole route.
1342
1343 -- Command: ip route NETWORK NETMASK GATEWAY
1344     This is alternate version of above command.  When NETWORK is
1345     A.B.C.D format, user must define NETMASK value with A.B.C.D
1346     format.  GATEWAY is same option as above command
1347
1348          ip route 10.0.0.0 255.255.255.0 10.0.0.2
1349          ip route 10.0.0.0 255.255.255.0 ppp0
1350          ip route 10.0.0.0 255.255.255.0 null0
1351
1352     These statements are equivalent to those in the previous example.
1353
1354 -- Command: ip route NETWORK GATEWAY DISTANCE
1355     Installs the route with the specified distance.
1356
1357   Multiple nexthop static route
1358
1359     ip route 10.0.0.1/32 10.0.0.2
1360     ip route 10.0.0.1/32 10.0.0.3
1361     ip route 10.0.0.1/32 eth0
1362
1363   If there is no route to 10.0.0.2 and 10.0.0.3, and interface eth0 is
1364reachable, then the last route is installed into the kernel.
1365
1366   If zebra has been compiled with multipath support, and both 10.0.0.2
1367and 10.0.0.3 are reachable, zebra will install a multipath route via
1368both nexthops, if the platform supports this.
1369
1370     zebra> show ip route
1371     S>  10.0.0.1/32 [1/0] via 10.0.0.2 inactive
1372                           via 10.0.0.3 inactive
1373       *                   is directly connected, eth0
1374
1375     ip route 10.0.0.0/8 10.0.0.2
1376     ip route 10.0.0.0/8 10.0.0.3
1377     ip route 10.0.0.0/8 null0 255
1378
1379   This will install a multihop route via the specified next-hops if
1380they are reachable, as well as a high-metric blackhole route, which can
1381be useful to prevent traffic destined for a prefix to match
1382less-specific routes (eg default) should the specified gateways not be
1383reachable. Eg:
1384
1385     zebra> show ip route 10.0.0.0/8
1386     Routing entry for 10.0.0.0/8
1387       Known via "static", distance 1, metric 0
1388         10.0.0.2 inactive
1389         10.0.0.3 inactive
1390
1391     Routing entry for 10.0.0.0/8
1392       Known via "static", distance 255, metric 0
1393         directly connected, Null0
1394
1395 -- Command: ipv6 route NETWORK GATEWAY
1396 -- Command: ipv6 route NETWORK GATEWAY DISTANCE
1397     These behave similarly to their ipv4 counterparts.
1398
1399 -- Command: table TABLENO
1400     Select the primary kernel routing table to be used.  This only
1401     works for kernels supporting multiple routing tables (like
1402     GNU/Linux 2.2.x and later).  After setting TABLENO with this
1403     command, static routes defined after this are added to the
1404     specified table.
1405
1406
1407File: quagga.info,  Node: zebra Route Filtering,  Next: zebra FIB push interface,  Prev: Static Route Commands,  Up: Zebra
1408
14094.4 zebra Route Filtering
1410=========================
1411
1412Zebra supports `prefix-list' and `route-map' to match routes received
1413from other quagga components.  The `permit'/`deny' facilities provided
1414by these commands can be used to filter which routes zebra will install
1415in the kernel.
1416
1417 -- Command: ip protocol PROTOCOL route-map ROUTEMAP
1418     Apply a route-map filter to routes for the specified protocol.
1419     PROTOCOL can be any or one of system, kernel, connected, static,
1420     rip, ripng, ospf, ospf6, isis, bgp, hsls.
1421
1422 -- Route Map: set src ADDRESS
1423     Within a route-map, set the preferred source address for matching
1424     routes when installing in the kernel.
1425
1426     The following creates a prefix-list that matches all addresses, a route-map
1427     that sets the preferred source address, and applies the route-map to all
1428     `rip' routes.
1429
1430     ip prefix-list ANY permit 0.0.0.0/0 le 32
1431     route-map RM1 permit 10
1432          match ip address prefix-list ANY
1433          set src 10.0.0.1
1434
1435     ip protocol rip route-map RM1
1436
1437
1438File: quagga.info,  Node: zebra FIB push interface,  Next: zebra Terminal Mode Commands,  Prev: zebra Route Filtering,  Up: Zebra
1439
14404.5 zebra FIB push interface
1441============================
1442
1443Zebra supports a 'FIB push' interface that allows an external component
1444to learn the forwarding information computed by the Quagga routing
1445suite.
1446
1447   In Quagga, the Routing Information Base (RIB) resides inside zebra.
1448Routing protocols communicate their best routes to zebra, and zebra
1449computes the best route across protocols for each prefix. This latter
1450information makes up the Forwarding Information Base (FIB). Zebra feeds
1451the FIB to the kernel, which allows the IP stack in the kernel to
1452forward packets according to the routes computed by Quagga. The kernel
1453FIB is updated in an OS-specific way. For example, the `netlink'
1454interface is used on Linux, and route sockets are used on FreeBSD.
1455
1456   The FIB push interface aims to provide a cross-platform mechanism to
1457support scenarios where the router has a forwarding path that is
1458distinct from the kernel, commonly a hardware-based fast path. In these
1459cases, the FIB needs to be maintained reliably in the fast path as
1460well. We refer to the component that programs the forwarding plane
1461(directly or indirectly) as the Forwarding Plane Manager or FPM.
1462
1463   The FIB push interface comprises of a TCP connection between zebra
1464and the FPM. The connection is initiated by zebra - that is, the FPM
1465acts as the TCP server.
1466
1467   The relevant zebra code kicks in when zebra is configured with the
1468`--enable-fpm' flag. Zebra periodically attempts to connect to the
1469well-known FPM port. Once the connection is up, zebra starts sending
1470messages containing routes over the socket to the FPM. Zebra sends a
1471complete copy of the forwarding table to the FPM, including routes that
1472it may have picked up from the kernel. The existing interaction of
1473zebra with the kernel remains unchanged - that is, the kernel continues
1474to receive FIB updates as before.
1475
1476   The format of the messages exchanged with the FPM is defined by the
1477file `fpm/fpm.h' in the quagga tree.
1478
1479   The zebra FPM interface uses replace semantics. That is, if a 'route
1480add' message for a prefix is followed by another 'route add' message,
1481the information in the second message is complete by itself, and
1482replaces the information sent in the first message.
1483
1484   If the connection to the FPM goes down for some reason, zebra sends
1485the FPM a complete copy of the forwarding table(s) when it reconnects.
1486
1487
1488File: quagga.info,  Node: zebra Terminal Mode Commands,  Prev: zebra FIB push interface,  Up: Zebra
1489
14904.6 zebra Terminal Mode Commands
1491================================
1492
1493 -- Command: show ip route
1494     Display current routes which zebra holds in its database.
1495
1496          Router# show ip route
1497          Codes: K - kernel route, C - connected, S - static, R - RIP,
1498                 B - BGP * - FIB route.
1499
1500          K* 0.0.0.0/0              203.181.89.241
1501          S  0.0.0.0/0              203.181.89.1
1502          C* 127.0.0.0/8            lo
1503          C* 203.181.89.240/28      eth0
1504
1505 -- Command: show ipv6 route
1506
1507 -- Command: show interface
1508
1509 -- Command: show ip prefix-list [NAME]
1510
1511 -- Command: show route-map [NAME]
1512
1513 -- Command: show ip protocol
1514
1515 -- Command: show ipforward
1516     Display whether the host's IP forwarding function is enabled or
1517     not.  Almost any UNIX kernel can be configured with IP forwarding
1518     disabled.  If so, the box can't work as a router.
1519
1520 -- Command: show ipv6forward
1521     Display whether the host's IP v6 forwarding is enabled or not.
1522
1523 -- Command: show zebra fpm stats
1524     Display statistics related to the zebra code that interacts with
1525     the optional Forwarding Plane Manager (FPM) component.
1526
1527 -- Command: clear zebra fpm stats
1528     Reset statistics related to the zebra code that interacts with the
1529     optional Forwarding Plane Manager (FPM) component.
1530
1531
1532File: quagga.info,  Node: RIP,  Next: RIPng,  Prev: Zebra,  Up: Top
1533
15345 RIP
1535*****
1536
1537RIP - Routing Information Protocol is widely deployed interior gateway
1538protocol.  RIP was developed in the 1970s at Xerox Labs as part of the
1539XNS routing protocol.  RIP is a "distance-vector" protocol and is based
1540on the "Bellman-Ford" algorithms.  As a distance-vector protocol, RIP
1541router send updates to its neighbors periodically, thus allowing the
1542convergence to a known topology.  In each update, the distance to any
1543given network will be broadcasted to its neighboring router.
1544
1545   `ripd' supports RIP version 2 as described in RFC2453 and RIP
1546version 1 as described in RFC1058.
1547
1548* Menu:
1549
1550* Starting and Stopping ripd::
1551* RIP Configuration::
1552* RIP Version Control::
1553* How to Announce RIP route::
1554* Filtering RIP Routes::
1555* RIP Metric Manipulation::
1556* RIP distance::
1557* RIP route-map::
1558* RIP Authentication::
1559* RIP Timers::
1560* Show RIP Information::
1561* RIP Debug Commands::
1562
1563
1564File: quagga.info,  Node: Starting and Stopping ripd,  Next: RIP Configuration,  Up: RIP
1565
15665.1 Starting and Stopping ripd
1567==============================
1568
1569The default configuration file name of `ripd''s is `ripd.conf'.  When
1570invocation `ripd' searches directory /etc/quagga.  If `ripd.conf' is
1571not there next search current directory.
1572
1573   RIP uses UDP port 520 to send and receive RIP packets.  So the user
1574must have the capability to bind the port, generally this means that
1575the user must have superuser privileges.  RIP protocol requires
1576interface information maintained by `zebra' daemon.  So running `zebra'
1577is mandatory to run `ripd'.  Thus minimum sequence for running RIP is
1578like below:
1579
1580     # zebra -d
1581     # ripd -d
1582
1583   Please note that `zebra' must be invoked before `ripd'.
1584
1585   To stop `ripd'.  Please use `kill `cat /var/run/ripd.pid`'.  Certain
1586signals have special meaningss to `ripd'.
1587
1588`SIGHUP'
1589     Reload configuration file `ripd.conf'.  All configurations are
1590     reseted.  All routes learned so far are cleared and removed from
1591     routing table.
1592
1593`SIGUSR1'
1594     Rotate `ripd' logfile.
1595
1596`SIGINT'
1597`SIGTERM'
1598     `ripd' sweeps all installed RIP routes then terminates properly.
1599
1600   `ripd' invocation options.  Common options that can be specified
1601(*note Common Invocation Options::).
1602
1603`-r'
1604`--retain'
1605     When the program terminates, retain routes added by `ripd'.
1606
1607* Menu:
1608
1609* RIP netmask::
1610
1611
1612File: quagga.info,  Node: RIP netmask,  Up: Starting and Stopping ripd
1613
16145.1.1 RIP netmask
1615-----------------
1616
1617The netmask features of `ripd' support both version 1 and version 2 of
1618RIP.  Version 1 of RIP originally contained no netmask information.  In
1619RIP version 1, network classes were originally used to determine the
1620size of the netmask.  Class A networks use 8 bits of mask, Class B
1621networks use 16 bits of masks, while Class C networks use 24 bits of
1622mask.  Today, the most widely used method of a network mask is assigned
1623to the packet on the basis of the interface that received the packet.
1624Version 2 of RIP supports a variable length subnet mask (VLSM).  By
1625extending the subnet mask, the mask can be divided and reused.  Each
1626subnet can be used for different purposes such as large to middle size
1627LANs and WAN links.  Quagga `ripd' does not support the non-sequential
1628netmasks that are included in RIP Version 2.
1629
1630   In a case of similar information with the same prefix and metric, the
1631old information will be suppressed.  Ripd does not currently support
1632equal cost multipath routing.
1633
1634
1635File: quagga.info,  Node: RIP Configuration,  Next: RIP Version Control,  Prev: Starting and Stopping ripd,  Up: RIP
1636
16375.2 RIP Configuration
1638=====================
1639
1640 -- Command: router rip
1641     The `router rip' command is necessary to enable RIP.  To disable
1642     RIP, use the `no router rip' command.  RIP must be enabled before
1643     carrying out any of the RIP commands.
1644
1645 -- Command: no router rip
1646     Disable RIP.
1647
1648 -- RIP Command: network NETWORK
1649 -- RIP Command: no network NETWORK
1650     Set the RIP enable interface by NETWORK.  The interfaces which
1651     have addresses matching with NETWORK are enabled.
1652
1653     This group of commands either enables or disables RIP interfaces
1654     between certain numbers of a specified network address.  For
1655     example, if the network for 10.0.0.0/24 is RIP enabled, this would
1656     result in all the addresses from 10.0.0.0 to 10.0.0.255 being
1657     enabled for RIP.  The `no network' command will disable RIP for
1658     the specified network.
1659
1660 -- RIP Command: network IFNAME
1661 -- RIP Command: no network IFNAME
1662     Set a RIP enabled interface by IFNAME.  Both the sending and
1663     receiving of RIP packets will be enabled on the port specified in
1664     the `network ifname' command.  The `no network ifname' command
1665     will disable RIP on the specified interface.
1666
1667 -- RIP Command: neighbor A.B.C.D
1668 -- RIP Command: no neighbor A.B.C.D
1669     Specify RIP neighbor.  When a neighbor doesn't understand
1670     multicast, this command is used to specify neighbors.  In some
1671     cases, not all routers will be able to understand multicasting,
1672     where packets are sent to a network or a group of addresses.  In a
1673     situation where a neighbor cannot process multicast packets, it is
1674     necessary to establish a direct link between routers.  The
1675     neighbor command allows the network administrator to specify a
1676     router as a RIP neighbor.  The `no neighbor a.b.c.d' command will
1677     disable the RIP neighbor.
1678
1679   Below is very simple RIP configuration.  Interface `eth0' and
1680interface which address match to `10.0.0.0/8' are RIP enabled.
1681
1682     !
1683     router rip
1684      network 10.0.0.0/8
1685      network eth0
1686     !
1687
1688   Passive interface
1689
1690 -- RIP command: passive-interface (IFNAME|default)
1691 -- RIP command: no passive-interface IFNAME
1692     This command sets the specified interface to passive mode.  On
1693     passive mode interface, all receiving packets are processed as
1694     normal and ripd does not send either multicast or unicast RIP
1695     packets except to RIP neighbors specified with `neighbor' command.
1696     The interface may be specified as DEFAULT to make ripd default to
1697     passive on all interfaces.
1698
1699     The default is to be passive on all interfaces.
1700
1701   RIP split-horizon
1702
1703 -- Interface command: ip split-horizon
1704 -- Interface command: no ip split-horizon
1705     Control split-horizon on the interface.  Default is `ip
1706     split-horizon'.  If you don't perform split-horizon on the
1707     interface, please specify `no ip split-horizon'.
1708
1709
1710File: quagga.info,  Node: RIP Version Control,  Next: How to Announce RIP route,  Prev: RIP Configuration,  Up: RIP
1711
17125.3 RIP Version Control
1713=======================
1714
1715RIP can be configured to send either Version 1 or Version 2 packets.
1716The default is to send RIPv2 while accepting both RIPv1 and RIPv2 (and
1717replying with packets of the appropriate version for REQUESTS /
1718triggered updates). The version to receive and send can be specified
1719globally, and further overriden on a per-interface basis if needs be
1720for send and receive seperately (see below).
1721
1722   It is important to note that RIPv1 can not be authenticated. Further,
1723if RIPv1 is enabled then RIP will reply to REQUEST packets, sending the
1724state of its RIP routing table to any remote routers that ask on
1725demand. For a more detailed discussion on the security implications of
1726RIPv1 see *note RIP Authentication::.
1727
1728 -- RIP Command: version VERSION
1729     Set RIP version to accept for reads and send.  VERSION can be
1730     either `1" or `2".
1731
1732     Disabling RIPv1 by specifying version 2 is STRONGLY encouraged,
1733     *Note RIP Authentication::. This may become the default in a future
1734     release.
1735
1736     Default: Send Version 2, and accept either version.
1737
1738 -- RIP Command: no version
1739     Reset the global version setting back to the default.
1740
1741 -- Interface command: ip rip send version VERSION
1742     VERSION can be `1', `2' or `1 2'.
1743
1744     This interface command overrides the global rip version setting,
1745     and selects which version of RIP to send packets with, for this
1746     interface specifically. Choice of RIP Version 1, RIP Version 2, or
1747     both versions.  In the latter case, where `1 2' is specified,
1748     packets will be both broadcast and multicast.
1749
1750     Default: Send packets according to the global version (version 2)
1751
1752 -- Interface command: ip rip receive version VERSION
1753     VERSION can be `1', `2' or `1 2'.
1754
1755     This interface command overrides the global rip version setting,
1756     and selects which versions of RIP packets will be accepted on this
1757     interface. Choice of RIP Version 1, RIP Version 2, or both.
1758
1759     Default: Accept packets according to the global setting (both 1
1760     and 2).
1761
1762
1763File: quagga.info,  Node: How to Announce RIP route,  Next: Filtering RIP Routes,  Prev: RIP Version Control,  Up: RIP
1764
17655.4 How to Announce RIP route
1766=============================
1767
1768 -- RIP command: redistribute kernel
1769 -- RIP command: redistribute kernel metric <0-16>
1770 -- RIP command: redistribute kernel route-map ROUTE-MAP
1771 -- RIP command: no redistribute kernel
1772     `redistribute kernel' redistributes routing information from
1773     kernel route entries into the RIP tables. `no redistribute kernel'
1774     disables the routes.
1775
1776 -- RIP command: redistribute static
1777 -- RIP command: redistribute static metric <0-16>
1778 -- RIP command: redistribute static route-map ROUTE-MAP
1779 -- RIP command: no redistribute static
1780     `redistribute static' redistributes routing information from
1781     static route entries into the RIP tables. `no redistribute static'
1782     disables the routes.
1783
1784 -- RIP command: redistribute connected
1785 -- RIP command: redistribute connected metric <0-16>
1786 -- RIP command: redistribute connected route-map ROUTE-MAP
1787 -- RIP command: no redistribute connected
1788     Redistribute connected routes into the RIP tables.  `no
1789     redistribute connected' disables the connected routes in the RIP
1790     tables.  This command redistribute connected of the interface
1791     which RIP disabled.  The connected route on RIP enabled interface
1792     is announced by default.
1793
1794 -- RIP command: redistribute ospf
1795 -- RIP command: redistribute ospf metric <0-16>
1796 -- RIP command: redistribute ospf route-map ROUTE-MAP
1797 -- RIP command: no redistribute ospf
1798     `redistribute ospf' redistributes routing information from ospf
1799     route entries into the RIP tables. `no redistribute ospf' disables
1800     the routes.
1801
1802 -- RIP command: redistribute bgp
1803 -- RIP command: redistribute bgp metric <0-16>
1804 -- RIP command: redistribute bgp route-map ROUTE-MAP
1805 -- RIP command: no redistribute bgp
1806     `redistribute bgp' redistributes routing information from bgp
1807     route entries into the RIP tables. `no redistribute bgp' disables
1808     the routes.
1809
1810   If you want to specify RIP only static routes:
1811
1812 -- RIP command: default-information originate
1813
1814 -- RIP command: route A.B.C.D/M
1815 -- RIP command: no route A.B.C.D/M
1816     This command is specific to Quagga.  The `route' command makes a
1817     static route only inside RIP. This command should be used only by
1818     advanced users who are particularly knowledgeable about the RIP
1819     protocol.  In most cases, we recommend creating a static route in
1820     Quagga and redistributing it in RIP using `redistribute static'.
1821
1822
1823File: quagga.info,  Node: Filtering RIP Routes,  Next: RIP Metric Manipulation,  Prev: How to Announce RIP route,  Up: RIP
1824
18255.5 Filtering RIP Routes
1826========================
1827
1828RIP routes can be filtered by a distribute-list.
1829
1830 -- Command: distribute-list ACCESS_LIST DIRECT IFNAME
1831     You can apply access lists to the interface with a
1832     `distribute-list' command.  ACCESS_LIST is the access list name.
1833     DIRECT is `in' or `out'.  If DIRECT is `in' the access list is
1834     applied to input packets.
1835
1836     The `distribute-list' command can be used to filter the RIP path.
1837     `distribute-list' can apply access-lists to a chosen interface.
1838     First, one should specify the access-list.  Next, the name of the
1839     access-list is used in the distribute-list command.  For example,
1840     in the following configuration `eth0' will permit only the paths
1841     that match the route 10.0.0.0/8
1842
1843          !
1844          router rip
1845           distribute-list private in eth0
1846          !
1847          access-list private permit 10 10.0.0.0/8
1848          access-list private deny any
1849          !
1850
1851   `distribute-list' can be applied to both incoming and outgoing data.
1852
1853 -- Command: distribute-list prefix PREFIX_LIST (in|out) IFNAME
1854     You can apply prefix lists to the interface with a
1855     `distribute-list' command.  PREFIX_LIST is the prefix list name.
1856     Next is the direction of `in' or `out'.  If DIRECT is `in' the
1857     access list is applied to input packets.
1858
1859
1860File: quagga.info,  Node: RIP Metric Manipulation,  Next: RIP distance,  Prev: Filtering RIP Routes,  Up: RIP
1861
18625.6 RIP Metric Manipulation
1863===========================
1864
1865RIP metric is a value for distance for the network.  Usually `ripd'
1866increment the metric when the network information is received.
1867Redistributed routes' metric is set to 1.
1868
1869 -- RIP command: default-metric <1-16>
1870 -- RIP command: no default-metric <1-16>
1871     This command modifies the default metric value for redistributed
1872     routes.  The default value is 1.  This command does not affect
1873     connected route even if it is redistributed by `redistribute
1874     connected'.  To modify connected route's metric value, please use
1875     `redistribute connected metric' or `route-map'.  `offset-list' also
1876     affects connected routes.
1877
1878 -- RIP command: offset-list ACCESS-LIST (in|out)
1879 -- RIP command: offset-list ACCESS-LIST (in|out) IFNAME
1880
1881
1882File: quagga.info,  Node: RIP distance,  Next: RIP route-map,  Prev: RIP Metric Manipulation,  Up: RIP
1883
18845.7 RIP distance
1885================
1886
1887Distance value is used in zebra daemon.  Default RIP distance is 120.
1888
1889 -- RIP command: distance <1-255>
1890 -- RIP command: no distance <1-255>
1891     Set default RIP distance to specified value.
1892
1893 -- RIP command: distance <1-255> A.B.C.D/M
1894 -- RIP command: no distance <1-255> A.B.C.D/M
1895     Set default RIP distance to specified value when the route's
1896     source IP address matches the specified prefix.
1897
1898 -- RIP command: distance <1-255> A.B.C.D/M ACCESS-LIST
1899 -- RIP command: no distance <1-255> A.B.C.D/M ACCESS-LIST
1900     Set default RIP distance to specified value when the route's
1901     source IP address matches the specified prefix and the specified
1902     access-list.
1903
1904
1905File: quagga.info,  Node: RIP route-map,  Next: RIP Authentication,  Prev: RIP distance,  Up: RIP
1906
19075.8 RIP route-map
1908=================
1909
1910Usage of `ripd''s route-map support.
1911
1912   Optional argument route-map MAP_NAME can be added to each
1913`redistribute' statement.
1914
1915     redistribute static [route-map MAP_NAME]
1916     redistribute connected [route-map MAP_NAME]
1917     .....
1918
1919   Cisco applies route-map _before_ routes will exported to rip route
1920table.  In current Quagga's test implementation, `ripd' applies
1921route-map after routes are listed in the route table and before routes
1922will be announced to an interface (something like output filter). I
1923think it is not so clear, but it is draft and it may be changed at
1924future.
1925
1926   Route-map statement (*note Route Map::) is needed to use route-map
1927functionality.
1928
1929 -- Route Map: match interface WORD
1930     This command match to incoming interface.  Notation of this match
1931     is different from Cisco. Cisco uses a list of interfaces - NAME1
1932     NAME2 ... NAMEN.  Ripd allows only one name (maybe will change in
1933     the future).  Next - Cisco means interface which includes next-hop
1934     of routes (it is somewhat similar to "ip next-hop" statement).
1935     Ripd means interface where this route will be sent. This
1936     difference is because "next-hop" of same routes which sends to
1937     different interfaces must be different. Maybe it'd be better to
1938     made new matches - say "match interface-out NAME" or something
1939     like that.
1940
1941 -- Route Map: match ip address WORD
1942 -- Route Map: match ip address prefix-list WORD
1943     Match if route destination is permitted by access-list.
1944
1945 -- Route Map: match ip next-hop WORD
1946 -- Route Map: match ip next-hop prefix-list WORD
1947     Match if route next-hop (meaning next-hop listed in the rip
1948     route-table as displayed by "show ip rip") is permitted by
1949     access-list.
1950
1951 -- Route Map: match metric <0-4294967295>
1952     This command match to the metric value of RIP updates.  For other
1953     protocol compatibility metric range is shown as <0-4294967295>.
1954     But for RIP protocol only the value range <0-16> make sense.
1955
1956 -- Route Map: set ip next-hop A.B.C.D
1957     This command set next hop value in RIPv2 protocol.  This command
1958     does not affect RIPv1 because there is no next hop field in the
1959     packet.
1960
1961 -- Route Map: set metric <0-4294967295>
1962     Set a metric for matched route when sending announcement.  The
1963     metric value range is very large for compatibility with other
1964     protocols.  For RIP, valid metric values are from 1 to 16.
1965
1966
1967File: quagga.info,  Node: RIP Authentication,  Next: RIP Timers,  Prev: RIP route-map,  Up: RIP
1968
19695.9 RIP Authentication
1970======================
1971
1972RIPv2 allows packets to be authenticated via either an insecure plain
1973text password, included with the packet, or via a more secure MD5 based
1974HMAC (keyed-Hashing for Message AuthentiCation), RIPv1 can not be
1975authenticated at all, thus when authentication is configured `ripd'
1976will discard routing updates received via RIPv1 packets.
1977
1978   However, unless RIPv1 reception is disabled entirely, *Note RIP
1979Version Control::, RIPv1 REQUEST packets which are received, which
1980query the router for routing information, will still be honoured by
1981`ripd', and `ripd' WILL reply to such packets. This allows `ripd' to
1982honour such REQUESTs (which sometimes is used by old equipment and very
1983simple devices to bootstrap their default route), while still providing
1984security for route updates which are received.
1985
1986   In short: Enabling authentication prevents routes being updated by
1987unauthenticated remote routers, but still can allow routes (I.e. the
1988entire RIP routing table) to be queried remotely, potentially by anyone
1989on the internet, via RIPv1.
1990
1991   To prevent such unauthenticated querying of routes disable RIPv1,
1992*Note RIP Version Control::.
1993
1994 -- Interface command: ip rip authentication mode md5
1995 -- Interface command: no ip rip authentication mode md5
1996     Set the interface with RIPv2 MD5 authentication.
1997
1998 -- Interface command: ip rip authentication mode text
1999 -- Interface command: no ip rip authentication mode text
2000     Set the interface with RIPv2 simple password authentication.
2001
2002 -- Interface command: ip rip authentication string STRING
2003 -- Interface command: no ip rip authentication string STRING
2004     RIP version 2 has simple text authentication.  This command sets
2005     authentication string.  The string must be shorter than 16
2006     characters.
2007
2008 -- Interface command: ip rip authentication key-chain KEY-CHAIN
2009 -- Interface command: no ip rip authentication key-chain KEY-CHAIN
2010     Specifiy Keyed MD5 chain.
2011
2012     !
2013     key chain test
2014      key 1
2015       key-string test
2016     !
2017     interface eth1
2018      ip rip authentication mode md5
2019      ip rip authentication key-chain test
2020     !
2021
2022
2023File: quagga.info,  Node: RIP Timers,  Next: Show RIP Information,  Prev: RIP Authentication,  Up: RIP
2024
20255.10 RIP Timers
2026===============
2027
2028 -- RIP command: timers basic UPDATE TIMEOUT GARBAGE
2029     RIP protocol has several timers.  User can configure those timers'
2030     values by `timers basic' command.
2031
2032     The default settings for the timers are as follows:
2033
2034        * The update timer is 30 seconds. Every update timer seconds,
2035          the RIP process is awakened to send an unsolicited Response
2036          message containing the complete routing table to all
2037          neighboring RIP routers.
2038
2039        * The timeout timer is 180 seconds. Upon expiration of the
2040          timeout, the route is no longer valid; however, it is
2041          retained in the routing table for a short time so that
2042          neighbors can be notified that the route has been dropped.
2043
2044        * The garbage collect timer is 120 seconds.  Upon expiration of
2045          the garbage-collection timer, the route is finally removed
2046          from the routing table.
2047
2048
2049     The `timers basic' command allows the the default values of the
2050     timers listed above to be changed.
2051
2052 -- RIP command: no timers basic
2053     The `no timers basic' command will reset the timers to the default
2054     settings listed above.
2055
2056
2057File: quagga.info,  Node: Show RIP Information,  Next: RIP Debug Commands,  Prev: RIP Timers,  Up: RIP
2058
20595.11 Show RIP Information
2060=========================
2061
2062To display RIP routes.
2063
2064 -- Command: show ip rip
2065     Show RIP routes.
2066
2067   The command displays all RIP routes. For routes that are received
2068through RIP, this command will display the time the packet was sent and
2069the tag information.  This command will also display this information
2070for routes redistributed into RIP.
2071
2072 -- Command: show ip protocols
2073     The command displays current RIP status.  It includes RIP timer,
2074     filtering, version, RIP enabled interface and RIP peer inforation.
2075
2076     ripd> show ip protocols
2077     Routing Protocol is "rip"
2078       Sending updates every 30 seconds with +/-50%, next due in 35 seconds
2079       Timeout after 180 seconds, garbage collect after 120 seconds
2080       Outgoing update filter list for all interface is not set
2081       Incoming update filter list for all interface is not set
2082       Default redistribution metric is 1
2083       Redistributing: kernel connected
2084       Default version control: send version 2, receive version 2
2085         Interface        Send  Recv
2086       Routing for Networks:
2087         eth0
2088         eth1
2089         1.1.1.1
2090         203.181.89.241
2091       Routing Information Sources:
2092         Gateway          BadPackets BadRoutes  Distance Last Update
2093
2094
2095File: quagga.info,  Node: RIP Debug Commands,  Prev: Show RIP Information,  Up: RIP
2096
20975.12 RIP Debug Commands
2098=======================
2099
2100Debug for RIP protocol.
2101
2102 -- Command: debug rip events
2103     Debug rip events.
2104
2105   `debug rip' will show RIP events.  Sending and receiving packets,
2106timers, and changes in interfaces are events shown with `ripd'.
2107
2108 -- Command: debug rip packet
2109     Debug rip packet.
2110
2111   `debug rip packet' will display detailed information about the RIP
2112packets.  The origin and port number of the packet as well as a packet
2113dump is shown.
2114
2115 -- Command: debug rip zebra
2116     Debug rip between zebra communication.
2117
2118   This command will show the communication between `ripd' and `zebra'.
2119The main information will include addition and deletion of paths to the
2120kernel and the sending and receiving of interface information.
2121
2122 -- Command: show debugging rip
2123     Display `ripd''s debugging option.
2124
2125   `show debugging rip' will show all information currently set for ripd
2126debug.
2127
2128
2129File: quagga.info,  Node: RIPng,  Next: OSPFv2,  Prev: RIP,  Up: Top
2130
21316 RIPng
2132*******
2133
2134`ripngd' supports the RIPng protocol as described in RFC2080.  It's an
2135IPv6 reincarnation of the RIP protocol.
2136
2137* Menu:
2138
2139* Invoking ripngd::
2140* ripngd Configuration::
2141* ripngd Terminal Mode Commands::
2142* ripngd Filtering Commands::
2143
2144
2145File: quagga.info,  Node: Invoking ripngd,  Next: ripngd Configuration,  Up: RIPng
2146
21476.1 Invoking ripngd
2148===================
2149
2150There are no `ripngd' specific invocation options.  Common options can
2151be specified (*note Common Invocation Options::).
2152
2153
2154File: quagga.info,  Node: ripngd Configuration,  Next: ripngd Terminal Mode Commands,  Prev: Invoking ripngd,  Up: RIPng
2155
21566.2 ripngd Configuration
2157========================
2158
2159Currently ripngd supports the following commands:
2160
2161 -- Command: router ripng
2162     Enable RIPng.
2163
2164 -- RIPng Command: flush_timer TIME
2165     Set flush timer.
2166
2167 -- RIPng Command: network NETWORK
2168     Set RIPng enabled interface by NETWORK
2169
2170 -- RIPng Command: network IFNAME
2171     Set RIPng enabled interface by IFNAME
2172
2173 -- RIPng Command: route NETWORK
2174     Set RIPng static routing announcement of NETWORK.
2175
2176 -- Command: router zebra
2177     This command is the default and does not appear in the
2178     configuration.  With this statement, RIPng routes go to the
2179     `zebra' daemon.
2180
2181
2182File: quagga.info,  Node: ripngd Terminal Mode Commands,  Next: ripngd Filtering Commands,  Prev: ripngd Configuration,  Up: RIPng
2183
21846.3 ripngd Terminal Mode Commands
2185=================================
2186
2187 -- Command: show ip ripng
2188
2189 -- Command: show debugging ripng
2190
2191 -- Command: debug ripng events
2192
2193 -- Command: debug ripng packet
2194
2195 -- Command: debug ripng zebra
2196
2197
2198File: quagga.info,  Node: ripngd Filtering Commands,  Prev: ripngd Terminal Mode Commands,  Up: RIPng
2199
22006.4 ripngd Filtering Commands
2201=============================
2202
2203 -- Command: distribute-list ACCESS_LIST (in|out) IFNAME
2204     You can apply an access-list to the interface using the
2205     `distribute-list' command.  ACCESS_LIST is an access-list name.
2206     DIRECT is `in' or `out'.  If DIRECT is `in', the access-list is
2207     applied only to incoming packets.
2208
2209          distribute-list local-only out sit1
2210
2211
2212File: quagga.info,  Node: OSPFv2,  Next: OSPFv3,  Prev: RIPng,  Up: Top
2213
22147 OSPFv2
2215********
2216
2217OSPF (Open Shortest Path First) version 2 is a routing protocol which
2218is described in `RFC2328, OSPF Version 2'.  OSPF is an IGP (Interior
2219Gateway Protocol).  Compared with RIP, OSPF can provide scalable
2220network support and faster convergence times.  OSPF is widely used in
2221large networks such as ISP (Internet Service Provider) backbone and
2222enterprise networks.
2223
2224* Menu:
2225
2226* Configuring ospfd::
2227* OSPF router::
2228* OSPF area::
2229* OSPF interface::
2230* Redistribute routes to OSPF::
2231* Showing OSPF information::
2232* Debugging OSPF::
2233* OSPF Configuration Examples::
2234
2235
2236File: quagga.info,  Node: Configuring ospfd,  Next: OSPF router,  Up: OSPFv2
2237
22387.1 Configuring ospfd
2239=====================
2240
2241There are no `ospfd' specific options.  Common options can be specified
2242(*note Common Invocation Options::) to `ospfd'.  `ospfd' needs to
2243acquire interface information from `zebra' in order to function.
2244Therefore `zebra' must be running before invoking `ospfd'. Also, if
2245`zebra' is restarted then `ospfd' must be too.
2246
2247   Like other daemons, `ospfd' configuration is done in OSPF specific
2248configuration file `ospfd.conf'.
2249
2250
2251File: quagga.info,  Node: OSPF router,  Next: OSPF area,  Prev: Configuring ospfd,  Up: OSPFv2
2252
22537.2 OSPF router
2254===============
2255
2256To start OSPF process you have to specify the OSPF router.  As of this
2257writing, `ospfd' does not support multiple OSPF processes.
2258
2259 -- Command: router ospf
2260 -- Command: no router ospf
2261     Enable or disable the OSPF process.  `ospfd' does not yet support
2262     multiple OSPF processes.  So you can not specify an OSPF process
2263     number.
2264
2265 -- OSPF Command: ospf router-id A.B.C.D
2266 -- OSPF Command: no ospf router-id
2267     This sets the router-ID of the OSPF process. The router-ID may be
2268     an IP address of the router, but need not be - it can be any
2269     arbitrary 32bit number. However it MUST be unique within the
2270     entire OSPF domain to the OSPF speaker - bad things will happen if
2271     multiple OSPF speakers are configured with the same router-ID! If
2272     one is not specified then `ospfd' will obtain a router-ID
2273     automatically from `zebra'.
2274
2275 -- OSPF Command: ospf abr-type TYPE
2276 -- OSPF Command: no ospf abr-type TYPE
2277     TYPE can be cisco|ibm|shortcut|standard. The "Cisco" and "IBM"
2278     types are equivalent.
2279
2280     The OSPF standard for ABR behaviour does not allow an ABR to
2281     consider routes through non-backbone areas when its links to the
2282     backbone are down, even when there are other ABRs in attached
2283     non-backbone areas which still can reach the backbone - this
2284     restriction exists primarily to ensure routing-loops are avoided.
2285
2286     With the "Cisco" or "IBM" ABR type, the default in this release of
2287     Quagga, this restriction is lifted, allowing an ABR to consider
2288     summaries learnt from other ABRs through non-backbone areas, and
2289     hence route via non-backbone areas as a last resort when, and only
2290     when, backbone links are down.
2291
2292     Note that areas with fully-adjacent virtual-links are considered
2293     to be "transit capable" and can always be used to route backbone
2294     traffic, and hence are unaffected by this setting (*note OSPF
2295     virtual-link::).
2296
2297     More information regarding the behaviour controlled by this
2298     command can be found in `RFC 3509, Alternative Implementations of
2299     OSPF Area Border Routers', and
2300     `draft-ietf-ospf-shortcut-abr-02.txt'.
2301
2302     Quote: "Though the definition of the ABR (Area Border Router) in
2303     the OSPF specification does not require a router with multiple
2304     attached areas to have a backbone connection, it is actually
2305     necessary to provide successful routing to the inter-area and
2306     external destinations. If this requirement is not met, all traffic
2307     destined for the areas not connected to such an ABR or out of the
2308     OSPF domain, is dropped.  This document describes alternative ABR
2309     behaviors implemented in Cisco and IBM routers."
2310
2311 -- OSPF Command: ospf rfc1583compatibility
2312 -- OSPF Command: no ospf rfc1583compatibility
2313     `RFC2328', the sucessor to `RFC1583', suggests according to
2314     section G.2 (changes) in section 16.4 a change to the path
2315     preference algorithm that prevents possible routing loops that were
2316     possible in the old version of OSPFv2. More specifically it demands
2317     that inter-area paths and intra-area backbone path are now of
2318     equal preference but still both preferred to external paths.
2319
2320     This command should NOT be set normally.
2321
2322 -- OSPF Command: log-adjacency-changes [detail]
2323 -- OSPF Command: no log-adjacency-changes [detail]
2324     Configures ospfd to log changes in adjacency.  With the optional
2325     detail argument, all changes in adjacency status are shown.
2326     Without detail, only changes to full or regressions are shown.
2327
2328 -- OSPF Command: passive-interface INTERFACE
2329 -- OSPF Command: no passive-interface INTERFACE
2330     Do not speak OSPF interface on the given interface, but do
2331     advertise the interface as a stub link in the router-LSA (Link
2332     State Advertisement) for this router. This allows one to advertise
2333     addresses on such connected interfaces without having to originate
2334     AS-External/Type-5 LSAs (which have global flooding scope) - as
2335     would occur if connected addresses were redistributed into OSPF
2336     (*note Redistribute routes to OSPF::). This is the only way to
2337     advertise non-OSPF links into stub areas.
2338
2339 -- OSPF Command: timers throttle spf DELAY INITIAL-HOLDTIME
2340MAX-HOLDTIME
2341 -- OSPF Command: no timers throttle spf
2342     This command sets the initial DELAY, the INITIAL-HOLDTIME and the
2343     MAXIMUM-HOLDTIME between when SPF is calculated and the event
2344     which triggered the calculation. The times are specified in
2345     milliseconds and must be in the range of 0 to 600000 milliseconds.
2346
2347     The DELAY specifies the minimum amount of time to delay SPF
2348     calculation (hence it affects how long SPF calculation is delayed
2349     after an event which occurs outside of the holdtime of any
2350     previous SPF calculation, and also serves as a minimum holdtime).
2351
2352     Consecutive SPF calculations will always be seperated by at least
2353     'hold-time' milliseconds. The hold-time is adaptive and initially
2354     is set to the INITIAL-HOLDTIME configured with the above command.
2355     Events which occur within the holdtime of the previous SPF
2356     calculation will cause the holdtime to be increased by
2357     INITIAL-HOLDTIME, bounded by the MAXIMUM-HOLDTIME configured with
2358     this command. If the adaptive hold-time elapses without any
2359     SPF-triggering event occuring then the current holdtime is reset
2360     to the INITIAL-HOLDTIME. The current holdtime can be viewed with
2361     *note show ip ospf::, where it is expressed as a multiplier of the
2362     INITIAL-HOLDTIME.
2363
2364          router ospf
2365           timers throttle spf 200 400 10000
2366
2367     In this example, the DELAY is set to 200ms, the INITIAL HOLDTIME
2368     is set to 400ms and the MAXIMUM HOLDTIME to 10s. Hence there will
2369     always be at least 200ms between an event which requires SPF
2370     calculation and the actual SPF calculation. Further consecutive SPF
2371     calculations will always be seperated by between 400ms to 10s, the
2372     hold-time increasing by 400ms each time an SPF-triggering event
2373     occurs within the hold-time of the previous SPF calculation.
2374
2375     This command supercedes the `timers spf' command in previous Quagga
2376     releases.
2377
2378 -- OSPF Command: max-metric router-lsa [on-startup|on-shutdown]
2379<5-86400>
2380 -- OSPF Command: max-metric router-lsa administrative
2381 -- OSPF Command: no max-metric router-lsa
2382[on-startup|on-shutdown|administrative]
2383     This enables `RFC3137, OSPF Stub Router Advertisement' support,
2384     where the OSPF process describes its transit links in its
2385     router-LSA as having infinite distance so that other routers will
2386     avoid calculating transit paths through the router while still
2387     being able to reach networks through the router.
2388
2389     This support may be enabled administratively (and indefinitely) or
2390     conditionally. Conditional enabling of max-metric router-lsas can
2391     be for a period of seconds after startup and/or for a period of
2392     seconds prior to shutdown.
2393
2394     Enabling this for a period after startup allows OSPF to converge
2395     fully first without affecting any existing routes used by other
2396     routers, while still allowing any connected stub links and/or
2397     redistributed routes to be reachable. Enabling this for a period
2398     of time in advance of shutdown allows the router to gracefully
2399     excuse itself from the OSPF domain.
2400
2401     Enabling this feature administratively allows for administrative
2402     intervention for whatever reason, for an indefinite period of time.
2403     Note that if the configuration is written to file, this
2404     administrative form of the stub-router command will also be
2405     written to file. If `ospfd' is restarted later, the command will
2406     then take effect until manually deconfigured.
2407
2408     Configured state of this feature as well as current status, such
2409     as the number of second remaining till on-startup or on-shutdown
2410     ends, can be viewed with the *note show ip ospf:: command.
2411
2412 -- OSPF Command: auto-cost reference-bandwidth <1-4294967>
2413 -- OSPF Command: no auto-cost reference-bandwidth
2414     This sets the reference bandwidth for cost calculations, where
2415     this bandwidth is considered equivalent to an OSPF cost of 1,
2416     specified in Mbits/s. The default is 100Mbit/s (i.e. a link of
2417     bandwidth 100Mbit/s or higher will have a cost of 1. Cost of lower
2418     bandwidth links will be scaled with reference to this cost).
2419
2420     This configuration setting MUST be consistent across all routers
2421     within the OSPF domain.
2422
2423 -- OSPF Command: network A.B.C.D/M area A.B.C.D
2424 -- OSPF Command: network A.B.C.D/M area <0-4294967295>
2425 -- OSPF Command: no network A.B.C.D/M area A.B.C.D
2426 -- OSPF Command: no network A.B.C.D/M area <0-4294967295>
2427     This command specifies the OSPF enabled interface(s).  If the
2428     interface has an address from range 192.168.1.0/24 then the
2429     command below enables ospf on this interface so router can provide
2430     network information to the other ospf routers via this interface.
2431
2432          router ospf
2433           network 192.168.1.0/24 area 0.0.0.0
2434
2435     Prefix length in interface must be equal or bigger (ie. smaller
2436     network) than prefix length in network statement. For example
2437     statement above doesn't enable ospf on interface with address
2438     192.168.1.1/23, but it does on interface with address
2439     192.168.1.129/25.
2440
2441     Note that the behavior when there is a peer address defined on an
2442     interface changed after release 0.99.7.  Currently, if a peer
2443     prefix has been configured, then we test whether the prefix in the
2444     network command contains the destination prefix.  Otherwise, we
2445     test whether the network command prefix contains the local address
2446     prefix of the interface.
2447
2448
2449File: quagga.info,  Node: OSPF area,  Next: OSPF interface,  Prev: OSPF router,  Up: OSPFv2
2450
24517.3 OSPF area
2452=============
2453
2454 -- OSPF Command: area A.B.C.D range A.B.C.D/M
2455 -- OSPF Command: area <0-4294967295> range A.B.C.D/M
2456 -- OSPF Command: no area A.B.C.D range A.B.C.D/M
2457 -- OSPF Command: no area <0-4294967295> range A.B.C.D/M
2458     Summarize intra area paths from specified area into one Type-3
2459     summary-LSA announced to other areas. This command can be used
2460     only in ABR and ONLY router-LSAs (Type-1) and network-LSAs
2461     (Type-2) (ie. LSAs with scope area) can be summarized. Type-5
2462     AS-external-LSAs can't be summarized - their scope is AS.
2463     Summarizing Type-7 AS-external-LSAs isn't supported yet by Quagga.
2464
2465          router ospf
2466           network 192.168.1.0/24 area 0.0.0.0
2467           network 10.0.0.0/8 area 0.0.0.10
2468           area 0.0.0.10 range 10.0.0.0/8
2469
2470     With configuration above one Type-3 Summary-LSA with routing info
2471     10.0.0.0/8 is announced into backbone area if area 0.0.0.10
2472     contains at least one intra-area network (ie. described with
2473     router or network LSA) from this range.
2474
2475 -- OSPF Command: area A.B.C.D range IPV4_PREFIX not-advertise
2476 -- OSPF Command: no area A.B.C.D range IPV4_PREFIX not-advertise
2477     Instead of summarizing intra area paths filter them - ie. intra
2478     area paths from this range are not advertised into other areas.
2479     This command makes sense in ABR only.
2480
2481 -- OSPF Command: area A.B.C.D range IPV4_PREFIX substitute IPV4_PREFIX
2482 -- OSPF Command: no area A.B.C.D range IPV4_PREFIX substitute
2483IPV4_PREFIX
2484     Substitute summarized prefix with another prefix.
2485
2486          router ospf
2487           network 192.168.1.0/24 area 0.0.0.0
2488           network 10.0.0.0/8 area 0.0.0.10
2489           area 0.0.0.10 range 10.0.0.0/8 substitute 11.0.0.0/8
2490
2491     One Type-3 summary-LSA with routing info 11.0.0.0/8 is announced
2492     into backbone area if area 0.0.0.10 contains at least one
2493     intra-area network (ie. described with router-LSA or network-LSA)
2494     from range 10.0.0.0/8.  This command makes sense in ABR only.
2495
2496 -- OSPF Command: area A.B.C.D virtual-link A.B.C.D
2497 -- OSPF Command: area <0-4294967295> virtual-link A.B.C.D
2498 -- OSPF Command: no area A.B.C.D virtual-link A.B.C.D
2499 -- OSPF Command: no area <0-4294967295> virtual-link A.B.C.D
2500
2501 -- OSPF Command: area A.B.C.D shortcut
2502 -- OSPF Command: area <0-4294967295> shortcut
2503 -- OSPF Command: no area A.B.C.D shortcut
2504 -- OSPF Command: no area <0-4294967295> shortcut
2505     Configure the area as Shortcut capable. See `RFC3509'. This
2506     requires that the 'abr-type' be set to 'shortcut'.
2507
2508 -- OSPF Command: area A.B.C.D stub
2509 -- OSPF Command: area <0-4294967295> stub
2510 -- OSPF Command: no area A.B.C.D stub
2511 -- OSPF Command: no area <0-4294967295> stub
2512     Configure the area to be a stub area. That is, an area where no
2513     router originates routes external to OSPF and hence an area where
2514     all external routes are via the ABR(s). Hence, ABRs for such an
2515     area do not need to pass AS-External LSAs (type-5s) or
2516     ASBR-Summary LSAs (type-4) into the area. They need only pass
2517     Network-Summary (type-3) LSAs into such an area, along with a
2518     default-route summary.
2519
2520 -- OSPF Command: area A.B.C.D stub no-summary
2521 -- OSPF Command: area <0-4294967295> stub no-summary
2522 -- OSPF Command: no area A.B.C.D stub no-summary
2523 -- OSPF Command: no area <0-4294967295> stub no-summary
2524     Prevents an `ospfd' ABR from injecting inter-area summaries into
2525     the specified stub area.
2526
2527 -- OSPF Command: area A.B.C.D default-cost <0-16777215>
2528 -- OSPF Command: no area A.B.C.D default-cost <0-16777215>
2529     Set the cost of default-summary LSAs announced to stubby areas.
2530
2531 -- OSPF Command: area A.B.C.D export-list NAME
2532 -- OSPF Command: area <0-4294967295> export-list NAME
2533 -- OSPF Command: no area A.B.C.D export-list NAME
2534 -- OSPF Command: no area <0-4294967295> export-list NAME
2535     Filter Type-3 summary-LSAs announced to other areas originated
2536     from intra- area paths from specified area.
2537
2538          router ospf
2539           network 192.168.1.0/24 area 0.0.0.0
2540           network 10.0.0.0/8 area 0.0.0.10
2541           area 0.0.0.10 export-list foo
2542          !
2543          access-list foo permit 10.10.0.0/16
2544          access-list foo deny any
2545
2546     With example above any intra-area paths from area 0.0.0.10 and
2547     from range 10.10.0.0/16 (for example 10.10.1.0/24 and
2548     10.10.2.128/30) are announced into other areas as Type-3
2549     summary-LSA's, but any others (for example 10.11.0.0/16 or
2550     10.128.30.16/30) aren't.
2551
2552     This command is only relevant if the router is an ABR for the
2553     specified area.
2554
2555 -- OSPF Command: area A.B.C.D import-list NAME
2556 -- OSPF Command: area <0-4294967295> import-list NAME
2557 -- OSPF Command: no area A.B.C.D import-list NAME
2558 -- OSPF Command: no area <0-4294967295> import-list NAME
2559     Same as export-list, but it applies to paths announced into
2560     specified area as Type-3 summary-LSAs.
2561
2562 -- OSPF Command: area A.B.C.D filter-list prefix NAME in
2563 -- OSPF Command: area A.B.C.D filter-list prefix NAME out
2564 -- OSPF Command: area <0-4294967295> filter-list prefix NAME in
2565 -- OSPF Command: area <0-4294967295> filter-list prefix NAME out
2566 -- OSPF Command: no area A.B.C.D filter-list prefix NAME in
2567 -- OSPF Command: no area A.B.C.D filter-list prefix NAME out
2568 -- OSPF Command: no area <0-4294967295> filter-list prefix NAME in
2569 -- OSPF Command: no area <0-4294967295> filter-list prefix NAME out
2570     Filtering Type-3 summary-LSAs to/from area using prefix lists.
2571     This command makes sense in ABR only.
2572
2573 -- OSPF Command: area A.B.C.D authentication
2574 -- OSPF Command: area <0-4294967295> authentication
2575 -- OSPF Command: no area A.B.C.D authentication
2576 -- OSPF Command: no area <0-4294967295> authentication
2577     Specify that simple password authentication should be used for the
2578     given area.
2579
2580 -- OSPF Command: area A.B.C.D authentication message-digest
2581 -- OSPF Command: area <0-4294967295> authentication message-digest
2582     Specify that OSPF packets must be authenticated with MD5 HMACs
2583     within the given area. Keying material must also be configured on
2584     a per-interface basis (*note ip ospf message-digest-key::).
2585
2586     MD5 authentication may also be configured on a per-interface basis
2587     (*note ip ospf authentication message-digest::). Such per-interface
2588     settings will override any per-area authentication setting.
2589
2590
2591File: quagga.info,  Node: OSPF interface,  Next: Redistribute routes to OSPF,  Prev: OSPF area,  Up: OSPFv2
2592
25937.4 OSPF interface
2594==================
2595
2596 -- Interface Command: ip ospf authentication-key AUTH_KEY
2597 -- Interface Command: no ip ospf authentication-key
2598     Set OSPF authentication key to a simple password.  After setting
2599     AUTH_KEY, all OSPF packets are authenticated. AUTH_KEY has length
2600     up to 8 chars.
2601
2602     Simple text password authentication is insecure and deprecated in
2603     favour of MD5 HMAC authentication (*note ip ospf authentication
2604     message-digest::).
2605
2606 -- Interface Command: ip ospf authentication message-digest
2607     Specify that MD5 HMAC authentication must be used on this
2608     interface. MD5 keying material must also be configured (*note ip
2609     ospf message-digest-key::). Overrides any authentication enabled
2610     on a per-area basis (*note area authentication message-digest::).
2611
2612     Note that OSPF MD5 authentication requires that time never go
2613     backwards (correct time is NOT important, only that it never goes
2614     backwards), even across resets, if ospfd is to be able to promptly
2615     reestabish adjacencies with its neighbours after restarts/reboots.
2616     The host should have system time be set at boot from an external
2617     or non-volatile source (eg battery backed clock, NTP, etc.) or
2618     else the system clock should be periodically saved to non-volative
2619     storage and restored at boot if MD5 authentication is to be
2620     expected to work reliably.
2621
2622 -- Interface Command: ip ospf message-digest-key KEYID md5 KEY
2623 -- Interface Command: no ip ospf message-digest-key
2624     Set OSPF authentication key to a cryptographic password.  The
2625     cryptographic algorithm is MD5.
2626
2627     KEYID identifies secret key used to create the message digest.
2628     This ID is part of the protocol and must be consistent across
2629     routers on a link.
2630
2631     KEY is the actual message digest key, of up to 16 chars (larger
2632     strings will be truncated), and is associated with the given KEYID.
2633
2634 -- Interface Command: ip ospf cost <1-65535>
2635 -- Interface Command: no ip ospf cost
2636     Set link cost for the specified interface.  The cost value is set
2637     to router-LSA's metric field and used for SPF calculation.
2638
2639 -- Interface Command: ip ospf dead-interval <1-65535>
2640 -- Interface Command: ip ospf dead-interval minimal hello-multiplier
2641<2-20>
2642 -- Interface Command: no ip ospf dead-interval
2643     Set number of seconds for RouterDeadInterval timer value used for
2644     Wait Timer and Inactivity Timer.  This value must be the same for
2645     all routers attached to a common network.  The default value is 40
2646     seconds.
2647
2648     If 'minimal' is specified instead, then the dead-interval is set
2649     to 1 second and one must specify a hello-multiplier. The
2650     hello-multiplier specifies how many Hellos to send per second,
2651     from 2 (every 500ms) to 20 (every 50ms). Thus one can have 1s
2652     convergence time for OSPF. If this form is specified, then the
2653     hello-interval advertised in Hello packets is set to 0 and the
2654     hello-interval on received Hello packets is not checked, thus the
2655     hello-multiplier need NOT be the same across multiple routers on a
2656     common link.
2657
2658 -- Interface Command: ip ospf hello-interval <1-65535>
2659 -- Interface Command: no ip ospf hello-interval
2660     Set number of seconds for HelloInterval timer value.  Setting this
2661     value, Hello packet will be sent every timer value seconds on the
2662     specified interface.  This value must be the same for all routers
2663     attached to a common network.  The default value is 10 seconds.
2664
2665     This command has no effect if *note ip ospf dead-interval
2666     minimal:: is also specified for the interface.
2667
2668 -- Interface Command: ip ospf network
2669(broadcast|non-broadcast|point-to-multipoint|point-to-point)
2670 -- Interface Command: no ip ospf network
2671     Set explicitly network type for specifed interface.
2672
2673 -- Interface Command: ip ospf priority <0-255>
2674 -- Interface Command: no ip ospf priority
2675     Set RouterPriority integer value.  The router with the highest
2676     priority will be more eligible to become Designated Router.
2677     Setting the value to 0, makes the router ineligible to become
2678     Designated Router. The default value is 1.
2679
2680 -- Interface Command: ip ospf retransmit-interval <1-65535>
2681 -- Interface Command: no ip ospf retransmit interval
2682     Set number of seconds for RxmtInterval timer value.  This value is
2683     used when retransmitting Database Description and Link State
2684     Request packets.  The default value is 5 seconds.
2685
2686 -- Interface Command: ip ospf transmit-delay
2687 -- Interface Command: no ip ospf transmit-delay
2688     Set number of seconds for InfTransDelay value.  LSAs' age should be
2689     incremented by this value when transmitting.  The default value is
2690     1 seconds.
2691
2692
2693File: quagga.info,  Node: Redistribute routes to OSPF,  Next: Showing OSPF information,  Prev: OSPF interface,  Up: OSPFv2
2694
26957.5 Redistribute routes to OSPF
2696===============================
2697
2698 -- OSPF Command: redistribute (kernel|connected|static|rip|bgp)
2699 -- OSPF Command: redistribute (kernel|connected|static|rip|bgp)
2700ROUTE-MAP
2701 -- OSPF Command: redistribute (kernel|connected|static|rip|bgp)
2702metric-type (1|2)
2703 -- OSPF Command: redistribute (kernel|connected|static|rip|bgp)
2704metric-type (1|2) route-map WORD
2705 -- OSPF Command: redistribute (kernel|connected|static|rip|bgp) metric
2706<0-16777214>
2707 -- OSPF Command: redistribute (kernel|connected|static|rip|bgp) metric
2708<0-16777214> route-map WORD
2709 -- OSPF Command: redistribute (kernel|connected|static|rip|bgp)
2710metric-type (1|2) metric <0-16777214>
2711 -- OSPF Command: redistribute (kernel|connected|static|rip|bgp)
2712metric-type (1|2) metric <0-16777214> route-map WORD
2713 -- OSPF Command: no redistribute (kernel|connected|static|rip|bgp)
2714     Redistribute routes of the specified protocol or kind into OSPF,
2715     with the metric type and metric set if specified, filtering the
2716     routes using the given route-map if specified.  Redistributed
2717     routes may also be filtered with distribute-lists, see *note ospf
2718     distribute-list::.
2719
2720     Redistributed routes are distributed as into OSPF as Type-5
2721     External LSAs into links to areas that accept external routes,
2722     Type-7 External LSAs for NSSA areas and are not redistributed at
2723     all into Stub areas, where external routes are not permitted.
2724
2725     Note that for connected routes, one may instead use
2726     "passive-interface", see *note OSPF passive-interface::.
2727
2728 -- OSPF Command: default-information originate
2729 -- OSPF Command: default-information originate metric <0-16777214>
2730 -- OSPF Command: default-information originate metric <0-16777214>
2731metric-type (1|2)
2732 -- OSPF Command: default-information originate metric <0-16777214>
2733metric-type (1|2) route-map WORD
2734 -- OSPF Command: default-information originate always
2735 -- OSPF Command: default-information originate always metric
2736<0-16777214>
2737 -- OSPF Command: default-information originate always metric
2738<0-16777214> metric-type (1|2)
2739 -- OSPF Command: default-information originate always metric
2740<0-16777214> metric-type (1|2) route-map WORD
2741 -- OSPF Command: no default-information originate
2742     Originate an AS-External (type-5) LSA describing a default route
2743     into all external-routing capable areas, of the specified metric
2744     and metric type. If the 'always' keyword is given then the default
2745     is always advertised, even when there is no default present in the
2746     routing table.
2747
2748 -- OSPF Command: distribute-list NAME out
2749(kernel|connected|static|rip|ospf
2750 -- OSPF Command: no distribute-list NAME out
2751(kernel|connected|static|rip|ospf
2752     Apply the access-list filter, NAME, to redistributed routes of the
2753     given type before allowing the routes to redistributed into OSPF
2754     (*note OSPF redistribute::).
2755
2756 -- OSPF Command: default-metric <0-16777214>
2757 -- OSPF Command: no default-metric
2758
2759 -- OSPF Command: distance <1-255>
2760 -- OSPF Command: no distance <1-255>
2761
2762 -- OSPF Command: distance ospf (intra-area|inter-area|external)
2763          <1-255>
2764 -- OSPF Command: no distance ospf
2765
2766
2767File: quagga.info,  Node: Showing OSPF information,  Next: Debugging OSPF,  Prev: Redistribute routes to OSPF,  Up: OSPFv2
2768
27697.6 Showing OSPF information
2770============================
2771
2772 -- Command: show ip ospf
2773     Show information on a variety of general OSPF and area state and
2774     configuration information.
2775
2776 -- Command: show ip ospf interface [INTERFACE]
2777     Show state and configuration of OSPF the specified interface, or
2778     all interfaces if no interface is given.
2779
2780 -- Command: show ip ospf neighbor
2781 -- Command: show ip ospf neighbor INTERFACE
2782 -- Command: show ip ospf neighbor detail
2783 -- Command: show ip ospf neighbor INTERFACE detail
2784
2785 -- Command: show ip ospf database
2786
2787 -- Command: show ip ospf database
2788(asbr-summary|external|network|router|summary)
2789 -- Command: show ip ospf database
2790(asbr-summary|external|network|router|summary) LINK-STATE-ID
2791 -- Command: show ip ospf database
2792(asbr-summary|external|network|router|summary) LINK-STATE-ID adv-router
2793ADV-ROUTER
2794 -- Command: show ip ospf database
2795(asbr-summary|external|network|router|summary) adv-router ADV-ROUTER
2796 -- Command: show ip ospf database
2797(asbr-summary|external|network|router|summary) LINK-STATE-ID
2798self-originate
2799 -- Command: show ip ospf database
2800(asbr-summary|external|network|router|summary) self-originate
2801
2802 -- Command: show ip ospf database max-age
2803
2804 -- Command: show ip ospf database self-originate
2805
2806 -- Command: show ip ospf route
2807     Show the OSPF routing table, as determined by the most recent SPF
2808     calculation.
2809
2810
2811File: quagga.info,  Node: Debugging OSPF,  Next: OSPF Configuration Examples,  Prev: Showing OSPF information,  Up: OSPFv2
2812
28137.7 Debugging OSPF
2814==================
2815
2816 -- Command: debug ospf packet
2817(hello|dd|ls-request|ls-update|ls-ack|all) (send|recv) [detail]
2818 -- Command: no debug ospf packet
2819(hello|dd|ls-request|ls-update|ls-ack|all) (send|recv) [detail]
2820
2821 -- Command: debug ospf ism
2822 -- Command: debug ospf ism (status|events|timers)
2823 -- Command: no debug ospf ism
2824 -- Command: no debug ospf ism (status|events|timers)
2825
2826 -- Command: debug ospf nsm
2827 -- Command: debug ospf nsm (status|events|timers)
2828 -- Command: no debug ospf nsm
2829 -- Command: no debug ospf nsm (status|events|timers)
2830
2831 -- Command: debug ospf lsa
2832 -- Command: debug ospf lsa (generate|flooding|refresh)
2833 -- Command: no debug ospf lsa
2834 -- Command: no debug ospf lsa (generate|flooding|refresh)
2835
2836 -- Command: debug ospf zebra
2837 -- Command: debug ospf zebra (interface|redistribute)
2838 -- Command: no debug ospf zebra
2839 -- Command: no debug ospf zebra (interface|redistribute)
2840
2841 -- Command: show debugging ospf
2842
2843
2844File: quagga.info,  Node: OSPF Configuration Examples,  Prev: Debugging OSPF,  Up: OSPFv2
2845
28467.8 OSPF Configuration Examples
2847===============================
2848
2849A simple example, with MD5 authentication enabled:
2850
2851     !
2852     interface bge0
2853      ip ospf authentication message-digest
2854      ip ospf message-digest-key 1 md5 ABCDEFGHIJK
2855     !
2856     router ospf
2857      network 192.168.0.0/16 area 0.0.0.1
2858      area 0.0.0.1 authentication message-digest
2859
2860   An ABR router, with MD5 authentication and performing summarisation
2861of networks between the areas:
2862
2863     !
2864     password ABCDEF
2865     log file /var/log/quagga/ospfd.log
2866     service advanced-vty
2867     !
2868     interface eth0
2869      ip ospf authentication message-digest
2870      ip ospf message-digest-key 1 md5 ABCDEFGHIJK
2871     !
2872     interface ppp0
2873     !
2874     interface br0
2875      ip ospf authentication message-digest
2876      ip ospf message-digest-key 2 md5 XYZ12345
2877     !
2878     router ospf
2879      ospf router-id 192.168.0.1
2880      redistribute connected
2881      passive interface ppp0
2882      network 192.168.0.0/24 area 0.0.0.0
2883      network 10.0.0.0/16 area 0.0.0.0
2884      network 192.168.1.0/24 area 0.0.0.1
2885      area 0.0.0.0 authentication message-digest
2886      area 0.0.0.0 range 10.0.0.0/16
2887      area 0.0.0.0 range 192.168.0.0/24
2888      area 0.0.0.1 authentication message-digest
2889      area 0.0.0.1 range 10.2.0.0/16
2890     !
2891
2892
2893File: quagga.info,  Node: OSPFv3,  Next: Babel,  Prev: OSPFv2,  Up: Top
2894
28958 OSPFv3
2896********
2897
2898`ospf6d' is a daemon support OSPF version 3 for IPv6 network.  OSPF for
2899IPv6 is described in RFC2740.
2900
2901* Menu:
2902
2903* OSPF6 router::
2904* OSPF6 area::
2905* OSPF6 interface::
2906* Redistribute routes to OSPF6::
2907* Showing OSPF6 information::
2908* OSPF6 Configuration Examples::
2909
2910
2911File: quagga.info,  Node: OSPF6 router,  Next: OSPF6 area,  Up: OSPFv3
2912
29138.1 OSPF6 router
2914================
2915
2916 -- Command: router ospf6
2917
2918 -- OSPF6 Command: router-id A.B.C.D
2919     Set router's Router-ID.
2920
2921 -- OSPF6 Command: interface IFNAME area AREA
2922     Bind interface to specified area, and start sending OSPF packets.
2923     AREA can be specified as 0.
2924
2925
2926File: quagga.info,  Node: OSPF6 area,  Next: OSPF6 interface,  Prev: OSPF6 router,  Up: OSPFv3
2927
29288.2 OSPF6 area
2929==============
2930
2931Area support for OSPFv3 is not yet implemented.
2932
2933
2934File: quagga.info,  Node: OSPF6 interface,  Next: Redistribute routes to OSPF6,  Prev: OSPF6 area,  Up: OSPFv3
2935
29368.3 OSPF6 interface
2937===================
2938
2939 -- Interface Command: ipv6 ospf6 cost COST
2940     Sets interface's output cost.  Default value is 1.
2941
2942 -- Interface Command: ipv6 ospf6 hello-interval HELLOINTERVAL
2943     Sets interface's Hello Interval.  Default 40
2944
2945 -- Interface Command: ipv6 ospf6 dead-interval DEADINTERVAL
2946     Sets interface's Router Dead Interval.  Default value is 40.
2947
2948 -- Interface Command: ipv6 ospf6 retransmit-interval
2949          RETRANSMITINTERVAL
2950     Sets interface's Rxmt Interval.  Default value is 5.
2951
2952 -- Interface Command: ipv6 ospf6 priority PRIORITY
2953     Sets interface's Router Priority.  Default value is 1.
2954
2955 -- Interface Command: ipv6 ospf6 transmit-delay TRANSMITDELAY
2956     Sets interface's Inf-Trans-Delay.  Default value is 1.
2957
2958
2959File: quagga.info,  Node: Redistribute routes to OSPF6,  Next: Showing OSPF6 information,  Prev: OSPF6 interface,  Up: OSPFv3
2960
29618.4 Redistribute routes to OSPF6
2962================================
2963
2964 -- OSPF6 Command: redistribute static
2965 -- OSPF6 Command: redistribute connected
2966 -- OSPF6 Command: redistribute ripng
2967
2968
2969File: quagga.info,  Node: Showing OSPF6 information,  Next: OSPF6 Configuration Examples,  Prev: Redistribute routes to OSPF6,  Up: OSPFv3
2970
29718.5 Showing OSPF6 information
2972=============================
2973
2974 -- Command: show ipv6 ospf6 [INSTANCE_ID]
2975     INSTANCE_ID is an optional OSPF instance ID. To see router ID and
2976     OSPF instance ID, simply type "show ipv6 ospf6 <cr>".
2977
2978 -- Command: show ipv6 ospf6 database
2979     This command shows LSA database summary.  You can specify the type
2980     of LSA.
2981
2982 -- Command: show ipv6 ospf6 interface
2983     To see OSPF interface configuration like costs.
2984
2985 -- Command: show ipv6 ospf6 neighbor
2986     Shows state and chosen (Backup) DR of neighbor.
2987
2988 -- Command: show ipv6 ospf6 request-list A.B.C.D
2989     Shows requestlist of neighbor.
2990
2991 -- Command: show ipv6 route ospf6
2992     This command shows internal routing table.
2993
2994
2995File: quagga.info,  Node: OSPF6 Configuration Examples,  Prev: Showing OSPF6 information,  Up: OSPFv3
2996
29978.6 OSPF6 Configuration Examples
2998================================
2999
3000Example of ospf6d configured on one interface and area:
3001
3002     interface eth0
3003      ipv6 ospf6 instance-id 0
3004     !
3005     router ospf6
3006      router-id 212.17.55.53
3007      area 0.0.0.0 range 2001:770:105:2::/64
3008      interface eth0 area 0.0.0.0
3009     !
3010
3011
3012File: quagga.info,  Node: Babel,  Next: BGP,  Prev: OSPFv3,  Up: Top
3013
30149 Babel
3015*******
3016
3017Babel is an interior gateway protocol that is suitable both for wired
3018networks and for wireless mesh networks.  Babel has been described as
3019"RIP on speed" -- it is based on the same principles as RIP, but
3020includes a number of refinements that make it react much faster to
3021topology changes without ever counting to infinity, and allow it to
3022perform reliable link quality estimation on wireless links.  Babel is a
3023double-stack routing protocol, meaning that a single Babel instance is
3024able to perform routing for both IPv4 and IPv6.
3025
3026   Quagga implements Babel as described in RFC6126.
3027
3028* Menu:
3029
3030* Configuring babeld::
3031* Babel configuration::
3032* Babel redistribution::
3033* Show Babel information::
3034* Babel debugging commands::
3035
3036
3037File: quagga.info,  Node: Configuring babeld,  Next: Babel configuration,  Prev: Babel,  Up: Babel
3038
30399.1 Configuring babeld
3040======================
3041
3042The `babeld' daemon can be invoked with any of the common options
3043(*note Common Invocation Options::).
3044
3045   The `zebra' daemon must be running before `babeld' is invoked. Also,
3046if `zebra' is restarted then `babeld' must be too.
3047
3048   Configuration of `babeld' is done in its configuration file
3049`babeld.conf'.
3050
3051
3052File: quagga.info,  Node: Babel configuration,  Next: Babel redistribution,  Prev: Configuring babeld,  Up: Babel
3053
30549.2 Babel configuration
3055=======================
3056
3057 -- Command: router babel
3058 -- Command: no router babel
3059     Enable or disable Babel routing.
3060
3061 -- Babel Command: network IFNAME
3062 -- Babel Command: no network IFNAME
3063     Enable or disable Babel on the given interface.
3064
3065 -- Interface Command: babel wired
3066 -- Interface Command: babel wireless
3067     Specifies whether this interface is wireless, which disables a
3068     number of optimisations that are only correct on wired interfaces.
3069     Specifying `wireless' (the default) is always correct, but may
3070     cause slower convergence and extra routing traffic.
3071
3072 -- Interface Command: babel split-horizon
3073 -- Interface Command: no babel split-horizon
3074     Specifies whether to perform split-horizon on the interface.
3075     Specifying `no babel split-horizon' (the default) is always
3076     correct, while `babel split-horizon' is an optimisation that
3077     should only be used on symmetric and transitive (wired) networks.
3078
3079 -- Interface Command: babel hello-interval <20-655340>
3080     Specifies the time in milliseconds between two scheduled hellos.
3081     On wired links, Babel notices a link failure within two hello
3082     intervals; on wireless links, the link quality value is
3083     reestimated at every hello interval.  The default is 4000ms.
3084
3085 -- Interface Command: babel update-interval <20-655340>
3086     Specifies the time in milliseconds between two scheduled updates.
3087     Since Babel makes extensive use of triggered updates, this can be
3088     set to fairly high values on links with little packet loss.  The
3089     default is 20000ms.
3090
3091 -- Babel Command: babel resend-delay <20-655340>
3092     Specifies the time in milliseconds after which an "important"
3093     request or update will be resent.  The default is 2000ms.  You
3094     probably don't want to tweak this value.
3095
3096
3097File: quagga.info,  Node: Babel redistribution,  Next: Show Babel information,  Prev: Babel configuration,  Up: Babel
3098
30999.3 Babel redistribution
3100========================
3101
3102 -- Babel command: redistribute KIND
3103 -- Babel command: no redistribute KIND
3104     Specify which kind of routes should be redistributed into Babel.
3105
3106
3107File: quagga.info,  Node: Show Babel information,  Next: Babel debugging commands,  Prev: Babel redistribution,  Up: Babel
3108
31099.4 Show Babel information
3110==========================
3111
3112 -- Command: show babel database
3113 -- Command: show babel interface
3114 -- Command: show babel neighbour
3115 -- Command: show babel parameters
3116     These commands dump various parts of `babeld''s internal state.
3117     They are mostly useful for troubleshooting.
3118
3119
3120File: quagga.info,  Node: Babel debugging commands,  Prev: Show Babel information,  Up: Babel
3121
31229.5 Babel debugging commands
3123============================
3124
3125 -- Babel Command: debug babel KIND
3126 -- Babel Command: no debug babel KIND
3127     Enable or disable debugging messages of a given kind.  KIND can be
3128     one of `common', `kernel', `filter', `timeout', `interface',
3129     `route' or `all'.  Note that if you have compiled with the
3130     NO_DEBUG flag, then these commands aren't available.
3131
3132
3133File: quagga.info,  Node: BGP,  Next: Configuring Quagga as a Route Server,  Prev: Babel,  Up: Top
3134
313510 BGP
3136******
3137
3138BGP stands for a Border Gateway Protocol.  The lastest BGP version is
31394.  It is referred as BGP-4.  BGP-4 is one of the Exterior Gateway
3140Protocols and de-fact standard of Inter Domain routing protocol.  BGP-4
3141is described in `RFC1771, A Border Gateway Protocol 4 (BGP-4)'.
3142
3143   Many extensions have been added to `RFC1771'.  `RFC2858,
3144Multiprotocol Extensions for BGP-4' provides multiprotocol support to
3145BGP-4.
3146
3147* Menu:
3148
3149* Starting BGP::
3150* BGP router::
3151* BGP network::
3152* BGP Peer::
3153* BGP Peer Group::
3154* BGP Address Family::
3155* Autonomous System::
3156* BGP Communities Attribute::
3157* BGP Extended Communities Attribute::
3158* Displaying BGP routes::
3159* Capability Negotiation::
3160* Route Reflector::
3161* Route Server::
3162* How to set up a 6-Bone connection::
3163* Dump BGP packets and table::
3164* BGP Configuration Examples::
3165
3166
3167File: quagga.info,  Node: Starting BGP,  Next: BGP router,  Up: BGP
3168
316910.1 Starting BGP
3170=================
3171
3172Default configuration file of `bgpd' is `bgpd.conf'.  `bgpd' searches
3173the current directory first then /etc/quagga/bgpd.conf.  All of bgpd's
3174command must be configured in `bgpd.conf'.
3175
3176   `bgpd' specific invocation options are described below.  Common
3177options may also be specified (*note Common Invocation Options::).
3178
3179`-p PORT'
3180`--bgp_port=PORT'
3181     Set the bgp protocol's port number.
3182
3183`-r'
3184`--retain'
3185     When program terminates, retain BGP routes added by zebra.
3186
3187
3188File: quagga.info,  Node: BGP router,  Next: BGP network,  Prev: Starting BGP,  Up: BGP
3189
319010.2 BGP router
3191===============
3192
3193First of all you must configure BGP router with `router bgp' command.
3194To configure BGP router, you need AS number.  AS number is an
3195identification of autonomous system.  BGP protocol uses the AS number
3196for detecting whether the BGP connection is internal one or external
3197one.
3198
3199 -- Command: router bgp ASN
3200     Enable a BGP protocol process with the specified ASN.  After this
3201     statement you can input any `BGP Commands'.  You can not create
3202     different BGP process under different ASN without specifying
3203     `multiple-instance' (*note Multiple instance::).
3204
3205 -- Command: no router bgp ASN
3206     Destroy a BGP protocol process with the specified ASN.
3207
3208 -- BGP: bgp router-id A.B.C.D
3209     This command specifies the router-ID.  If `bgpd' connects to
3210     `zebra' it gets interface and address information.  In that case
3211     default router ID value is selected as the largest IP Address of
3212     the interfaces.  When `router zebra' is not enabled `bgpd' can't
3213     get interface information so `router-id' is set to 0.0.0.0.  So
3214     please set router-id by hand.
3215
3216* Menu:
3217
3218* BGP distance::
3219* BGP decision process::
3220* BGP route flap dampening::
3221
3222
3223File: quagga.info,  Node: BGP distance,  Next: BGP decision process,  Up: BGP router
3224
322510.2.1 BGP distance
3226-------------------
3227
3228 -- BGP: distance bgp <1-255> <1-255> <1-255>
3229     This command change distance value of BGP.  Each argument is
3230     distance value for external routes, internal routes and local
3231     routes.
3232
3233 -- BGP: distance <1-255> A.B.C.D/M
3234 -- BGP: distance <1-255> A.B.C.D/M WORD
3235     This command set distance value to
3236
3237
3238File: quagga.info,  Node: BGP decision process,  Next: BGP route flap dampening,  Prev: BGP distance,  Up: BGP router
3239
324010.2.2 BGP decision process
3241---------------------------
3242
32431. Weight check
3244
32452. Local preference check.
3246
32473. Local route check.
3248
32494. AS path length check.
3250
32515. Origin check.
3252
32536. MED check.
3254
3255 -- BGP: bgp bestpath as-path confed
3256     This command specifies that the length of confederation path sets
3257     and sequences should should be taken into account during the BGP
3258     best path decision process.
3259
3260
3261File: quagga.info,  Node: BGP route flap dampening,  Prev: BGP decision process,  Up: BGP router
3262
326310.2.3 BGP route flap dampening
3264-------------------------------
3265
3266 -- BGP: bgp dampening <1-45> <1-20000> <1-20000> <1-255>
3267     This command enables BGP route-flap dampening and specifies
3268     dampening parameters.
3269
3270    half-life
3271          Half-life time for the penalty
3272
3273    reuse-threshold
3274          Value to start reusing a route
3275
3276    suppress-threshold
3277          Value to start suppressing a route
3278
3279    max-suppress
3280          Maximum duration to suppress a stable route
3281
3282     The route-flap damping algorithm is compatible with `RFC2439'. The
3283     use of this command is not recommended nowadays, see RIPE-378.
3284
3285
3286File: quagga.info,  Node: BGP network,  Next: BGP Peer,  Prev: BGP router,  Up: BGP
3287
328810.3 BGP network
3289================
3290
3291* Menu:
3292
3293* BGP route::
3294* Route Aggregation::
3295* Redistribute to BGP::
3296
3297
3298File: quagga.info,  Node: BGP route,  Next: Route Aggregation,  Up: BGP network
3299
330010.3.1 BGP route
3301----------------
3302
3303 -- BGP: network A.B.C.D/M
3304     This command adds the announcement network.
3305          router bgp 1
3306           network 10.0.0.0/8
3307     This configuration example says that network 10.0.0.0/8 will be
3308     announced to all neighbors.  Some vendors' routers don't advertise
3309     routes if they aren't present in their IGP routing tables; `bgpd'
3310     doesn't care about IGP routes when announcing its routes.
3311
3312 -- BGP: no network A.B.C.D/M
3313
3314
3315File: quagga.info,  Node: Route Aggregation,  Next: Redistribute to BGP,  Prev: BGP route,  Up: BGP network
3316
331710.3.2 Route Aggregation
3318------------------------
3319
3320 -- BGP: aggregate-address A.B.C.D/M
3321     This command specifies an aggregate address.
3322
3323 -- BGP: aggregate-address A.B.C.D/M as-set
3324     This command specifies an aggregate address.  Resulting routes
3325     inlucde AS set.
3326
3327 -- BGP: aggregate-address A.B.C.D/M summary-only
3328     This command specifies an aggregate address.  Aggreated routes will
3329     not be announce.
3330
3331 -- BGP: no aggregate-address A.B.C.D/M
3332
3333
3334File: quagga.info,  Node: Redistribute to BGP,  Prev: Route Aggregation,  Up: BGP network
3335
333610.3.3 Redistribute to BGP
3337--------------------------
3338
3339 -- BGP: redistribute kernel
3340     Redistribute kernel route to BGP process.
3341
3342 -- BGP: redistribute static
3343     Redistribute static route to BGP process.
3344
3345 -- BGP: redistribute connected
3346     Redistribute connected route to BGP process.
3347
3348 -- BGP: redistribute rip
3349     Redistribute RIP route to BGP process.
3350
3351 -- BGP: redistribute ospf
3352     Redistribute OSPF route to BGP process.
3353
3354
3355File: quagga.info,  Node: BGP Peer,  Next: BGP Peer Group,  Prev: BGP network,  Up: BGP
3356
335710.4 BGP Peer
3358=============
3359
3360* Menu:
3361
3362* Defining Peer::
3363* BGP Peer commands::
3364* Peer filtering::
3365
3366
3367File: quagga.info,  Node: Defining Peer,  Next: BGP Peer commands,  Up: BGP Peer
3368
336910.4.1 Defining Peer
3370--------------------
3371
3372 -- BGP: neighbor PEER remote-as ASN
3373     Creates a new neighbor whose remote-as is ASN.  PEER can be an
3374     IPv4 address or an IPv6 address.
3375          router bgp 1
3376           neighbor 10.0.0.1 remote-as 2
3377     In this case my router, in AS-1, is trying to peer with AS-2 at
3378     10.0.0.1.
3379
3380     This command must be the first command used when configuring a
3381     neighbor.  If the remote-as is not specified, `bgpd' will complain
3382     like this:
3383          can't find neighbor 10.0.0.1
3384
3385
3386File: quagga.info,  Node: BGP Peer commands,  Next: Peer filtering,  Prev: Defining Peer,  Up: BGP Peer
3387
338810.4.2 BGP Peer commands
3389------------------------
3390
3391In a `router bgp' clause there are neighbor specific configurations
3392required.
3393
3394 -- BGP: neighbor PEER shutdown
3395 -- BGP: no neighbor PEER shutdown
3396     Shutdown the peer.  We can delete the neighbor's configuration by
3397     `no neighbor PEER remote-as AS-NUMBER' but all configuration of
3398     the neighbor will be deleted.  When you want to preserve the
3399     configuration, but want to drop the BGP peer, use this syntax.
3400
3401 -- BGP: neighbor PEER ebgp-multihop
3402 -- BGP: no neighbor PEER ebgp-multihop
3403
3404 -- BGP: neighbor PEER description ...
3405 -- BGP: no neighbor PEER description ...
3406     Set description of the peer.
3407
3408 -- BGP: neighbor PEER version VERSION
3409     Set up the neighbor's BGP version.  VERSION can be 4, 4+ or 4-.
3410     BGP version 4 is the default value used for BGP peering.  BGP
3411     version 4+ means that the neighbor supports Multiprotocol
3412     Extensions for BGP-4.  BGP version 4- is similar but the neighbor
3413     speaks the old Internet-Draft revision 00's Multiprotocol
3414     Extensions for BGP-4.  Some routing software is still using this
3415     version.
3416
3417 -- BGP: neighbor PEER interface IFNAME
3418 -- BGP: no neighbor PEER interface IFNAME
3419     When you connect to a BGP peer over an IPv6 link-local address, you
3420     have to specify the IFNAME of the interface used for the
3421     connection. To specify IPv4 session addresses, see the `neighbor
3422     PEER update-source' command below.
3423
3424     This command is deprecated and may be removed in a future release.
3425     Its use should be avoided.
3426
3427 -- BGP: neighbor PEER next-hop-self
3428 -- BGP: no neighbor PEER next-hop-self
3429     This command specifies an announced route's nexthop as being
3430     equivalent to the address of the bgp router.
3431
3432 -- BGP: neighbor PEER update-source <IFNAME|ADDRESS>
3433 -- BGP: no neighbor PEER update-source
3434     Specify the IPv4 source address to use for the BGP session to this
3435     neighbour, may be specified as either an IPv4 address directly or
3436     as an interface name (in which case the `zebra' daemon MUST be
3437     running in order for `bgpd' to be able to retrieve interface
3438     state).
3439          router bgp 64555
3440           neighbor foo update-source 192.168.0.1
3441           neighbor bar update-source lo0
3442
3443 -- BGP: neighbor PEER default-originate
3444 -- BGP: no neighbor PEER default-originate
3445     `bgpd''s default is to not announce the default route (0.0.0.0/0)
3446     even it is in routing table.  When you want to announce default
3447     routes to the peer, use this command.
3448
3449 -- BGP: neighbor PEER port PORT
3450 -- BGP: neighbor PEER port PORT
3451
3452 -- BGP: neighbor PEER send-community
3453 -- BGP: neighbor PEER send-community
3454
3455 -- BGP: neighbor PEER weight WEIGHT
3456 -- BGP: no neighbor PEER weight WEIGHT
3457     This command specifies a default WEIGHT value for the neighbor's
3458     routes.
3459
3460 -- BGP: neighbor PEER maximum-prefix NUMBER
3461 -- BGP: no neighbor PEER maximum-prefix NUMBER
3462
3463 -- BGP: neighbor PEER local-as AS-NUMBER
3464 -- BGP: neighbor PEER local-as AS-NUMBER no-prepend
3465 -- BGP: neighbor PEER local-as AS-NUMBER no-prepend replace-as
3466 -- BGP: no neighbor PEER local-as
3467     Specify an alternate AS for this BGP process when interacting with
3468     the specified peer.  With no modifiers, the specified local-as is
3469     prepended to the received AS_PATH when receiving routing updates
3470     from the peer, and prepended to the outgoing AS_PATH (after the
3471     process local AS) when transmitting local routes to the peer.
3472
3473     If the no-prepend attribute is specified, then the supplied
3474     local-as is not prepended to the received AS_PATH.
3475
3476     If the replace-as attribute is specified, then only the supplied
3477     local-as is prepended to the AS_PATH when transmitting local-route
3478     updates to this peer.
3479
3480     Note that replace-as can only be specified if no-prepend is.
3481
3482     This command is only allowed for eBGP peers.
3483
3484
3485File: quagga.info,  Node: Peer filtering,  Prev: BGP Peer commands,  Up: BGP Peer
3486
348710.4.3 Peer filtering
3488---------------------
3489
3490 -- BGP: neighbor PEER distribute-list NAME [in|out]
3491     This command specifies a distribute-list for the peer.  DIRECT is
3492     `in' or `out'.
3493
3494 -- BGP command: neighbor PEER prefix-list NAME [in|out]
3495
3496 -- BGP command: neighbor PEER filter-list NAME [in|out]
3497
3498 -- BGP: neighbor PEER route-map NAME [in|out]
3499     Apply a route-map on the neighbor.  DIRECT must be `in' or `out'.
3500
3501
3502File: quagga.info,  Node: BGP Peer Group,  Next: BGP Address Family,  Prev: BGP Peer,  Up: BGP
3503
350410.5 BGP Peer Group
3505===================
3506
3507 -- BGP: neighbor WORD peer-group
3508     This command defines a new peer group.
3509
3510 -- BGP: neighbor PEER peer-group WORD
3511     This command bind specific peer to peer group WORD.
3512
3513
3514File: quagga.info,  Node: BGP Address Family,  Next: Autonomous System,  Prev: BGP Peer Group,  Up: BGP
3515
351610.6 BGP Address Family
3517=======================
3518
3519
3520File: quagga.info,  Node: Autonomous System,  Next: BGP Communities Attribute,  Prev: BGP Address Family,  Up: BGP
3521
352210.7 Autonomous System
3523======================
3524
3525The AS (Autonomous System) number is one of the essential element of
3526BGP.  BGP is a distance vector routing protocol, and the AS-Path
3527framework provides distance vector metric and loop detection to BGP.
3528`RFC1930, Guidelines for creation, selection, and registration of an
3529Autonomous System (AS)' provides some background on the concepts of an
3530AS.
3531
3532   The AS number is a two octet value, ranging in value from 1 to 65535.
3533The AS numbers 64512 through 65535 are defined as private AS numbers.
3534Private AS numbers must not to be advertised in the global Internet.
3535
3536* Menu:
3537
3538* AS Path Regular Expression::
3539* Display BGP Routes by AS Path::
3540* AS Path Access List::
3541* Using AS Path in Route Map::
3542* Private AS Numbers::
3543
3544
3545File: quagga.info,  Node: AS Path Regular Expression,  Next: Display BGP Routes by AS Path,  Up: Autonomous System
3546
354710.7.1 AS Path Regular Expression
3548---------------------------------
3549
3550AS path regular expression can be used for displaying BGP routes and AS
3551path access list.  AS path regular expression is based on `POSIX
35521003.2' regular expressions.  Following description is just a subset of
3553`POSIX' regular expression.  User can use full `POSIX' regular
3554expression.  Adding to that special character '_' is added for AS path
3555regular expression.
3556
3557`.'
3558     Matches any single character.
3559
3560`*'
3561     Matches 0 or more occurrences of pattern.
3562
3563`+'
3564     Matches 1 or more occurrences of pattern.
3565
3566`?'
3567     Match 0 or 1 occurrences of pattern.
3568
3569`^'
3570     Matches the beginning of the line.
3571
3572`$'
3573     Matches the end of the line.
3574
3575`_'
3576     Character `_' has special meanings in AS path regular expression.
3577     It matches to space and comma , and AS set delimiter { and } and AS
3578     confederation delimiter `(' and `)'.  And it also matches to the
3579     beginning of the line and the end of the line.  So `_' can be used
3580     for AS value boundaries match.  `show ip bgp regexp _7675_'
3581     matches to all of BGP routes which as AS number include 7675.
3582
3583
3584File: quagga.info,  Node: Display BGP Routes by AS Path,  Next: AS Path Access List,  Prev: AS Path Regular Expression,  Up: Autonomous System
3585
358610.7.2 Display BGP Routes by AS Path
3587------------------------------------
3588
3589To show BGP routes which has specific AS path information `show ip bgp'
3590command can be used.
3591
3592 -- Command: show ip bgp regexp LINE
3593     This commands display BGP routes that matches AS path regular
3594     expression LINE.
3595
3596
3597File: quagga.info,  Node: AS Path Access List,  Next: Using AS Path in Route Map,  Prev: Display BGP Routes by AS Path,  Up: Autonomous System
3598
359910.7.3 AS Path Access List
3600--------------------------
3601
3602AS path access list is user defined AS path.
3603
3604 -- Command: ip as-path access-list WORD {permit|deny} LINE
3605     This command defines a new AS path access list.
3606
3607 -- Command: no ip as-path access-list WORD
3608 -- Command: no ip as-path access-list WORD {permit|deny} LINE
3609
3610
3611File: quagga.info,  Node: Using AS Path in Route Map,  Next: Private AS Numbers,  Prev: AS Path Access List,  Up: Autonomous System
3612
361310.7.4 Using AS Path in Route Map
3614---------------------------------
3615
3616 -- Route Map: match as-path WORD
3617
3618 -- Route Map: set as-path prepend AS-PATH
3619
3620
3621File: quagga.info,  Node: Private AS Numbers,  Prev: Using AS Path in Route Map,  Up: Autonomous System
3622
362310.7.5 Private AS Numbers
3624-------------------------
3625
3626
3627File: quagga.info,  Node: BGP Communities Attribute,  Next: BGP Extended Communities Attribute,  Prev: Autonomous System,  Up: BGP
3628
362910.8 BGP Communities Attribute
3630==============================
3631
3632BGP communities attribute is widely used for implementing policy
3633routing.  Network operators can manipulate BGP communities attribute
3634based on their network policy.  BGP communities attribute is defined in
3635`RFC1997, BGP Communities Attribute' and `RFC1998, An Application of
3636the BGP Community Attribute in Multi-home Routing'.  It is an optional
3637transitive attribute, therefore local policy can travel through
3638different autonomous system.
3639
3640   Communities attribute is a set of communities values.  Each
3641communities value is 4 octet long.  The following format is used to
3642define communities value.
3643
3644`AS:VAL'
3645     This format represents 4 octet communities value.  `AS' is high
3646     order 2 octet in digit format.  `VAL' is low order 2 octet in
3647     digit format.  This format is useful to define AS oriented policy
3648     value.  For example, `7675:80' can be used when AS 7675 wants to
3649     pass local policy value 80 to neighboring peer.
3650
3651`internet'
3652     `internet' represents well-known communities value 0.
3653
3654`no-export'
3655     `no-export' represents well-known communities value `NO_EXPORT'
3656     (0xFFFFFF01).  All routes carry this value must not be advertised
3657     to outside a BGP confederation boundary.  If neighboring BGP peer
3658     is part of BGP confederation, the peer is considered as inside a
3659     BGP confederation boundary, so the route will be announced to the
3660     peer.
3661
3662`no-advertise'
3663     `no-advertise' represents well-known communities value
3664     `NO_ADVERTISE'
3665     (0xFFFFFF02).  All routes carry this value must not be advertise
3666     to other BGP peers.
3667
3668`local-AS'
3669     `local-AS' represents well-known communities value
3670     `NO_EXPORT_SUBCONFED' (0xFFFFFF03).  All routes carry this value
3671     must not be advertised to external BGP peers.  Even if the
3672     neighboring router is part of confederation, it is considered as
3673     external BGP peer, so the route will not be announced to the peer.
3674
3675   When BGP communities attribute is received, duplicated communities
3676value in the communities attribute is ignored and each communities
3677values are sorted in numerical order.
3678
3679* Menu:
3680
3681* BGP Community Lists::
3682* Numbered BGP Community Lists::
3683* BGP Community in Route Map::
3684* Display BGP Routes by Community::
3685* Using BGP Communities Attribute::
3686
3687
3688File: quagga.info,  Node: BGP Community Lists,  Next: Numbered BGP Community Lists,  Up: BGP Communities Attribute
3689
369010.8.1 BGP Community Lists
3691--------------------------
3692
3693BGP community list is a user defined BGP communites attribute list.
3694BGP community list can be used for matching or manipulating BGP
3695communities attribute in updates.
3696
3697   There are two types of community list.  One is standard community
3698list and another is expanded community list.  Standard community list
3699defines communities attribute.  Expanded community list defines
3700communities attribute string with regular expression.  Standard
3701community list is compiled into binary format when user define it.
3702Standard community list will be directly compared to BGP communities
3703attribute in BGP updates.  Therefore the comparison is faster than
3704expanded community list.
3705
3706 -- Command: ip community-list standard NAME {permit|deny} COMMUNITY
3707     This command defines a new standard community list.  COMMUNITY is
3708     communities value.  The COMMUNITY is compiled into community
3709     structure.  We can define multiple community list under same name.
3710     In that case match will happen user defined order.  Once the
3711     community list matches to communities attribute in BGP updates it
3712     return permit or deny by the community list definition.  When
3713     there is no matched entry, deny will be returned.  When COMMUNITY
3714     is empty it matches to any routes.
3715
3716 -- Command: ip community-list expanded NAME {permit|deny} LINE
3717     This command defines a new expanded community list.  LINE is a
3718     string expression of communities attribute.  LINE can include
3719     regular expression to match communities attribute in BGP updates.
3720
3721 -- Command: no ip community-list NAME
3722 -- Command: no ip community-list standard NAME
3723 -- Command: no ip community-list expanded NAME
3724     These commands delete community lists specified by NAME.  All of
3725     community lists shares a single name space.  So community lists
3726     can be removed simpley specifying community lists name.
3727
3728 -- Command: show ip community-list
3729 -- Command: show ip community-list NAME
3730     This command display current community list information.  When
3731     NAME is specified the specified community list's information is
3732     shown.
3733
3734          # show ip community-list
3735          Named Community standard list CLIST
3736              permit 7675:80 7675:100 no-export
3737              deny internet
3738          Named Community expanded list EXPAND
3739              permit :
3740
3741          # show ip community-list CLIST
3742          Named Community standard list CLIST
3743              permit 7675:80 7675:100 no-export
3744              deny internet
3745
3746
3747File: quagga.info,  Node: Numbered BGP Community Lists,  Next: BGP Community in Route Map,  Prev: BGP Community Lists,  Up: BGP Communities Attribute
3748
374910.8.2 Numbered BGP Community Lists
3750-----------------------------------
3751
3752When number is used for BGP community list name, the number has special
3753meanings.  Community list number in the range from 1 and 99 is standard
3754community list.  Community list number in the range from 100 to 199 is
3755expanded community list.  These community lists are called as numbered
3756community lists.  On the other hand normal community lists is called as
3757named community lists.
3758
3759 -- Command: ip community-list <1-99> {permit|deny} COMMUNITY
3760     This command defines a new community list.  <1-99> is standard
3761     community list number.  Community list name within this range
3762     defines standard community list.  When COMMUNITY is empty it
3763     matches to any routes.
3764
3765 -- Command: ip community-list <100-199> {permit|deny} COMMUNITY
3766     This command defines a new community list.  <100-199> is expanded
3767     community list number.  Community list name within this range
3768     defines expanded community list.
3769
3770 -- Command: ip community-list NAME {permit|deny} COMMUNITY
3771     When community list type is not specifed, the community list type
3772     is automatically detected.  If COMMUNITY can be compiled into
3773     communities attribute, the community list is defined as a standard
3774     community list.  Otherwise it is defined as an expanded community
3775     list.  This feature is left for backward compability.  Use of this
3776     feature is not recommended.
3777
3778
3779File: quagga.info,  Node: BGP Community in Route Map,  Next: Display BGP Routes by Community,  Prev: Numbered BGP Community Lists,  Up: BGP Communities Attribute
3780
378110.8.3 BGP Community in Route Map
3782---------------------------------
3783
3784In Route Map (*note Route Map::), we can match or set BGP communities
3785attribute.  Using this feature network operator can implement their
3786network policy based on BGP communities attribute.
3787
3788   Following commands can be used in Route Map.
3789
3790 -- Route Map: match community WORD
3791 -- Route Map: match community WORD exact-match
3792     This command perform match to BGP updates using community list
3793     WORD.  When the one of BGP communities value match to the one of
3794     communities value in community list, it is match.  When
3795     `exact-match' keyword is spcified, match happen only when BGP
3796     updates have completely same communities value specified in the
3797     community list.
3798
3799 -- Route Map: set community none
3800 -- Route Map: set community COMMUNITY
3801 -- Route Map: set community COMMUNITY additive
3802     This command manipulate communities value in BGP updates.  When
3803     `none' is specified as communities value, it removes entire
3804     communities attribute from BGP updates.  When COMMUNITY is not
3805     `none', specified communities value is set to BGP updates.  If BGP
3806     updates already has BGP communities value, the existing BGP
3807     communities value is replaced with specified COMMUNITY value.
3808     When `additive' keyword is specified, COMMUNITY is appended to the
3809     existing communities value.
3810
3811 -- Route Map: set comm-list WORD delete
3812     This command remove communities value from BGP communities
3813     attribute.  The WORD is community list name.  When BGP route's
3814     communities value matches to the community list WORD, the
3815     communities value is removed.  When all of communities value is
3816     removed eventually, the BGP update's communities attribute is
3817     completely removed.
3818
3819
3820File: quagga.info,  Node: Display BGP Routes by Community,  Next: Using BGP Communities Attribute,  Prev: BGP Community in Route Map,  Up: BGP Communities Attribute
3821
382210.8.4 Display BGP Routes by Community
3823--------------------------------------
3824
3825To show BGP routes which has specific BGP communities attribute, `show
3826ip bgp' command can be used.  The COMMUNITY value and community list
3827can be used for `show ip bgp' command.
3828
3829 -- Command: show ip bgp community
3830 -- Command: show ip bgp community COMMUNITY
3831 -- Command: show ip bgp community COMMUNITY exact-match
3832     `show ip bgp community' displays BGP routes which has communities
3833     attribute.  When COMMUNITY is specified, BGP routes that matches
3834     COMMUNITY value is displayed.  For this command, `internet'
3835     keyword can't be used for COMMUNITY value.  When `exact-match' is
3836     specified, it display only routes that have an exact match.
3837
3838 -- Command: show ip bgp community-list WORD
3839 -- Command: show ip bgp community-list WORD exact-match
3840     This commands display BGP routes that matches community list WORD.
3841     When `exact-match' is specified, display only routes that have an
3842     exact match.
3843
3844
3845File: quagga.info,  Node: Using BGP Communities Attribute,  Prev: Display BGP Routes by Community,  Up: BGP Communities Attribute
3846
384710.8.5 Using BGP Communities Attribute
3848--------------------------------------
3849
3850Following configuration is the most typical usage of BGP communities
3851attribute.  AS 7675 provides upstream Internet connection to AS 100.
3852When following configuration exists in AS 7675, AS 100 networks
3853operator can set local preference in AS 7675 network by setting BGP
3854communities attribute to the updates.
3855
3856     router bgp 7675
3857      neighbor 192.168.0.1 remote-as 100
3858      neighbor 192.168.0.1 route-map RMAP in
3859     !
3860     ip community-list 70 permit 7675:70
3861     ip community-list 70 deny
3862     ip community-list 80 permit 7675:80
3863     ip community-list 80 deny
3864     ip community-list 90 permit 7675:90
3865     ip community-list 90 deny
3866     !
3867     route-map RMAP permit 10
3868      match community 70
3869      set local-preference 70
3870     !
3871     route-map RMAP permit 20
3872      match community 80
3873      set local-preference 80
3874     !
3875     route-map RMAP permit 30
3876      match community 90
3877      set local-preference 90
3878
3879   Following configuration announce 10.0.0.0/8 from AS 100 to AS 7675.
3880The route has communities value 7675:80 so when above configuration
3881exists in AS 7675, announced route's local preference will be set to
3882value 80.
3883
3884     router bgp 100
3885      network 10.0.0.0/8
3886      neighbor 192.168.0.2 remote-as 7675
3887      neighbor 192.168.0.2 route-map RMAP out
3888     !
3889     ip prefix-list PLIST permit 10.0.0.0/8
3890     !
3891     route-map RMAP permit 10
3892      match ip address prefix-list PLIST
3893      set community 7675:80
3894
3895   Following configuration is an example of BGP route filtering using
3896communities attribute.  This configuration only permit BGP routes which
3897has BGP communities value 0:80 or 0:90.  Network operator can put
3898special internal communities value at BGP border router, then limit the
3899BGP routes announcement into the internal network.
3900
3901     router bgp 7675
3902      neighbor 192.168.0.1 remote-as 100
3903      neighbor 192.168.0.1 route-map RMAP in
3904     !
3905     ip community-list 1 permit 0:80 0:90
3906     !
3907     route-map RMAP permit in
3908      match community 1
3909
3910   Following exmaple filter BGP routes which has communities value 1:1.
3911When there is no match community-list returns deny.  To avoid filtering
3912all of routes, we need to define permit any at last.
3913
3914     router bgp 7675
3915      neighbor 192.168.0.1 remote-as 100
3916      neighbor 192.168.0.1 route-map RMAP in
3917     !
3918     ip community-list standard FILTER deny 1:1
3919     ip community-list standard FILTER permit
3920     !
3921     route-map RMAP permit 10
3922      match community FILTER
3923
3924   Communities value keyword `internet' has special meanings in
3925standard community lists.  In below example `internet' act as match
3926any.  It matches all of BGP routes even if the route does not have
3927communities attribute at all.  So community list `INTERNET' is same as
3928above example's `FILTER'.
3929
3930     ip community-list standard INTERNET deny 1:1
3931     ip community-list standard INTERNET permit internet
3932
3933   Following configuration is an example of communities value deletion.
3934With this configuration communities value 100:1 and 100:2 is removed
3935from BGP updates.  For communities value deletion, only `permit'
3936community-list is used.  `deny' community-list is ignored.
3937
3938     router bgp 7675
3939      neighbor 192.168.0.1 remote-as 100
3940      neighbor 192.168.0.1 route-map RMAP in
3941     !
3942     ip community-list standard DEL permit 100:1 100:2
3943     !
3944     route-map RMAP permit 10
3945      set comm-list DEL delete
3946
3947
3948File: quagga.info,  Node: BGP Extended Communities Attribute,  Next: Displaying BGP routes,  Prev: BGP Communities Attribute,  Up: BGP
3949
395010.9 BGP Extended Communities Attribute
3951=======================================
3952
3953BGP extended communities attribute is introduced with MPLS VPN/BGP
3954technology.  MPLS VPN/BGP expands capability of network infrastructure
3955to provide VPN functionality.  At the same time it requires a new
3956framework for policy routing.  With BGP Extended Communities Attribute
3957we can use Route Target or Site of Origin for implementing network
3958policy for MPLS VPN/BGP.
3959
3960   BGP Extended Communities Attribute is similar to BGP Communities
3961Attribute.  It is an optional transitive attribute.  BGP Extended
3962Communities Attribute can carry multiple Extended Community value.
3963Each Extended Community value is eight octet length.
3964
3965   BGP Extended Communities Attribute provides an extended range
3966compared with BGP Communities Attribute.  Adding to that there is a
3967type field in each value to provides community space structure.
3968
3969   There are two format to define Extended Community value.  One is AS
3970based format the other is IP address based format.
3971
3972`AS:VAL'
3973     This is a format to define AS based Extended Community value.
3974     `AS' part is 2 octets Global Administrator subfield in Extended
3975     Community value.  `VAL' part is 4 octets Local Administrator
3976     subfield.  `7675:100' represents AS 7675 policy value 100.
3977
3978`IP-Address:VAL'
3979     This is a format to define IP address based Extended Community
3980     value.  `IP-Address' part is 4 octets Global Administrator
3981     subfield.  `VAL' part is 2 octets Local Administrator subfield.
3982     `10.0.0.1:100' represents
3983
3984* Menu:
3985
3986* BGP Extended Community Lists::
3987* BGP Extended Communities in Route Map::
3988
3989
3990File: quagga.info,  Node: BGP Extended Community Lists,  Next: BGP Extended Communities in Route Map,  Up: BGP Extended Communities Attribute
3991
399210.9.1 BGP Extended Community Lists
3993-----------------------------------
3994
3995Expanded Community Lists is a user defined BGP Expanded Community Lists.
3996
3997 -- Command: ip extcommunity-list standard NAME {permit|deny}
3998EXTCOMMUNITY
3999     This command defines a new standard extcommunity-list.
4000     EXTCOMMUNITY is extended communities value.  The EXTCOMMUNITY is
4001     compiled into extended community structure.  We can define
4002     multiple extcommunity-list under same name.  In that case match
4003     will happen user defined order.  Once the extcommunity-list
4004     matches to extended communities attribute in BGP updates it return
4005     permit or deny based upon the extcommunity-list definition.  When
4006     there is no matched entry, deny will be returned.  When
4007     EXTCOMMUNITY is empty it matches to any routes.
4008
4009 -- Command: ip extcommunity-list expanded NAME {permit|deny} LINE
4010     This command defines a new expanded extcommunity-list.  LINE is a
4011     string expression of extended communities attribute.  LINE can
4012     include regular expression to match extended communities attribute
4013     in BGP updates.
4014
4015 -- Command: no ip extcommunity-list NAME
4016 -- Command: no ip extcommunity-list standard NAME
4017 -- Command: no ip extcommunity-list expanded NAME
4018     These commands delete extended community lists specified by NAME.
4019     All of extended community lists shares a single name space.  So
4020     extended community lists can be removed simpley specifying the
4021     name.
4022
4023 -- Command: show ip extcommunity-list
4024 -- Command: show ip extcommunity-list NAME
4025     This command display current extcommunity-list information.  When
4026     NAME is specified the community list's information is shown.
4027
4028          # show ip extcommunity-list
4029
4030
4031File: quagga.info,  Node: BGP Extended Communities in Route Map,  Prev: BGP Extended Community Lists,  Up: BGP Extended Communities Attribute
4032
403310.9.2 BGP Extended Communities in Route Map
4034--------------------------------------------
4035
4036 -- Route Map: match extcommunity WORD
4037
4038 -- Route Map: set extcommunity rt EXTCOMMUNITY
4039     This command set Route Target value.
4040
4041 -- Route Map: set extcommunity soo EXTCOMMUNITY
4042     This command set Site of Origin value.
4043
4044
4045File: quagga.info,  Node: Displaying BGP routes,  Next: Capability Negotiation,  Prev: BGP Extended Communities Attribute,  Up: BGP
4046
404710.10 Displaying BGP Routes
4048===========================
4049
4050* Menu:
4051
4052* Show IP BGP::
4053* More Show IP BGP::
4054
4055
4056File: quagga.info,  Node: Show IP BGP,  Next: More Show IP BGP,  Up: Displaying BGP routes
4057
405810.10.1 Show IP BGP
4059-------------------
4060
4061 -- Command: show ip bgp
4062 -- Command: show ip bgp A.B.C.D
4063 -- Command: show ip bgp X:X::X:X
4064     This command displays BGP routes.  When no route is specified it
4065     display all of IPv4 BGP routes.
4066
4067     BGP table version is 0, local router ID is 10.1.1.1
4068     Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
4069     Origin codes: i - IGP, e - EGP, ? - incomplete
4070
4071        Network          Next Hop            Metric LocPrf Weight Path
4072     *> 1.1.1.1/32       0.0.0.0                  0         32768 i
4073
4074     Total number of prefixes 1
4075
4076
4077File: quagga.info,  Node: More Show IP BGP,  Prev: Show IP BGP,  Up: Displaying BGP routes
4078
407910.10.2 More Show IP BGP
4080------------------------
4081
4082 -- Command: show ip bgp regexp LINE
4083     This command display BGP routes using AS path regular expression
4084     (*note Display BGP Routes by AS Path::).
4085
4086 -- Command: show ip bgp community COMMUNITY
4087 -- Command: show ip bgp community COMMUNITY exact-match
4088     This command display BGP routes using COMMUNITY (*note Display BGP
4089     Routes by Community::).
4090
4091 -- Command: show ip bgp community-list WORD
4092 -- Command: show ip bgp community-list WORD exact-match
4093     This command display BGP routes using community list (*note
4094     Display BGP Routes by Community::).
4095
4096 -- Command: show ip bgp summary
4097
4098 -- Command: show ip bgp neighbor [PEER]
4099
4100 -- Command: clear ip bgp PEER
4101     Clear peers which have addresses of X.X.X.X
4102
4103 -- Command: clear ip bgp PEER soft in
4104     Clear peer using soft reconfiguration.
4105
4106 -- Command: show ip bgp dampened-paths
4107     Display paths suppressed due to dampening
4108
4109 -- Command: show ip bgp flap-statistics
4110     Display flap statistics of routes
4111
4112 -- Command: show debug
4113
4114 -- Command: debug event
4115
4116 -- Command: debug update
4117
4118 -- Command: debug keepalive
4119
4120 -- Command: no debug event
4121
4122 -- Command: no debug update
4123
4124 -- Command: no debug keepalive
4125
4126
4127File: quagga.info,  Node: Capability Negotiation,  Next: Route Reflector,  Prev: Displaying BGP routes,  Up: BGP
4128
412910.11 Capability Negotiation
4130============================
4131
4132When adding IPv6 routing information exchange feature to BGP.  There
4133were some proposals.  IETF (Internet Engineering Task Force) IDR (Inter
4134Domain Routing) WG (Working group) adopted a proposal called
4135Multiprotocol Extension for BGP.  The specification is described in
4136`RFC2283'.  The protocol does not define new protocols.  It defines new
4137attributes to existing BGP.  When it is used exchanging IPv6 routing
4138information it is called BGP-4+.  When it is used for exchanging
4139multicast routing information it is called MBGP.
4140
4141   `bgpd' supports Multiprotocol Extension for BGP.  So if remote peer
4142supports the protocol, `bgpd' can exchange IPv6 and/or multicast
4143routing information.
4144
4145   Traditional BGP did not have the feature to detect remote peer's
4146capabilities, e.g. whether it can handle prefix types other than IPv4
4147unicast routes.  This was a big problem using Multiprotocol Extension
4148for BGP to operational network.  `RFC2842, Capabilities Advertisement
4149with BGP-4' adopted a feature called Capability Negotiation. `bgpd' use
4150this Capability Negotiation to detect the remote peer's capabilities.
4151If the peer is only configured as IPv4 unicast neighbor, `bgpd' does
4152not send these Capability Negotiation packets (at least not unless
4153other optional BGP features require capability negotation).
4154
4155   By default, Quagga will bring up peering with minimal common
4156capability for the both sides.  For example, local router has unicast
4157and multicast capabilitie and remote router has unicast capability.  In
4158this case, the local router will establish the connection with unicast
4159only capability. When there are no common capabilities, Quagga sends
4160Unsupported Capability error and then resets the connection.
4161
4162   If you want to completely match capabilities with remote peer.
4163Please use `strict-capability-match' command.
4164
4165 -- BGP: neighbor PEER strict-capability-match
4166 -- BGP: no neighbor PEER strict-capability-match
4167     Strictly compares remote capabilities and local capabilities.  If
4168     capabilities are different, send Unsupported Capability error then
4169     reset connection.
4170
4171   You may want to disable sending Capability Negotiation OPEN message
4172optional parameter to the peer when remote peer does not implement
4173Capability Negotiation.  Please use `dont-capability-negotiate' command
4174to disable the feature.
4175
4176 -- BGP: neighbor PEER dont-capability-negotiate
4177 -- BGP: no neighbor PEER dont-capability-negotiate
4178     Suppress sending Capability Negotiation as OPEN message optional
4179     parameter to the peer.  This command only affects the peer is
4180     configured other than IPv4 unicast configuration.
4181
4182   When remote peer does not have capability negotiation feature, remote
4183peer will not send any capabilities at all.  In that case, bgp
4184configures the peer with configured capabilities.
4185
4186   You may prefer locally configured capabilities more than the
4187negotiated capabilities even though remote peer sends capabilities.  If
4188the peer is configured by `override-capability', `bgpd' ignores
4189received capabilities then override negotiated capabilities with
4190configured values.
4191
4192 -- BGP: neighbor PEER override-capability
4193 -- BGP: no neighbor PEER override-capability
4194     Override the result of Capability Negotiation with local
4195     configuration.  Ignore remote peer's capability value.
4196
4197
4198File: quagga.info,  Node: Route Reflector,  Next: Route Server,  Prev: Capability Negotiation,  Up: BGP
4199
420010.12 Route Reflector
4201=====================
4202
4203 -- BGP: bgp cluster-id A.B.C.D
4204
4205 -- BGP: neighbor PEER route-reflector-client
4206 -- BGP: no neighbor PEER route-reflector-client
4207
4208
4209File: quagga.info,  Node: Route Server,  Next: How to set up a 6-Bone connection,  Prev: Route Reflector,  Up: BGP
4210
421110.13 Route Server
4212==================
4213
4214At an Internet Exchange point, many ISPs are connected to each other by
4215external BGP peering.  Normally these external BGP connection are done
4216by `full mesh' method.  As with internal BGP full mesh formation, this
4217method has a scaling problem.
4218
4219   This scaling problem is well known.  Route Server is a method to
4220resolve the problem.  Each ISP's BGP router only peers to Route Server.
4221Route Server serves as BGP information exchange to other BGP routers.
4222By applying this method, numbers of BGP connections is reduced from
4223O(n*(n-1)/2) to O(n).
4224
4225   Unlike normal BGP router, Route Server must have several routing
4226tables for managing different routing policies for each BGP speaker.
4227We call the routing tables as different `view's.  `bgpd' can work as
4228normal BGP router or Route Server or both at the same time.
4229
4230* Menu:
4231
4232* Multiple instance::
4233* BGP instance and view::
4234* Routing policy::
4235* Viewing the view::
4236
4237
4238File: quagga.info,  Node: Multiple instance,  Next: BGP instance and view,  Up: Route Server
4239
424010.13.1 Multiple instance
4241-------------------------
4242
4243To enable multiple view function of `bgpd', you must turn on multiple
4244instance feature beforehand.
4245
4246 -- Command: bgp multiple-instance
4247     Enable BGP multiple instance feature.  After this feature is
4248     enabled, you can make multiple BGP instances or multiple BGP views.
4249
4250 -- Command: no bgp multiple-instance
4251     Disable BGP multiple instance feature.  You can not disable this
4252     feature when BGP multiple instances or views exist.
4253
4254   When you want to make configuration more Cisco like one,
4255
4256 -- Command: bgp config-type cisco
4257     Cisco compatible BGP configuration output.
4258
4259   When bgp config-type cisco is specified,
4260
4261   "no synchronization" is displayed.  "no auto-summary" is displayed.
4262
4263   "network" and "aggregate-address" argument is displayed as "A.B.C.D
4264M.M.M.M"
4265
4266   Quagga: network 10.0.0.0/8 Cisco: network 10.0.0.0
4267
4268   Quagga: aggregate-address 192.168.0.0/24 Cisco: aggregate-address
4269192.168.0.0 255.255.255.0
4270
4271   Community attribute handling is also different.  If there is no
4272configuration is specified community attribute and extended community
4273attribute are sent to neighbor.  When user manually disable the feature
4274community attribute is not sent to the neighbor.  In case of `bgp
4275config-type cisco' is specified, community attribute is not sent to the
4276neighbor by default.  To send community attribute user has to specify
4277`neighbor A.B.C.D send-community' command.
4278
4279     !
4280     router bgp 1
4281      neighbor 10.0.0.1 remote-as 1
4282      no neighbor 10.0.0.1 send-community
4283     !
4284     router bgp 1
4285      neighbor 10.0.0.1 remote-as 1
4286      neighbor 10.0.0.1 send-community
4287     !
4288
4289 -- Command: bgp config-type zebra
4290     Quagga style BGP configuration.  This is default.
4291
4292
4293File: quagga.info,  Node: BGP instance and view,  Next: Routing policy,  Prev: Multiple instance,  Up: Route Server
4294
429510.13.2 BGP instance and view
4296-----------------------------
4297
4298BGP instance is a normal BGP process.  The result of route selection
4299goes to the kernel routing table.  You can setup different AS at the
4300same time when BGP multiple instance feature is enabled.
4301
4302 -- Command: router bgp AS-NUMBER
4303     Make a new BGP instance.  You can use arbitrary word for the NAME.
4304
4305     bgp multiple-instance
4306     !
4307     router bgp 1
4308      neighbor 10.0.0.1 remote-as 2
4309      neighbor 10.0.0.2 remote-as 3
4310     !
4311     router bgp 2
4312      neighbor 10.0.0.3 remote-as 4
4313      neighbor 10.0.0.4 remote-as 5
4314
4315   BGP view is almost same as normal BGP process. The result of route
4316selection does not go to the kernel routing table.  BGP view is only
4317for exchanging BGP routing information.
4318
4319 -- Command: router bgp AS-NUMBER view NAME
4320     Make a new BGP view.  You can use arbitrary word for the NAME.
4321     This view's route selection result does not go to the kernel
4322     routing table.
4323
4324   With this command, you can setup Route Server like below.
4325
4326     bgp multiple-instance
4327     !
4328     router bgp 1 view 1
4329      neighbor 10.0.0.1 remote-as 2
4330      neighbor 10.0.0.2 remote-as 3
4331     !
4332     router bgp 2 view 2
4333      neighbor 10.0.0.3 remote-as 4
4334      neighbor 10.0.0.4 remote-as 5
4335
4336
4337File: quagga.info,  Node: Routing policy,  Next: Viewing the view,  Prev: BGP instance and view,  Up: Route Server
4338
433910.13.3 Routing policy
4340----------------------
4341
4342You can set different routing policy for a peer.  For example, you can
4343set different filter for a peer.
4344
4345     bgp multiple-instance
4346     !
4347     router bgp 1 view 1
4348      neighbor 10.0.0.1 remote-as 2
4349      neighbor 10.0.0.1 distribute-list 1 in
4350     !
4351     router bgp 1 view 2
4352      neighbor 10.0.0.1 remote-as 2
4353      neighbor 10.0.0.1 distribute-list 2 in
4354
4355   This means BGP update from a peer 10.0.0.1 goes to both BGP view 1
4356and view 2.  When the update is inserted into view 1, distribute-list 1
4357is applied.  On the other hand, when the update is inserted into view 2,
4358distribute-list 2 is applied.
4359
4360
4361File: quagga.info,  Node: Viewing the view,  Prev: Routing policy,  Up: Route Server
4362
436310.13.4 Viewing the view
4364------------------------
4365
4366To display routing table of BGP view, you must specify view name.
4367
4368 -- Command: show ip bgp view NAME
4369     Display routing table of BGP view NAME.
4370
4371
4372File: quagga.info,  Node: How to set up a 6-Bone connection,  Next: Dump BGP packets and table,  Prev: Route Server,  Up: BGP
4373
437410.14 How to set up a 6-Bone connection
4375=======================================
4376
4377     zebra configuration
4378     ===================
4379     !
4380     ! Actually there is no need to configure zebra
4381     !
4382
4383     bgpd configuration
4384     ==================
4385     !
4386     ! This means that routes go through zebra and into the kernel.
4387     !
4388     router zebra
4389     !
4390     ! MP-BGP configuration
4391     !
4392     router bgp 7675
4393      bgp router-id 10.0.0.1
4394      neighbor 3ffe:1cfa:0:2:2a0:c9ff:fe9e:f56 remote-as AS-NUMBER
4395     !
4396      address-family ipv6
4397      network 3ffe:506::/32
4398      neighbor 3ffe:1cfa:0:2:2a0:c9ff:fe9e:f56 activate
4399      neighbor 3ffe:1cfa:0:2:2a0:c9ff:fe9e:f56 route-map set-nexthop out
4400      neighbor 3ffe:1cfa:0:2:2c0:4fff:fe68:a231 remote-as AS-NUMBER
4401      neighbor 3ffe:1cfa:0:2:2c0:4fff:fe68:a231 route-map set-nexthop out
4402      exit-address-family
4403     !
4404     ipv6 access-list all permit any
4405     !
4406     ! Set output nexthop address.
4407     !
4408     route-map set-nexthop permit 10
4409      match ipv6 address all
4410      set ipv6 nexthop global 3ffe:1cfa:0:2:2c0:4fff:fe68:a225
4411      set ipv6 nexthop local fe80::2c0:4fff:fe68:a225
4412     !
4413     ! logfile FILENAME is obsolete.  Please use log file FILENAME
4414
4415     log file bgpd.log
4416     !
4417
4418
4419File: quagga.info,  Node: Dump BGP packets and table,  Next: BGP Configuration Examples,  Prev: How to set up a 6-Bone connection,  Up: BGP
4420
442110.15 Dump BGP packets and table
4422================================
4423
4424 -- Command: dump bgp all PATH
4425 -- Command: dump bgp all PATH INTERVAL
4426     Dump all BGP packet and events to PATH file.
4427
4428 -- Command: dump bgp updates PATH
4429 -- Command: dump bgp updates PATH INTERVAL
4430     Dump BGP updates to PATH file.
4431
4432 -- Command: dump bgp routes PATH
4433 -- Command: dump bgp routes PATH
4434     Dump whole BGP routing table to PATH.  This is heavy process.
4435
4436
4437File: quagga.info,  Node: BGP Configuration Examples,  Prev: Dump BGP packets and table,  Up: BGP
4438
443910.16 BGP Configuration Examples
4440================================
4441
4442Example of a session to an upstream, advertising only one prefix to it.
4443
4444     router bgp 64512
4445      bgp router-id 10.236.87.1
4446      network 10.236.87.0/24
4447      neighbor upstream peer-group
4448      neighbor upstream remote-as 64515
4449      neighbor upstream capability dynamic
4450      neighbor upstream prefix-list pl-allowed-adv out
4451      neighbor 10.1.1.1 peer-group upstream
4452      neighbor 10.1.1.1 description ACME ISP
4453     !
4454     ip prefix-list pl-allowed-adv seq 5 permit 82.195.133.0/25
4455     ip prefix-list pl-allowed-adv seq 10 deny any
4456
4457   A more complex example. With upstream, peer and customer sessions.
4458Advertising global prefixes and NO_EXPORT prefixes and providing
4459actions for customer routes based on community values. Extensive use of
4460route-maps and the 'call' feature to support selective advertising of
4461prefixes. This example is intended as guidance only, it has NOT been
4462tested and almost certainly containts silly mistakes, if not serious
4463flaws.
4464
4465     router bgp 64512
4466      bgp router-id 10.236.87.1
4467      network 10.123.456.0/24
4468      network 10.123.456.128/25 route-map rm-no-export
4469      neighbor upstream capability dynamic
4470      neighbor upstream route-map rm-upstream-out out
4471      neighbor cust capability dynamic
4472      neighbor cust route-map rm-cust-in in
4473      neighbor cust route-map rm-cust-out out
4474      neighbor cust send-community both
4475      neighbor peer capability dynamic
4476      neighbor peer route-map rm-peer-in in
4477      neighbor peer route-map rm-peer-out out
4478      neighbor peer send-community both
4479      neighbor 10.1.1.1 remote-as 64515
4480      neighbor 10.1.1.1 peer-group upstream
4481      neighbor 10.2.1.1 remote-as 64516
4482      neighbor 10.2.1.1 peer-group upstream
4483      neighbor 10.3.1.1 remote-as 64517
4484      neighbor 10.3.1.1 peer-group cust-default
4485      neighbor 10.3.1.1 description customer1
4486      neighbor 10.3.1.1 prefix-list pl-cust1-network in
4487      neighbor 10.4.1.1 remote-as 64518
4488      neighbor 10.4.1.1 peer-group cust
4489      neighbor 10.4.1.1 prefix-list pl-cust2-network in
4490      neighbor 10.4.1.1 description customer2
4491      neighbor 10.5.1.1 remote-as 64519
4492      neighbor 10.5.1.1 peer-group peer
4493      neighbor 10.5.1.1 prefix-list pl-peer1-network in
4494      neighbor 10.5.1.1 description peer AS 1
4495      neighbor 10.6.1.1 remote-as 64520
4496      neighbor 10.6.1.1 peer-group peer
4497      neighbor 10.6.1.1 prefix-list pl-peer2-network in
4498      neighbor 10.6.1.1 description peer AS 2
4499     !
4500     ip prefix-list pl-default permit 0.0.0.0/0
4501     !
4502     ip prefix-list pl-upstream-peers permit 10.1.1.1/32
4503     ip prefix-list pl-upstream-peers permit 10.2.1.1/32
4504     !
4505     ip prefix-list pl-cust1-network permit 10.3.1.0/24
4506     ip prefix-list pl-cust1-network permit 10.3.2.0/24
4507     !
4508     ip prefix-list pl-cust2-network permit 10.4.1.0/24
4509     !
4510     ip prefix-list pl-peer1-network permit 10.5.1.0/24
4511     ip prefix-list pl-peer1-network permit 10.5.2.0/24
4512     ip prefix-list pl-peer1-network permit 192.168.0.0/24
4513     !
4514     ip prefix-list pl-peer2-network permit 10.6.1.0/24
4515     ip prefix-list pl-peer2-network permit 10.6.2.0/24
4516     ip prefix-list pl-peer2-network permit 192.168.1.0/24
4517     ip prefix-list pl-peer2-network permit 192.168.2.0/24
4518     ip prefix-list pl-peer2-network permit 172.16.1/24
4519     !
4520     ip as-path access-list asp-own-as permit ^$
4521     ip as-path access-list asp-own-as permit _64512_
4522     !
4523     ! #################################################################
4524     ! Match communities we provide actions for, on routes receives from
4525     ! customers. Communities values of <our-ASN>:X, with X, have actions:
4526     !
4527     ! 100 - blackhole the prefix
4528     ! 200 - set no_export
4529     ! 300 - advertise only to other customers
4530     ! 400 - advertise only to upstreams
4531     ! 500 - set no_export when advertising to upstreams
4532     ! 2X00 - set local_preference to X00
4533     !
4534     ! blackhole the prefix of the route
4535     ip community-list standard cm-blackhole permit 64512:100
4536     !
4537     ! set no-export community before advertising
4538     ip community-list standard cm-set-no-export permit 64512:200
4539     !
4540     ! advertise only to other customers
4541     ip community-list standard cm-cust-only permit 64512:300
4542     !
4543     ! advertise only to upstreams
4544     ip community-list standard cm-upstream-only permit 64512:400
4545     !
4546     ! advertise to upstreams with no-export
4547     ip community-list standard cm-upstream-noexport permit 64512:500
4548     !
4549     ! set local-pref to least significant 3 digits of the community
4550     ip community-list standard cm-prefmod-100 permit 64512:2100
4551     ip community-list standard cm-prefmod-200 permit 64512:2200
4552     ip community-list standard cm-prefmod-300 permit 64512:2300
4553     ip community-list standard cm-prefmod-400 permit 64512:2400
4554     ip community-list expanded cme-prefmod-range permit 64512:2...
4555     !
4556     ! Informational communities
4557     !
4558     ! 3000 - learned from upstream
4559     ! 3100 - learned from customer
4560     ! 3200 - learned from peer
4561     !
4562     ip community-list standard cm-learnt-upstream permit 64512:3000
4563     ip community-list standard cm-learnt-cust permit 64512:3100
4564     ip community-list standard cm-learnt-peer permit 64512:3200
4565     !
4566     ! ###################################################################
4567     ! Utility route-maps
4568     !
4569     ! These utility route-maps generally should not used to permit/deny
4570     ! routes, i.e. they do not have meaning as filters, and hence probably
4571     ! should be used with 'on-match next'. These all finish with an empty
4572     ! permit entry so as not interfere with processing in the caller.
4573     !
4574     route-map rm-no-export permit 10
4575      set community additive no-export
4576     route-map rm-no-export permit 20
4577     !
4578     route-map rm-blackhole permit 10
4579      description blackhole, up-pref and ensure it cant escape this AS
4580      set ip next-hop 127.0.0.1
4581      set local-preference 10
4582      set community additive no-export
4583     route-map rm-blackhole permit 20
4584     !
4585     ! Set local-pref as requested
4586     route-map rm-prefmod permit 10
4587      match community cm-prefmod-100
4588      set local-preference 100
4589     route-map rm-prefmod permit 20
4590      match community cm-prefmod-200
4591      set local-preference 200
4592     route-map rm-prefmod permit 30
4593      match community cm-prefmod-300
4594      set local-preference 300
4595     route-map rm-prefmod permit 40
4596      match community cm-prefmod-400
4597      set local-preference 400
4598     route-map rm-prefmod permit 50
4599     !
4600     ! Community actions to take on receipt of route.
4601     route-map rm-community-in permit 10
4602      description check for blackholing, no point continuing if it matches.
4603      match community cm-blackhole
4604      call rm-blackhole
4605     route-map rm-community-in permit 20
4606      match community cm-set-no-export
4607      call rm-no-export
4608      on-match next
4609     route-map rm-community-in permit 30
4610      match community cme-prefmod-range
4611      call rm-prefmod
4612     route-map rm-community-in permit 40
4613     !
4614     ! #####################################################################
4615     ! Community actions to take when advertising a route.
4616     ! These are filtering route-maps,
4617     !
4618     ! Deny customer routes to upstream with cust-only set.
4619     route-map rm-community-filt-to-upstream deny 10
4620      match community cm-learnt-cust
4621      match community cm-cust-only
4622     route-map rm-community-filt-to-upstream permit 20
4623     !
4624     ! Deny customer routes to other customers with upstream-only set.
4625     route-map rm-community-filt-to-cust deny 10
4626      match community cm-learnt-cust
4627      match community cm-upstream-only
4628     route-map rm-community-filt-to-cust permit 20
4629     !
4630     ! ###################################################################
4631     ! The top-level route-maps applied to sessions. Further entries could
4632     ! be added obviously..
4633     !
4634     ! Customers
4635     route-map rm-cust-in permit 10
4636      call rm-community-in
4637      on-match next
4638     route-map rm-cust-in permit 20
4639      set community additive 64512:3100
4640     route-map rm-cust-in permit 30
4641     !
4642     route-map rm-cust-out permit 10
4643      call rm-community-filt-to-cust
4644      on-match next
4645     route-map rm-cust-out permit 20
4646     !
4647     ! Upstream transit ASes
4648     route-map rm-upstream-out permit 10
4649      description filter customer prefixes which are marked cust-only
4650      call rm-community-filt-to-upstream
4651      on-match next
4652     route-map rm-upstream-out permit 20
4653      description only customer routes are provided to upstreams/peers
4654      match community cm-learnt-cust
4655     !
4656     ! Peer ASes
4657     ! outbound policy is same as for upstream
4658     route-map rm-peer-out permit 10
4659      call rm-upstream-out
4660     !
4661     route-map rm-peer-in permit 10
4662      set community additive 64512:3200
4663
4664
4665File: quagga.info,  Node: Configuring Quagga as a Route Server,  Next: VTY shell,  Prev: BGP,  Up: Top
4666
466711 Configuring Quagga as a Route Server
4668***************************************
4669
4670The purpose of a Route Server is to centralize the peerings between BGP
4671speakers. For example if we have an exchange point scenario with four
4672BGP speakers, each of which maintaining a BGP peering with the other
4673three (*note fig:full-mesh::), we can convert it into a centralized
4674scenario where each of the four establishes a single BGP peering
4675against the Route Server (*note fig:route-server::).
4676
4677   We will first describe briefly the Route Server model implemented by
4678Quagga.  We will explain the commands that have been added for
4679configuring that model. And finally we will show a full example of
4680Quagga configured as Route Server.
4681
4682* Menu:
4683
4684* Description of the Route Server model::
4685* Commands for configuring a Route Server::
4686* Example of Route Server Configuration::
4687
4688
4689File: quagga.info,  Node: Description of the Route Server model,  Next: Commands for configuring a Route Server,  Up: Configuring Quagga as a Route Server
4690
469111.1 Description of the Route Server model
4692==========================================
4693
4694First we are going to describe the normal processing that BGP
4695announcements suffer inside a standard BGP speaker, as shown in *note
4696fig:normal-processing::, it consists of three steps:
4697
4698   * When an announcement is received from some peer, the `In' filters
4699     configured for that peer are applied to the announcement. These
4700     filters can reject the announcement, accept it unmodified, or
4701     accept it with some of its attributes modified.
4702
4703   * The announcements that pass the `In' filters go into the Best Path
4704     Selection process, where they are compared to other announcements
4705     referred to the same destination that have been received from
4706     different peers (in case such other announcements exist). For each
4707     different destination, the announcement which is selected as the
4708     best is inserted into the BGP speaker's Loc-RIB.
4709
4710   * The routes which are inserted in the Loc-RIB are considered for
4711     announcement to all the peers (except the one from which the route
4712     came). This is done by passing the routes in the Loc-RIB through
4713     the `Out' filters corresponding to each peer. These filters can
4714     reject the route, accept it unmodified, or accept it with some of
4715     its attributes modified. Those routes which are accepted by the
4716     `Out' filters of a peer are announced to that peer.
4717
4718[image src="fig-normal-processing.png" alt="Normal announcement processing" text="
4719                  _______________________________
4720                 /    _________     _________    \\
4721From Peer A --->|(A)-|Best     |   |         |-[A]|--->To Peer A
4722From Peer B --->|(B)-|Path     |-->|Local-RIB|-[B]|--->To Peer B
4723From Peer C --->|(C)-|Selection|   |         |-[C]|--->To Peer C
4724From Peer D --->|(D)-|_________|   |_________|-[D]|--->To Peer D
4725                 \\_______________________________/
4726
4727Key:  (X) - 'In'  Filter applied to Peer X's announcements
4728      [X] - 'Out' Filter applied to announcements to Peer X
4729"]
4730
4731Figure 11.1: Announcement processing inside a "normal" BGP speaker
4732
4733[image src="fig_topologies_full.png" alt="Full Mesh BGP Topology" text="(RF1)--(RF2)
4734  | \\  / |
4735  |  \\/  |
4736  |  /\\  |
4737  | /  \\ |
4738(RF3)--(RF4)
4739"]
4740
4741Figure 11.2: Full Mesh
4742
4743[image src="fig_topologies_rs.png" alt="Route Server BGP Topology" text="(RF1)  (RF2)
4744    \\  /
4745    [RS]
4746    /  \\
4747(RF3)  (RF4)
4748"]
4749
4750Figure 11.3: Route Server and clients
4751
4752   Of course we want that the routing tables obtained in each of the
4753routers are the same when using the route server than when not. But as
4754a consequence of having a single BGP peering (against the route
4755server), the BGP speakers can no longer distinguish from/to which peer
4756each announce comes/goes.  This means that the routers connected to the
4757route server are not able to apply by themselves the same input/output
4758filters as in the full mesh scenario, so they have to delegate those
4759functions to the route server.
4760
4761   Even more, the "best path" selection must be also performed inside
4762the route server on behalf of its clients. The reason is that if, after
4763applying the filters of the announcer and the (potential) receiver, the
4764route server decides to send to some client two or more different
4765announcements referred to the same destination, the client will only
4766retain the last one, considering it as an implicit withdrawal of the
4767previous announcements for the same destination. This is the expected
4768behavior of a BGP speaker as defined in `RFC1771', and even though
4769there are some proposals of mechanisms that permit multiple paths for
4770the same destination to be sent through a single BGP peering, none are
4771currently supported by most existing BGP implementations.
4772
4773   As a consequence a route server must maintain additional information
4774and perform additional tasks for a RS-client that those necessary for
4775common BGP peerings. Essentially a route server must:
4776
4777   * Maintain a separated Routing Information Base (Loc-RIB) for each
4778     peer configured as RS-client, containing the routes selected as a
4779     result of the "Best Path Selection" process that is performed on
4780     behalf of that RS-client.
4781
4782   * Whenever it receives an announcement from a RS-client, it must
4783     consider it for the Loc-RIBs of the other RS-clients.
4784
4785        * This means that for each of them the route server must pass
4786          the announcement through the appropriate `Out' filter of the
4787          announcer.
4788
4789        * Then through the  appropriate `In' filter of the potential
4790          receiver.
4791
4792        * Only if the announcement is accepted by both filters it will
4793          be passed to the "Best Path Selection" process.
4794
4795        * Finally, it might go into the Loc-RIB of the receiver.
4796
4797   When we talk about the "appropriate" filter, both the announcer and
4798the receiver of the route must be taken into account. Suppose that the
4799route server receives an announcement from client A, and the route
4800server is considering it for the Loc-RIB of client B. The filters that
4801should be applied are the same that would be used in the full mesh
4802scenario, i.e., first the `Out' filter of router A for announcements
4803going to router B, and then the `In' filter of router B for
4804announcements coming from router A.
4805
4806   We call "Export Policy" of a RS-client to the set of `Out' filters
4807that the client would use if there was no route server. The same
4808applies for the "Import Policy" of a RS-client and the set of `In'
4809filters of the client if there was no route server.
4810
4811   It is also common to demand from a route server that it does not
4812modify some BGP attributes (next-hop, as-path and MED) that are usually
4813modified by standard BGP speakers before announcing a route.
4814
4815   The announcement processing model implemented by Quagga is shown in
4816*note fig:rs-processing::. The figure shows a mixture of RS-clients (B,
4817C and D) with normal BGP peers (A). There are some details that worth
4818additional comments:
4819
4820   * Announcements coming from a normal BGP peer are also considered
4821     for the Loc-RIBs of all the RS-clients. But logically they do not
4822     pass through any export policy.
4823
4824   * Those peers that are configured as RS-clients do not receive any
4825     announce from the `Main' Loc-RIB.
4826
4827   * Apart from import and export policies, `In' and `Out' filters can
4828     also be set for RS-clients. `In' filters might be useful when the
4829     route server has also normal BGP peers. On the other hand, `Out'
4830     filters for RS-clients are probably unnecessary, but we decided
4831     not to remove them as they do not hurt anybody (they can always be
4832     left empty).
4833
4834[image src="fig-rs-processing.png" alt="Route Server Processing Model" text="From Peer A
4835 | From RS-Client B
4836 |  | From RS-Client C
4837 |  |  | From RS-Client D
4838 |  |  |  |
4839 |  |  |  |           Main / Normal RIB
4840 |  |  |  |      ________________________________
4841 |  |  |  |     /    _________     _________     \\
4842 |  |  |  +--->|(D)-|Best     |   | Main    |     |
4843 |  |  +--|--->|(C)-|Path     |-->|Local-RIB|->[A]|--->To Peer A
4844 |  +--|--|--->|(B)-|Selection|   |         |     |
4845 +--|--|--|--->|(A)-|_________|   |_________|     |
4846 |  |  |  |     \\________________________________/
4847 |  |  |  |
4848 |  |  |  |          ________________________________
4849 |  |  |  |          /    _________     _________     \\
4850 |  |  |  +--->*D*->|{B}-|Best     |   |RS-Client|     |
4851 |  |  +--|--->*C*->|{B}-|Path     |-->|Local-RIB|->[B]|--->To RS-Client B
4852 |  |  |  |         |    |Selection|   |  for B  |     |
4853 +--|--|--|-------->|{B}-|_________|   |_________|     |
4854 |  |  |  |          \\________________________________/
4855 |  |  |  |
4856 |  |  |  |          ________________________________
4857 |  |  |  |          /    _________     _________     \\
4858 |  |  |  +--->*D*->|{C}-|Best     |   |RS-Client|     |
4859 |  |  |  |         |    |Path     |-->|Local-RIB|->[C]|--->To RS-Client C
4860 |  +--|--|--->*B*->|{C}-|Selection|   |  for C  |     |
4861 +--|--|--|-------->|{C}-|_________|   |_________|     |
4862 |  |  |             \\________________________________/
4863 |  |  |
4864 |  |  |              ________________________________
4865 |  |  |             /    _________     _________     \\
4866 |  |  |            |    |Best     |   |RS-Client|     |
4867 |  |  +------>*C*->|{D}-|Path     |-->|Local-RIB|->[D]|--->To RS-Client D
4868 |  +--------->*B*->|{D}-|Selection|   |  for D  |     |
4869 +----------------->|{D}-|_________|   |_________|     |
4870                     \\________________________________/
4871
4872
4873Key:  (X) - 'In'  Filter applied to Peer X's announcements before
4874            considering announcement for the normal main Local-RIB
4875      [X] - 'Out' Filter applied to announcements to Peer X
4876      *X* - 'Export' Filter of RS-Client X, to apply X's policies
4877            before its routes may be considered for other RS-Clients
4878            RIBs.
4879      {X} - 'Import' Filter of RS-Client X, to apply X's policies
4880            on routes before allowing them into X's RIB.
4881"]
4882
4883Figure 11.4: Announcement processing model implemented by the Route
4884Server
4885
4886
4887File: 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
4888
488911.2 Commands for configuring a Route Server
4890============================================
4891
4892Now we will describe the commands that have been added to quagga in
4893order to support the route server features.
4894
4895 -- Route-Server: neighbor PEER-GROUP route-server-client
4896 -- Route-Server: neighbor A.B.C.D route-server-client
4897 -- Route-Server: neighbor X:X::X:X route-server-client
4898     This command configures the peer given by PEER, A.B.C.D or
4899     X:X::X:X as an RS-client.
4900
4901     Actually this command is not new, it already existed in standard
4902     Quagga. It enables the transparent mode for the specified peer.
4903     This means that some BGP attributes (as-path, next-hop and MED) of
4904     the routes announced to that peer are not modified.
4905
4906     With the route server patch, this command, apart from setting the
4907     transparent mode, creates a new Loc-RIB dedicated to the specified
4908     peer (those named `Loc-RIB for X' in *note Figure 11.4:
4909     fig:rs-processing.). Starting from that moment, every announcement
4910     received by the route server will be also considered for the new
4911     Loc-RIB.
4912
4913 -- Route-Server: neigbor {A.B.C.D|X.X::X.X|peer-group} route-map WORD
4914{import|export}
4915     This set of commands can be used to specify the route-map that
4916     represents the Import or Export policy of a peer which is
4917     configured as a RS-client (with the previous command).
4918
4919 -- Route-Server: match peer {A.B.C.D|X:X::X:X}
4920     This is a new _match_ statement for use in route-maps, enabling
4921     them to describe import/export policies. As we said before, an
4922     import/export policy represents a set of input/output filters of
4923     the RS-client. This statement makes possible that a single
4924     route-map represents the full set of filters that a BGP speaker
4925     would use for its different peers in a non-RS scenario.
4926
4927     The _match peer_ statement has different semantics whether it is
4928     used inside an import or an export route-map. In the first case
4929     the statement matches if the address of the peer who sends the
4930     announce is the same that the address specified by
4931     {A.B.C.D|X:X::X:X}. For export route-maps it matches when
4932     {A.B.C.D|X:X::X:X} is the address of the RS-Client into whose
4933     Loc-RIB the announce is going to be inserted (how the same export
4934     policy is applied before different Loc-RIBs is shown in *note
4935     Figure 11.4: fig:rs-processing.).
4936
4937 -- Route-map Command: call WORD
4938     This command (also used inside a route-map) jumps into a different
4939     route-map, whose name is specified by WORD. When the called
4940     route-map finishes, depending on its result the original route-map
4941     continues or not. Apart from being useful for making import/export
4942     route-maps easier to write, this command can also be used inside
4943     any normal (in or out) route-map.
4944
4945
4946File: quagga.info,  Node: Example of Route Server Configuration,  Prev: Commands for configuring a Route Server,  Up: Configuring Quagga as a Route Server
4947
494811.3 Example of Route Server Configuration
4949==========================================
4950
4951Finally we are going to show how to configure a Quagga daemon to act as
4952a Route Server. For this purpose we are going to present a scenario
4953without route server, and then we will show how to use the
4954configurations of the BGP routers to generate the configuration of the
4955route server.
4956
4957   All the configuration files shown in this section have been taken
4958from scenarios which were tested using the VNUML tool VNUML
4959(http://www.dit.upm.es/vnuml).
4960
4961* Menu:
4962
4963* Configuration of the BGP routers without Route Server::
4964* Configuration of the BGP routers with Route Server::
4965* Configuration of the Route Server itself::
4966* Further considerations about Import and Export route-maps::
4967
4968
4969File: 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
4970
497111.3.1 Configuration of the BGP routers without Route Server
4972------------------------------------------------------------
4973
4974We will suppose that our initial scenario is an exchange point with
4975three BGP capable routers, named RA, RB and RC. Each of the BGP
4976speakers generates some routes (with the NETWORK command), and
4977establishes BGP peerings against the other two routers. These peerings
4978have In and Out route-maps configured, named like "PEER-X-IN" or
4979"PEER-X-OUT". For example the configuration file for router RA could be
4980the following:
4981
4982#Configuration for router 'RA'
4983!
4984hostname RA
4985password ****
4986!
4987router bgp 65001
4988  no bgp default ipv4-unicast
4989  neighbor 2001:0DB8::B remote-as 65002
4990  neighbor 2001:0DB8::C remote-as 65003
4991!
4992  address-family ipv6
4993    network 2001:0DB8:AAAA:1::/64
4994    network 2001:0DB8:AAAA:2::/64
4995    network 2001:0DB8:0000:1::/64
4996    network 2001:0DB8:0000:2::/64
4997
4998    neighbor 2001:0DB8::B activate
4999    neighbor 2001:0DB8::B soft-reconfiguration inbound
5000    neighbor 2001:0DB8::B route-map PEER-B-IN in
5001    neighbor 2001:0DB8::B route-map PEER-B-OUT out
5002
5003    neighbor 2001:0DB8::C activate
5004    neighbor 2001:0DB8::C soft-reconfiguration inbound
5005    neighbor 2001:0DB8::C route-map PEER-C-IN in
5006    neighbor 2001:0DB8::C route-map PEER-C-OUT out
5007  exit-address-family
5008!
5009ipv6 prefix-list COMMON-PREFIXES seq  5 permit 2001:0DB8:0000::/48 ge 64 le 64
5010ipv6 prefix-list COMMON-PREFIXES seq 10 deny any
5011!
5012ipv6 prefix-list PEER-A-PREFIXES seq  5 permit 2001:0DB8:AAAA::/48 ge 64 le 64
5013ipv6 prefix-list PEER-A-PREFIXES seq 10 deny any
5014!
5015ipv6 prefix-list PEER-B-PREFIXES seq  5 permit 2001:0DB8:BBBB::/48 ge 64 le 64
5016ipv6 prefix-list PEER-B-PREFIXES seq 10 deny any
5017!
5018ipv6 prefix-list PEER-C-PREFIXES seq  5 permit 2001:0DB8:CCCC::/48 ge 64 le 64
5019ipv6 prefix-list PEER-C-PREFIXES seq 10 deny any
5020!
5021route-map PEER-B-IN permit 10
5022  match ipv6 address prefix-list COMMON-PREFIXES
5023  set metric 100
5024route-map PEER-B-IN permit 20
5025  match ipv6 address prefix-list PEER-B-PREFIXES
5026  set community 65001:11111
5027!
5028route-map PEER-C-IN permit 10
5029  match ipv6 address prefix-list COMMON-PREFIXES
5030  set metric 200
5031route-map PEER-C-IN permit 20
5032  match ipv6 address prefix-list PEER-C-PREFIXES
5033  set community 65001:22222
5034!
5035route-map PEER-B-OUT permit 10
5036  match ipv6 address prefix-list PEER-A-PREFIXES
5037!
5038route-map PEER-C-OUT permit 10
5039  match ipv6 address prefix-list PEER-A-PREFIXES
5040!
5041line vty
5042!
5043
5044
5045File: 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
5046
504711.3.2 Configuration of the BGP routers with Route Server
5048---------------------------------------------------------
5049
5050To convert the initial scenario into one with route server, first we
5051must modify the configuration of routers RA, RB and RC. Now they must
5052not peer between them, but only with the route server. For example, RA's
5053configuration would turn into:
5054
5055# Configuration for router 'RA'
5056!
5057hostname RA
5058password ****
5059!
5060router bgp 65001
5061  no bgp default ipv4-unicast
5062  neighbor 2001:0DB8::FFFF remote-as 65000
5063!
5064  address-family ipv6
5065    network 2001:0DB8:AAAA:1::/64
5066    network 2001:0DB8:AAAA:2::/64
5067    network 2001:0DB8:0000:1::/64
5068    network 2001:0DB8:0000:2::/64
5069
5070    neighbor 2001:0DB8::FFFF activate
5071    neighbor 2001:0DB8::FFFF soft-reconfiguration inbound
5072  exit-address-family
5073!
5074line vty
5075!
5076
5077   Which is logically much simpler than its initial configuration, as
5078it now maintains only one BGP peering and all the filters (route-maps)
5079have disappeared.
5080
5081
5082File: 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
5083
508411.3.3 Configuration of the Route Server itself
5085-----------------------------------------------
5086
5087As we said when we described the functions of a route server (*note
5088Description of the Route Server model::), it is in charge of all the
5089route filtering. To achieve that, the In and Out filters from the RA,
5090RB and RC configurations must be converted into Import and Export
5091policies in the route server.
5092
5093   This is a fragment of the route server configuration (we only show
5094the policies for client RA):
5095
5096# Configuration for Route Server ('RS')
5097!
5098hostname RS
5099password ix
5100!
5101bgp multiple-instance
5102!
5103router bgp 65000 view RS
5104  no bgp default ipv4-unicast
5105  neighbor 2001:0DB8::A  remote-as 65001
5106  neighbor 2001:0DB8::B  remote-as 65002
5107  neighbor 2001:0DB8::C  remote-as 65003
5108!
5109  address-family ipv6
5110    neighbor 2001:0DB8::A activate
5111    neighbor 2001:0DB8::A route-server-client
5112    neighbor 2001:0DB8::A route-map RSCLIENT-A-IMPORT import
5113    neighbor 2001:0DB8::A route-map RSCLIENT-A-EXPORT export
5114    neighbor 2001:0DB8::A soft-reconfiguration inbound
5115
5116    neighbor 2001:0DB8::B activate
5117    neighbor 2001:0DB8::B route-server-client
5118    neighbor 2001:0DB8::B route-map RSCLIENT-B-IMPORT import
5119    neighbor 2001:0DB8::B route-map RSCLIENT-B-EXPORT export
5120    neighbor 2001:0DB8::B soft-reconfiguration inbound
5121
5122    neighbor 2001:0DB8::C activate
5123    neighbor 2001:0DB8::C route-server-client
5124    neighbor 2001:0DB8::C route-map RSCLIENT-C-IMPORT import
5125    neighbor 2001:0DB8::C route-map RSCLIENT-C-EXPORT export
5126    neighbor 2001:0DB8::C soft-reconfiguration inbound
5127  exit-address-family
5128!
5129ipv6 prefix-list COMMON-PREFIXES seq  5 permit 2001:0DB8:0000::/48 ge 64 le 64
5130ipv6 prefix-list COMMON-PREFIXES seq 10 deny any
5131!
5132ipv6 prefix-list PEER-A-PREFIXES seq  5 permit 2001:0DB8:AAAA::/48 ge 64 le 64
5133ipv6 prefix-list PEER-A-PREFIXES seq 10 deny any
5134!
5135ipv6 prefix-list PEER-B-PREFIXES seq  5 permit 2001:0DB8:BBBB::/48 ge 64 le 64
5136ipv6 prefix-list PEER-B-PREFIXES seq 10 deny any
5137!
5138ipv6 prefix-list PEER-C-PREFIXES seq  5 permit 2001:0DB8:CCCC::/48 ge 64 le 64
5139ipv6 prefix-list PEER-C-PREFIXES seq 10 deny any
5140!
5141route-map RSCLIENT-A-IMPORT permit 10
5142  match peer 2001:0DB8::B
5143  call A-IMPORT-FROM-B
5144route-map RSCLIENT-A-IMPORT permit 20
5145  match peer 2001:0DB8::C
5146  call A-IMPORT-FROM-C
5147!
5148route-map A-IMPORT-FROM-B permit 10
5149  match ipv6 address prefix-list COMMON-PREFIXES
5150  set metric 100
5151route-map A-IMPORT-FROM-B permit 20
5152  match ipv6 address prefix-list PEER-B-PREFIXES
5153  set community 65001:11111
5154!
5155route-map A-IMPORT-FROM-C permit 10
5156  match ipv6 address prefix-list COMMON-PREFIXES
5157  set metric 200
5158route-map A-IMPORT-FROM-C permit 20
5159  match ipv6 address prefix-list PEER-C-PREFIXES
5160  set community 65001:22222
5161!
5162route-map RSCLIENT-A-EXPORT permit 10
5163  match peer 2001:0DB8::B
5164  match ipv6 address prefix-list PEER-A-PREFIXES
5165route-map RSCLIENT-A-EXPORT permit 20
5166  match peer 2001:0DB8::C
5167  match ipv6 address prefix-list PEER-A-PREFIXES
5168!
5169...
5170...
5171...
5172
5173   If you compare the initial configuration of RA with the route server
5174configuration above, you can see how easy it is to generate the Import
5175and Export policies for RA from the In and Out route-maps of RA's
5176original configuration.
5177
5178   When there was no route server, RA maintained two peerings, one with
5179RB and another with RC. Each of this peerings had an In route-map
5180configured. To build the Import route-map for client RA in the route
5181server, simply add route-map entries following this scheme:
5182
5183route-map <NAME> permit 10
5184    match peer <Peer Address>
5185    call <In Route-Map for this Peer>
5186route-map <NAME> permit 20
5187    match peer <Another Peer Address>
5188    call <In Route-Map for this Peer>
5189
5190   This is exactly the process that has been followed to generate the
5191route-map RSCLIENT-A-IMPORT. The route-maps that are called inside it
5192(A-IMPORT-FROM-B and A-IMPORT-FROM-C) are exactly the same than the In
5193route-maps from the original configuration of RA (PEER-B-IN and
5194PEER-C-IN), only the name is different.
5195
5196   The same could have been done to create the Export policy for RA
5197(route-map RSCLIENT-A-EXPORT), but in this case the original Out
5198route-maps where so simple that we decided not to use the CALL WORD
5199commands, and we integrated all in a single route-map
5200(RSCLIENT-A-EXPORT).
5201
5202   The Import and Export policies for RB and RC are not shown, but the
5203process would be identical.
5204
5205
5206File: quagga.info,  Node: Further considerations about Import and Export route-maps,  Prev: Configuration of the Route Server itself,  Up: Example of Route Server Configuration
5207
520811.3.4 Further considerations about Import and Export route-maps
5209----------------------------------------------------------------
5210
5211The current version of the route server patch only allows to specify a
5212route-map for import and export policies, while in a standard BGP
5213speaker apart from route-maps there are other tools for performing
5214input and output filtering (access-lists, community-lists, ...). But
5215this does not represent any limitation, as all kinds of filters can be
5216included in import/export route-maps. For example suppose that in the
5217non-route-server scenario peer RA had the following filters configured
5218for input from peer B:
5219
5220    neighbor 2001:0DB8::B prefix-list LIST-1 in
5221    neighbor 2001:0DB8::B filter-list LIST-2 in
5222    neighbor 2001:0DB8::B route-map PEER-B-IN in
5223    ...
5224    ...
5225route-map PEER-B-IN permit 10
5226  match ipv6 address prefix-list COMMON-PREFIXES
5227  set local-preference 100
5228route-map PEER-B-IN permit 20
5229  match ipv6 address prefix-list PEER-B-PREFIXES
5230  set community 65001:11111
5231
5232   It is posible to write a single route-map which is equivalent to the
5233three filters (the community-list, the prefix-list and the route-map).
5234That route-map can then be used inside the Import policy in the route
5235server. Lets see how to do it:
5236
5237    neighbor 2001:0DB8::A route-map RSCLIENT-A-IMPORT import
5238    ...
5239!
5240...
5241route-map RSCLIENT-A-IMPORT permit 10
5242  match peer 2001:0DB8::B
5243  call A-IMPORT-FROM-B
5244...
5245...
5246!
5247route-map A-IMPORT-FROM-B permit 1
5248  match ipv6 address prefix-list LIST-1
5249  match as-path LIST-2
5250  on-match goto 10
5251route-map A-IMPORT-FROM-B deny 2
5252route-map A-IMPORT-FROM-B permit 10
5253  match ipv6 address prefix-list COMMON-PREFIXES
5254  set local-preference 100
5255route-map A-IMPORT-FROM-B permit 20
5256  match ipv6 address prefix-list PEER-B-PREFIXES
5257  set community 65001:11111
5258!
5259...
5260...
5261
5262   The route-map A-IMPORT-FROM-B is equivalent to the three filters
5263(LIST-1, LIST-2 and PEER-B-IN). The first entry of route-map
5264A-IMPORT-FROM-B (sequence number 1) matches if and only if both the
5265prefix-list LIST-1 and the filter-list LIST-2 match. If that happens,
5266due to the "on-match goto 10" statement the next route-map entry to be
5267processed will be number 10, and as of that point route-map
5268A-IMPORT-FROM-B is identical to PEER-B-IN. If the first entry does not
5269match, `on-match goto 10" will be ignored and the next processed entry
5270will be number 2, which will deny the route.
5271
5272   Thus, the result is the same that with the three original filters,
5273i.e., if either LIST-1 or LIST-2 rejects the route, it does not reach
5274the route-map PEER-B-IN. In case both LIST-1 and LIST-2 accept the
5275route, it passes to PEER-B-IN, which can reject, accept or modify the
5276route.
5277
5278
5279File: quagga.info,  Node: VTY shell,  Next: Filtering,  Prev: Configuring Quagga as a Route Server,  Up: Top
5280
528112 VTY shell
5282************
5283
5284`vtysh' is integrated shell of Quagga software.
5285
5286   To use vtysh please specify --enable-vtysh to configure script.  To
5287use PAM for authentication use --with-libpam option to configure script.
5288
5289   vtysh only searches /etc/quagga path for vtysh.conf which is the
5290vtysh configuration file.  Vtysh does not search current directory for
5291configuration file because the file includes user authentication
5292settings.
5293
5294   Currently, vtysh.conf has only two commands.
5295
5296* Menu:
5297
5298* VTY shell username::
5299* VTY shell integrated configuration::
5300
5301
5302File: quagga.info,  Node: VTY shell username,  Next: VTY shell integrated configuration,  Up: VTY shell
5303
530412.1 VTY shell username
5305=======================
5306
5307 -- Command: username USERNAME nopassword
5308     With this set, user foo does not need password authentication for
5309     user vtysh.  With PAM vtysh uses PAM authentication mechanism.
5310
5311     If vtysh is compiled without PAM authentication, every user can
5312     use vtysh without authentication. vtysh requires read/write
5313     permission to the various daemons vty sockets, this can be
5314     accomplished through use of unix groups and the -enable-vty-group
5315     configure option.
5316
5317
5318
5319File: quagga.info,  Node: VTY shell integrated configuration,  Prev: VTY shell username,  Up: VTY shell
5320
532112.2 VTY shell integrated configuration
5322=======================================
5323
5324 -- Command: service integrated-vtysh-config
5325     Write out integrated Quagga.conf file when 'write file' is issued.
5326
5327     This command controls the behaviour of vtysh when it is told to
5328     write out the configuration.  Per default, vtysh will instruct
5329     each daemon to write out their own config files when `write file'
5330     is issued.  However, if `service integrated-vtysh-config' is set,
5331     when `write file' is issued, vtysh will instruct the daemons will
5332     write out a Quagga.conf with all daemons' commands integrated into
5333     it.
5334
5335     Vtysh per default behaves as if `write-conf daemon' is set. Note
5336     that both may be set at same time if one wishes to have both
5337     Quagga.conf and daemon specific files written out. Further, note
5338     that the daemons are hard-coded to first look for the integrated
5339     Quagga.conf file before looking for their own file.
5340
5341     We recommend you do not mix the use of the two types of files.
5342     Further, it is better not to use the integrated Quagga.conf file,
5343     as any syntax error in it can lead to /all/ of your daemons being
5344     unable to start up. Per daemon files are more robust as impact of
5345     errors in configuration are limited to the daemon in whose file
5346     the error is made.
5347
5348
5349
5350File: quagga.info,  Node: Filtering,  Next: Route Map,  Prev: VTY shell,  Up: Top
5351
535213 Filtering
5353************
5354
5355Quagga provides many very flexible filtering features.  Filtering is
5356used for both input and output of the routing information.  Once
5357filtering is defined, it can be applied in any direction.
5358
5359* Menu:
5360
5361* IP Access List::
5362* IP Prefix List::
5363
5364
5365File: quagga.info,  Node: IP Access List,  Next: IP Prefix List,  Up: Filtering
5366
536713.1 IP Access List
5368===================
5369
5370 -- Command: access-list NAME permit IPV4-NETWORK
5371 -- Command: access-list NAME deny IPV4-NETWORK
5372
5373   Basic filtering is done by `access-list' as shown in the following
5374example.
5375
5376access-list filter deny 10.0.0.0/9
5377access-list filter permit 10.0.0.0/8
5378
5379
5380File: quagga.info,  Node: IP Prefix List,  Prev: IP Access List,  Up: Filtering
5381
538213.2 IP Prefix List
5383===================
5384
5385`ip prefix-list' provides the most powerful prefix based filtering
5386mechanism.  In addition to `access-list' functionality, `ip
5387prefix-list' has prefix length range specification and sequential
5388number specification.  You can add or delete prefix based filters to
5389arbitrary points of prefix-list using sequential number specification.
5390
5391   If no ip prefix-list is specified, it acts as permit.  If `ip
5392prefix-list' is defined, and no match is found, default deny is applied.
5393
5394 -- Command: ip prefix-list NAME (permit|deny) PREFIX [le LEN] [ge LEN]
5395 -- Command: ip prefix-list NAME seq NUMBER (permit|deny) PREFIX [le
5396LEN] [ge LEN]
5397     You can create `ip prefix-list' using above commands.
5398
5399    seq
5400          seq NUMBER can be set either automatically or manually.  In
5401          the case that sequential numbers are set manually, the user
5402          may pick any number less than 4294967295.  In the case that
5403          sequential number are set automatically, the sequential
5404          number will increase by a unit of five (5) per list.  If a
5405          list with no specified sequential number is created after a
5406          list with a specified sequential number, the list will
5407          automatically pick the next multiple of five (5) as the list
5408          number.  For example, if a list with number 2 already exists
5409          and a new list with no specified number is created, the next
5410          list will be numbered 5.  If lists 2 and 7 already exist and
5411          a new list with no specified number is created, the new list
5412          will be numbered 10.
5413
5414    le
5415          `le' command specifies prefix length.  The prefix list will be
5416          applied if the prefix length is less than or equal to the le
5417          prefix length.
5418
5419    ge
5420          `ge' command specifies prefix length.  The prefix list will be
5421          applied if the prefix length is greater than or equal to the
5422          ge prefix length.
5423
5424
5425
5426   Less than or equal to prefix numbers and greater than or equal to
5427prefix numbers can be used together.  The order of the le and ge
5428commands does not matter.
5429
5430   If a prefix list with a different sequential number but with the
5431exact same rules as a previous list is created, an error will result.
5432However, in the case that the sequential number and the rules are
5433exactly similar, no error will result.
5434
5435   If a list with the same sequential number as a previous list is
5436created, the new list will overwrite the old list.
5437
5438   Matching of IP Prefix is performed from the smaller sequential
5439number to the larger.  The matching will stop once any rule has been
5440applied.
5441
5442   In the case of no le or ge command, the prefix length must match
5443exactly the length specified in the prefix list.
5444
5445 -- Command: no ip prefix-list NAME
5446
5447* Menu:
5448
5449* ip prefix-list description::
5450* ip prefix-list sequential number control::
5451* Showing ip prefix-list::
5452* Clear counter of ip prefix-list::
5453
5454
5455File: quagga.info,  Node: ip prefix-list description,  Next: ip prefix-list sequential number control,  Up: IP Prefix List
5456
545713.2.1 ip prefix-list description
5458---------------------------------
5459
5460 -- Command: ip prefix-list NAME description DESC
5461     Descriptions may be added to prefix lists.  This command adds a
5462     description to the prefix list.
5463
5464 -- Command: no ip prefix-list NAME description [DESC]
5465     Deletes the description from a prefix list.  It is possible to use
5466     the command without the full description.
5467
5468
5469File: quagga.info,  Node: ip prefix-list sequential number control,  Next: Showing ip prefix-list,  Prev: ip prefix-list description,  Up: IP Prefix List
5470
547113.2.2 ip prefix-list sequential number control
5472-----------------------------------------------
5473
5474 -- Command: ip prefix-list sequence-number
5475     With this command, the IP prefix list sequential number is
5476     displayed.  This is the default behavior.
5477
5478 -- Command: no ip prefix-list sequence-number
5479     With this command, the IP prefix list sequential number is not
5480     displayed.
5481
5482
5483File: 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
5484
548513.2.3 Showing ip prefix-list
5486-----------------------------
5487
5488 -- Command: show ip prefix-list
5489     Display all IP prefix lists.
5490
5491 -- Command: show ip prefix-list NAME
5492     Show IP prefix list can be used with a prefix list name.
5493
5494 -- Command: show ip prefix-list NAME seq NUM
5495     Show IP prefix list can be used with a prefix list name and
5496     sequential number.
5497
5498 -- Command: show ip prefix-list NAME A.B.C.D/M
5499     If the command longer is used, all prefix lists with prefix
5500     lengths equal to or longer than the specified length will be
5501     displayed.  If the command first match is used, the first prefix
5502     length match will be displayed.
5503
5504 -- Command: show ip prefix-list NAME A.B.C.D/M longer
5505
5506 -- Command: show ip prefix-list NAME A.B.C.D/M first-match
5507
5508 -- Command: show ip prefix-list summary
5509
5510 -- Command: show ip prefix-list summary NAME
5511
5512 -- Command: show ip prefix-list detail
5513
5514 -- Command: show ip prefix-list detail NAME
5515
5516
5517File: quagga.info,  Node: Clear counter of ip prefix-list,  Prev: Showing ip prefix-list,  Up: IP Prefix List
5518
551913.2.4 Clear counter of ip prefix-list
5520--------------------------------------
5521
5522 -- Command: clear ip prefix-list
5523     Clears the counters of all IP prefix lists.  Clear IP Prefix List
5524     can be used with a specified name and prefix.
5525
5526 -- Command: clear ip prefix-list NAME
5527
5528 -- Command: clear ip prefix-list NAME A.B.C.D/M
5529
5530
5531File: quagga.info,  Node: Route Map,  Next: IPv6 Support,  Prev: Filtering,  Up: Top
5532
553314 Route Map
5534************
5535
5536Route maps provide a means to both filter and/or apply actions to
5537route, hence allowing policy to be applied to routes.
5538
5539* Menu:
5540
5541* Route Map Command::
5542* Route Map Match Command::
5543* Route Map Set Command::
5544* Route Map Call Command::
5545* Route Map Exit Action Command::
5546* Route Map Examples::
5547
5548   Route-maps are an ordered list of route-map entries. Each entry may
5549specify up to four distincts sets of clauses:
5550
5551`Matching Policy'
5552     This specifies the policy implied if the `Matching Conditions' are
5553     met or not met, and which actions of the route-map are to be
5554     taken, if any. The two possibilities are:
5555
5556        - `permit': If the entry matches, then carry out the `Set
5557          Actions'. Then finish processing the route-map, permitting
5558          the route, unless an `Exit Action' indicates otherwise.
5559
5560        - `deny': If the entry matches, then finish processing the
5561          route-map and deny the route (return `deny').
5562
5563     The `Matching Policy' is specified as part of the command which
5564     defines the ordered entry in the route-map. See below.
5565
5566`Matching Conditions'
5567     A route-map entry may, optionally, specify one or more conditions
5568     which must be matched if the entry is to be considered further, as
5569     governed by the Match Policy. If a route-map entry does not
5570     explicitely specify any matching conditions, then it always
5571     matches.
5572
5573`Set Actions'
5574     A route-map entry may, optionally, specify one or more `Set
5575     Actions' to set or modify attributes of the route.
5576
5577`Call Action'
5578     Call to another route-map, after any `Set Actions' have been
5579     carried out. If the route-map called returns `deny' then
5580     processing of the route-map finishes and the route is denied,
5581     regardless of the `Matching Policy' or the `Exit Policy'. If the
5582     called route-map returns `permit', then `Matching Policy' and
5583     `Exit Policy' govern further behaviour, as normal.
5584
5585`Exit Policy'
5586     An entry may, optionally, specify an alternative `Exit Policy' to
5587     take if the entry matched, rather than the normal policy of
5588     exiting the route-map and permitting the route. The two
5589     possibilities are:
5590
5591        - `next': Continue on with processing of the route-map entries.
5592
5593        - `goto N': Jump ahead to the first route-map entry whose order
5594          in the route-map is >= N. Jumping to a previous entry is not
5595          permitted.
5596
5597   The default action of a route-map, if no entries match, is to deny.
5598I.e. a route-map essentially has as its last entry an empty `deny'
5599entry, which matches all routes. To change this behaviour, one must
5600specify an empty `permit' entry as the last entry in the route-map.
5601
5602   To summarise the above:
5603
5604         Match    No Match
5605-----------------------------
5606_Permit_ action   cont
5607_Deny_   deny     cont
5608
5609`action'
5610        - Apply _set_ statements
5611
5612        - If _call_ is present, call given route-map. If that returns a
5613          `deny', finish processing and return `deny'.
5614
5615        - If `Exit Policy' is _next_, goto next route-map entry
5616
5617        - If `Exit Policy' is _goto_, goto first entry whose order in
5618          the list is >= the given order.
5619
5620        - Finish processing the route-map and permit the route.
5621
5622`deny'
5623        - The route is denied by the route-map (return `deny').
5624
5625`cont'
5626        - goto next route-map entry
5627
5628
5629File: quagga.info,  Node: Route Map Command,  Next: Route Map Match Command,  Up: Route Map
5630
563114.1 Route Map Command
5632======================
5633
5634 -- Command: route-map ROUTE-MAP-NAME (permit|deny) ORDER
5635     Configure the ORDER'th entry in ROUTE-MAP-NAME with `Match Policy'
5636     of either _permit_ or _deny_.
5637
5638
5639
5640File: quagga.info,  Node: Route Map Match Command,  Next: Route Map Set Command,  Prev: Route Map Command,  Up: Route Map
5641
564214.2 Route Map Match Command
5643============================
5644
5645 -- Route-map Command: match ip address ACCESS_LIST
5646     Matches the specified ACCESS_LIST
5647
5648 -- Route-map Command: match ip next-hop IPV4_ADDR
5649     Matches the specified IPV4_ADDR.
5650
5651 -- Route-map Command: match aspath AS_PATH
5652     Matches the specified AS_PATH.
5653
5654 -- Route-map Command: match metric METRIC
5655     Matches the specified METRIC.
5656
5657 -- Route-map Command: match community COMMUNITY_LIST
5658     Matches the specified  COMMUNITY_LIST
5659
5660
5661File: quagga.info,  Node: Route Map Set Command,  Next: Route Map Call Command,  Prev: Route Map Match Command,  Up: Route Map
5662
566314.3 Route Map Set Command
5664==========================
5665
5666 -- Route-map Command: set ip next-hop IPV4_ADDRESS
5667     Set the BGP nexthop address.
5668
5669 -- Route-map Command: set local-preference LOCAL_PREF
5670     Set the BGP local preference.
5671
5672 -- Route-map Command: set weight WEIGHT
5673     Set the route's weight.
5674
5675 -- Route-map Command: set metric METRIC
5676     Set the BGP attribute MED.
5677
5678 -- Route-map Command: set as-path prepend AS_PATH
5679     Set the BGP AS path to prepend.
5680
5681 -- Route-map Command: set community COMMUNITY
5682     Set the BGP community attribute.
5683
5684 -- Route-map Command: set ipv6 next-hop global IPV6_ADDRESS
5685     Set the BGP-4+ global IPv6 nexthop address.
5686
5687 -- Route-map Command: set ipv6 next-hop local IPV6_ADDRESS
5688     Set the BGP-4+ link local IPv6 nexthop address.
5689
5690
5691File: quagga.info,  Node: Route Map Call Command,  Next: Route Map Exit Action Command,  Prev: Route Map Set Command,  Up: Route Map
5692
569314.4 Route Map Call Command
5694===========================
5695
5696 -- Route-map Command: call NAME
5697     Call route-map NAME. If it returns deny, deny the route and finish
5698     processing the route-map.
5699
5700
5701File: quagga.info,  Node: Route Map Exit Action Command,  Next: Route Map Examples,  Prev: Route Map Call Command,  Up: Route Map
5702
570314.5 Route Map Exit Action Command
5704==================================
5705
5706 -- Route-map Command: on-match next
5707 -- Route-map Command: continue
5708     Proceed on to the next entry in the route-map.
5709
5710 -- Route-map Command: on-match goto N
5711 -- Route-map Command: continue N
5712     Proceed processing the route-map at the first entry whose order is
5713     >= N
5714
5715
5716File: quagga.info,  Node: Route Map Examples,  Prev: Route Map Exit Action Command,  Up: Route Map
5717
571814.6 Route Map Examples
5719=======================
5720
5721A simple example of a route-map:
5722
5723route-map test permit 10
5724 match ip address 10
5725 set local-preference 200
5726
5727   This means that if a route matches ip access-list number 10 it's
5728local-preference value is set to 200.
5729
5730   See *note BGP Configuration Examples:: for examples of more
5731sophisticated useage of route-maps, including of the `call' action.
5732
5733
5734File: quagga.info,  Node: IPv6 Support,  Next: Kernel Interface,  Prev: Route Map,  Up: Top
5735
573615 IPv6 Support
5737***************
5738
5739Quagga fully supports IPv6 routing.  As described so far, Quagga
5740supports RIPng, OSPFv3, Babel and BGP-4+.  You can give IPv6 addresses
5741to an interface and configure static IPv6 routing information.  Quagga
5742IPv6 also provides automatic address configuration via a feature called
5743`address auto configuration'.  To do it, the router must send router
5744advertisement messages to the all nodes that exist on the network.
5745
5746* Menu:
5747
5748* Router Advertisement::
5749
5750
5751File: quagga.info,  Node: Router Advertisement,  Up: IPv6 Support
5752
575315.1 Router Advertisement
5754=========================
5755
5756 -- Interface Command: no ipv6 nd suppress-ra
5757     Send router advertisment messages.
5758
5759 -- Interface Command: ipv6 nd suppress-ra
5760     Don't send router advertisment messages.
5761
5762 -- Interface Command: ipv6 nd prefix IPV6PREFIX [VALID-LIFETIME]
5763[PREFERRED-LIFETIME] [off-link] [no-autoconfig] [router-address]
5764     Configuring the IPv6 prefix to include in router advertisements.
5765     Several prefix specific optional parameters and flags may follow:
5766        * VALID-LIFETIME - the length of time in seconds during what
5767          the prefix is valid for the purpose of on-link determination.
5768          Value INFINITE represents infinity (i.e. a value of all one
5769          bits (`0xffffffff')).
5770
5771          Range: `<0-4294967295>'  Default: `2592000'
5772
5773        * PREFERRED-LIFETIME - the length of time in seconds during
5774          what addresses generated from the prefix remain preferred.
5775          Value INFINITE represents infinity.
5776
5777          Range: `<0-4294967295>'  Default: `604800'
5778
5779        * OFF-LINK - indicates that advertisement makes no statement
5780          about on-link or off-link properties of the prefix.
5781
5782          Default: not set, i.e. this prefix can be used for on-link
5783          determination.
5784
5785        * NO-AUTOCONFIG - indicates to hosts on the local link that the
5786          specified prefix cannot be used for IPv6 autoconfiguration.
5787
5788          Default: not set, i.e. prefix can be used for
5789          autoconfiguration.
5790
5791        * ROUTER-ADDRESS - indicates to hosts on the local link that
5792          the specified prefix contains a complete IP address by
5793          setting R flag.
5794
5795          Default: not set, i.e. hosts do not assume a complete IP
5796          address is placed.
5797
5798 -- Interface Command: ipv6 nd ra-interval <1-1800>
5799 -- Interface Command: no ipv6 nd ra-interval [<1-1800>]
5800     The  maximum  time allowed between sending unsolicited multicast
5801     router advertisements from the interface, in seconds.
5802
5803     Default: `600'
5804
5805 -- Interface Command: ipv6 nd ra-interval msec <70-1800000>
5806 -- Interface Command: no ipv6 nd ra-interval [msec <70-1800000>]
5807     The  maximum  time allowed between sending unsolicited multicast
5808     router advertisements from the interface, in milliseconds.
5809
5810     Default: `600000'
5811
5812 -- Interface Command: ipv6 nd ra-lifetime <0-9000>
5813 -- Interface Command: no ipv6 nd ra-lifetime [<0-9000>]
5814     The value to be placed in the Router Lifetime field of router
5815     advertisements sent from the interface, in seconds. Indicates the
5816     usefulness of the router as a default router on this interface.
5817     Setting the value to zero indicates that the router should not be
5818     considered a default router on this interface.  Must be either
5819     zero or between value specified with IPV6 ND RA-INTERVAL (or
5820     default) and 9000 seconds.
5821
5822     Default: `1800'
5823
5824 -- Interface Command: ipv6 nd reachable-time <1-3600000>
5825 -- Interface Command: no ipv6 nd reachable-time [<1-3600000>]
5826     The value to be placed in the Reachable Time field in the Router
5827     Advertisement messages sent by the router, in milliseconds. The
5828     configured time enables the router to detect unavailable
5829     neighbors. The value zero means unspecified (by this router).
5830
5831     Default: `0'
5832
5833 -- Interface Command: ipv6 nd managed-config-flag
5834 -- Interface Command: no ipv6 nd managed-config-flag
5835     Set/unset flag in IPv6 router advertisements which indicates to
5836     hosts that they should use managed (stateful) protocol for
5837     addresses autoconfiguration in addition to any addresses
5838     autoconfigured using stateless address autoconfiguration.
5839
5840     Default: not set
5841
5842 -- Interface Command: ipv6 nd other-config-flag
5843 -- Interface Command: no ipv6 nd other-config-flag
5844     Set/unset flag in IPv6 router advertisements which indicates to
5845     hosts that they should use administered (stateful) protocol to
5846     obtain autoconfiguration information other than addresses.
5847
5848     Default: not set
5849
5850 -- Interface Command: ipv6 nd home-agent-config-flag
5851 -- Interface Command: no ipv6 nd home-agent-config-flag
5852     Set/unset flag in IPv6 router advertisements which indicates to
5853     hosts that the router acts as a Home Agent and includes a Home
5854     Agent Option.
5855
5856     Default: not set
5857
5858 -- Interface Command: ipv6 nd home-agent-preference <0-65535>
5859 -- Interface Command: no ipv6 nd home-agent-preference [<0-65535>]
5860     The value to be placed in Home Agent Option, when Home Agent
5861     config flag is set, which indicates to hosts Home Agent
5862     preference. The default value of 0 stands for the lowest
5863     preference possible.
5864
5865     Default: 0
5866
5867   +
5868
5869 -- Interface Command: ipv6 nd home-agent-lifetime <0-65520>
5870     +
5871
5872 -- Interface Command: no ipv6 nd home-agent-lifetime [<0-65520>]
5873     The value to be placed in Home Agent Option, when Home Agent
5874     config flag is set, which indicates to hosts Home Agent Lifetime.
5875     The default value of 0 means to place the current Router Lifetime
5876     value.
5877
5878     Default: 0
5879
5880 -- Interface Command: ipv6 nd adv-interval-option
5881 -- Interface Command: no ipv6 nd adv-interval-option
5882     Include an Advertisement Interval option which indicates to hosts
5883     the maximum time, in milliseconds, between successive unsolicited
5884     Router Advertisements.
5885
5886     Default: not set
5887
5888 -- Interface Command: ipv6 nd router-preference (high|medium|low)
5889 -- Interface Command: no ipv6 nd router-preference [(high|medium|low)]
5890     Set default router preference in IPv6 router advertisements per
5891     RFC4191.
5892
5893     Default: medium
5894
5895 -- Interface Command: ipv6 nd mtu <1-65535>
5896 -- Interface Command: no ipv6 nd mtu [<1-65535>]
5897     Include an MTU (type 5) option in each RA packet to assist the
5898     attached hosts in proper interface configuration. The announced
5899     value is not verified to be consistent with router interface MTU.
5900
5901     Default: don't advertise any MTU option
5902
5903interface eth0
5904 no ipv6 nd suppress-ra
5905 ipv6 nd prefix 2001:0DB8:5009::/64
5906
5907   For more information see `RFC2462 (IPv6 Stateless Address
5908Autoconfiguration)' , `RFC4861 (Neighbor Discovery for IP Version 6
5909(IPv6))' , `RFC6275 (Mobility Support in IPv6)' and `RFC4191 (Default
5910Router Preferences and More-Specific Routes)'.
5911
5912
5913File: quagga.info,  Node: Kernel Interface,  Next: SNMP Support,  Prev: IPv6 Support,  Up: Top
5914
591516 Kernel Interface
5916*******************
5917
5918There are several different methods for reading kernel routing table
5919information, updating kernel routing tables, and for looking up
5920interfaces.
5921
5922`ioctl'
5923     The `ioctl' method is a very traditional way for reading or writing
5924     kernel information.  `ioctl' can be used for looking up interfaces
5925     and for modifying interface addresses, flags, mtu settings and
5926     other types of information.  Also, `ioctl' can insert and delete
5927     kernel routing table entries.  It will soon be available on almost
5928     any platform which zebra supports, but it is a little bit ugly
5929     thus far, so if a better method is supported by the kernel, zebra
5930     will use that.
5931
5932`sysctl'
5933     `sysctl' can lookup kernel information using MIB (Management
5934     Information Base) syntax.  Normally, it only provides a way of
5935     getting information from the kernel.  So one would usually want to
5936     change kernel information using another method such as `ioctl'.
5937
5938`proc filesystem'
5939     `proc filesystem' provides an easy way of getting kernel
5940     information.
5941
5942`routing socket'
5943
5944`netlink'
5945     On recent Linux kernels (2.0.x and 2.2.x), there is a kernel/user
5946     communication support called `netlink'.  It makes asynchronous
5947     communication between kernel and Quagga possible, similar to a
5948     routing socket on BSD systems.
5949
5950     Before you use this feature, be sure to select (in kernel
5951     configuration) the kernel/netlink support option 'Kernel/User
5952     network link driver' and 'Routing messages'.
5953
5954     Today, the /dev/route special device file is obsolete.  Netlink
5955     communication is done by reading/writing over netlink socket.
5956
5957     After the kernel configuration, please reconfigure and rebuild
5958     Quagga.  You can use netlink as a dynamic routing update channel
5959     between Quagga and the kernel.
5960
5961
5962File: quagga.info,  Node: SNMP Support,  Next: Zebra Protocol,  Prev: Kernel Interface,  Up: Top
5963
596417 SNMP Support
5965***************
5966
5967SNMP (Simple Network Managing Protocol) is a widely implemented feature
5968for collecting network information from router and/or host.  Quagga
5969itself does not support SNMP agent (server daemon) functionality but is
5970able to connect to a SNMP agent using the SMUX protocol (`RFC1227') or
5971the AgentX protocol (`RFC2741') and make the routing protocol MIBs
5972available through it.
5973
5974* Menu:
5975
5976* Getting and installing an SNMP agent::
5977* AgentX configuration::
5978* SMUX configuration::
5979* MIB and command reference::
5980* Handling SNMP Traps::
5981
5982
5983File: quagga.info,  Node: Getting and installing an SNMP agent,  Next: AgentX configuration,  Up: SNMP Support
5984
598517.1 Getting and installing an SNMP agent
5986=========================================
5987
5988There are several SNMP agent which support SMUX or AgentX. We recommend
5989to use the latest version of `net-snmp' which was formerly known as
5990`ucd-snmp'.  It is free and open software and available at
5991`http://www.net-snmp.org/' and as binary package for most Linux
5992distributions.  `net-snmp' has to be compiled with
5993`--with-mib-modules=agentx' to be able to accept connections from
5994Quagga using AgentX protocol or with `--with-mib-modules=smux' to use
5995SMUX protocol.
5996
5997   Nowadays, SMUX is a legacy protocol. The AgentX protocol should be
5998preferred for any new deployment. Both protocols have the same coverage.
5999
6000
6001File: quagga.info,  Node: AgentX configuration,  Next: SMUX configuration,  Prev: Getting and installing an SNMP agent,  Up: SNMP Support
6002
600317.2 AgentX configuration
6004=========================
6005
6006To enable AgentX protocol support, Quagga must have been build with the
6007`--enable-snmp' or `--enable-snmp=agentx' option. Both the master SNMP
6008agent (snmpd) and each of the Quagga daemons must be configured. In
6009`/etc/snmp/snmpd.conf', `master agentx' directive should be added. In
6010each of the Quagga daemons, `agentx' command will enable AgentX support.
6011
6012/etc/snmp/snmpd.conf:
6013        #
6014        # example access restrictions setup
6015        #
6016        com2sec readonly default public
6017        group MyROGroup v1 readonly
6018        view all included .1 80
6019        access MyROGroup "" any noauth exact all none none
6020        #
6021        # enable master agent for AgentX subagents
6022        #
6023        master agentx
6024
6025/etc/quagga/ospfd.conf:
6026        ! ... the rest of ospfd.conf has been omitted for clarity ...
6027        !
6028        agentx
6029        !
6030
6031   Upon successful connection, you should get something like this in the
6032log of each Quagga daemons:
6033
60342012/05/25 11:39:08 ZEBRA: snmp[info]: NET-SNMP version 5.4.3 AgentX subagent connected
6035
6036   Then, you can use the following command to check everything works as
6037expected:
6038
6039# snmpwalk -c public -v1 localhost .1.3.6.1.2.1.14.1.1
6040OSPF-MIB::ospfRouterId.0 = IpAddress: 192.168.42.109
6041[...]
6042
6043   The AgentX protocol can be transported over a Unix socket or using
6044TCP or UDP. It usually defaults to a Unix socket and depends on how
6045NetSNMP was built. If need to configure Quagga to use another
6046transport, you can configure it through `/etc/snmp/quagga.conf':
6047
6048/etc/snmp/quagga.conf:
6049        [snmpd]
6050        # Use a remote master agent
6051        agentXSocket tcp:192.168.15.12:705
6052
6053
6054File: quagga.info,  Node: SMUX configuration,  Next: MIB and command reference,  Prev: AgentX configuration,  Up: SNMP Support
6055
605617.3 SMUX configuration
6057=======================
6058
6059To enable SMUX protocol support, Quagga must have been build with the
6060`--enable-snmp=smux' option.
6061
6062   A separate connection has then to be established between the SNMP
6063agent (snmpd) and each of the Quagga daemons. This connections each use
6064different OID numbers and passwords. Be aware that this OID number is
6065not the one that is used in queries by clients, it is solely used for
6066the intercommunication of the daemons.
6067
6068   In the following example the ospfd daemon will be connected to the
6069snmpd daemon using the password "quagga_ospfd". For testing it is
6070recommending to take exactly the below snmpd.conf as wrong access
6071restrictions can be hard to debug.
6072
6073/etc/snmp/snmpd.conf:
6074        #
6075        # example access restrictions setup
6076        #
6077        com2sec readonly default public
6078        group MyROGroup v1 readonly
6079        view all included .1 80
6080        access MyROGroup "" any noauth exact all none none
6081        #
6082        # the following line is relevant for Quagga
6083        #
6084        smuxpeer .1.3.6.1.4.1.3317.1.2.5 quagga_ospfd
6085
6086/etc/quagga/ospf:
6087        ! ... the rest of ospfd.conf has been omitted for clarity ...
6088        !
6089        smux peer .1.3.6.1.4.1.3317.1.2.5 quagga_ospfd
6090        !
6091
6092   After restarting snmpd and quagga, a successful connection can be
6093verified in the syslog and by querying the SNMP daemon:
6094
6095snmpd[12300]: [smux_accept] accepted fd 12 from 127.0.0.1:36255
6096snmpd[12300]: accepted smux peer: \
6097        oid GNOME-PRODUCT-ZEBRA-MIB::ospfd, quagga-0.96.5
6098
6099# snmpwalk -c public -v1 localhost .1.3.6.1.2.1.14.1.1
6100OSPF-MIB::ospfRouterId.0 = IpAddress: 192.168.42.109
6101
6102   Be warned that the current version (5.1.1) of the Net-SNMP daemon
6103writes a line for every SNMP connect to the syslog which can lead to
6104enormous log file sizes.  If that is a problem you should consider to
6105patch snmpd and comment out the troublesome `snmp_log()' line in the
6106function `netsnmp_agent_check_packet()' in `agent/snmp_agent.c'.
6107
6108
6109File: quagga.info,  Node: MIB and command reference,  Next: Handling SNMP Traps,  Prev: SMUX configuration,  Up: SNMP Support
6110
611117.4 MIB and command reference
6112==============================
6113
6114The following OID numbers are used for the interprocess communication
6115of snmpd and the Quagga daemons with SMUX only.
6116            (OIDs below .iso.org.dod.internet.private.enterprises)
6117zebra   .1.3.6.1.4.1.3317.1.2.1 .gnome.gnomeProducts.zebra.zserv
6118bgpd    .1.3.6.1.4.1.3317.1.2.2 .gnome.gnomeProducts.zebra.bgpd
6119ripd    .1.3.6.1.4.1.3317.1.2.3 .gnome.gnomeProducts.zebra.ripd
6120ospfd   .1.3.6.1.4.1.3317.1.2.5 .gnome.gnomeProducts.zebra.ospfd
6121ospf6d  .1.3.6.1.4.1.3317.1.2.6 .gnome.gnomeProducts.zebra.ospf6d
6122
6123   Sadly, SNMP has not been implemented in all daemons yet. The
6124following OID numbers are used for querying the SNMP daemon by a client:
6125zebra   .1.3.6.1.2.1.4.24   .iso.org.dot.internet.mgmt.mib-2.ip.ipForward
6126ospfd   .1.3.6.1.2.1.14     .iso.org.dot.internet.mgmt.mib-2.ospf
6127bgpd    .1.3.6.1.2.1.15     .iso.org.dot.internet.mgmt.mib-2.bgp
6128ripd    .1.3.6.1.2.1.23     .iso.org.dot.internet.mgmt.mib-2.rip2
6129ospf6d  .1.3.6.1.3.102      .iso.org.dod.internet.experimental.ospfv3
6130
6131   The following syntax is understood by the Quagga daemons for
6132configuring SNMP using SMUX:
6133
6134 -- Command: smux peer OID
6135 -- Command: no smux peer OID
6136
6137 -- Command: smux peer OID PASSWORD
6138 -- Command: no smux peer OID PASSWORD
6139
6140   Here is the syntax for using AgentX:
6141
6142 -- Command: agentx
6143 -- Command: no agentx
6144
6145
6146File: quagga.info,  Node: Handling SNMP Traps,  Prev: MIB and command reference,  Up: SNMP Support
6147
614817.5 Handling SNMP Traps
6149========================
6150
6151To handle snmp traps make sure your snmp setup of quagga works
6152correctly as described in the quagga documentation in *Note SNMP
6153Support::.
6154
6155   The BGP4 mib will send traps on peer up/down events. These should be
6156visible in your snmp logs with a message similar to:
6157
6158   `snmpd[13733]: Got trap from peer on fd 14'
6159
6160   To react on these traps they should be handled by a trapsink.
6161Configure your trapsink by adding the following lines to
6162`/etc/snmpd/snmpd.conf':
6163
6164  # send traps to the snmptrapd on localhost
6165  trapsink localhost
6166
6167   This will send all traps to an snmptrapd running on localhost. You
6168can of course also use a dedicated management station to catch traps.
6169Configure the snmptrapd daemon by adding the following line to
6170`/etc/snmpd/snmptrapd.conf':
6171
6172  traphandle .1.3.6.1.4.1.3317.1.2.2 /etc/snmp/snmptrap_handle.sh
6173
6174   This will use the bash script `/etc/snmp/snmptrap_handle.sh' to
6175handle the BGP4 traps. To add traps for other protocol daemons, lookup
6176their appropriate OID from their mib. (For additional information about
6177which traps are supported by your mib, lookup the mib on
6178`http://www.oidview.com/mibs/detail.html').
6179
6180   Make sure snmptrapd is started.
6181
6182   The snmptrap_handle.sh script I personally use for handling BGP4
6183traps is below. You can of course do all sorts of things when handling
6184traps, like sound a siren, have your display flash, etc., be creative
6185;).
6186
6187  #!/bin/bash
6188
6189  # routers name
6190  ROUTER=`hostname -s`
6191
6192  #email address use to sent out notification
6193  EMAILADDR="john@doe.com"
6194  #email address used (allongside above) where warnings should be sent
6195  EMAILADDR_WARN="sms-john@doe.com"
6196
6197  # type of notification
6198  TYPE="Notice"
6199
6200  # local snmp community for getting AS belonging to peer
6201  COMMUNITY="<community>"
6202
6203  # if a peer address is in $WARN_PEERS a warning should be sent
6204  WARN_PEERS="192.0.2.1"
6205
6206
6207  # get stdin
6208  INPUT=`cat -`
6209
6210  # get some vars from stdin
6211  uptime=`echo $INPUT | cut -d' ' -f5`
6212  peer=`echo $INPUT | cut -d' ' -f8 | sed -e 's/SNMPv2-SMI::mib-2.15.3.1.14.//g'`
6213  peerstate=`echo $INPUT | cut -d' ' -f13`
6214  errorcode=`echo $INPUT | cut -d' ' -f9 | sed -e 's/\"//g'`
6215  suberrorcode=`echo $INPUT | cut -d' ' -f10 | sed -e 's/\"//g'`
6216  remoteas=`snmpget -v2c -c $COMMUNITY localhost SNMPv2-SMI::mib-2.15.3.1.9.$peer | cut -d' ' -f4`
6217
6218  WHOISINFO=`whois -h whois.ripe.net " -r AS$remoteas" | egrep '(as-name|descr)'`
6219  asname=`echo "$WHOISINFO" | grep "^as-name:" | sed -e 's/^as-name://g' -e 's/  //g' -e 's/^ //g' | uniq`
6220  asdescr=`echo "$WHOISINFO" | grep "^descr:" | sed -e 's/^descr://g' -e 's/  //g' -e 's/^ //g' | uniq`
6221
6222  # if peer address is in $WARN_PEER, the email should also
6223  # be sent to $EMAILADDR_WARN
6224  for ip in $WARN_PEERS; do
6225    if [ "x$ip" == "x$peer" ]; then
6226      EMAILADDR="$EMAILADDR,$EMAILADDR_WARN"
6227      TYPE="WARNING"
6228      break
6229    fi
6230  done
6231
6232
6233  # convert peer state
6234  case "$peerstate" in
6235    1) peerstate="Idle" ;;
6236    2) peerstate="Connect" ;;
6237    3) peerstate="Active" ;;
6238    4) peerstate="Opensent" ;;
6239    5) peerstate="Openconfirm" ;;
6240    6) peerstate="Established" ;;
6241    *) peerstate="Unknown" ;;
6242  esac
6243
6244  # get textual messages for errors
6245  case "$errorcode" in
6246    00)
6247      error="No error"
6248      suberror=""
6249      ;;
6250    01)
6251      error="Message Header Error"
6252      case "$suberrorcode" in
6253        01) suberror="Connection Not Synchronized" ;;
6254        02) suberror="Bad Message Length" ;;
6255        03) suberror="Bad Message Type" ;;
6256        *) suberror="Unknown" ;;
6257      esac
6258      ;;
6259    02)
6260      error="OPEN Message Error"
6261      case "$suberrorcode" in
6262        01) suberror="Unsupported Version Number" ;;
6263        02) suberror="Bad Peer AS" ;;
6264        03) suberror="Bad BGP Identifier" ;;
6265        04) suberror="Unsupported Optional Parameter" ;;
6266        05) suberror="Authentication Failure" ;;
6267        06) suberror="Unacceptable Hold Time" ;;
6268        *) suberror="Unknown" ;;
6269      esac
6270      ;;
6271    03)
6272      error="UPDATE Message Error"
6273      case "$suberrorcode" in
6274        01) suberror="Malformed Attribute List" ;;
6275        02) suberror="Unrecognized Well-known Attribute" ;;
6276        03) suberror="Missing Well-known Attribute" ;;
6277        04) suberror="Attribute Flags Error" ;;
6278        05) suberror="Attribute Length Error" ;;
6279        06) suberror="Invalid ORIGIN Attribute" ;;
6280        07) suberror="AS Routing Loop" ;;
6281        08) suberror="Invalid NEXT_HOP Attribute" ;;
6282        09) suberror="Optional Attribute Error" ;;
6283        10) suberror="Invalid Network Field" ;;
6284        11) suberror="Malformed AS_PATH" ;;
6285        *) suberror="Unknown" ;;
6286      esac
6287      ;;
6288    04)
6289      error="Hold Timer Expired"
6290      suberror=""
6291      ;;
6292    05)
6293      error="Finite State Machine Error"
6294      suberror=""
6295      ;;
6296    06)
6297      error="Cease"
6298      case "$suberrorcode" in
6299        01) suberror="Maximum Number of Prefixes Reached" ;;
6300        02) suberror="Administratively Shutdown" ;;
6301        03) suberror="Peer Unconfigured" ;;
6302        04) suberror="Administratively Reset" ;;
6303        05) suberror="Connection Rejected" ;;
6304        06) suberror="Other Configuration Change" ;;
6305        07) suberror="Connection collision resolution" ;;
6306        08) suberror="Out of Resource" ;;
6307        09) suberror="MAX" ;;
6308        *) suberror="Unknown" ;;
6309      esac
6310      ;;
6311    *)
6312      error="Unknown"
6313      suberror=""
6314      ;;
6315  esac
6316
6317  # create textual message from errorcodes
6318  if [ "x$suberror" == "x" ]; then
6319    NOTIFY="$errorcode ($error)"
6320  else
6321    NOTIFY="$errorcode/$suberrorcode ($error/$suberror)"
6322  fi
6323
6324
6325  # form a decent subject
6326  SUBJECT="$TYPE: $ROUTER [bgp] $peer is $peerstate: $NOTIFY"
6327  # create the email body
6328  MAIL=`cat << EOF
6329  BGP notification on router $ROUTER.
6330
6331  Peer: $peer
6332  AS: $remoteas
6333  New state: $peerstate
6334  Notification: $NOTIFY
6335
6336  Info:
6337  $asname
6338  $asdescr
6339
6340  Snmpd uptime: $uptime
6341  EOF`
6342
6343  # mail the notification
6344  echo "$MAIL" | mail -s "$SUBJECT" $EMAILADDR
6345
6346
6347File: quagga.info,  Node: Zebra Protocol,  Next: Packet Binary Dump Format,  Prev: SNMP Support,  Up: Top
6348
6349Appendix A Zebra Protocol
6350*************************
6351
6352A.1 Overview of the Zebra Protocol
6353==================================
6354
6355Zebra Protocol is used by protocol daemons to communicate with the
6356zebra daemon.
6357
6358   Each protocol daemon may request and send information to and from the
6359zebra daemon such as interface states, routing state,
6360nexthop-validation, and so on. Protocol daemons may also install routes
6361with zebra. The zebra daemon manages which route is installed into the
6362forwarding table with the kernel.
6363
6364   Zebra Protocol is a streaming protocol, with a common header. Two
6365versions of the header are in use. Version 0 is implicitely versioned.
6366Version 1 has an explicit version field. Version 0 can be distinguished
6367from all other versions by examining the 3rd byte of the header, which
6368contains a marker value for all versions bar version 0. The marker byte
6369corresponds to the command field in version 0, and the marker value is
6370a reserved command in version 0.
6371
6372   We do not anticipate there will be further versions of the header for
6373the foreseeable future, as the command field in version 1 is wide
6374enough to allow for future extensions to done compatibly through
6375seperate commands.
6376
6377   Version 0 is used by all versions of GNU Zebra as of this writing,
6378and versions of Quagga up to and including Quagga 0.98. Version 1 will
6379be used as of Quagga 1.0.
6380
6381A.2 Zebra Protocol Definition
6382=============================
6383
6384A.2.1 Zebra Protocol Header (version 0)
6385---------------------------------------
6386
63870                   1                   2                   3
63880 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
6389+-------------------------------+---------------+
6390|           Length (2)          |   Command (1) |
6391+-------------------------------+---------------+
6392
6393A.2.2 Zebra Protocol Common Header (version 1)
6394----------------------------------------------
6395
63960                   1                   2                   3
63970 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
6398+-------------------------------+---------------+-------------+
6399|           Length (2)          |   Marker (1)  | Version (1) |
6400+-------------------------------+---------------+-------------+
6401|          Command (2)          |
6402+-------------------------------+
6403
6404A.2.3 Zebra Protocol Header Field Definitions
6405---------------------------------------------
6406
6407`Length'
6408     Total packet length including this header. The minimum length is 3
6409     bytes for version 0 messages and 6 bytes for version 1 messages.
6410
6411`Marker'
6412     Static marker with a value of 255 always. This is to allow version
6413     0 Zserv headers (which do not include version explicitely) to be
6414     distinguished from versioned headers. Not present in version 0
6415     messages.
6416
6417`Version'
6418     Version number of the Zserv message. Clients should not continue
6419     processing messages past the version field for versions they do not
6420     recognise. Not present in version 0 messages.
6421
6422`Command'
6423     The Zebra Protocol command.
6424
6425A.2.4 Zebra Protocol Commands
6426-----------------------------
6427
6428Command                                      Value
6429-----------------------------------------------------
6430ZEBRA_INTERFACE_ADD                          1
6431ZEBRA_INTERFACE_DELETE                       2
6432ZEBRA_INTERFACE_ADDRESS_ADD                  3
6433ZEBRA_INTERFACE_ADDRESS_DELETE               4
6434ZEBRA_INTERFACE_UP                           5
6435ZEBRA_INTERFACE_DOWN                         6
6436ZEBRA_IPV4_ROUTE_ADD                         7
6437ZEBRA_IPV4_ROUTE_DELETE                      8
6438ZEBRA_IPV6_ROUTE_ADD                         9
6439ZEBRA_IPV6_ROUTE_DELETE                      10
6440ZEBRA_REDISTRIBUTE_ADD                       11
6441ZEBRA_REDISTRIBUTE_DELETE                    12
6442ZEBRA_REDISTRIBUTE_DEFAULT_ADD               13
6443ZEBRA_REDISTRIBUTE_DEFAULT_DELETE            14
6444ZEBRA_IPV4_NEXTHOP_LOOKUP                    15
6445ZEBRA_IPV6_NEXTHOP_LOOKUP                    16
6446
6447
6448File: quagga.info,  Node: Packet Binary Dump Format,  Next: Command Index,  Prev: Zebra Protocol,  Up: Top
6449
6450Appendix B Packet Binary Dump Format
6451************************************
6452
6453Quagga can dump routing protocol packet into file with a binary format
6454(*note Dump BGP packets and table::).
6455
6456   It seems to be better that we share the MRT's header format for
6457backward compatibility with MRT's dump logs. We should also define the
6458binary format excluding the header, because we must support both IP v4
6459and v6 addresses as socket addresses and / or routing entries.
6460
6461   In the last meeting, we discussed to have a version field in the
6462header. But Masaki told us that we can define new `type' value rather
6463than having a `version' field, and it seems to be better because we
6464don't need to change header format.
6465
6466   Here is the common header format. This is same as that of MRT.
6467
64680                   1                   2                   3
64690 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
6470+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6471|                              Time                             |
6472+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6473|             Type              |            Subtype            |
6474+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6475|                             Length                            |
6476+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6477
6478   If `type' is PROTOCOL_BGP4MP, `subtype' is BGP4MP_STATE_CHANGE, and
6479Address Family == IP (version 4)
6480
6481 0                   1                   2                   3
6482 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
6483+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6484|        Source AS number       |     Destination AS number     |
6485+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6486|        Interface Index        |      Address Family           |
6487+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6488|                        Source IP address                      |
6489+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6490|                     Destination IP address                    |
6491+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6492|            Old State          |           New State           |
6493+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6494
6495   Where State is the value defined in RFC1771.
6496
6497   If `type' is PROTOCOL_BGP4MP, `subtype' is BGP4MP_STATE_CHANGE, and
6498Address Family == IP version 6
6499
6500 0                   1                   2                   3
6501 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
6502+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6503|        Source AS number       |     Destination AS number     |
6504+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6505|        Interface Index        |      Address Family           |
6506+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6507|                        Source IP address                      |
6508+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6509|                        Source IP address (Cont'd)             |
6510+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6511|                        Source IP address (Cont'd)             |
6512+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6513|                        Source IP address (Cont'd)             |
6514+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6515|                     Destination IP address                    |
6516+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6517|                     Destination IP address (Cont'd)           |
6518+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6519|                     Destination IP address (Cont'd)           |
6520+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6521|                     Destination IP address (Cont'd)           |
6522+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6523|            Old State          |           New State           |
6524+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6525
6526   If `type' is PROTOCOL_BGP4MP, `subtype' is BGP4MP_MESSAGE, and
6527Address Family == IP (version 4)
6528
6529 0                   1                   2                   3
6530 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
6531+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6532|        Source AS number       |     Destination AS number     |
6533+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6534|        Interface Index        |      Address Family           |
6535+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6536|                        Source IP address                      |
6537+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6538|                     Destination IP address                    |
6539+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6540|                       BGP Message Packet                      |
6541|                                                               |
6542+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6543
6544   Where BGP Message Packet is the whole contents of the BGP4 message
6545including header portion.
6546
6547   If `type' is PROTOCOL_BGP4MP, `subtype' is BGP4MP_MESSAGE, and
6548Address Family == IP version 6
6549
6550 0                   1                   2                   3
6551 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
6552+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6553|        Source AS number       |     Destination AS number     |
6554+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6555|        Interface Index        |      Address Family           |
6556+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6557|                        Source IP address                      |
6558+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6559|                        Source IP address (Cont'd)             |
6560+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6561|                        Source IP address (Cont'd)             |
6562+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6563|                        Source IP address (Cont'd)             |
6564+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6565|                     Destination IP address                    |
6566+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6567|                     Destination IP address (Cont'd)           |
6568+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6569|                     Destination IP address (Cont'd)           |
6570+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6571|                     Destination IP address (Cont'd)           |
6572+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6573|                       BGP Message Packet                      |
6574|                                                               |
6575+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6576
6577   If `type' is PROTOCOL_BGP4MP, `subtype' is BGP4MP_ENTRY, and Address
6578Family == IP (version 4)
6579
6580 0                   1                   2                   3
6581 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
6582+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6583|            View #             |            Status             |
6584+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6585|                        Time Last Change                       |
6586+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6587|       Address Family          |    SAFI       | Next-Hop-Len  |
6588+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6589|                        Next Hop Address                       |
6590+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6591| Prefix Length |             Address Prefix [variable]         |
6592+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6593|       Attribute Length        |
6594+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6595|      BGP Attribute [variable length]                          |
6596+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6597
6598   If `type' is PROTOCOL_BGP4MP, `subtype' is BGP4MP_ENTRY, and Address
6599Family == IP version 6
6600
6601 0                   1                   2                   3
6602 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
6603+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6604|            View #             |            Status             |
6605+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6606|                        Time Last Change                       |
6607+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6608|       Address Family          |    SAFI       | Next-Hop-Len  |
6609+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6610|                        Next Hop Address                       |
6611+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6612|                        Next Hop Address (Cont'd)              |
6613+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6614|                        Next Hop Address (Cont'd)              |
6615+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6616|                        Next Hop Address (Cont'd)              |
6617+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6618| Prefix Length |             Address Prefix [variable]         |
6619+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6620|     Address Prefix (cont'd) [variable]        |
6621+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6622|       Attribute Length        |
6623+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6624|      BGP Attribute [variable length]                              |
6625+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6626
6627        BGP4 Attribute must not contain MP_UNREACH_NLRI.        If BGP
6628Attribute has MP_REACH_NLRI field, it must has  zero length NLRI, e.g.,
6629MP_REACH_NLRI has only Address  Family, SAFI and next-hop values.
6630
6631   If `type' is PROTOCOL_BGP4MP and `subtype' is BGP4MP_SNAPSHOT,
6632
6633 0                   1                   2                   3
6634 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
6635+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6636|           View #              |       File Name [variable]    |
6637+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6638
6639   The file specified in "File Name" contains all routing entries,
6640which are in the format of "subtype == BGP4MP_ENTRY".
6641
6642Constants:
6643  /* type value */
6644  #define MSG_PROTOCOL_BGP4MP 16
6645  /* subtype value */
6646  #define BGP4MP_STATE_CHANGE 0
6647  #define BGP4MP_MESSAGE 1
6648  #define BGP4MP_ENTRY 2
6649  #define BGP4MP_SNAPSHOT 3
6650
Note: See TracBrowser for help on using the repository browser.