diff options
Diffstat (limited to 'doc')
-rw-r--r-- | doc/Building_FRR_on_Ubuntu1204.md | 9 | ||||
-rw-r--r-- | doc/Building_FRR_on_Ubuntu1404.md | 2 | ||||
-rw-r--r-- | doc/Building_FRR_on_Ubuntu1604.md | 4 | ||||
-rw-r--r-- | doc/Makefile.am | 7 | ||||
-rw-r--r-- | doc/babeld.texi | 212 | ||||
-rw-r--r-- | doc/bgpd.texi | 76 | ||||
-rw-r--r-- | doc/cli.md | 111 | ||||
-rw-r--r-- | doc/eigrpd.8.in | 122 | ||||
-rw-r--r-- | doc/eigrpd.texi | 216 | ||||
-rw-r--r-- | doc/install.texi | 3 | ||||
-rw-r--r-- | doc/main.texi | 5 | ||||
-rw-r--r-- | doc/next-hop-tracking.txt | 2 | ||||
-rw-r--r-- | doc/nhrpd.texi | 2 | ||||
-rw-r--r-- | doc/ospf6d.texi | 4 | ||||
-rw-r--r-- | doc/vnc.texi | 35 |
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 |