| @c -*-texinfo-*- |
| @c This is part of the Quagga Manual. |
| @c Copyright (C) 1999, 2000 Kunihiro Ishiguro |
| @c See file zebra.texi for copying conditions. |
| @node RIP |
| @comment node-name, next, previous, up |
| @chapter RIP |
| |
| RIP -- Routing Information Protocol is widely deployed interior gateway |
| protocol. RIP was developed in the 1970s at Xerox Labs as part of the |
| XNS routing protocol. RIP is a @dfn{distance-vector} protocol and is |
| based on the @dfn{Bellman-Ford} algorithms. As a distance-vector |
| protocol, RIP router send updates to its neighbors periodically, thus |
| allowing the convergence to a known topology. In each update, the |
| distance to any given network will be broadcasted to its neighboring |
| router. |
| |
| @command{ripd} supports RIP version 2 as described in RFC2453 and RIP |
| version 1 as described in RFC1058. |
| |
| @menu |
| * Starting and Stopping ripd:: |
| * RIP Configuration:: |
| * How to Announce RIP route:: |
| * Filtering RIP Routes:: |
| * RIP Metric Manipulation:: |
| * RIP distance:: |
| * RIP route-map:: |
| * RIP Authentication:: |
| * RIP Timers:: |
| * Show RIP Information:: |
| * RIP Debug Commands:: |
| @end menu |
| |
| @node Starting and Stopping ripd, RIP Configuration, RIP, RIP |
| @comment node-name, next, previous, up |
| @section Starting and Stopping ripd |
| |
| The default configuration file name of @command{ripd}'s is |
| @file{ripd.conf}. When invocation @command{ripd} searches directory |
| @value{INSTALL_PREFIX_ETC}. If @file{ripd.conf} is not there next |
| search current directory. |
| |
| RIP uses UDP port 521 to send and receive RIP packets. So the user must have |
| the capability to bind the port, generally this means that the user must |
| have superuser privileges. RIP protocol requires interface information |
| maintained by @command{zebra} daemon. So running @command{zebra} |
| is mandatory to run @command{ripd}. Thus minimum sequence for running |
| RIP is like below: |
| |
| @example |
| @group |
| # zebra -d |
| # ripd -d |
| @end group |
| @end example |
| |
| Please note that @command{zebra} must be invoked before @command{ripd}. |
| |
| To stop @command{ripd}. Please use @command{kill `cat |
| /var/run/ripd.pid`}. Certain signals have special meaningss to @command{ripd}. |
| |
| @table @samp |
| @item SIGHUP |
| Reload configuration file @file{ripd.conf}. All configurations are |
| reseted. All routes learned so far are cleared and removed from routing |
| table. |
| @item SIGUSR1 |
| Rotate @command{ripd} logfile. |
| @item SIGINT |
| @itemx SIGTERM |
| @command{ripd} sweeps all installed RIP routes then terminates properly. |
| @end table |
| |
| @command{ripd} 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{ripd}. |
| @end table |
| |
| @menu |
| * RIP netmask:: |
| @end menu |
| |
| @node RIP netmask, , Starting and Stopping ripd, Starting and Stopping ripd |
| @comment node-name, next, previous, up |
| @subsection RIP netmask |
| |
| The netmask features of @command{ripd} support both version 1 and version 2 of |
| RIP. Version 1 of RIP originally contained no netmask information. In |
| RIP version 1, network classes were originally used to determine the |
| size of the netmask. Class A networks use 8 bits of mask, Class B |
| networks use 16 bits of masks, while Class C networks use 24 bits of |
| mask. Today, the most widely used method of a network mask is assigned |
| to the packet on the basis of the interface that received the packet. |
| Version 2 of RIP supports a variable length subnet mask (VLSM). By |
| extending the subnet mask, the mask can be divided and reused. Each |
| subnet can be used for different purposes such as large to middle size |
| LANs and WAN links. Quagga @command{ripd} does not support the non-sequential |
| netmasks that are included in RIP Version 2. |
| |
| In a case of similar information with the same prefix and metric, the |
| old information will be suppressed. Ripd does not currently support |
| equal cost multipath routing. |
| |
| |
| @node RIP Configuration, How to Announce RIP route, Starting and Stopping ripd, RIP |
| @comment node-name, next, previous, up |
| @section RIP Configuration |
| |
| @deffn Command {router rip} {} |
| The @code{router rip} command is necessary to enable RIP. To disable |
| RIP, use the @code{no router rip} command. RIP must be enabled before |
| carrying out any of the RIP commands. |
| @end deffn |
| |
| @deffn Command {no router rip} {} |
| Disable RIP. |
| @end deffn |
| |
| RIP can be configured to process either Version 1 or Version 2 packets, |
| the default mode is Version 2. If no version is specified, then the RIP |
| daemon will default to Version 2. If RIP is set to Version |
| 1, the setting "Version 1" will be displayed, but the setting "Version |
| 2" will not be displayed whether or not Version 2 is set explicitly as |
| the version of RIP being used. The version can be specified globally, and |
| also on a per-interface basis (see below). |
| |
| @deffn {RIP Command} {version @var{version}} {} |
| Set RIP process's version. @var{version} can be `1'' or `2''. |
| @end deffn |
| |
| @deffn {RIP Command} {network @var{network}} {} |
| @deffnx {RIP Command} {no network @var{network}} {} |
| Set the RIP enable interface by @var{network}. The interfaces which |
| have addresses matching with @var{network} are enabled. |
| |
| This group of commands either enables or disables RIP interfaces between |
| certain numbers of a specified network address. For example, if the |
| network for 10.0.0.0/24 is RIP enabled, this would result in all the |
| addresses from 10.0.0.0 to 10.0.0.255 being enabled for RIP. The @code{no |
| network} command will disable RIP for the specified network. |
| @end deffn |
| |
| @deffn {RIP Command} {network @var{ifname}} {} |
| @deffnx {RIP Command} {no network @var{ifname}} {} |
| Set a RIP enabled interface by @var{ifname}. Both the sending and |
| receiving of RIP packets will be enabled on the port specified in the |
| @code{network ifname} command. The @code{no network ifname} command will disable |
| RIP on the specified interface. |
| @end deffn |
| |
| @deffn {RIP Command} {neighbor @var{a.b.c.d}} {} |
| @deffnx {RIP Command} {no neighbor @var{a.b.c.d}} {} |
| Specify RIP neighbor. When a neighbor doesn't understand multicast, |
| this command is used to specify neighbors. In some cases, not all |
| routers will be able to understand multicasting, where packets are sent |
| to a network or a group of addresses. In a situation where a neighbor |
| cannot process multicast packets, it is necessary to establish a direct |
| link between routers. The neighbor command allows the network |
| administrator to specify a router as a RIP neighbor. The @code{no |
| neighbor a.b.c.d} command will disable the RIP neighbor. |
| @end deffn |
| |
| Below is very simple RIP configuration. Interface @code{eth0} and |
| interface which address match to @code{10.0.0.0/8} are RIP enabled. |
| |
| @example |
| @group |
| ! |
| router rip |
| network 10.0.0.0/8 |
| network eth0 |
| ! |
| @end group |
| @end example |
| |
| Passive interface |
| |
| @deffn {RIP command} {passive-interface (@var{IFNAME}|default)} {} |
| @deffnx {RIP command} {no passive-interface @var{IFNAME}} {} |
| This command sets the specified interface to passive mode. On passive mode |
| interface, all receiving packets are processed as normal and ripd does |
| not send either multicast or unicast RIP packets except to RIP neighbors |
| specified with @code{neighbor} command. The interface may be specified |
| as @var{default} to make ripd default to passive on all interfaces. |
| |
| The default is to be passive on all interfaces. |
| @end deffn |
| |
| RIP version handling |
| |
| @deffn {Interface command} {ip rip send version @var{version}} {} |
| @var{version} can be `1', `2', `1 2'. This configuration command |
| overrides the router's rip version setting. The command will enable the |
| selected interface to send packets with RIP Version 1, RIP Version 2, or |
| both. In the case of '1 2', packets will be both broadcast and |
| multicast. |
| |
| The default is to send only version 2. |
| @end deffn |
| |
| @deffn {Interface command} {ip rip receive version @var{version}} {} |
| Version setting for incoming RIP packets. This command will enable the |
| selected interface to receive packets in RIP Version 1, RIP Version 2, |
| or both. |
| |
| The default is to receive both versions. |
| @end deffn |
| |
| RIP split-horizon |
| |
| @deffn {Interface command} {ip split-horizon} {} |
| @deffnx {Interface command} {no ip split-horizon} {} |
| Control split-horizon on the interface. Default is @code{ip |
| split-horizon}. If you don't perform split-horizon on the interface, |
| please specify @code{no ip split-horizon}. |
| @end deffn |
| |
| @node How to Announce RIP route, Filtering RIP Routes, RIP Configuration, RIP |
| @comment node-name, next, previous, up |
| @section How to Announce RIP route |
| |
| @deffn {RIP command} {redistribute kernel} {} |
| @deffnx {RIP command} {redistribute kernel metric <0-16>} {} |
| @deffnx {RIP command} {redistribute kernel route-map @var{route-map}} {} |
| @deffnx {RIP command} {no redistribute kernel} {} |
| @code{redistribute kernel} redistributes routing information from |
| kernel route entries into the RIP tables. @code{no redistribute kernel} |
| disables the routes. |
| @end deffn |
| |
| @deffn {RIP command} {redistribute static} {} |
| @deffnx {RIP command} {redistribute static metric <0-16>} {} |
| @deffnx {RIP command} {redistribute static route-map @var{route-map}} {} |
| @deffnx {RIP command} {no redistribute static} {} |
| @code{redistribute static} redistributes routing information from |
| static route entries into the RIP tables. @code{no redistribute static} |
| disables the routes. |
| @end deffn |
| |
| @deffn {RIP command} {redistribute connected} {} |
| @deffnx {RIP command} {redistribute connected metric <0-16>} {} |
| @deffnx {RIP command} {redistribute connected route-map @var{route-map}} {} |
| @deffnx {RIP command} {no redistribute connected} {} |
| Redistribute connected routes into the RIP tables. @code{no |
| redistribute connected} disables the connected routes in the RIP tables. |
| This command redistribute connected of the interface which RIP disabled. |
| The connected route on RIP enabled interface is announced by default. |
| @end deffn |
| |
| @deffn {RIP command} {redistribute ospf} {} |
| @deffnx {RIP command} {redistribute ospf metric <0-16>} {} |
| @deffnx {RIP command} {redistribute ospf route-map @var{route-map}} {} |
| @deffnx {RIP command} {no redistribute ospf} {} |
| @code{redistribute ospf} redistributes routing information from |
| ospf route entries into the RIP tables. @code{no redistribute ospf} |
| disables the routes. |
| @end deffn |
| |
| @deffn {RIP command} {redistribute bgp} {} |
| @deffnx {RIP command} {redistribute bgp metric <0-16>} {} |
| @deffnx {RIP command} {redistribute bgp route-map @var{route-map}} {} |
| @deffnx {RIP command} {no redistribute bgp} {} |
| @code{redistribute bgp} redistributes routing information from |
| bgp route entries into the RIP tables. @code{no redistribute bgp} |
| disables the routes. |
| @end deffn |
| |
| If you want to specify RIP only static routes: |
| |
| @deffn {RIP command} {default-information originate} {} |
| @end deffn |
| |
| @deffn {RIP command} {route @var{a.b.c.d/m}} {} |
| @deffnx {RIP command} {no route @var{a.b.c.d/m}} {} |
| This command is specific to Quagga. The @code{route} command makes a static |
| route only inside RIP. This command should be used only by advanced |
| users who are particularly knowledgeable about the RIP protocol. In |
| most cases, we recommend creating a static route in Quagga and |
| redistributing it in RIP using @code{redistribute static}. |
| @end deffn |
| |
| |
| @node Filtering RIP Routes, RIP Metric Manipulation, How to Announce RIP route, RIP |
| @comment node-name, next, previous, up |
| @section Filtering RIP Routes |
| |
| RIP routes can be filtered by a distribute-list. |
| |
| @deffn Command {distribute-list @var{access_list} @var{direct} @var{ifname}} {} |
| You can apply access lists to the interface with a @code{distribute-list} |
| command. @var{access_list} is the access list name. @var{direct} is |
| @samp{in} or @samp{out}. If @var{direct} is @samp{in} the access list |
| is applied to input packets. |
| |
| The @code{distribute-list} command can be used to filter the RIP path. |
| @code{distribute-list} can apply access-lists to a chosen interface. |
| First, one should specify the access-list. Next, the name of the |
| access-list is used in the distribute-list command. For example, in the |
| following configuration @samp{eth0} will permit only the paths that |
| match the route 10.0.0.0/8 |
| |
| @example |
| @group |
| ! |
| router rip |
| distribute-list private in eth0 |
| ! |
| access-list private permit 10 10.0.0.0/8 |
| access-list private deny any |
| ! |
| @end group |
| @end example |
| @end deffn |
| |
| @code{distribute-list} can be applied to both incoming and outgoing data. |
| |
| @deffn Command {distribute-list prefix @var{prefix_list} (in|out) @var{ifname}} {} |
| You can apply prefix lists to the interface with a |
| @code{distribute-list} command. @var{prefix_list} is the prefix list |
| name. Next is the direction of @samp{in} or @samp{out}. If |
| @var{direct} is @samp{in} the access list is applied to input packets. |
| @end deffn |
| |
| @node RIP Metric Manipulation, RIP distance, Filtering RIP Routes, RIP |
| @comment node-name, next, previous, up |
| @section RIP Metric Manipulation |
| |
| RIP metric is a value for distance for the network. Usually |
| @command{ripd} increment the metric when the network information is |
| received. Redistributed routes' metric is set to 1. |
| |
| @deffn {RIP command} {default-metric <1-16>} {} |
| @deffnx {RIP command} {no default-metric <1-16>} {} |
| This command modifies the default metric value for redistributed routes. The |
| default value is 1. This command does not affect connected route |
| even if it is redistributed by @command{redistribute connected}. To modify |
| connected route's metric value, please use @command{redistribute |
| connected metric} or @command{route-map}. @command{offset-list} also |
| affects connected routes. |
| @end deffn |
| |
| @deffn {RIP command} {offset-list @var{access-list} (in|out)} {} |
| @deffnx {RIP command} {offset-list @var{access-list} (in|out) @var{ifname}} {} |
| @end deffn |
| |
| @node RIP distance, RIP route-map, RIP Metric Manipulation, RIP |
| @comment node-name, next, previous, up |
| @section RIP distance |
| |
| Distance value is used in zebra daemon. Default RIP distance is 120. |
| |
| @deffn {RIP command} {distance <1-255>} {} |
| @deffnx {RIP command} {no distance <1-255>} {} |
| Set default RIP distance to specified value. |
| @end deffn |
| |
| @deffn {RIP command} {distance <1-255> @var{A.B.C.D/M}} {} |
| @deffnx {RIP command} {no distance <1-255> @var{A.B.C.D/M}} {} |
| Set default RIP distance to specified value when the route's source IP |
| address matches the specified prefix. |
| @end deffn |
| |
| @deffn {RIP command} {distance <1-255> @var{A.B.C.D/M} @var{access-list}} {} |
| @deffnx {RIP command} {no distance <1-255> @var{A.B.C.D/M} @var{access-list}} {} |
| Set default RIP distance to specified value when the route's source IP |
| address matches the specified prefix and the specified access-list. |
| @end deffn |
| |
| @node RIP route-map, RIP Authentication, RIP distance, RIP |
| @comment node-name, next, previous, up |
| @section RIP route-map |
| |
| Usage of @command{ripd}'s route-map support. |
| |
| Optional argument route-map MAP_NAME can be added to each @code{redistribute} |
| statement. |
| |
| @example |
| redistribute static [route-map MAP_NAME] |
| redistribute connected [route-map MAP_NAME] |
| ..... |
| @end example |
| |
| Cisco applies route-map _before_ routes will exported to rip route table. |
| In current Quagga's test implementation, @command{ripd} applies route-map |
| after routes are listed in the route table and before routes will be |
| announced to an interface (something like output filter). I think it is not |
| so clear, but it is draft and it may be changed at future. |
| |
| Route-map statement (@pxref{Route Map}) is needed to use route-map |
| functionality. |
| |
| @deffn {Route Map} {match interface @var{word}} {} |
| This command match to incoming interface. Notation of this match is |
| different from Cisco. Cisco uses a list of interfaces - NAME1 NAME2 |
| ... NAMEN. Ripd allows only one name (maybe will change in the |
| future). Next - Cisco means interface which includes next-hop of |
| routes (it is somewhat similar to "ip next-hop" statement). Ripd |
| means interface where this route will be sent. This difference is |
| because "next-hop" of same routes which sends to different interfaces |
| must be different. Maybe it'd be better to made new matches - say |
| "match interface-out NAME" or something like that. |
| @end deffn |
| |
| @deffn {Route Map} {match ip address @var{word}} {} |
| @deffnx {Route Map} {match ip address prefix-list @var{word}} {} |
| Match if route destination is permitted by access-list. |
| @end deffn |
| |
| @deffn {Route Map} {match ip next-hop A.B.C.D} {} |
| Cisco uses here <access-list>, @command{ripd} IPv4 address. Match if |
| route has this next-hop (meaning next-hop listed in the rip route |
| table - "show ip rip") |
| @end deffn |
| |
| @deffn {Route Map} {match metric <0-4294967295>} {} |
| This command match to the metric value of RIP updates. For other |
| protocol compatibility metric range is shown as <0-4294967295>. But |
| for RIP protocol only the value range <0-16> make sense. |
| @end deffn |
| |
| @deffn {Route Map} {set ip next-hop A.B.C.D} {} |
| This command set next hop value in RIPv2 protocol. This command does |
| not affect RIPv1 because there is no next hop field in the packet. |
| @end deffn |
| |
| @deffn {Route Map} {set metric <0-4294967295>} {} |
| Set a metric for matched route when sending announcement. The metric |
| value range is very large for compatibility with other protocols. For |
| RIP, valid metric values are from 1 to 16. |
| @end deffn |
| |
| @node RIP Authentication, RIP Timers, RIP route-map, RIP |
| @comment node-name, next, previous, up |
| @section RIP Authentication |
| |
| @deffn {Interface command} {ip rip authentication mode md5} {} |
| @deffnx {Interface command} {no ip rip authentication mode md5} {} |
| Set the interface with RIPv2 MD5 authentication. |
| @end deffn |
| |
| @deffn {Interface command} {ip rip authentication mode text} {} |
| @deffnx {Interface command} {no ip rip authentication mode text} {} |
| Set the interface with RIPv2 simple password authentication. |
| @end deffn |
| |
| @deffn {Interface command} {ip rip authentication string @var{string}} {} |
| @deffnx {Interface command} {no ip rip authentication string @var{string}} {} |
| RIP version 2 has simple text authentication. This command sets |
| authentication string. The string must be shorter than 16 characters. |
| @end deffn |
| |
| @deffn {Interface command} {ip rip authentication key-chain @var{key-chain}} {} |
| @deffnx {Interface command} {no ip rip authentication key-chain @var{key-chain}} {} |
| Specifiy Keyed MD5 chain. |
| @end deffn |
| |
| @example |
| ! |
| key chain test |
| key 1 |
| key-string test |
| ! |
| interface eth1 |
| ip rip authentication mode md5 |
| ip rip authentication key-chain test |
| ! |
| @end example |
| |
| @node RIP Timers, Show RIP Information, RIP Authentication, RIP |
| @comment node-name, next, previous, up |
| @section RIP Timers |
| |
| @deffn {RIP command} {timers basic @var{update} @var{timeout} @var{garbage}} {} |
| |
| RIP protocol has several timers. User can configure those timers' values |
| by @code{timers basic} command. |
| |
| The default settings for the timers are as follows: |
| |
| @itemize @bullet |
| @item |
| The update timer is 30 seconds. Every update timer seconds, the RIP |
| process is awakened to send an unsolicited Response message containing |
| the complete routing table to all neighboring RIP routers. |
| |
| @item |
| The timeout timer is 180 seconds. Upon expiration of the timeout, the |
| route is no longer valid; however, it is retained in the routing table |
| for a short time so that neighbors can be notified that the route has |
| been dropped. |
| |
| @item |
| The garbage collect timer is 120 seconds. Upon expiration of the |
| garbage-collection timer, the route is finally removed from the routing |
| table. |
| |
| @end itemize |
| |
| The @code{timers basic} command allows the the default values of the timers |
| listed above to be changed. |
| @end deffn |
| |
| @deffn {RIP command} {no timers basic} {} |
| The @code{no timers basic} command will reset the timers to the default |
| settings listed above. |
| @end deffn |
| |
| @node Show RIP Information, RIP Debug Commands, RIP Timers, RIP |
| @comment node-name, next, previous, up |
| @section Show RIP Information |
| |
| To display RIP routes. |
| |
| @deffn Command {show ip rip} {} |
| Show RIP routes. |
| @end deffn |
| |
| The command displays all RIP routes. For routes that are received |
| through RIP, this command will display the time the packet was sent and |
| the tag information. This command will also display this information |
| for routes redistributed into RIP. |
| |
| @c Exmaple here. |
| |
| @deffn Command {show ip protocols} {} |
| The command displays current RIP status. It includes RIP timer, |
| filtering, version, RIP enabled interface and RIP peer inforation. |
| @end deffn |
| |
| @example |
| @group |
| ripd> @b{show ip protocols} |
| Routing Protocol is "rip" |
| Sending updates every 30 seconds with +/-50%, next due in 35 seconds |
| Timeout after 180 seconds, garbage collect after 120 seconds |
| Outgoing update filter list for all interface is not set |
| Incoming update filter list for all interface is not set |
| Default redistribution metric is 1 |
| Redistributing: kernel connected |
| Default version control: send version 2, receive version 2 |
| Interface Send Recv |
| Routing for Networks: |
| eth0 |
| eth1 |
| 1.1.1.1 |
| 203.181.89.241 |
| Routing Information Sources: |
| Gateway BadPackets BadRoutes Distance Last Update |
| @end group |
| @end example |
| |
| @node RIP Debug Commands, , Show RIP Information, RIP |
| @comment node-name, next, previous, up |
| @section RIP Debug Commands |
| |
| Debug for RIP protocol. |
| |
| @deffn Command {debug rip events} {} |
| Debug rip events. |
| @end deffn |
| |
| @code{debug rip} will show RIP events. Sending and receiving |
| packets, timers, and changes in interfaces are events shown with @command{ripd}. |
| |
| @deffn Command {debug rip packet} {} |
| Debug rip packet. |
| @end deffn |
| |
| @code{debug rip packet} will display detailed information about the RIP |
| packets. The origin and port number of the packet as well as a packet |
| dump is shown. |
| |
| @deffn Command {debug rip zebra} {} |
| Debug rip between zebra communication. |
| @end deffn |
| |
| This command will show the communication between @command{ripd} and @command{zebra}. The |
| main information will include addition and deletion of paths to the |
| kernel and the sending and receiving of interface information. |
| |
| @deffn Command {show debugging rip} {} |
| Display @command{ripd}'s debugging option. |
| @end deffn |
| |
| @code{show debugging rip} will show all information currently set for ripd |
| debug. |