@c -*-texinfo-*-
@c This is part of the Quagga Manual.
@c @value{COPYRIGHT_STR}
@c See file quagga.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
@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 520 to send and receive RIP packets.  So the user must have
the capability to bind the port, generally this means that the user must
have superuser privileges.  RIP protocol requires interface information
maintained by @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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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
@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.
