RYAN HARRIS | Sr. Network Engineer
This blog post is part of a series detailing the various parts of planning and deploying IPv6 for enterprise networks. It is meant as a primer for the network engineer or architect to understand the various concepts they may be unaware of when developing their IPv6 production design.
If you have not read the previous posts, I highly recommend starting with Part 1 – Hierarchical Subnetting Design and an overview of Routing in Part 2 – Routing Design.
Changes from OSPFv2
OSPF version 3 is very similar in implementation to OSPF version 2, especially in the practical deployment. Many of the changes made in OSPFv3 extend the existing functionality to support the longer IPv6 routing prefixes. With these changes, OSPFv3 retains compatibility with IPv4, allowing it to work as a single routing protocol for both IPv4 and IPv6 networks.
On Cisco routers, you may be familiar with using interface sub-commands for configuring OSPFv2 rather than the older network router sub-command. This style of configuration is the only way to configure an interface to participate in the OSPFv3 process. You do not explicitly have to create a routing process for OSPFv3 using the router command in global configuration mode. By configuring an interface with an OSPFv3 process, the routing process will be created.
Non-broadcast multiaccess (NBMA) interface types must be configured with a list of neighbors in OSPFv3 using the neighbor’s router ID.
Because router interfaces can be configured with multiple IPv6 prefixes, if OSPFv3 is configured on an interface, all prefixes will be imported into the LSDB. Additionally, you can choose to run multiple OSPFv3 instances on a link, a feature that was not possible with OSPFv2.
Router ID
Both OSPFv2 and OSPFv3 require a router ID to identify the router in the link-state database. This is not an issue in OSPFv2 however, because an IPv4 address is inherent to creating neighborships, and as long as there is an interface configured with an IPv4 address, the routing process will automatically choose an address to use as the router ID. There are plenty of organizations running OSPF in production without giving a second thought to the router IDs.
The OSPFv3 process will automatically use the highest IPv4 address assigned to any loopback interface first, if there are no loopback interfaces configured, it will then use the highest IPv4 address configured on any remaining interfaces. If no interfaces are assigned with an IPv4 address, the OSPFv3 process will not start until a router ID is manually configured.
As you can see in the output below, starting the OSPFv3 process using the interface sub-command returns an error on this router when no IPv4 addresses are assigned.
Router1#sh ipv6 int g1
GigabitEthernet1 is up, line protocol is up
IPv6 is enabled, link-local address is FE80::5054:FF:FE01:3B88
No Virtual link-local address(es):
Global unicast address(es):
2001:DB8:1::1, subnet is 2001:DB8:1::/64
Joined group address(es):
FF02::1
FF02::1:FF00:1
FF02::1:FF01:3B88
MTU is 1500 bytes
ICMP error messages limited to one every 100 milliseconds
ICMP redirects are enabled
ICMP unreachables are sent
ND DAD is enabled, number of DAD attempts: 1
ND reachable time is 30000 milliseconds (using 30000)
ND NS retransmit interval is 1000 milliseconds
Router1#config t
Enter configuration commands, one per line. End with CNTL/Z.
Router1(config)#ipv6 unicast-routing
Router1(config)#interface g1
Router1(config-if)#ipv6 ospf 1 area 0
Router1(config-if)#^Z
Router1#show ipv6 os
Router1#show ipv6 ospf
%OSPFv3 1 address-family ipv6 not running, please configure a router-id
Router1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router1(config)#ipv6 router ospf 1
Router1(config-rtr)#router-id 10.0.0.1
Router1(config-rtr)#^Z
Router1#show ipv6 ospf
Routing Process “ospfv3 1” with ID 10.0.0.1
Supports NSSA (compatible with RFC 3101)
Supports Database Exchange Summary List Optimization (RFC 5243)
Event-log enabled, Maximum number of events: 1000, Mode: cyclic
Router is not originating router-LSAs with maximum metric
Initial SPF schedule delay 50 msecs
Minimum hold time between two consecutive SPFs 200 msecs
Maximum wait time between two consecutive SPFs 5000 msecs
Initial LSA throttle delay 50 msecs
Minimum hold time for LSA throttle 200 msecs
Maximum wait time for LSA throttle 5000 msecs
Minimum LSA arrival 100 msecs
LSA group pacing timer 240 secs
Interface flood pacing timer 33 msecs
Retransmission pacing timer 66 msecs
Retransmission limit dc 24 non-dc 24
EXCHANGE/LOADING adjacency limit: initial 300, process maximum 300
Number of external LSA 0. Checksum Sum 0x000000
Number of areas in this router is 1. 1 normal 0 stub 0 nssa
Graceful restart helper support enabled
Reference bandwidth unit is 100 mbps
RFC1583 compatibility enabled
Area BACKBONE(0) (Inactive)
Number of interfaces in this area is 1
SPF algorithm executed 1 times
Number of LSA 3. Checksum Sum 0x01F8BB
Number of DCbitless LSA 0
Number of indication LSA 0
Number of DoNotAge LSA 0
Flood list length 0
New LSA Types
OSPFv3 retains all the LSA types of OSPFv2, albeit with updated formats to accommodate both IPv4 and IPv6 prefix information and they have updated the names of a couple to better reflect the contained information. Additionally, OSPFv3 adds two additional LSA types, type 8 and type 9, or the Link LSA and the Intra-Area Prefix LSA respectively.
- Link LSAs (Type 8) – This LSA is limited to flooding just between a router and its connected neighbors. These LSAs contain information about the link-local address of the device and of other prefixes associated with that link.
- Intra-Area-Prefix LSAs (Type 9) – The Type 9 LSA contains IPv6 prefixes for stub and transit networks and associates them to the LSA of either device or network. As the name suggests, the Intra-area-prefix LSA is flooded only within an area. This LSA type is most similar to a type 1 or type 2 LSA as used in IPv4.
Configuration
OSPFv3 is configured similarly to OSPFv2, with a few syntactical changes from the IOS-XE command-line.
Before starting any OSPFv3 configuration, IPv6 routing needs to be enabled first.
Router1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router1(config)#ipv6 unicast-routing
OSPFv2 can still use the legacy “network” router sub-command although Cisco has been moving towards initializing OSPF on an interface using the “ip ospf [process ID] area [area ID]” command. This brings the most notable configuration change with OSPFv3, and that is the requirement to use the, “ipv6 ospf [process ID] area [area ID]” command.
There are currently two command syntaxes to configure the OSPFv3 routing process on IOS-XE (tested on 17.03.06). The first syntax is the “ipv6 router ospf [process ID” command and the second is the “router ospfv3 [process ID]” command. Both will create the same routing process, but it is notable that once you have used the “router ospfv3” command, it will lock you out of using the “ipv6 router ospf” command for that process ID and convert existing configurations in the running-config to use the “router ospfv3” syntax.
If, however, you configure the “ipv6 ospf…” interface sub-config command without first creating a routing process, it will add the “ipv6 router ospf” to your running config rather than the seemingly preferred “router ospfv3” command.
Router1(config)#int g1
Router1(config-if)#ipv6 ospf 1 area 0
Router1(config-if)#do show run | sec interface GigabitEthernet1|ospf
interface GigabitEthernet1
no ip address
negotiation auto
ipv6 address 2001:DB8:1::1/64
ipv6 ospf 1 area 0
no mop enabled
no mop sysid
ipv6 router ospf 1 !! Note the syntax created when OSPF is started directly from an interface
Router1(config-if)#router ospfv3 1
Router1(config-router)#router-id 10.0.0.1
Router1(config-router)#do sh run | sec interface GigabitEthernet1|ospf
interface GigabitEthernet1
no ip address
negotiation auto
ipv6 address 2001:DB8:1::1/64
ipv6 ospf 1 area 0
no mop enabled
no mop sysid
router ospfv3 1 !! Notice now that the routing instance changed syntax after I used the “router ospfv3” command
router-id 10.0.0.1
!
address-family ipv6 unicast !! The router ospfv3 command structure supports address families for supporting both IPv4 and IPv6 as well as multiple VRFs under the same routing protocol/process.
exit-address-family
Router1(config-router)#exit
Router1(config)#ipv6 router ospf 1
% OSPFv3: Use “router ospfv3 1” to configure this process
% Failed to create routing protocol ospf !! I can no longer enter the router subconfig with “ipv6 router ospf”
As noted above, if you are configuring OSPFv3 out of the box without a configured IPv4 address on any interfaces, you will need to manually configure a router-ID under the OSPFv3 process.
As noted in the previous post on routing in IPv6, the default reference bandwidth has not changed between versions, 100Mbps. The reference bandwidth is used in the cost calculation to determine the best path through the network. The unfortunate side-effect of this default value is that any interface capable of throughput larger than 100Mbps will result in the same cost value and a total loss of resolution to actual network capabilities. The best course of action here is to configure a valid reference bandwidth across your OSPF environment that meets your needs for the foreseeable future.
Router1(config)#router ospfv3 1
Router1(config-router)#auto-cost reference-bandwidth ?
<1-4294967> The reference bandwidth in terms of Mbits per second
Router1(config-router)#auto-cost reference-bandwidth 100000 !! Reference bandwidth is in Mbps – 100000 is 100Gbps
% OSPFv3-1-IPv6: Reference bandwidth is changed.
Please ensure reference bandwidth is consistent across all routers.
Router1(config-router)#do show ipv6 ospf
Routing Process “ospfv3 1” with ID 10.0.0.1
Supports NSSA (compatible with RFC 3101)
Supports Database Exchange Summary List Optimization (RFC 5243)
Event-log enabled, Maximum number of events: 1000, Mode: cyclic
Router is not originating router-LSAs with maximum metric
Initial SPF schedule delay 50 msecs
Minimum hold time between two consecutive SPFs 200 msecs
Maximum wait time between two consecutive SPFs 5000 msecs
Initial LSA throttle delay 50 msecs
Minimum hold time for LSA throttle 200 msecs
Maximum wait time for LSA throttle 5000 msecs
Minimum LSA arrival 100 msecs
LSA group pacing timer 240 secs
Interface flood pacing timer 33 msecs
Retransmission pacing timer 66 msecs
Retransmission limit dc 24 non-dc 24
EXCHANGE/LOADING adjacency limit: initial 300, process maximum 300
Number of external LSA 0. Checksum Sum 0x000000
Number of areas in this router is 1. 1 normal 0 stub 0 nssa
Graceful restart helper support enabled
Reference bandwidth unit is 100000 mbps !! Verification that reference bandwidth has changed
RFC1583 compatibility enabled
Area BACKBONE(0) (Inactive)
Number of interfaces in this area is 1
SPF algorithm executed 3 times
Number of LSA 3. Checksum Sum 0x01F05D
Number of DCbitless LSA 0
Number of indication LSA 0
Number of DoNotAge LSA 0
Flood list length 0
Interestingly, many features such as passive-interfaces are still configured under the routing process rather than at the interface level.
Router1#sh ipv6 ospf interface
GigabitEthernet1 is up, line protocol is up
Link Local Address FE80::5054:FF:FE01:3B88, Interface ID 7 (ios-if-index)
Area 0, Process ID 1, Instance ID 0, Router ID 10.0.0.1
Network Type BROADCAST, Cost: 100 !! Default ethernet interfaces are set to a network type of “broadcast” which forces a DR/BDR election
Transmit Delay is 1 sec, State WAITING, Priority 1
No designated router on this network
No backup designated router on this network
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
Hello due in 00:00:03
Wait time before Designated router selection 00:00:24
Graceful restart helper support enabled
Index 1/1/1, flood queue length 0
Next 0x0(0)/0x0(0)/0x0(0)
Last flood scan length is 0, maximum is 0
Last flood scan time is 0 msec, maximum is 0 msec
Neighbor Count is 0, Adjacent neighbor count is 0
Suppress hello for 0 neighbor(s)
Router1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router1(config)#int g1
Router1(config-if)#ipv6 ospf network point-to-point
Router1(config-if)#^Z
Router1#sh ipv6 ospf interface
GigabitEthernet1 is up, line protocol is up
Link Local Address FE80::5054:FF:FE01:3B88, Interface ID 7 (ios-if-index)
Area 0, Process ID 1, Instance ID 0, Router ID 10.0.0.1
Network Type POINT_TO_POINT, Cost: 100 !! Configuring interfaces as point-to-point simplifies network operation if the interface is plugging directly into another router
Transmit Delay is 1 sec, State POINT_TO_POINT
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
Hello due in 00:00:03
Graceful restart helper support enabled
Index 1/1/1, flood queue length 0
Next 0x0(0)/0x0(0)/0x0(0)
Last flood scan length is 0, maximum is 0
Last flood scan time is 0 msec, maximum is 0 msec
Neighbor Count is 0, Adjacent neighbor count is 0
Suppress hello for 0 neighbor(s)
For further details, reference Cisco’s documentation on configuring OSPFv3.