7 RIP -- Routing Information Protocol is widely deployed interior gateway
8 protocol. RIP was developed in the 1970s at Xerox Labs as part of the
9 XNS routing protocol. RIP is a :term:`distance-vector` protocol and is
10 based on the :term:`Bellman-Ford` algorithms. As a distance-vector
11 protocol, RIP router send updates to its neighbors periodically, thus
12 allowing the convergence to a known topology. In each update, the
13 distance to any given network will be broadcast to its neighboring
16 *ripd* supports RIP version 2 as described in RFC2453 and RIP
17 version 1 as described in RFC1058.
19 .. _starting-and-stopping-ripd:
21 Starting and Stopping ripd
22 ==========================
24 The default configuration file name of *ripd*'s is :file:`ripd.conf`. When
25 invocation *ripd* searches directory |INSTALL_PREFIX_ETC|. If :file:`ripd.conf`
26 is not there next search current directory.
28 RIP uses UDP port 520 to send and receive RIP packets. So the user must have
29 the capability to bind the port, generally this means that the user must have
30 superuser privileges. RIP protocol requires interface information maintained by
31 *zebra* daemon. So running *zebra* is mandatory to run *ripd*. Thus minimum
32 sequence for running RIP is like below:
40 Please note that *zebra* must be invoked before *ripd*.
42 To stop *ripd*. Please use::
43 kill `cat /var/run/ripd.pid`
45 Certain signals have special meanings to *ripd*.
47 +-------------+------------------------------------------------------+
49 +=============+======================================================+
50 | ``SIGHUP`` | Reload configuration file :file:`ripd.conf`. |
51 | | All configurations are reset. All routes learned |
52 | | so far are cleared and removed from routing table. |
53 +-------------+------------------------------------------------------+
54 | ``SIGUSR1`` | Rotate the *ripd* logfile. |
55 +-------------+------------------------------------------------------+
57 | ``SIGTERM`` | Sweep all installed routes and gracefully terminate. |
58 +-------------+------------------------------------------------------+
60 *ripd* invocation options. Common options that can be specified
61 (:ref:`common-invocation-options`).
69 The netmask features of *ripd* support both version 1 and version 2 of RIP.
70 Version 1 of RIP originally contained no netmask information. In RIP version 1,
71 network classes were originally used to determine the size of the netmask.
72 Class A networks use 8 bits of mask, Class B networks use 16 bits of masks,
73 while Class C networks use 24 bits of mask. Today, the most widely used method
74 of a network mask is assigned to the packet on the basis of the interface that
75 received the packet. Version 2 of RIP supports a variable length subnet mask
76 (VLSM). By extending the subnet mask, the mask can be divided and reused. Each
77 subnet can be used for different purposes such as large to middle size LANs and
78 WAN links. FRR *ripd* does not support the non-sequential netmasks that are
79 included in RIP Version 2.
81 In a case of similar information with the same prefix and metric, the old
82 information will be suppressed. Ripd does not currently support equal cost
85 .. _rip-configuration:
91 .. clicmd:: router rip
93 The `router rip` command is necessary to enable RIP. To disable RIP, use the
94 `no router rip` command. RIP must be enabled before carrying out any of the
97 .. index:: no router rip
98 .. clicmd:: no router rip
102 .. index:: network NETWORK
103 .. clicmd:: network NETWORK
105 .. index:: no network NETWORK
106 .. clicmd:: no network NETWORK
108 Set the RIP enable interface by NETWORK. The interfaces which have addresses
109 matching with NETWORK are enabled.
111 This group of commands either enables or disables RIP interfaces between
112 certain numbers of a specified network address. For example, if the network
113 for 10.0.0.0/24 is RIP enabled, this would result in all the addresses from
114 10.0.0.0 to 10.0.0.255 being enabled for RIP. The `no network` command will
115 disable RIP for the specified network.
117 .. index:: network IFNAME
118 .. clicmd:: network IFNAME
120 .. index:: no network IFNAME
121 .. clicmd:: no network IFNAME
123 Set a RIP enabled interface by IFNAME. Both the sending and
124 receiving of RIP packets will be enabled on the port specified in the
125 `network ifname` command. The `no network ifname` command will disable
126 RIP on the specified interface.
128 .. index:: neighbor A.B.C.D
129 .. clicmd:: neighbor A.B.C.D
131 .. index:: no neighbor A.B.C.D
132 .. clicmd:: no neighbor A.B.C.D
134 Specify RIP neighbor. When a neighbor doesn't understand multicast, this
135 command is used to specify neighbors. In some cases, not all routers will be
136 able to understand multicasting, where packets are sent to a network or a
137 group of addresses. In a situation where a neighbor cannot process multicast
138 packets, it is necessary to establish a direct link between routers. The
139 neighbor command allows the network administrator to specify a router as a
140 RIP neighbor. The `no neighbor a.b.c.d` command will disable the RIP
143 Below is very simple RIP configuration. Interface `eth0` and interface which
144 address match to `10.0.0.0/8` are RIP enabled.
155 .. index:: passive-interface (IFNAME|default)
156 .. clicmd:: passive-interface (IFNAME|default)
158 .. index:: no passive-interface IFNAME
159 .. clicmd:: no passive-interface IFNAME
161 This command sets the specified interface to passive mode. On passive mode
162 interface, all receiving packets are processed as normal and ripd does not
163 send either multicast or unicast RIP packets except to RIP neighbors
164 specified with `neighbor` command. The interface may be specified as
165 `default` to make ripd default to passive on all interfaces.
167 The default is to be passive on all interfaces.
169 .. index:: ip split-horizon
170 .. clicmd:: ip split-horizon
172 .. index:: no ip split-horizon
173 .. clicmd:: no ip split-horizon
175 Control split-horizon on the interface. Default is `ip split-horizon`. If
176 you don't perform split-horizon on the interface, please specify `no ip
179 .. _rip-version-control:
184 RIP can be configured to send either Version 1 or Version 2 packets. The
185 default is to send RIPv2 while accepting both RIPv1 and RIPv2 (and replying
186 with packets of the appropriate version for REQUESTS / triggered updates). The
187 version to receive and send can be specified globally, and further overridden on
188 a per-interface basis if needs be for send and receive separately (see below).
190 It is important to note that RIPv1 cannot be authenticated. Further, if RIPv1
191 is enabled then RIP will reply to REQUEST packets, sending the state of its RIP
192 routing table to any remote routers that ask on demand. For a more detailed
193 discussion on the security implications of RIPv1 see :ref:`rip-authentication`.
195 .. index:: version VERSION
196 .. clicmd:: version VERSION
198 Set RIP version to accept for reads and send. ``VERSION`` can be either 1 or
201 Disabling RIPv1 by specifying version 2 is STRONGLY encouraged,
202 :ref:`rip-authentication`. This may become the default in a future release.
204 Default: Send Version 2, and accept either version.
206 .. index:: no version
207 .. clicmd:: no version
209 Reset the global version setting back to the default.
211 .. index:: ip rip send version VERSION
212 .. clicmd:: ip rip send version VERSION
214 VERSION can be ``1``, ``2``, or ``1 2``.
216 This interface command overrides the global rip version setting, and selects
217 which version of RIP to send packets with, for this interface specifically.
218 Choice of RIP Version 1, RIP Version 2, or both versions. In the latter
219 case, where ``1 2`` is specified, packets will be both broadcast and
222 Default: Send packets according to the global version (version 2)
224 .. index:: ip rip receive version VERSION
225 .. clicmd:: ip rip receive version VERSION
227 VERSION can be ``1``, ``2``, or ``1 2``.
229 This interface command overrides the global rip version setting, and selects
230 which versions of RIP packets will be accepted on this interface. Choice of
231 RIP Version 1, RIP Version 2, or both.
233 Default: Accept packets according to the global setting (both 1 and 2).
235 .. _how-to-announce-rip-route:
237 How to Announce RIP route
238 =========================
240 .. index:: redistribute kernel
241 .. clicmd:: redistribute kernel
243 .. index:: redistribute kernel metric (0-16)
244 .. clicmd:: redistribute kernel metric (0-16)
246 .. index:: redistribute kernel route-map ROUTE-MAP
247 .. clicmd:: redistribute kernel route-map ROUTE-MAP
249 .. index:: no redistribute kernel
250 .. clicmd:: no redistribute kernel
252 `redistribute kernel` redistributes routing information from kernel route
253 entries into the RIP tables. `no redistribute kernel` disables the routes.
255 .. index:: redistribute static
256 .. clicmd:: redistribute static
258 .. index:: redistribute static metric (0-16)
259 .. clicmd:: redistribute static metric (0-16)
261 .. index:: redistribute static route-map ROUTE-MAP
262 .. clicmd:: redistribute static route-map ROUTE-MAP
264 .. index:: no redistribute static
265 .. clicmd:: no redistribute static
267 `redistribute static` redistributes routing information from static route
268 entries into the RIP tables. `no redistribute static` disables the routes.
270 .. index:: redistribute connected
271 .. clicmd:: redistribute connected
273 .. index:: redistribute connected metric (0-16)
274 .. clicmd:: redistribute connected metric (0-16)
276 .. index:: redistribute connected route-map ROUTE-MAP
277 .. clicmd:: redistribute connected route-map ROUTE-MAP
279 .. index:: no redistribute connected
280 .. clicmd:: no redistribute connected
282 Redistribute connected routes into the RIP tables. `no redistribute
283 connected` disables the connected routes in the RIP tables. This command
284 redistribute connected of the interface which RIP disabled. The connected
285 route on RIP enabled interface is announced by default.
287 .. index:: redistribute ospf
288 .. clicmd:: redistribute ospf
290 .. index:: redistribute ospf metric (0-16)
291 .. clicmd:: redistribute ospf metric (0-16)
293 .. index:: redistribute ospf route-map ROUTE-MAP
294 .. clicmd:: redistribute ospf route-map ROUTE-MAP
296 .. index:: no redistribute ospf
297 .. clicmd:: no redistribute ospf
299 `redistribute ospf` redistributes routing information from ospf route
300 entries into the RIP tables. `no redistribute ospf` disables the routes.
302 .. index:: redistribute bgp
303 .. clicmd:: redistribute bgp
305 .. index:: redistribute bgp metric (0-16)
306 .. clicmd:: redistribute bgp metric (0-16)
308 .. index:: redistribute bgp route-map ROUTE-MAP
309 .. clicmd:: redistribute bgp route-map ROUTE-MAP
311 .. index:: no redistribute bgp
312 .. clicmd:: no redistribute bgp
314 `redistribute bgp` redistributes routing information from bgp route entries
315 into the RIP tables. `no redistribute bgp` disables the routes.
317 If you want to specify RIP only static routes:
319 .. index:: default-information originate
320 .. clicmd:: default-information originate
322 .. index:: route A.B.C.D/M
323 .. clicmd:: route A.B.C.D/M
325 .. index:: no route A.B.C.D/M
326 .. clicmd:: no route A.B.C.D/M
328 This command is specific to FRR. The `route` command makes a static route
329 only inside RIP. This command should be used only by advanced users who are
330 particularly knowledgeable about the RIP protocol. In most cases, we
331 recommend creating a static route in FRR and redistributing it in RIP using
332 `redistribute static`.
334 .. _filtering-rip-routes:
339 RIP routes can be filtered by a distribute-list.
341 .. index:: distribute-list ACCESS_LIST DIRECT IFNAME
342 .. clicmd:: distribute-list ACCESS_LIST DIRECT IFNAME
344 You can apply access lists to the interface with a `distribute-list` command.
345 ACCESS_LIST is the access list name. DIRECT is ``in`` or ``out``. If DIRECT
346 is ``in`` the access list is applied to input packets.
348 The `distribute-list` command can be used to filter the RIP path.
349 `distribute-list` can apply access-lists to a chosen interface. First, one
350 should specify the access-list. Next, the name of the access-list is used in
351 the distribute-list command. For example, in the following configuration
352 ``eth0`` will permit only the paths that match the route 10.0.0.0/8
358 distribute-list private in eth0
360 access-list private permit 10 10.0.0.0/8
361 access-list private deny any
365 `distribute-list` can be applied to both incoming and outgoing data.
367 .. index:: distribute-list prefix PREFIX_LIST (in|out) IFNAME
368 .. clicmd:: distribute-list prefix PREFIX_LIST (in|out) IFNAME
370 You can apply prefix lists to the interface with a `distribute-list`
371 command. PREFIX_LIST is the prefix list name. Next is the direction of
372 ``in`` or ``out``. If DIRECT is ``in`` the access list is applied to input
375 .. _rip-metric-manipulation:
377 RIP Metric Manipulation
378 =======================
380 RIP metric is a value for distance for the network. Usually
381 *ripd* increment the metric when the network information is
382 received. Redistributed routes' metric is set to 1.
384 .. index:: default-metric (1-16)
385 .. clicmd:: default-metric (1-16)
387 .. index:: no default-metric (1-16)
388 .. clicmd:: no default-metric (1-16)
390 This command modifies the default metric value for redistributed routes.
391 The default value is 1. This command does not affect connected route even if
392 it is redistributed by *redistribute connected*. To modify connected route's
393 metric value, please use ``redistribute connected metric`` or *route-map*.
394 *offset-list* also affects connected routes.
396 .. index:: offset-list ACCESS-LIST (in|out)
397 .. clicmd:: offset-list ACCESS-LIST (in|out)
399 .. index:: offset-list ACCESS-LIST (in|out) IFNAME
400 .. clicmd:: offset-list ACCESS-LIST (in|out) IFNAME
408 Distance value is used in zebra daemon. Default RIP distance is 120.
410 .. index:: distance (1-255)
411 .. clicmd:: distance (1-255)
413 .. index:: no distance (1-255)
414 .. clicmd:: no distance (1-255)
416 Set default RIP distance to specified value.
418 .. index:: distance (1-255) A.B.C.D/M
419 .. clicmd:: distance (1-255) A.B.C.D/M
421 .. index:: no distance (1-255) A.B.C.D/M
422 .. clicmd:: no distance (1-255) A.B.C.D/M
424 Set default RIP distance to specified value when the route's source IP
425 address matches the specified prefix.
427 .. index:: distance (1-255) A.B.C.D/M ACCESS-LIST
428 .. clicmd:: distance (1-255) A.B.C.D/M ACCESS-LIST
430 .. index:: no distance (1-255) A.B.C.D/M ACCESS-LIST
431 .. clicmd:: no distance (1-255) A.B.C.D/M ACCESS-LIST
433 Set default RIP distance to specified value when the route's source IP
434 address matches the specified prefix and the specified access-list.
441 Usage of *ripd*'s route-map support.
443 Optional argument route-map MAP_NAME can be added to each `redistribute`
448 redistribute static [route-map MAP_NAME]
449 redistribute connected [route-map MAP_NAME]
453 Cisco applies route-map _before_ routes will exported to rip route table. In
454 current FRR's test implementation, *ripd* applies route-map after routes are
455 listed in the route table and before routes will be announced to an interface
456 (something like output filter). I think it is not so clear, but it is draft and
457 it may be changed at future.
459 Route-map statement (:ref:`route-map`) is needed to use route-map
462 .. index:: match interface WORD
463 .. clicmd:: match interface WORD
465 This command match to incoming interface. Notation of this match is
466 different from Cisco. Cisco uses a list of interfaces - NAME1 NAME2 ...
467 NAMEN. Ripd allows only one name (maybe will change in the future). Next -
468 Cisco means interface which includes next-hop of routes (it is somewhat
469 similar to "ip next-hop" statement). Ripd means interface where this route
470 will be sent. This difference is because "next-hop" of same routes which
471 sends to different interfaces must be different. Maybe it'd be better to
472 made new matches - say "match interface-out NAME" or something like that.
474 .. index:: match ip address WORD
475 .. clicmd:: match ip address WORD
477 .. index:: match ip address prefix-list WORD
478 .. clicmd:: match ip address prefix-list WORD
480 Match if route destination is permitted by access-list.
482 .. index:: match ip next-hop WORD
483 .. clicmd:: match ip next-hop WORD
485 .. index:: match ip next-hop prefix-list WORD
486 .. clicmd:: match ip next-hop prefix-list WORD
488 Match if route next-hop (meaning next-hop listed in the rip route-table as
489 displayed by "show ip rip") is permitted by access-list.
491 .. index:: match metric (0-4294967295)
492 .. clicmd:: match metric (0-4294967295)
494 This command match to the metric value of RIP updates. For other protocol
495 compatibility metric range is shown as (0-4294967295). But for RIP protocol
496 only the value range (0-16) make sense.
498 .. index:: set ip next-hop A.B.C.D
499 .. clicmd:: set ip next-hop A.B.C.D
501 This command set next hop value in RIPv2 protocol. This command does not
502 affect RIPv1 because there is no next hop field in the packet.
504 .. index:: set metric (0-4294967295)
505 .. clicmd:: set metric (0-4294967295)
507 Set a metric for matched route when sending announcement. The metric value
508 range is very large for compatibility with other protocols. For RIP, valid
509 metric values are from 1 to 16.
511 .. _rip-authentication:
516 RIPv2 allows packets to be authenticated via either an insecure plain
517 text password, included with the packet, or via a more secure MD5 based
518 :abbr:`HMAC (keyed-Hashing for Message AuthentiCation)`,
519 RIPv1 can not be authenticated at all, thus when authentication is
520 configured `ripd` will discard routing updates received via RIPv1
523 However, unless RIPv1 reception is disabled entirely,
524 :ref:`rip-version-control`, RIPv1 REQUEST packets which are received,
525 which query the router for routing information, will still be honoured
526 by `ripd`, and `ripd` WILL reply to such packets. This allows
527 `ripd` to honour such REQUESTs (which sometimes is used by old
528 equipment and very simple devices to bootstrap their default route),
529 while still providing security for route updates which are received.
531 In short: Enabling authentication prevents routes being updated by
532 unauthenticated remote routers, but still can allow routes (I.e. the
533 entire RIP routing table) to be queried remotely, potentially by anyone
534 on the internet, via RIPv1.
536 To prevent such unauthenticated querying of routes disable RIPv1,
537 :ref:`rip-version-control`.
539 .. index:: ip rip authentication mode md5
540 .. clicmd:: ip rip authentication mode md5
542 .. index:: no ip rip authentication mode md5
543 .. clicmd:: no ip rip authentication mode md5
545 Set the interface with RIPv2 MD5 authentication.
547 .. index:: ip rip authentication mode text
548 .. clicmd:: ip rip authentication mode text
550 .. index:: no ip rip authentication mode text
551 .. clicmd:: no ip rip authentication mode text
553 Set the interface with RIPv2 simple password authentication.
555 .. index:: ip rip authentication string STRING
556 .. clicmd:: ip rip authentication string STRING
558 .. index:: no ip rip authentication string STRING
559 .. clicmd:: no ip rip authentication string STRING
561 RIP version 2 has simple text authentication. This command sets
562 authentication string. The string must be shorter than 16 characters.
564 .. index:: ip rip authentication key-chain KEY-CHAIN
565 .. clicmd:: ip rip authentication key-chain KEY-CHAIN
567 .. index:: no ip rip authentication key-chain KEY-CHAIN
568 .. clicmd:: no ip rip authentication key-chain KEY-CHAIN
570 Specify Keyed MD5 chain.
580 ip rip authentication mode md5
581 ip rip authentication key-chain test
590 .. index:: timers basic UPDATE TIMEOUT GARBAGE
591 .. clicmd:: timers basic UPDATE TIMEOUT GARBAGE
594 RIP protocol has several timers. User can configure those timers' values
595 by `timers basic` command.
597 The default settings for the timers are as follows:
599 - The update timer is 30 seconds. Every update timer seconds, the RIP
600 process is awakened to send an unsolicited Response message containing
601 the complete routing table to all neighboring RIP routers.
602 - The timeout timer is 180 seconds. Upon expiration of the timeout, the
603 route is no longer valid; however, it is retained in the routing table
604 for a short time so that neighbors can be notified that the route has
606 - The garbage collect timer is 120 seconds. Upon expiration of the
607 garbage-collection timer, the route is finally removed from the routing
610 The ``timers basic`` command allows the the default values of the timers
611 listed above to be changed.
613 .. index:: no timers basic
614 .. clicmd:: no timers basic
616 The `no timers basic` command will reset the timers to the default settings
619 .. _show-rip-information:
624 To display RIP routes.
626 .. index:: show ip rip
627 .. clicmd:: show ip rip
631 The command displays all RIP routes. For routes that are received
632 through RIP, this command will display the time the packet was sent and
633 the tag information. This command will also display this information
634 for routes redistributed into RIP.
636 .. index:: show ip rip status
637 .. clicmd:: show ip rip status
639 The command displays current RIP status. It includes RIP timer,
640 filtering, version, RIP enabled interface and RIP peer information.
644 ripd> **show ip rip status**
645 Routing Protocol is "rip"
646 Sending updates every 30 seconds with +/-50%, next due in 35 seconds
647 Timeout after 180 seconds, garbage collect after 120 seconds
648 Outgoing update filter list for all interface is not set
649 Incoming update filter list for all interface is not set
650 Default redistribution metric is 1
651 Redistributing: kernel connected
652 Default version control: send version 2, receive version 2
654 Routing for Networks:
659 Routing Information Sources:
660 Gateway BadPackets BadRoutes Distance Last Update
666 Debug for RIP protocol.
668 .. index:: debug rip events
669 .. clicmd:: debug rip events
671 Shows RIP events. Sending and receiving packets, timers, and changes in
672 interfaces are events shown with *ripd*.
674 .. index:: debug rip packet
675 .. clicmd:: debug rip packet
677 Shows display detailed information about the RIP packets. The origin and
678 port number of the packet as well as a packet dump is shown.
680 .. index:: debug rip zebra
681 .. clicmd:: debug rip zebra
683 This command will show the communication between *ripd* and *zebra*. The
684 main information will include addition and deletion of paths to the kernel
685 and the sending and receiving of interface information.
687 .. index:: show debugging rip
688 .. clicmd:: show debugging rip
690 Shows all information currently set for ripd debug.