summaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/Building_FRR_on_Ubuntu1204.md9
-rw-r--r--doc/Building_FRR_on_Ubuntu1404.md2
-rw-r--r--doc/Building_FRR_on_Ubuntu1604.md4
-rw-r--r--doc/Makefile.am7
-rw-r--r--doc/babeld.texi212
-rw-r--r--doc/bgpd.texi76
-rw-r--r--doc/cli.md111
-rw-r--r--doc/eigrpd.8.in122
-rw-r--r--doc/eigrpd.texi216
-rw-r--r--doc/install.texi3
-rw-r--r--doc/main.texi5
-rw-r--r--doc/next-hop-tracking.txt2
-rw-r--r--doc/nhrpd.texi2
-rw-r--r--doc/ospf6d.texi4
-rw-r--r--doc/vnc.texi35
15 files changed, 749 insertions, 61 deletions
diff --git a/doc/Building_FRR_on_Ubuntu1204.md b/doc/Building_FRR_on_Ubuntu1204.md
index 521f0a0c2..e79614a57 100644
--- a/doc/Building_FRR_on_Ubuntu1204.md
+++ b/doc/Building_FRR_on_Ubuntu1204.md
@@ -13,7 +13,7 @@ Add packages:
apt-get install git autoconf automake libtool make gawk libreadline-dev \
texinfo libpam0g-dev dejagnu libjson0-dev pkg-config libpam0g-dev \
- libjson0-dev flex python-pip libc-ares-dev python3-dev
+ libjson0-dev flex python-pip libc-ares-dev python3-dev libxml2 libxml2-dev
Install newer bison from 14.04 package source (Ubuntu 12.04 package source
is too old)
@@ -51,6 +51,11 @@ Install newer version of autoconf and automake:
sudo make install
cd ..
+Install XML::LibXML
+
+ sudo cpan
+ install XML::LibXML
+
Install pytest:
pip install pytest
@@ -136,7 +141,7 @@ other settings)
sudo install -m 755 tools/frr /etc/init.d/frr
sudo install -m 644 cumulus/etc/frr/daemons /etc/frr/daemons
- sudo install -m 644 cumulus/etc/frr/debian.conf /etc/frr/debian.conf
+ sudo install -m 644 cumulus/etc/frr/daemons.conf /etc/frr/daemons.conf
sudo install -m 644 -o frr -g frr cumulus/etc/frr/vtysh.conf /etc/frr/vtysh.conf
### Enable daemons
diff --git a/doc/Building_FRR_on_Ubuntu1404.md b/doc/Building_FRR_on_Ubuntu1404.md
index 2c5f132ad..11daecf19 100644
--- a/doc/Building_FRR_on_Ubuntu1404.md
+++ b/doc/Building_FRR_on_Ubuntu1404.md
@@ -96,7 +96,7 @@ other settings)
sudo install -m 755 tools/frr /etc/init.d/frr
sudo install -m 644 cumulus/etc/frr/daemons /etc/frr/daemons
- sudo install -m 644 cumulus/etc/frr/debian.conf /etc/frr/debian.conf
+ sudo install -m 644 cumulus/etc/frr/daemons.conf /etc/frr/daemons.conf
sudo install -m 644 -o frr -g frr cumulus/etc/frr/vtysh.conf /etc/frr/vtysh.conf
diff --git a/doc/Building_FRR_on_Ubuntu1604.md b/doc/Building_FRR_on_Ubuntu1604.md
index 655c81055..9aa3206fe 100644
--- a/doc/Building_FRR_on_Ubuntu1604.md
+++ b/doc/Building_FRR_on_Ubuntu1604.md
@@ -119,8 +119,8 @@ Add the following lines to `/etc/modules-load.d/modules.conf`:
sudo install -m 644 tools/frr.service /etc/systemd/system/frr.service
sudo install -m 644 cumulus/etc/default/frr /etc/default/frr
sudo install -m 644 cumulus/etc/frr/daemons /etc/frr/daemons
- sudo install -m 644 cumulus/etc/frr/debian.conf /etc/frr/debian.conf
- sudo install -m 644 cumulus/etc/frr/frr.conf /etc/frr/frr.conf
+ sudo install -m 644 tools/etc/frr/daemons.conf /etc/frr/daemons.conf
+ sudo install -m 644 tools/etc/frr/frr.conf /etc/frr/frr.conf
sudo install -m 644 -o frr -g frr cumulus/etc/frr/vtysh.conf /etc/frr/vtysh.conf
### Enable daemons
diff --git a/doc/Makefile.am b/doc/Makefile.am
index d82a30730..b2bdf91cd 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -59,8 +59,10 @@ frr.pdf: $(info_TEXINFOS) $(figures_pdf) $(frr_TEXINFOS)
frr_TEXINFOS = appendix.texi basic.texi bgpd.texi isisd.texi filter.texi \
vnc.texi \
+ babeld.texi \
install.texi ipv6.texi kernel.texi main.texi \
nhrpd.texi \
+ eigrpd.texi \
ospf6d.texi ospfd.texi \
overview.texi protocol.texi ripd.texi ripngd.texi routemap.texi \
snmp.texi vtysh.texi routeserver.texi defines.texi $(figures_png) \
@@ -129,6 +131,10 @@ if ZEBRA
man_MANS += zebra.8
endif
+if EIGRPD
+man_MANS += eigrpd.8
+endif
+
EXTRA_DIST = BGP-TypeCode draft-zebra-00.ms draft-zebra-00.txt \
\
bgpd.8.in \
@@ -145,6 +151,7 @@ EXTRA_DIST = BGP-TypeCode draft-zebra-00.ms draft-zebra-00.txt \
watchfrr.8.in \
zebra.8.in \
frr.1.in \
+ eigrpd.8.in \
\
mpls/ChangeLog.opaque.txt mpls/cli_summary.txt \
mpls/opaque_lsa.txt mpls/ospfd.conf \
diff --git a/doc/babeld.texi b/doc/babeld.texi
new file mode 100644
index 000000000..6b4cca1e1
--- /dev/null
+++ b/doc/babeld.texi
@@ -0,0 +1,212 @@
+@c -*-texinfo-*-
+@c This is part of the Quagga Manual.
+@c @value{COPYRIGHT_STR}
+@c See file quagga.texi for copying conditions.
+@node Babel
+@chapter Babel
+
+Babel is an interior gateway protocol that is suitable both for wired
+networks and for wireless mesh networks. Babel has been described as
+``RIP on speed'' --- it is based on the same principles as RIP, but
+includes a number of refinements that make it react much faster to
+topology changes without ever counting to infinity, and allow it to
+perform reliable link quality estimation on wireless links. Babel is
+a double-stack routing protocol, meaning that a single Babel instance
+is able to perform routing for both IPv4 and IPv6.
+
+Quagga implements Babel as described in RFC6126.
+
+@menu
+* Configuring babeld::
+* Babel configuration::
+* Babel redistribution::
+* Show Babel information::
+* Babel debugging commands::
+@end menu
+
+@node Configuring babeld, Babel configuration, Babel, Babel
+@section Configuring babeld
+
+The @command{babeld} daemon can be invoked with any of the common
+options (@pxref{Common Invocation Options}).
+
+The @command{zebra} daemon must be running before @command{babeld} is
+invoked. Also, if @command{zebra} is restarted then @command{babeld}
+must be too.
+
+Configuration of @command{babeld} is done in its configuration file
+@file{babeld.conf}.
+
+@node Babel configuration, Babel redistribution, Configuring babeld, Babel
+@section Babel configuration
+
+@deffn Command {router babel} {}
+@deffnx Command {no router babel} {}
+Enable or disable Babel routing.
+@end deffn
+
+@deffn Command {babel resend-delay <20-655340>} {}
+Specifies the time after which important messages are resent when
+avoiding a black-hole. The default is 2000@dmn{ms}.
+@end deffn
+
+@deffn Command {babel diversity} {}
+@deffnx Command {no babel diversity} {}
+Enable or disable routing using radio frequency diversity. This is
+highly recommended in networks with many wireless nodes.
+
+If you enable this, you will probably want to set @code{babel
+diversity-factor} and @code{babel channel} below.
+@end deffn
+
+@deffn Command {babel diversity-factor <1-256>} {}
+Sets the multiplicative factor used for diversity routing, in units of
+1/256; lower values cause diversity to play a more important role in
+route selection. The default it 256, which means that diversity plays
+no role in route selection; you will probably want to set that to 128
+or less on nodes with multiple independent radios.
+@end deffn
+
+@deffn {Babel Command} {network @var{ifname}} {}
+@deffnx {Babel Command} {no network @var{ifname}} {}
+Enable or disable Babel on the given interface.
+@end deffn
+
+@deffn {Interface Command} {babel wired} {}
+@deffnx {Interface Command} {babel wireless} {}
+Specifies whether this interface is wireless, which disables a number
+of optimisations that are only correct on wired interfaces.
+Specifying @code{wireless} (the default) is always correct, but may
+cause slower convergence and extra routing traffic.
+@end deffn
+
+@deffn {Interface Command} {babel split-horizon}
+@deffnx {Interface Command} {no babel split-horizon}
+Specifies whether to perform split-horizon on the interface.
+Specifying @code{no babel split-horizon} is always correct, while
+@code{babel split-horizon} is an optimisation that should only be used
+on symmetric and transitive (wired) networks. The default is
+@code{babel split-horizon} on wired interfaces, and @code{no babel
+split-horizon} on wireless interfaces. This flag is reset when the
+wired/wireless status of an interface is changed.
+@end deffn
+
+@deffn {Interface Command} {babel hello-interval <20-655340>}
+Specifies the time in milliseconds between two scheduled hellos. On
+wired links, Babel notices a link failure within two hello intervals;
+on wireless links, the link quality value is reestimated at every
+hello interval. The default is 4000@dmn{ms}.
+@end deffn
+
+@deffn {Interface Command} {babel update-interval <20-655340>}
+Specifies the time in milliseconds between two scheduled updates.
+Since Babel makes extensive use of triggered updates, this can be set
+to fairly high values on links with little packet loss. The default
+is 20000@dmn{ms}.
+@end deffn
+
+@deffn {Interface Command} {babel channel <1-254>}
+@deffnx {Interface Command} {babel channel interfering}
+@deffnx {Interface Command} {babel channel noninterfering}
+Set the channel number that diversity routing uses for this interface
+(see @code{babel diversity} above). Noninterfering interfaces are
+assumed to only interfere with themselves, interfering interfaces are
+assumed to interfere with all other channels except noninterfering
+channels, and interfaces with a channel number interfere with
+interfering interfaces and interfaces with the same channel number.
+The default is @samp{babel channel interfering} for wireless
+interfaces, and @samp{babel channel noninterfering} for wired
+interfaces. This is reset when the wired/wireless status of an
+interface is changed.
+@end deffn
+
+@deffn {Interface Command} {babel rxcost <1-65534>}
+Specifies the base receive cost for this interface. For wireless
+interfaces, it specifies the multiplier used for computing the ETX
+reception cost (default 256); for wired interfaces, it specifies the
+cost that will be advertised to neighbours. This value is reset when
+the wired/wireless attribute of the interface is changed.
+
+Do not use this command unless you know what you are doing; in most
+networks, acting directly on the cost using route maps is a better
+technique.
+@end deffn
+
+@deffn {Interface Command} {babel rtt-decay <1-256>}
+This specifies the decay factor for the exponential moving average of
+RTT samples, in units of 1/256. Higher values discard old samples
+faster. The default is 42.
+@end deffn
+
+@deffn {Interface Command} {babel rtt-min <1-65535>}
+This specifies the minimum RTT, in milliseconds, starting from which we
+increase the cost to a neighbour. The additional cost is linear in (rtt
+- rtt-min ). The default is 10@dmn{ms}.
+@end deffn
+
+@deffn {Interface Command} {babel rtt-max <1-65535>}
+This specifies the maximum RTT, in milliseconds, above which we don't
+increase the cost to a neighbour. The default is 120@dmn{ms}.
+@end deffn
+
+@deffn {Interface Command} {babel max-rtt-penalty <0-65535>}
+This specifies the maximum cost added to a neighbour because of RTT,
+i.e. when the RTT is higher or equal than rtt-max. The default is 0,
+which effectively disables the use of a RTT-based cost.
+@end deffn
+
+@deffn {Interface Command} {babel enable-timestamps}
+@deffnx {Interface Command} {no babel enable-timestamps}
+Enable or disable sending timestamps with each Hello and IHU message in
+order to compute RTT values. The default is @code{no babel
+enable-timestamps}.
+@end deffn
+
+@deffn {Babel Command} {babel resend-delay <20-655340>}
+Specifies the time in milliseconds after which an ``important''
+request or update will be resent. The default is 2000@dmn{ms}. You
+probably don't want to tweak this value.
+@end deffn
+
+@deffn {Babel Command} {babel smoothing-half-life <0-65534>}
+Specifies the time constant, in seconds, of the smoothing algorithm
+used for implementing hysteresis. Larger values reduce route
+oscillation at the cost of very slightly increasing convergence time.
+The value 0 disables hysteresis, and is suitable for wired networks.
+The default is 4@dmn{s}.
+@end deffn
+
+@node Babel redistribution, Show Babel information, Babel configuration, Babel
+@section Babel redistribution
+
+@deffn {Babel command} {redistribute @var{kind}}
+@deffnx {Babel command} {no redistribute @var{kind}}
+Specify which kind of routes should be redistributed into Babel.
+@end deffn
+
+@node Show Babel information, Babel debugging commands, Babel redistribution, Babel
+@section Show Babel information
+
+@deffn {Command} {show babel route} {}
+@deffnx {Command} {show babel route A.B.C.D}
+@deffnx {Command} {show babel route X:X::X:X}
+@deffnx {Command} {show babel route A.B.C.D/M}
+@deffnx {Command} {show babel route X:X::X:X/M}
+@deffnx {Command} {show babel interface} {}
+@deffnx {Command} {show babel interface @var{ifname}} {}
+@deffnx {Command} {show babel neighbor} {}
+@deffnx {Command} {show babel parameters} {}
+These commands dump various parts of @command{babeld}'s internal state.
+@end deffn
+
+@node Babel debugging commands, , Show Babel information, Babel
+@section Babel debugging commands
+
+@deffn {Babel Command} {debug babel @var{kind}} {}
+@deffnx {Babel Command} {no debug babel @var{kind}} {}
+Enable or disable debugging messages of a given kind. @var{kind} can
+be one of @samp{common}, @samp{kernel}, @samp{filter}, @samp{timeout},
+@samp{interface}, @samp{route} or @samp{all}. Note that if you have
+compiled with the NO_DEBUG flag, then these commands aren't available.
+@end deffn
+
diff --git a/doc/bgpd.texi b/doc/bgpd.texi
index 08cd4149a..8e0da1294 100644
--- a/doc/bgpd.texi
+++ b/doc/bgpd.texi
@@ -526,7 +526,9 @@ This command adds the announcement network.
@example
@group
router bgp 1
- network 10.0.0.0/8
+ address-family ipv4 unicast
+ network 10.0.0.0/8
+ exit-address-family
@end group
@end example
This configuration example says that network 10.0.0.0/8 will be
@@ -1160,7 +1162,9 @@ communities attribute to the updates.
@example
router bgp 7675
neighbor 192.168.0.1 remote-as 100
- neighbor 192.168.0.1 route-map RMAP in
+ address-family ipv4 unicast
+ neighbor 192.168.0.1 route-map RMAP in
+ exit-address-family
!
ip community-list 70 permit 7675:70
ip community-list 70 deny
@@ -1191,7 +1195,9 @@ value 80.
router bgp 100
network 10.0.0.0/8
neighbor 192.168.0.2 remote-as 7675
- neighbor 192.168.0.2 route-map RMAP out
+ address-family ipv4 unicast
+ neighbor 192.168.0.2 route-map RMAP out
+ exit-address-family
!
ip prefix-list PLIST permit 10.0.0.0/8
!
@@ -1209,7 +1215,9 @@ limit the BGP routes announcement into the internal network.
@example
router bgp 7675
neighbor 192.168.0.1 remote-as 100
- neighbor 192.168.0.1 route-map RMAP in
+ address-family ipv4 unicast
+ neighbor 192.168.0.1 route-map RMAP in
+ exit-address-family
!
ip community-list 1 permit 0:80 0:90
!
@@ -1224,7 +1232,9 @@ filtering all of routes, we need to define permit any at last.
@example
router bgp 7675
neighbor 192.168.0.1 remote-as 100
- neighbor 192.168.0.1 route-map RMAP in
+ address-family ipv4 unicast
+ neighbor 192.168.0.1 route-map RMAP in
+ exit-address-family
!
ip community-list standard FILTER deny 1:1
ip community-list standard FILTER permit
@@ -1252,7 +1262,9 @@ community-list is used. @code{deny} community-list is ignored.
@example
router bgp 7675
neighbor 192.168.0.1 remote-as 100
- neighbor 192.168.0.1 route-map RMAP in
+ address-family ipv4 unicast
+ neighbor 192.168.0.1 route-map RMAP in
+ exit-address-family
!
ip community-list standard DEL permit 100:1 100:2
!
@@ -1606,11 +1618,15 @@ to specify @command{neighbor A.B.C.D send-community} command.
!
router bgp 1
neighbor 10.0.0.1 remote-as 1
- no neighbor 10.0.0.1 send-community
+ address-family ipv4 unicast
+ no neighbor 10.0.0.1 send-community
+ exit-address-family
!
router bgp 1
neighbor 10.0.0.1 remote-as 1
- neighbor 10.0.0.1 send-community
+ address-family ipv4 unicast
+ neighbor 10.0.0.1 send-community
+ exit-address-family
!
@end example
@@ -1680,11 +1696,15 @@ bgp multiple-instance
!
router bgp 1 view 1
neighbor 10.0.0.1 remote-as 2
- neighbor 10.0.0.1 distribute-list 1 in
+ address-family ipv4 unicast
+ neighbor 10.0.0.1 distribute-list 1 in
+ exit-address-family
!
router bgp 1 view 2
neighbor 10.0.0.1 remote-as 2
- neighbor 10.0.0.1 distribute-list 2 in
+ address-family ipv4 unicast
+ neighbor 10.0.0.1 distribute-list 2 in
+ exit-address-family
@end group
@end example
@@ -1792,13 +1812,16 @@ Example of a session to an upstream, advertising only one prefix to it.
@example
router bgp 64512
bgp router-id 10.236.87.1
- network 10.236.87.0/24
neighbor upstream peer-group
neighbor upstream remote-as 64515
neighbor upstream capability dynamic
- neighbor upstream prefix-list pl-allowed-adv out
neighbor 10.1.1.1 peer-group upstream
neighbor 10.1.1.1 description ACME ISP
+
+ address-family ipv4 unicast
+ network 10.236.87.0/24
+ neighbor upstream prefix-list pl-allowed-adv out
+ exit-address-family
!
ip prefix-list pl-allowed-adv seq 5 permit 82.195.133.0/25
ip prefix-list pl-allowed-adv seq 10 deny any
@@ -1816,18 +1839,9 @@ flaws.
@example
router bgp 64512
bgp router-id 10.236.87.1
- network 10.123.456.0/24
- network 10.123.456.128/25 route-map rm-no-export
neighbor upstream capability dynamic
- neighbor upstream route-map rm-upstream-out out
neighbor cust capability dynamic
- neighbor cust route-map rm-cust-in in
- neighbor cust route-map rm-cust-out out
- neighbor cust send-community both
neighbor peer capability dynamic
- neighbor peer route-map rm-peer-in in
- neighbor peer route-map rm-peer-out out
- neighbor peer send-community both
neighbor 10.1.1.1 remote-as 64515
neighbor 10.1.1.1 peer-group upstream
neighbor 10.2.1.1 remote-as 64516
@@ -1835,19 +1849,31 @@ router bgp 64512
neighbor 10.3.1.1 remote-as 64517
neighbor 10.3.1.1 peer-group cust-default
neighbor 10.3.1.1 description customer1
- neighbor 10.3.1.1 prefix-list pl-cust1-network in
neighbor 10.4.1.1 remote-as 64518
neighbor 10.4.1.1 peer-group cust
- neighbor 10.4.1.1 prefix-list pl-cust2-network in
neighbor 10.4.1.1 description customer2
neighbor 10.5.1.1 remote-as 64519
neighbor 10.5.1.1 peer-group peer
- neighbor 10.5.1.1 prefix-list pl-peer1-network in
neighbor 10.5.1.1 description peer AS 1
neighbor 10.6.1.1 remote-as 64520
neighbor 10.6.1.1 peer-group peer
- neighbor 10.6.1.1 prefix-list pl-peer2-network in
neighbor 10.6.1.1 description peer AS 2
+
+ address-family ipv4 unicast
+ network 10.123.456.0/24
+ network 10.123.456.128/25 route-map rm-no-export
+ neighbor upstream route-map rm-upstream-out out
+ neighbor cust route-map rm-cust-in in
+ neighbor cust route-map rm-cust-out out
+ neighbor cust send-community both
+ neighbor peer route-map rm-peer-in in
+ neighbor peer route-map rm-peer-out out
+ neighbor peer send-community both
+ neighbor 10.3.1.1 prefix-list pl-cust1-network in
+ neighbor 10.4.1.1 prefix-list pl-cust2-network in
+ neighbor 10.5.1.1 prefix-list pl-peer1-network in
+ neighbor 10.6.1.1 prefix-list pl-peer2-network in
+ exit-address-family
!
ip prefix-list pl-default permit 0.0.0.0/0
!
diff --git a/doc/cli.md b/doc/cli.md
index 559f75a74..ffd34dd30 100644
--- a/doc/cli.md
+++ b/doc/cli.md
@@ -7,10 +7,12 @@ Definition Grammar
This is a reference for the syntax used when defining new CLI commands. An
example definition is:
+```
DEFUN (command_name,
command_name_cmd,
--> "example <command|line [interface]> DEFINITION...",
<..doc strings..>)
+```
The arrowed part is the definition string.
@@ -27,34 +29,36 @@ Characters allowed in each token type:
Tokens
------
-* WORD -- A token that begins with +, -, or a lowercase letter. It is
- an unchanging part of the command and will only match itself.
- Example: "show ip bgp", every token is a WORD.
-* IPV4 -- 'A.B.C.D', matches an IPv4 address.
-* IPV6 -- 'X:X::X:X', matches an IPv6 address.
-* IPV4_PREFIX -- 'A.B.C.D/M', matches an IPv4 prefix in CIDR notation.
-* IPV6_PREFIX -- 'X:X::X:X/M', matches an IPv6 prefix in CIDR notation.
-* VARIABLE -- Begins with a capital letter. Matches any input.
-* RANGE -- Numeric range delimited by parentheses, e.g. (-100 - 100) or
- (10-20). Will only match numbers in the range.
+* `WORD` -- A token that begins with +, -, or a lowercase letter. It is
+ an unchanging part of the command and will only match itself.
+ Example: "show ip bgp", every token is a WORD.
+* `IPV4` -- 'A.B.C.D', matches an IPv4 address.
+* `IPV6` -- 'X:X::X:X', matches an IPv6 address.
+* `IPV4_PREFIX` -- 'A.B.C.D/M', matches an IPv4 prefix in CIDR notation.
+* `IPV6_PREFIX` -- 'X:X::X:X/M', matches an IPv6 prefix in CIDR notation.
+* `VARIABLE` -- Begins with a capital letter. Matches any input.
+* `RANGE` -- Numeric range delimited by parentheses, e.g. (-100 - 100) or
+ (10-20). Will only match numbers in the range.
Rules
-----
-* <angle|brackets> -- Contain sequences of tokens separated by pipes and
+* `<angle|brackets>` -- Contain sequences of tokens separated by pipes and
provide mutual exclusion. Sequences may contain
- <mutual|exclusion> but not as the first token.
- Disallowed: "example <<a|b> c|d>"
- Allowed: "example <a c|b c|d>
-* [square brackets] -- Contains sequences of tokens that are optional (can be
- omitted).
-* {curly|braces} -- similar to angle brackets, but instead of mutual
+ `<mutual|exclusion>` but not as the first token.
+ Disallowed: `"example <<a|b> c|d>"`
+ Allowed: `"example <a c|b c|d>"`
+* `[square brackets]` -- Contains sequences of tokens that are optional (can be
+ omitted). `[<a|b>]` can be shortened to `[a|b]`.
+* `{curly|braces}` -- similar to angle brackets, but instead of mutual
exclusion, curly braces indicate that one or more of the
pipe-separated sequences may be provided in any order.
-* VARIADICS... -- Any token which accepts input (so anything except WORD)
+* `VARIADICS...` -- Any token which accepts input (so anything except WORD)
and that occurs as the last token of a line may be
followed by an ellipsis, which indicates that input
matching the token may be repeated an unlimited number
of times.
+* `$name` -- Specify a variable name for the preceding token. See
+ "Variable Names" below.
Some general notes:
@@ -69,6 +73,40 @@ Some general notes:
configuration items should be defined in separate commands. Clarity is
preferred over LOC (within reason).
+Variable Names
+--------------
+The parser tries to fill the "varname" field on each token. This can happen
+either manually or automatically. Manual specifications work by appending
+`"$name"` after the input specifier:
+
+```
+foo bar$cmd WORD$name A.B.C.D$ip
+```
+
+Note that you can also assign variable names to fixed input tokens, this can
+be useful if multiple commands share code. You can also use "$name" after a
+multiple-choice option:
+
+```
+foo bar <A.B.C.D|X:X::X:X>$addr [optionA|optionB]$mode
+```
+
+The variable name is in this case assigned to the last token in each of the
+branches.
+
+Automatic assignment of variable names works by applying the following rules:
+
+- manual names always have priority
+- a "[no]" at the beginning receives "no" as varname on the "no" token
+- VARIABLE tokens whose text is not "WORD" or "NAME" receive a cleaned lowercase
+ version of the token text as varname, e.g. "ROUTE-MAP" becomes "route_map".
+- other variable tokens (i.e. everything except "fixed") receive the text of
+ the preceding fixed token as varname, if one can be found. E.g.:
+ "ip route A.B.C.D/M INTERFACE" assigns "route" to the "A.B.C.D/M" token.
+
+These rules should make it possible to avoid manual varname assignment in 90%
+of the cases.
+
Doc Strings
-----------
Each token in a command definition should be documented with a brief doc
@@ -77,11 +115,13 @@ command tree. These strings are provided as the last parameter to DEFUN macros,
concatenated together and separated by an escaped newline ('\n'). These are
best explained by example.
+```
DEFUN (config_terminal,
config_terminal_cmd,
"configure terminal",
"Configuration from vty interface\n"
"Configuration terminal\n")
+```
The last parameter is split into two lines for readability. Two newline
delimited doc strings are present, one for each token in the command. The
@@ -110,11 +150,13 @@ constructs.
In the examples below, each arrowed token needs a doc string.
+```
"show ip bgp"
^ ^ ^
"command <foo|bar> [example]"
^ ^ ^ ^
+```
Data Structures
---------------
@@ -216,22 +258,32 @@ it is generally _incorrect_ to assume consistent indices in this array. As a
simple example:
Command definition:
+```
command [foo] <bar|baz>
+```
User enters:
+```
command foo bar
+```
Array:
+```
[0] -> command
[1] -> foo
[2] -> bar
+```
User enters:
+```
command baz
+```
Array:
+```
[0] -> command
[1] -> baz
+```
@@ -242,24 +294,32 @@ tokens when the CLI matcher does not need them to make an unambiguous match.
This is best explained by example.
Command definitions:
+```
command dog cow
command dog crow
+```
User input:
+```
c d c -> ambiguous command
c d co -> match "command dog cow"
+```
In the new implementation, this functionality has improved. Where previously
the parser would stop at the first ambiguous token, it will now look ahead and
attempt to disambiguate based on tokens later on in the input string.
Command definitions:
+```
show ip bgp A.B.C.D
show ipv6 bgp X:X::X:X
+```
User enters:
+```
s i b 4.3.2.1 -> match "show ip bgp A.B.C.D"
s i b ::e0 -> match "show ipv6 bgp X:X::X:X"
+```
Previously both of these commands would be ambiguous since 'i' does not
explicitly select either 'ip' or 'ipv6'. However, since the user later provides
@@ -268,17 +328,23 @@ parser is able to look ahead and select the appropriate command. This has some
implications for parsing the argv*[] that is passed to the command handler.
Now consider a command definition such as:
+```
command <foo|VAR>
+```
'foo' only matches the string 'foo', but 'VAR' matches any input, including
'foo'. Who wins? In situations like this the matcher will always choose the
'better' match, so 'foo' will win.
Consider also:
+```
show <ip|ipv6> foo
+```
User input:
+```
show ip foo
+```
'ip' partially matches 'ipv6' but exactly matches 'ip', so 'ip' will win.
@@ -286,6 +352,7 @@ User input:
struct cmd_token
----------------
+```
/* Command token struct. */
struct cmd_token
{
@@ -297,7 +364,9 @@ struct cmd_token
char *desc; // token description
long long min, max; // for ranges
char *arg; // user input that matches this token
+ char *varname; // variable name
};
+```
This struct is used in the CLI graph to match input against. It is also used to
pass user input to command handler functions, as it is frequently useful for
@@ -316,7 +385,9 @@ has the full text of the corresponding token in the definition string and using
it makes for much more readable code. An example is helpful.
Command definition:
+```
command <(1-10)|foo|BAR>
+```
In this example, the user may enter any one of:
* an integer between 1 and 10
@@ -325,9 +396,11 @@ In this example, the user may enter any one of:
If the user enters "command f", then:
+```
argv[1]->type == WORD_TKN
argv[1]->arg == "f"
argv[1]->text == "foo"
+```
Range tokens have some special treatment; a token with ->type == RANGE_TKN will
have the ->min and ->max fields set to the bounding values of the range.
@@ -342,6 +415,7 @@ all matching input permutations. It also dumps a text representation of the
graph, which is more useful for debugging than anything else. It looks like
this:
+```
$ ./permutations "show [ip] bgp [<view|vrf> WORD]"
show ip bgp view WORD
@@ -350,6 +424,7 @@ show ip bgp
show bgp view WORD
show bgp vrf WORD
show bgp
+```
This functionality is also built into VTY/VTYSH; the 'list permutations'
command will list all possible matching input permutations in the current CLI
diff --git a/doc/eigrpd.8.in b/doc/eigrpd.8.in
new file mode 100644
index 000000000..ecac972bc
--- /dev/null
+++ b/doc/eigrpd.8.in
@@ -0,0 +1,122 @@
+.TH EIGRPD 8 "6 May 2017" "@PACKAGE_FULLNAME@ EIGRP daemon" "Version @PACKAGE_VERSION@"
+.SH NAME
+eigrpd \- a EIGRP routing engine for use with @PACKAGE_FULLNAME@.
+.SH SYNOPSIS
+.B eigrpd
+[
+.B \-dhrv
+] [
+.B \-f
+.I config-file
+] [
+.B \-i
+.I pid-file
+] [
+.B \-P
+.I port-number
+] [
+.B \-A
+.I vty-address
+] [
+.B \-u
+.I user
+] [
+.B \-g
+.I group
+] [
+.B \-M
+.I module:options
+]
+.SH DESCRIPTION
+.B eigrpd
+is a routing component that works with the
+.B @PACKAGE_FULLNAME@
+routing engine.
+.SH OPTIONS
+Options available for the
+.B eigrpd
+command:
+.SH OPTIONS
+.TP
+\fB\-d\fR, \fB\-\-daemon\fR
+Runs in daemon mode, forking and exiting from tty.
+.TP
+\fB\-f\fR, \fB\-\-config-file \fR\fIconfig-file\fR
+Specifies the config file to use for startup. If not specified this
+option will default to \fB\fI@CFG_SYSCONF@/eigrpd.conf\fR.
+.TP
+\fB\-g\fR, \fB\-\-group \fR\fIgroup\fR
+Specify the group to run as. Default is \fI@enable_group@\fR.
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+A brief message.
+.TP
+\fB\-i\fR, \fB\-\-pid_file \fR\fIpid-file\fR
+When eigrpd starts its process identifier is written to
+\fB\fIpid-file\fR. The init system uses the recorded PID to stop or
+restart eigrpd. The default is \fB\fI@CFG_STATE@/eigrpd.pid\fR.
+.TP
+\fB\-P\fR, \fB\-\-vty_port \fR\fIport-number\fR
+Specify the port that the eigrpd VTY will listen on. This defaults to
+2602, as specified in \fB\fI/etc/services\fR.
+.TP
+\fB\-A\fR, \fB\-\-vty_addr \fR\fIvty-address\fR
+Specify the address that the eigrpd VTY will listen on. Default is all
+interfaces.
+.TP
+\fB\-u\fR, \fB\-\-user \fR\fIuser\fR
+Specify the user to run as. Default is \fI@enable_user@\fR.
+.TP
+\fB\-r\fR, \fB\-\-retain\fR
+When the program terminates, retain routes added by \fBeigrpd\fR.
+.TP
+\fB\-M\fR, \fB\-\-module \fR\fImodule:options\fR
+Load a module at startup. May be specified more than once.
+The \fBsnmp\fR module may be available for
+\fBeigrpd\fR, if the package was built with SNMP support.
+.TP
+\fB\-v\fR, \fB\-\-version\fR
+Print the version and exit.
+.SH FILES
+.TP
+.BI @CFG_SBIN@/eigrpd
+The default location of the
+.B eigrpd
+binary.
+.TP
+.BI @CFG_SYSCONF@/eigrpd.conf
+The default location of the
+.B eigrpd
+config file.
+.TP
+.BI $(PWD)/eigrpd.log
+If the
+.B eigrpd
+process is config'd to output logs to a file, then you will find this
+file in the directory where you started \fBeigrpd\fR.
+.SH WARNING
+This man page is intended to be a quick reference for command line
+options. The definitive document is the Info file \fB@PACKAGE_NAME@\fR.
+.SH DIAGNOSTICS
+The eigrpd process may log to standard output, to a VTY, to a log
+file, or through syslog to the system logs. \fBeigrpd\fR supports many
+debugging options, see the Info file, or the source for details.
+.SH "SEE ALSO"
+.BR bgpd (8),
+.BR ripd (8),
+.BR ripngd (8),
+.BR ospfd (8),
+.BR ospf6d (8),
+.BR isisd (8),
+.BR zebra (8),
+.BR vtysh (1)
+.SH BUGS
+.B eigrpd
+eats bugs for breakfast. If you have food for the maintainers try
+.BI @PACKAGE_BUGREPORT@
+.SH AUTHORS
+See
+.BI http://www.zebra.org
+and
+.BI @PACKAGE_URL@
+or the Info file for an accurate list of authors.
diff --git a/doc/eigrpd.texi b/doc/eigrpd.texi
new file mode 100644
index 000000000..a3a82bbef
--- /dev/null
+++ b/doc/eigrpd.texi
@@ -0,0 +1,216 @@
+@c -*-texinfo-*-
+@c This is part of the Frr Manual.
+@c @value{COPYRIGHT_STR}
+@c See file frr.texi for copying conditions.
+@node EIGRP
+@chapter EIGRP
+
+EIGRP -- Routing Information Protocol is widely deployed interior gateway
+routing protocol. EIGRP was developed in the 1990's. EIGRP is a
+@dfn{distance-vector} protocol and is based on the @dfn{dual} algorithms.
+As a distance-vector protocol, the EIGRP router send updates to its
+neighbors as networks change, thus allowing the convergence to a
+known topology.
+
+@command{eigrpd} supports EIGRP as described in RFC7868
+
+@menu
+* Starting and Stopping eigrpd::
+* EIGRP Configuration::
+* How to Announce EIGRP routes::
+* Show EIGRP Information::
+* EIGRP Debug Commands::
+@end menu
+
+@node Starting and Stopping eigrpd
+@section Starting and Stopping eigrpd
+
+The default configuration file name of @command{eigrpd}'s is
+@file{eigrpd.conf}. When invocation @command{eigrpd} searches directory
+@value{INSTALL_PREFIX_ETC}. If @file{eigrpd.conf} is not there next
+search current directory. If an integrated config is specified
+configuration is written into frr.conf
+
+The EIGRP protocol requires interface information
+maintained by @command{zebra} daemon. So running @command{zebra}
+is mandatory to run @command{eigrpd}. Thus minimum sequence for running
+EIGRP is like below:
+
+@example
+@group
+# zebra -d
+# eigrpd -d
+@end group
+@end example
+
+Please note that @command{zebra} must be invoked before @command{eigrpd}.
+
+To stop @command{eigrpd}. Please use @command{kill `cat
+/var/run/eigrpd.pid`}. Certain signals have special meanings to @command{eigrpd}.
+
+@table @samp
+@item SIGHUP
+@item SIGUSR1
+Rotate @command{eigrpd} Rotate the logfile.
+@item SIGINT
+@itemx SIGTERM
+@command{eigrpd} sweeps all installed EIGRP routes then terminates properly.
+@end table
+
+@command{eigrpd} invocation options. Common options that can be specified
+(@pxref{Common Invocation Options}).
+
+@table @samp
+@item -r
+@itemx --retain
+When the program terminates, retain routes added by @command{eigrpd}.
+@end table
+
+@node EIGRP Configuration
+@section EIGRP Configuration
+
+@deffn Command {router eigrp (1-65535)} {}
+The @code{router eigrp} command is necessary to enable EIGRP. To disable
+EIGRP, use the @code{no router eigrp (1-65535)} command. EIGRP must be enabled before carrying out any of the EIGRP commands.
+@end deffn
+
+@deffn Command {no router eigrp (1-65535)} {}
+Disable EIGRP.
+@end deffn
+
+@deffn {EIGRP Command} {network @var{network}} {}
+@deffnx {EIGRP Command} {no network @var{network}} {}
+Set the EIGRP enable interface by @var{network}. The interfaces which
+have addresses matching with @var{network} are enabled.
+
+This group of commands either enables or disables EIGRP interfaces between
+certain numbers of a specified network address. For example, if the
+network for 10.0.0.0/24 is EIGRP enabled, this would result in all the
+addresses from 10.0.0.0 to 10.0.0.255 being enabled for EIGRP. The @code{no
+network} command will disable EIGRP for the specified network.
+@end deffn
+
+Below is very simple EIGRP configuration. Interface @code{eth0} and
+interface which address match to @code{10.0.0.0/8} are EIGRP enabled.
+
+@example
+@group
+!
+router eigrp 1
+ network 10.0.0.0/8
+!
+@end group
+@end example
+
+Passive interface
+
+@deffn {EIGRP command} {passive-interface (@var{IFNAME}|default)} {}
+@deffnx {EIGRP command} {no passive-interface @var{IFNAME}} {}
+This command sets the specified interface to passive mode. On passive mode
+interface, all receiving packets are ignored and eigrpd does
+not send either multicast or unicast EIGRP packets except to EIGRP neighbors
+specified with @code{neighbor} command. The interface may be specified
+as @var{default} to make eigrpd default to passive on all interfaces.
+
+The default is to be passive on all interfaces.
+@end deffn
+
+@node How to Announce EIGRP route
+@section How to Announce EIGRP route
+
+@deffn {EIGRP command} {redistribute kernel} {}
+@deffnx {EIGRP command} {redistribute kernel metric (1-4294967295) (0-4294967295) (0-255) (1-255) (1-65535)} {}
+@deffnx {EIGRP command} {no redistribute kernel} {}
+@code{redistribute kernel} redistributes routing information from
+kernel route entries into the EIGRP tables. @code{no redistribute kernel}
+disables the routes.
+@end deffn
+
+@deffn {EIGRP command} {redistribute static} {}
+@deffnx {EIGRP command} {redistribute static metric (1-4294967295) (0-4294967295) (0-255) (1-255) (1-65535)} {}
+@deffnx {EIGRP command} {no redistribute static} {}
+@code{redistribute static} redistributes routing information from
+static route entries into the EIGRP tables. @code{no redistribute static}
+disables the routes.
+@end deffn
+
+@deffn {EIGRP command} {redistribute connected} {}
+@deffnx {EIGRP command} {redistribute connected metric (1-4294967295) (0-4294967295) (0-255) (1-255) (1-65535)} {}
+@deffnx {EIGRP command} {no redistribute connected} {}
+Redistribute connected routes into the EIGRP tables. @code{no
+redistribute connected} disables the connected routes in the EIGRP tables.
+This command redistribute connected of the interface which EIGRP disabled.
+The connected route on EIGRP enabled interface is announced by default.
+@end deffn
+
+@deffn {EIGRP command} {redistribute ospf} {}
+@deffnx {EIGRP command} {redistribute ospf metric (1-4294967295) (0-4294967295) (0-255) (1-255) (1-65535)} {}
+@deffnx {EIGRP command} {no redistribute ospf} {}
+@code{redistribute ospf} redistributes routing information from
+ospf route entries into the EIGRP tables. @code{no redistribute ospf}
+disables the routes.
+@end deffn
+
+@deffn {EIGRP command} {redistribute bgp} {}
+@deffnx {EIGRP command} {redistribute bgp metric (1-4294967295) (0-4294967295) (0-255) (1-255) (1-65535)} {}
+@deffnx {EIGRP command} {no redistribute bgp} {}
+@code{redistribute bgp} redistributes routing information from
+bgp route entries into the EIGRP tables. @code{no redistribute bgp}
+disables the routes.
+@end deffn
+
+@node Show EIGRP Information
+@section Show EIGRP Information
+
+To display EIGRP routes.
+
+@deffn Command {show ip eigrp topology} {}
+Show EIGRP routes.
+@end deffn
+
+The command displays all EIGRP routes.
+
+@c Exmaple here.
+
+@deffn Command {show ip eigrp topology} {}
+The command displays current EIGRP status
+@end deffn
+
+@example
+@group
+eigrpd> @b{show ip eigrp topology}
+# show ip eigrp topo
+
+EIGRP Topology Table for AS(4)/ID(0.0.0.0)
+
+Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply
+ r - reply Status, s - sia Status
+
+P 10.0.2.0/24, 1 successors, FD is 256256, serno: 0
+ via Connected, enp0s3
+@end group
+@end example
+
+@node EIGRP Debug Commands
+@section EIGRP Debug Commands
+
+Debug for EIGRP protocol.
+
+@deffn Command {debug eigrp packets} {}
+Debug eigrp packets
+@end deffn
+
+@code{debug eigrp} will show EIGRP packets that are sent and recevied.
+
+@deffn Command {debug eigrp transmit} {}
+Debug eigrp transmit events
+@end deffn
+
+@code{debug eigrp transmit} will display detailed information about the EIGRP transmit events.
+
+@deffn Command {show debugging eigrp} {}
+Display @command{eigrpd}'s debugging option.
+@end deffn
+
+@code{show debugging eigrp} will show all information currently set for eigrpd
+debug.
diff --git a/doc/install.texi b/doc/install.texi
index d989928b8..9a98f4673 100644
--- a/doc/install.texi
+++ b/doc/install.texi
@@ -63,6 +63,9 @@ Do not build bgpd.
@item --disable-bgp-announce
Make @command{bgpd} which does not make bgp announcements at all. This
feature is good for using @command{bgpd} as a BGP announcement listener.
+@item --enable-datacenter
+Enable system defaults to work as if in a Data Center. See defaults.h
+for what is changed by this configure option.
@item --enable-snmp
Enable SNMP support. By default, SNMP support is disabled.
@item --disable-ospfapi
diff --git a/doc/main.texi b/doc/main.texi
index 706baa25f..265d6295e 100644
--- a/doc/main.texi
+++ b/doc/main.texi
@@ -498,6 +498,11 @@ If so, the box can't work as a router.
Display whether the host's IP v6 forwarding is enabled or not.
@end deffn
+@deffn Command {show zebra} {}
+Display various statistics related to the installation and deletion
+of routes, neighbor updates, and LSP's into the kernel.
+@end deffn
+
@deffn Command {show zebra fpm stats} {}
Display statistics related to the zebra code that interacts with the
optional Forwarding Plane Manager (FPM) component.
diff --git a/doc/next-hop-tracking.txt b/doc/next-hop-tracking.txt
index d64433e2f..12ed63947 100644
--- a/doc/next-hop-tracking.txt
+++ b/doc/next-hop-tracking.txt
@@ -252,7 +252,7 @@ rnh table:
struct rnh
{
u_char flags;
- struct rib *state;
+ struct route_entry *state;
struct list *client_list;
struct route_node *node;
};
diff --git a/doc/nhrpd.texi b/doc/nhrpd.texi
index 1820044ae..069b46495 100644
--- a/doc/nhrpd.texi
+++ b/doc/nhrpd.texi
@@ -64,8 +64,10 @@ command defines the GRE subnet):
@example
@group
router bgp 65555
+ address-family ipv4 unicast
network 172.16.0.0/16
redistribute nhrp
+ exit-address-family
@end group
@end example
diff --git a/doc/ospf6d.texi b/doc/ospf6d.texi
index 31f4db0cc..3ea71fbd2 100644
--- a/doc/ospf6d.texi
+++ b/doc/ospf6d.texi
@@ -151,6 +151,10 @@ Shows requestlist of neighbor.
This command shows internal routing table.
@end deffn
+@deffn {Command} {show ipv6 ospf6 zebra} {}
+Shows state about what is being redistributed between zebra and OSPF6
+@end deffn
+
@node OSPF6 Configuration Examples
@section OSPF6 Configuration Examples
diff --git a/doc/vnc.texi b/doc/vnc.texi
index f375d3a7d..b14899421 100644
--- a/doc/vnc.texi
+++ b/doc/vnc.texi
@@ -1115,18 +1115,21 @@ The configuration for @code{VNC-GW 1} is shown below.
router bgp 64512
bgp router-id 192.168.1.101
bgp cluster-id 1.2.3.4
- redistribute vnc-direct
neighbor 192.168.1.102 remote-as 64512
- no neighbor 192.168.1.102 activate
neighbor 192.168.1.103 remote-as 64512
- no neighbor 192.168.1.103 activate
neighbor 192.168.1.104 remote-as 64512
- no neighbor 192.168.1.104 activate
neighbor 172.16.1.2 remote-as 64512
- neighbor 172.16.1.2 route-reflector-client
neighbor 172.16.2.2 remote-as 64512
- neighbor 172.16.2.2 route-reflector-client
-!
+ !
+ address-family ipv4 unicast
+ redistribute vnc-direct
+ no neighbor 192.168.1.102 activate
+ no neighbor 192.168.1.103 activate
+ no neighbor 192.168.1.104 activate
+ neighbor 172.16.1.2 route-reflector-client
+ neighbor 172.16.2.2 route-reflector-client
+ exit-address-family
+ !
address-family vpnv4 unicast
neighbor 192.168.1.102 activate
neighbor 192.168.1.103 activate
@@ -1148,16 +1151,21 @@ Configuration for @code{NVA 2}:
router bgp 64512
bgp router-id 192.168.1.104
neighbor 192.168.1.101 remote-as 64512
- no neighbor 192.168.1.101 activate
neighbor 192.168.1.102 remote-as 64512
- no neighbor 192.168.1.102 activate
neighbor 192.168.1.103 remote-as 64512
- no neighbor 192.168.1.103 activate
+ !
+ address-family ipv4 unicast
+ no neighbor 192.168.1.101 activate
+ no neighbor 192.168.1.102 activate
+ no neighbor 192.168.1.103 activate
+ exit-address-family
+ !
address-family vpnv4 unicast
neighbor 192.168.1.101 activate
neighbor 192.168.1.102 activate
neighbor 192.168.1.103 activate
exit-address-family
+ !
vnc defaults
response-lifetime 3600
exit-vnc
@@ -1231,12 +1239,15 @@ router bgp 64512
neighbor 192.168.1.101 remote-as 64512
neighbor 192.168.1.101 port 7179
neighbor 192.168.1.101 description iBGP-client-192-168-1-101
- neighbor 192.168.1.101 route-reflector-client
neighbor 192.168.1.102 remote-as 64512
neighbor 192.168.1.102 port 7179
neighbor 192.168.1.102 description iBGP-client-192-168-1-102
- neighbor 192.168.1.102 route-reflector-client
+
+ address-family ipv4 unicast
+ neighbor 192.168.1.101 route-reflector-client
+ neighbor 192.168.1.102 route-reflector-client
+ exit-address-family
address-family vpnv4
neighbor 192.168.1.101 activate