Dynamic Routing with RIP
Problem
You want to use the IPv6 version of RIP to distribute your IPv6 routing information.
Solution
Configuring RIP for IPv6 is somewhat different from how it is configured for IPv4. To enable RIP for IPv6, you must create a routing process. and then assign interfaces to this process:
Router1#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
Router1(config)#ipv6 unicast-routing
Router1(config)#ipv6 router rip RIP_PROC
Router1(config-rtr)#exit
Router1(config)#interface FastEthernet0/0
Router1(config-if)#ipv6 address AAAA:5:1/64
Router1(config-if)#ipv6 rip RIP_PROC enable
Router1(config-if)#exit
Router1(config)#interface Serial0/0
Router1(config-if)#ipv6 address AAAA:1:2/64
Router1(config-if)#ipv6 rip RIP_PROC enable
Router1(config-if)#frame-relay map ipv6 AAAA:1:3 206 broadcast
Router1(config-if)#exit
Router1(config)#end
Router1#
Discussion
RIP, whether for IPv4 or IPv6, is not one of our favorite protocols. It's slow to converge, bandwidth intensive, and scales poorly. However, it has a couple of key advantages over other protocols. First, it's easy to understand and easy to configure. Second, because it's easy to understand, it's usually the first protocol to be implemented by programmers. And third, largely because of the second point, it's available on every router you'll ever encounter, making it the lowest common denominator of vendor interoperability.
The IPv6 version of RIP is described in RFC 2080. It has more in common with RIP Version 2 than Version 1, which is necessary because IPv6 is inherently classless and supports multicasts, but not broadcasts. The IPv6 multicast address used by RIP is FF02::9.
The configuration method is somewhat different from the more familiar RIP for IPv4. You first configure a RIP routing process:
Router1(config)#ipv6 unicast-routing
Router1(config)#ipv6 router rip RIP_PROC
Router1(config-rtr)#exit
This is similar to the IPv4 router rip command. It starts the RIP configuration mode, allowing you to make certain customizations. However, in this case we want to use the defaults. The process name, RIP_PROC in this example, is analogous to a routing process ID number used with some routing protocols. It is only significant within the router, and allows you to run more than one RIP process if you want to. Because it is only locally significant, every router can have a different RIP process name without conflict, although we generally don't recommend this, as it can become confusing to manage.
The most obvious difference from configuring RIP for IPv4 is that this version doesn't include the network command. Instead, you configure individual interfaces to take part in the routing protocol by using the ipv6 rip enable command:
Router1(config)#interface FastEthernet0/0
Router1(config-if)#ipv6 address AAAA:5:1/64
Router1(config-if)#ipv6 rip RIP_PROC enable
In this network, we have several routers distributing IPv6 routing information using RIP:
Router1#show ipv6 route rip
IPv6 Routing Table - 9 entries
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
U - Per-user Static route
I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary
O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
R AAAA:2::/64 [120/2]
via FE80::2E0:1EFF:FE7F:9E41, FastEthernet0/0
R AAAA:95::/64 [120/2]
via FE80::2E0:1EFF:FE7F:9E41, FastEthernet0/0
R AAAA:99::/64 [120/2]
via FE80::20E:D7FF:FED6:1060, FastEthernet0/0
Router1#
The information here is similar to IPv4 RIP. Each of the RIP routes specifies a prefix, such as AAAA:2::/64, followed by a pair of numbers enclosed in square brackets, [120/2]. Exactly the same as IPv4 RIP, these two numbers are the administrative distance and the RIP metric, respectively. The administrative distances for IPv6 work exactly the same as for IPv4. The only difference is that there are fewer IPv6 routing protocols. So RIP has a default administrative distance of 120, OSPF uses 110, static routes default to a distance of 1, and connected interfaces are zero.
The next piece of information, though, is unique to IPv6. The next-hop router, indicated by the word via in the output, is the link-local address of the nearest interface on the next-hop router. IPv4 doesn't have a concept of a link-local address. By default, every IPv4 interface has a single globally scoped address. However, it does make a lot of sense to use the link-local address with IPv6 where it is available. This is because in most cases, the end users and their applications don't need to access the intermediate hops along the path to their destination devices. These next-hop addresses are strictly for packet forwarding and are only strictly relevant as a way of specifying a path to that destination. So it is not necessary that they have a global scope.
Note, however, that there are no link-local addresses in the routing table itself. This is because link-local addresses are not meaningful off of the local segment.
You can see what IPv6 routing protocols are running with the show ipv6 protocols command:
Router1#show ipv6 protocols
IPv6 Routing Protocol is "connected"
IPv6 Routing Protocol is "static"
IPv6 Routing Protocol is "rip RIP_PROC"
Interfaces:
Serial0/0
FastEthernet0/0
Redistribution:
None
Router1#
As we mentioned earlier, one of the biggest differences from IPv4 is the relative lack of information in the RIP configuration section:
Router1(config)#ipv6 router rip RIP_PROC
Router1(config-rtr)#exit
This is because Cisco's RIP for IPv6 implementation makes a useful set of default assumptions for things like timers and so forth. Recipe 25.5 shows how to modify these parameters.
One final useful command for IPv6 RIP is show ipv6 rip next-hops, which lists all of the neighboring RIP routers:
Router1#show ipv6 rip next-hops
RIP process "RIP_PROC", Next Hops
FE80::2E0:1EFF:FE7F:9E41/FastEthernet0/0 [2 paths]
FE80::20E:D7FF:FED6:1060/FastEthernet0/0 [7 paths]
FE80::200:CFF:FE75:C684/FastEthernet0/0 [2 paths]
FE80::2E0:1EFF:FE7F:9E41/Serial0/0 [2 paths]
Router1#