Garbage-Collection

Test to verify RIP garbage collection timer for removing stale routes. This validates the two-stage removal process: After routes are marked invalid by the timeout timer (metric 16), the garbage collection timer completely removes them from the routing table. This test simulates neighbor loss by removing RIP configuration.

Test RIP Garbage Collection Timer

Description

Verify RIP garbage collection timer completely removes invalid routes. DUT0 advertises the route 10.10.10.0/24 to DUT1. Then RIP is deleted from DUT0 to simulate a neighbor loss. After 5 seconds, the route is marked as invalid with metric 16. After an additional 5 seconds, the route is completely removed from the routing table. This demonstrates the two-stage process that prevents stale routes from persisting indefinitely.

Scenario

Note

Two-stage route removal process:

When DUT0 stops sending RIP updates, DUT1 follows a controlled removal process:

Stage 1 - Invalidation (Timeout Timer):

  • T=0s: DUT0 stops advertising 10.10.10.0/24

  • T=5s: timeout timer expires

  • Result: Route marked invalid with metric 16 (unreachable)

  • Status: Route still visible but not used for forwarding

Stage 2 - Removal (Garbage Collection Timer):

  • T=5+5s: garbage collection timer expires

  • Result: Route completely removed from routing table

  • Status: Route no longer visible

This two-stage process prevents immediate route removal (avoiding flapping) while ensuring stale routes don’t persist indefinitely. The invalid state (metric 16) allows the router to inform neighbors that the route is unreachable before final removal.

Step 1: Set the following configuration in DUT0 :

set interfaces dummy dum0 address 10.10.10.1/24
set interfaces ethernet eth0 address 10.1.1.100/24
set protocols rip network 10.1.1.0/24
set protocols rip redistribute connected
set protocols rip timers update 5
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Step 2: Set the following configuration in DUT1 :

set interfaces ethernet eth0 address 10.1.1.50/24
set protocols rip network 10.1.1.0/24
set protocols rip timers garbage-collection 5
set protocols rip timers timeout 5
set protocols rip timers update 5
set system login user admin authentication encrypted-password '$6$GSjsCj8gHLv$/VcqU6FLi6CT2Oxn0MJQ2C2tqnRDrYKNF8HIYWJp68nvXvPdFccDsT04.WtigUONbKYrgKg8d6rEs8PjljMkH0'

Attention

Verify that DUT1 learns the route 10.10.10.0/24 from DUT0

Step 3: Run command protocols rip show at DUT1 and check if output matches the following regular expressions:

10.10.10.0/24
Show output
Codes: K - kernel route, C - connected, L - local, S - static,
       R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR,
       f - OpenFabric, t - Table-Direct
Sub-codes:
      (n) - normal, (s) - static, (d) - default, (r) - redistribute,
      (i) - interface

     Network            Next Hop         Metric From            Tag Time
C(i) 10.1.1.0/24        0.0.0.0               1 self              0
R(n) 10.10.10.0/24      10.1.1.100            2 10.1.1.100        0 00:04

Step 4: Run command protocols ip show route at DUT1 and check if output matches the following regular expressions:

10.10.10.0/24
Show output
Codes: K - kernel route, C - connected, L - local, S - static,
       R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR,
       f - OpenFabric, t - Table-Direct,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

IPv4 unicast VRF default:
C>* 10.1.1.0/24 is directly connected, eth0, weight 1, 00:00:02
L>* 10.1.1.50/32 is directly connected, eth0, weight 1, 00:00:02
R>* 10.10.10.0/24 [120/2] via 10.1.1.100, eth0, weight 1, 00:00:01
L   10.215.168.21/32 is directly connected, eth0 inactive, weight 1, 02:14:38
L   10.215.168.21/32 is directly connected, eth0 inactive, weight 1, 02:16:22
L   10.215.168.21/32 is directly connected, eth0 inactive, weight 1, 02:43:44
L>  30.0.0.3/32 is directly connected, eth0 inactive, weight 1, 03:57:14
L   30.0.0.3/32 is directly connected, eth0 inactive, weight 1, 03:57:34

Note

Delete RIP from DUT0 to simulate loss of neighbor - this stops update advertisements

Step 5: Modify the following configuration lines in DUT0 :

delete protocols

Note

Wait for timeout + garbage collection + margin (15 seconds)

Attention

Verify that the route 10.10.10.0/24 has been completely removed from DUT1

Step 6: Run command protocols rip show at DUT1 and expect this output:

Show output
Codes: K - kernel route, C - connected, L - local, S - static,
       R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR,
       f - OpenFabric, t - Table-Direct
Sub-codes:
      (n) - normal, (s) - static, (d) - default, (r) - redistribute,
      (i) - interface

     Network            Next Hop         Metric From            Tag Time
C(i) 10.1.1.0/24        0.0.0.0               1 self              0

Step 7: Run command protocols ip show route at DUT1 and expect this output:

Show output
Codes: K - kernel route, C - connected, L - local, S - static,
       R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR,
       f - OpenFabric, t - Table-Direct,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

IPv4 unicast VRF default:
C>* 10.1.1.0/24 is directly connected, eth0, weight 1, 00:00:18
L>* 10.1.1.50/32 is directly connected, eth0, weight 1, 00:00:18
L   10.215.168.21/32 is directly connected, eth0 inactive, weight 1, 02:14:54
L   10.215.168.21/32 is directly connected, eth0 inactive, weight 1, 02:16:38
L   10.215.168.21/32 is directly connected, eth0 inactive, weight 1, 02:44:00
L>  30.0.0.3/32 is directly connected, eth0 inactive, weight 1, 03:57:30
L   30.0.0.3/32 is directly connected, eth0 inactive, weight 1, 03:57:50