]> git.proxmox.com Git - mirror_frr.git/blame - doc/user/ripd.rst
Merge pull request #12798 from donaldsharp/rib_match_multicast
[mirror_frr.git] / doc / user / ripd.rst
CommitLineData
0efdf0fe 1.. _rip:
42fc5d26
QY
2
3***
4RIP
5***
6
7RIP -- Routing Information Protocol is widely deployed interior gateway
c1a54c05
QY
8protocol. RIP was developed in the 1970s at Xerox Labs as part of the
9XNS routing protocol. RIP is a :term:`distance-vector` protocol and is
10based on the :term:`Bellman-Ford` algorithms. As a distance-vector
42fc5d26 11protocol, RIP router send updates to its neighbors periodically, thus
c1a54c05 12allowing the convergence to a known topology. In each update, the
d1e7591e 13distance to any given network will be broadcast to its neighboring
42fc5d26
QY
14router.
15
16*ripd* supports RIP version 2 as described in RFC2453 and RIP
17version 1 as described in RFC1058.
18
0efdf0fe 19.. _starting-and-stopping-ripd:
42fc5d26
QY
20
21Starting and Stopping ripd
22==========================
23
c1a54c05
QY
24The default configuration file name of *ripd*'s is :file:`ripd.conf`. When
25invocation *ripd* searches directory |INSTALL_PREFIX_ETC|. If :file:`ripd.conf`
26is not there next search current directory.
42fc5d26 27
c1a54c05
QY
28RIP uses UDP port 520 to send and receive RIP packets. So the user must have
29the capability to bind the port, generally this means that the user must have
30superuser privileges. RIP protocol requires interface information maintained by
31*zebra* daemon. So running *zebra* is mandatory to run *ripd*. Thus minimum
32sequence for running RIP is like below:
42fc5d26
QY
33
34::
35
42fc5d26
QY
36 # zebra -d
37 # ripd -d
a8c90e15 38
42fc5d26
QY
39
40Please note that *zebra* must be invoked before *ripd*.
41
c1a54c05 42To stop *ripd*. Please use::
0416ce1c 43
44 kill `cat /var/run/frr/ripd.pid`
c1a54c05 45
d1e7591e 46Certain signals have special meanings to *ripd*.
42fc5d26 47
07a17e6d
QY
48 +-------------+------------------------------------------------------+
49 | Signal | Action |
50 +=============+======================================================+
51 | ``SIGHUP`` | Reload configuration file :file:`ripd.conf`. |
52 | | All configurations are reset. All routes learned |
53 | | so far are cleared and removed from routing table. |
54 +-------------+------------------------------------------------------+
55 | ``SIGUSR1`` | Rotate the *ripd* logfile. |
56 +-------------+------------------------------------------------------+
57 | ``SIGINT`` | |
58 | ``SIGTERM`` | Sweep all installed routes and gracefully terminate. |
59 +-------------+------------------------------------------------------+
42fc5d26 60
c1a54c05 61*ripd* invocation options. Common options that can be specified
0efdf0fe 62(:ref:`common-invocation-options`).
42fc5d26 63
42fc5d26 64
0efdf0fe 65.. _rip-netmask:
42fc5d26
QY
66
67RIP netmask
68-----------
69
c1a54c05
QY
70The netmask features of *ripd* support both version 1 and version 2 of RIP.
71Version 1 of RIP originally contained no netmask information. In RIP version 1,
72network classes were originally used to determine the size of the netmask.
73Class A networks use 8 bits of mask, Class B networks use 16 bits of masks,
74while Class C networks use 24 bits of mask. Today, the most widely used method
75of a network mask is assigned to the packet on the basis of the interface that
76received the packet. Version 2 of RIP supports a variable length subnet mask
77(VLSM). By extending the subnet mask, the mask can be divided and reused. Each
78subnet can be used for different purposes such as large to middle size LANs and
79WAN links. FRR *ripd* does not support the non-sequential netmasks that are
80included in RIP Version 2.
81
82In a case of similar information with the same prefix and metric, the old
83information will be suppressed. Ripd does not currently support equal cost
84multipath routing.
42fc5d26 85
0efdf0fe 86.. _rip-configuration:
42fc5d26
QY
87
88RIP Configuration
89=================
90
e4c87935 91.. clicmd:: router rip [vrf NAME]
42fc5d26 92
c1a54c05
QY
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
95 RIP commands.
42fc5d26 96
c1a54c05 97.. clicmd:: network NETWORK
42fc5d26 98
42fc5d26 99
c1a54c05
QY
100 Set the RIP enable interface by NETWORK. The interfaces which have addresses
101 matching with NETWORK are enabled.
42fc5d26 102
c1a54c05
QY
103 This group of commands either enables or disables RIP interfaces between
104 certain numbers of a specified network address. For example, if the network
105 for 10.0.0.0/24 is RIP enabled, this would result in all the addresses from
106 10.0.0.0 to 10.0.0.255 being enabled for RIP. The `no network` command will
107 disable RIP for the specified network.
42fc5d26 108
c1a54c05 109.. clicmd:: network IFNAME
42fc5d26 110
42fc5d26 111
c1a54c05
QY
112 Set a RIP enabled interface by IFNAME. Both the sending and
113 receiving of RIP packets will be enabled on the port specified in the
114 `network ifname` command. The `no network ifname` command will disable
115 RIP on the specified interface.
42fc5d26 116
c1a54c05 117.. clicmd:: neighbor A.B.C.D
42fc5d26 118
42fc5d26 119
cdbf7b0d
B
120 Specify a RIP neighbor to send updates to. This is required when a neighbor
121 is connected via a network that does not support multicast, or when it is
122 desired to statically define a neighbor. RIP updates will be sent via unicast
123 to each neighbour. Neighbour updates are in addition to any multicast updates
124 sent when an interface is not in passive mode (see the `passive-interface`
125 command). RIP will continue to process updates received from both the
126 neighbor and any received via multicast. The `no neighbor a.b.c.d` command
127 will disable the RIP neighbor.
42fc5d26 128
c1a54c05
QY
129 Below is very simple RIP configuration. Interface `eth0` and interface which
130 address match to `10.0.0.0/8` are RIP enabled.
a8c90e15 131
9eb95b3b 132 .. code-block:: frr
42fc5d26 133
c1a54c05
QY
134 !
135 router rip
136 network 10.0.0.0/8
137 network eth0
138 !
42fc5d26 139
42fc5d26 140
c1a54c05 141.. clicmd:: passive-interface (IFNAME|default)
42fc5d26 142
42fc5d26 143
c1a54c05
QY
144 This command sets the specified interface to passive mode. On passive mode
145 interface, all receiving packets are processed as normal and ripd does not
146 send either multicast or unicast RIP packets except to RIP neighbors
147 specified with `neighbor` command. The interface may be specified as
148 `default` to make ripd default to passive on all interfaces.
42fc5d26 149
c1a54c05 150 The default is to be passive on all interfaces.
42fc5d26 151
e4c87935 152.. clicmd:: ip split-horizon [poisoned-reverse]
42fc5d26 153
42fc5d26 154
c1a54c05
QY
155 Control split-horizon on the interface. Default is `ip split-horizon`. If
156 you don't perform split-horizon on the interface, please specify `no ip
157 split-horizon`.
42fc5d26 158
e4c87935 159 If `poisoned-reverse` is also set, the router sends the poisoned routes
160 with highest metric back to the sending router.
161
0efdf0fe 162.. _rip-version-control:
42fc5d26
QY
163
164RIP Version Control
165===================
166
c1a54c05
QY
167RIP can be configured to send either Version 1 or Version 2 packets. The
168default is to send RIPv2 while accepting both RIPv1 and RIPv2 (and replying
169with packets of the appropriate version for REQUESTS / triggered updates). The
d1e7591e
QY
170version to receive and send can be specified globally, and further overridden on
171a per-interface basis if needs be for send and receive separately (see below).
42fc5d26 172
c1a54c05
QY
173It is important to note that RIPv1 cannot be authenticated. Further, if RIPv1
174is enabled then RIP will reply to REQUEST packets, sending the state of its RIP
175routing table to any remote routers that ask on demand. For a more detailed
0efdf0fe 176discussion on the security implications of RIPv1 see :ref:`rip-authentication`.
42fc5d26 177
c1a54c05 178.. clicmd:: version VERSION
42fc5d26 179
e4c87935 180 Set RIP version to accept for reads and send. VERSION can be either
181 ``1`` or ``2``.
42fc5d26 182
c1a54c05 183 Disabling RIPv1 by specifying version 2 is STRONGLY encouraged,
0efdf0fe 184 :ref:`rip-authentication`. This may become the default in a future release.
42fc5d26 185
c1a54c05 186 Default: Send Version 2, and accept either version.
42fc5d26 187
c1a54c05 188.. clicmd:: ip rip send version VERSION
42fc5d26 189
c1a54c05 190 VERSION can be ``1``, ``2``, or ``1 2``.
42fc5d26 191
c1a54c05
QY
192 This interface command overrides the global rip version setting, and selects
193 which version of RIP to send packets with, for this interface specifically.
194 Choice of RIP Version 1, RIP Version 2, or both versions. In the latter
195 case, where ``1 2`` is specified, packets will be both broadcast and
196 multicast.
42fc5d26 197
c1a54c05 198 Default: Send packets according to the global version (version 2)
42fc5d26 199
c1a54c05 200.. clicmd:: ip rip receive version VERSION
42fc5d26 201
c1a54c05 202 VERSION can be ``1``, ``2``, or ``1 2``.
42fc5d26 203
c1a54c05
QY
204 This interface command overrides the global rip version setting, and selects
205 which versions of RIP packets will be accepted on this interface. Choice of
206 RIP Version 1, RIP Version 2, or both.
42fc5d26 207
c1a54c05 208 Default: Accept packets according to the global setting (both 1 and 2).
42fc5d26 209
1e31580f 210
0efdf0fe 211.. _how-to-announce-rip-route:
42fc5d26
QY
212
213How to Announce RIP route
214=========================
215
1e31580f 216.. clicmd:: redistribute <babel|bgp|connected|eigrp|isis|kernel|openfabric|ospf|sharp|static|table> [metric (0-16)] [route-map WORD]
42fc5d26 217
1e31580f 218 Redistribute routes from other sources into RIP.
42fc5d26 219
1e31580f 220If you want to specify RIP only static routes:
42fc5d26 221
c1a54c05 222.. clicmd:: default-information originate
42fc5d26 223
c1a54c05 224.. clicmd:: route A.B.C.D/M
42fc5d26 225
42fc5d26 226
c1a54c05
QY
227 This command is specific to FRR. The `route` command makes a static route
228 only inside RIP. This command should be used only by advanced users who are
229 particularly knowledgeable about the RIP protocol. In most cases, we
230 recommend creating a static route in FRR and redistributing it in RIP using
231 `redistribute static`.
42fc5d26 232
0efdf0fe 233.. _filtering-rip-routes:
42fc5d26
QY
234
235Filtering RIP Routes
236====================
237
238RIP routes can be filtered by a distribute-list.
239
8a7be4dd 240.. clicmd:: distribute-list [prefix] LIST <in|out> IFNAME
42fc5d26 241
c1a54c05 242 You can apply access lists to the interface with a `distribute-list` command.
8a7be4dd
DS
243 If prefix is specified LIST is a prefix-list. If prefix is not specified
244 then LIST is the access list name. `in` specifies packets being received,
245 and `out` specifies outgoing packets. Finally if an interface is specified
246 it will be applied against a specific interface.
42fc5d26 247
c1a54c05
QY
248 The `distribute-list` command can be used to filter the RIP path.
249 `distribute-list` can apply access-lists to a chosen interface. First, one
250 should specify the access-list. Next, the name of the access-list is used in
251 the distribute-list command. For example, in the following configuration
252 ``eth0`` will permit only the paths that match the route 10.0.0.0/8
42fc5d26 253
9eb95b3b 254 .. code-block:: frr
42fc5d26 255
c1a54c05
QY
256 !
257 router rip
258 distribute-list private in eth0
259 !
260 access-list private permit 10 10.0.0.0/8
261 access-list private deny any
262 !
a8c90e15 263
42fc5d26 264
c1a54c05 265 `distribute-list` can be applied to both incoming and outgoing data.
42fc5d26 266
0efdf0fe 267.. _rip-metric-manipulation:
42fc5d26
QY
268
269RIP Metric Manipulation
270=======================
271
c1a54c05 272RIP metric is a value for distance for the network. Usually
42fc5d26 273*ripd* increment the metric when the network information is
c1a54c05 274received. Redistributed routes' metric is set to 1.
42fc5d26 275
c1a54c05 276.. clicmd:: default-metric (1-16)
42fc5d26 277
42fc5d26 278
c1a54c05
QY
279 This command modifies the default metric value for redistributed routes.
280 The default value is 1. This command does not affect connected route even if
281 it is redistributed by *redistribute connected*. To modify connected route's
282 metric value, please use ``redistribute connected metric`` or *route-map*.
283 *offset-list* also affects connected routes.
42fc5d26 284
c1a54c05 285.. clicmd:: offset-list ACCESS-LIST (in|out)
42fc5d26 286
c1a54c05 287.. clicmd:: offset-list ACCESS-LIST (in|out) IFNAME
42fc5d26 288
42fc5d26 289
0efdf0fe 290.. _rip-distance:
42fc5d26
QY
291
292RIP distance
293============
294
c1a54c05 295Distance value is used in zebra daemon. Default RIP distance is 120.
42fc5d26 296
c1a54c05 297.. clicmd:: distance (1-255)
42fc5d26 298
42fc5d26 299
c1a54c05 300 Set default RIP distance to specified value.
42fc5d26 301
c1a54c05 302.. clicmd:: distance (1-255) A.B.C.D/M
42fc5d26 303
42fc5d26 304
c1a54c05
QY
305 Set default RIP distance to specified value when the route's source IP
306 address matches the specified prefix.
42fc5d26 307
c1a54c05 308.. clicmd:: distance (1-255) A.B.C.D/M ACCESS-LIST
42fc5d26 309
42fc5d26 310
c1a54c05
QY
311 Set default RIP distance to specified value when the route's source IP
312 address matches the specified prefix and the specified access-list.
42fc5d26 313
11ab5329 314.. _rip-route-map:
42fc5d26
QY
315
316RIP route-map
317=============
318
319Usage of *ripd*'s route-map support.
320
321Optional argument route-map MAP_NAME can be added to each `redistribute`
322statement.
323
9eb95b3b 324.. code-block:: frr
42fc5d26 325
9eb95b3b
QY
326 redistribute static [route-map MAP_NAME]
327 redistribute connected [route-map MAP_NAME]
328 .....
42fc5d26 329
a8c90e15 330
c1a54c05
QY
331Cisco applies route-map _before_ routes will exported to rip route table. In
332current FRR's test implementation, *ripd* applies route-map after routes are
333listed in the route table and before routes will be announced to an interface
334(something like output filter). I think it is not so clear, but it is draft and
335it may be changed at future.
42fc5d26 336
0efdf0fe 337Route-map statement (:ref:`route-map`) is needed to use route-map
42fc5d26
QY
338functionality.
339
c1a54c05 340.. clicmd:: match interface WORD
42fc5d26 341
c1a54c05
QY
342 This command match to incoming interface. Notation of this match is
343 different from Cisco. Cisco uses a list of interfaces - NAME1 NAME2 ...
344 NAMEN. Ripd allows only one name (maybe will change in the future). Next -
345 Cisco means interface which includes next-hop of routes (it is somewhat
346 similar to "ip next-hop" statement). Ripd means interface where this route
347 will be sent. This difference is because "next-hop" of same routes which
348 sends to different interfaces must be different. Maybe it'd be better to
349 made new matches - say "match interface-out NAME" or something like that.
42fc5d26 350
c1a54c05 351.. clicmd:: match ip address WORD
42fc5d26 352
c1a54c05 353.. clicmd:: match ip address prefix-list WORD
42fc5d26 354
c1a54c05 355 Match if route destination is permitted by access-list.
42fc5d26 356
c1a54c05 357.. clicmd:: match ip next-hop WORD
42fc5d26 358
c1a54c05 359.. clicmd:: match ip next-hop prefix-list WORD
42fc5d26 360
c1a54c05
QY
361 Match if route next-hop (meaning next-hop listed in the rip route-table as
362 displayed by "show ip rip") is permitted by access-list.
42fc5d26 363
c1a54c05 364.. clicmd:: match metric (0-4294967295)
42fc5d26 365
c1a54c05
QY
366 This command match to the metric value of RIP updates. For other protocol
367 compatibility metric range is shown as (0-4294967295). But for RIP protocol
368 only the value range (0-16) make sense.
42fc5d26 369
c1a54c05 370.. clicmd:: set ip next-hop A.B.C.D
42fc5d26 371
c1a54c05
QY
372 This command set next hop value in RIPv2 protocol. This command does not
373 affect RIPv1 because there is no next hop field in the packet.
42fc5d26 374
c1a54c05 375.. clicmd:: set metric (0-4294967295)
42fc5d26 376
c1a54c05
QY
377 Set a metric for matched route when sending announcement. The metric value
378 range is very large for compatibility with other protocols. For RIP, valid
379 metric values are from 1 to 16.
42fc5d26 380
0efdf0fe 381.. _rip-authentication:
42fc5d26
QY
382
383RIP Authentication
384==================
385
386RIPv2 allows packets to be authenticated via either an insecure plain
387text password, included with the packet, or via a more secure MD5 based
d50b2aa0 388:abbr:`HMAC (keyed-Hashing for Message AuthentiCation)`,
42fc5d26
QY
389RIPv1 can not be authenticated at all, thus when authentication is
390configured `ripd` will discard routing updates received via RIPv1
391packets.
392
a8c90e15 393However, unless RIPv1 reception is disabled entirely,
0efdf0fe 394:ref:`rip-version-control`, RIPv1 REQUEST packets which are received,
42fc5d26 395which query the router for routing information, will still be honoured
a8c90e15 396by `ripd`, and `ripd` WILL reply to such packets. This allows
42fc5d26
QY
397`ripd` to honour such REQUESTs (which sometimes is used by old
398equipment and very simple devices to bootstrap their default route),
399while still providing security for route updates which are received.
400
401In short: Enabling authentication prevents routes being updated by
402unauthenticated remote routers, but still can allow routes (I.e. the
403entire RIP routing table) to be queried remotely, potentially by anyone
404on the internet, via RIPv1.
405
406To prevent such unauthenticated querying of routes disable RIPv1,
0efdf0fe 407:ref:`rip-version-control`.
42fc5d26 408
c1a54c05 409.. clicmd:: ip rip authentication mode md5
42fc5d26 410
42fc5d26 411
c1a54c05 412 Set the interface with RIPv2 MD5 authentication.
42fc5d26 413
c1a54c05 414.. clicmd:: ip rip authentication mode text
42fc5d26 415
42fc5d26 416
c1a54c05 417 Set the interface with RIPv2 simple password authentication.
42fc5d26 418
c1a54c05 419.. clicmd:: ip rip authentication string STRING
42fc5d26 420
42fc5d26 421
c1a54c05
QY
422 RIP version 2 has simple text authentication. This command sets
423 authentication string. The string must be shorter than 16 characters.
42fc5d26 424
c1a54c05 425.. clicmd:: ip rip authentication key-chain KEY-CHAIN
42fc5d26 426
42fc5d26 427
d1e7591e 428 Specify Keyed MD5 chain.
42fc5d26 429
9eb95b3b 430 .. code-block:: frr
42fc5d26 431
9eb95b3b
QY
432 !
433 key chain test
434 key 1
435 key-string test
436 !
437 interface eth1
438 ip rip authentication mode md5
439 ip rip authentication key-chain test
440 !
a8c90e15 441
42fc5d26 442
0efdf0fe 443.. _rip-timers:
42fc5d26
QY
444
445RIP Timers
446==========
447
c1a54c05 448.. clicmd:: timers basic UPDATE TIMEOUT GARBAGE
42fc5d26 449
42fc5d26 450
c1a54c05
QY
451 RIP protocol has several timers. User can configure those timers' values
452 by `timers basic` command.
42fc5d26 453
c1a54c05 454 The default settings for the timers are as follows:
42fc5d26 455
c1a54c05
QY
456 - The update timer is 30 seconds. Every update timer seconds, the RIP
457 process is awakened to send an unsolicited Response message containing
458 the complete routing table to all neighboring RIP routers.
459 - The timeout timer is 180 seconds. Upon expiration of the timeout, the
460 route is no longer valid; however, it is retained in the routing table
461 for a short time so that neighbors can be notified that the route has
462 been dropped.
463 - The garbage collect timer is 120 seconds. Upon expiration of the
464 garbage-collection timer, the route is finally removed from the routing
465 table.
42fc5d26 466
c1a54c05
QY
467 The ``timers basic`` command allows the the default values of the timers
468 listed above to be changed.
42fc5d26 469
42fc5d26 470
0efdf0fe 471.. _show-rip-information:
42fc5d26
QY
472
473Show RIP Information
474====================
475
476To display RIP routes.
477
e4c87935 478.. clicmd:: show ip rip [vrf NAME]
42fc5d26 479
c1a54c05 480 Show RIP routes.
42fc5d26
QY
481
482The command displays all RIP routes. For routes that are received
483through RIP, this command will display the time the packet was sent and
c1a54c05 484the tag information. This command will also display this information
42fc5d26
QY
485for routes redistributed into RIP.
486
e4c87935 487.. clicmd:: show ip rip [vrf NAME] status
42fc5d26 488
c1a54c05 489 The command displays current RIP status. It includes RIP timer,
d1e7591e 490 filtering, version, RIP enabled interface and RIP peer information.
42fc5d26
QY
491
492::
493
c1a54c05
QY
494 ripd> **show ip rip status**
495 Routing Protocol is "rip"
496 Sending updates every 30 seconds with +/-50%, next due in 35 seconds
497 Timeout after 180 seconds, garbage collect after 120 seconds
498 Outgoing update filter list for all interface is not set
499 Incoming update filter list for all interface is not set
500 Default redistribution metric is 1
501 Redistributing: kernel connected
502 Default version control: send version 2, receive version 2
503 Interface Send Recv
504 Routing for Networks:
505 eth0
506 eth1
507 1.1.1.1
508 203.181.89.241
509 Routing Information Sources:
510 Gateway BadPackets BadRoutes Distance Last Update
a8c90e15 511
42fc5d26
QY
512
513RIP Debug Commands
514==================
515
516Debug for RIP protocol.
517
c1a54c05 518.. clicmd:: debug rip events
42fc5d26 519
c1a54c05
QY
520 Shows RIP events. Sending and receiving packets, timers, and changes in
521 interfaces are events shown with *ripd*.
42fc5d26 522
c1a54c05 523.. clicmd:: debug rip packet
42fc5d26 524
c1a54c05
QY
525 Shows display detailed information about the RIP packets. The origin and
526 port number of the packet as well as a packet dump is shown.
42fc5d26 527
c1a54c05 528.. clicmd:: debug rip zebra
42fc5d26 529
c1a54c05
QY
530 This command will show the communication between *ripd* and *zebra*. The
531 main information will include addition and deletion of paths to the kernel
532 and the sending and receiving of interface information.
42fc5d26 533
c1a54c05 534.. clicmd:: show debugging rip
42fc5d26 535
c1a54c05 536 Shows all information currently set for ripd debug.
42fc5d26 537
b832909b
QY
538
539Sample configuration
540====================
541
542.. code-block:: frr
543
544
545 debug rip events
546 debug rip packet
547
548 router rip
549 network 11.0.0.0/8
550 network eth0
551 route 10.0.0.0/8
552 distribute-list private-only in eth0
553
554 access-list private-only permit 10.0.0.0/8
555 access-list private-only deny any