Hello dear readers. Do you remember good old INE's OSPF challenge? In reality it's not so old, but anyway. If you haven't hear about it yet, take a look here: http://blog.ine.com/2015/05/10/ospf-path-selection-challenge/
I remembered about this challenge because at the moment I'm preparing for HCIE lab (yes, I spelled this right, Huawei's Certified Internetwork Expert, yeah, just another one challenge for me) and repeating everything related to Routing&Switching that I used to know from my beloved Cisco. Actually much more interesting stuff hidden inside that topology and especially I'm taking about reverse path from R4 to R1. Just for sake of clarity I made this topology little bit more simple by removing R5 at all and here it is for your reference:
So what's going on here behind the scene with routing from R4 to R1's loopback? Can you guess what will be the result in the R4 routing table and why? By default R4 will install two equal cost routes to routing table and won't take into account that one of paths is through NSSA area:
For purpose of route calculation there is nothing special, we have to find cost to advertising router + cost to summary from area 0. 11+100 = 101+10, the result is the same 111:
Ok, that was not so interesting. At least yet with Cisco IOS. Let's make thing little bit more complex. What if I add "maximum-paths 1" under ospf configuration? Which route will be selected and feed to the RIB and much more importantly why?
First let's take a look what was chosen by R4 after clear ip ospf process or reloading R4 router (just in these cases plus loss of both neighbors and then restoring at the same time, that's important but about that later):
But if I flap only one interface to R2 that causes neighbor loss:
As you can see, now R4 changed it's behavior and will prefer route to R2, no matter in which order we flap routes. Interesting enough? Rate corner case, but at least we know rules. Such tasty small details.
Now I'm going to tell you something about Huawei's VRP. The same topology, only one thing changed - I added Loopback 0 on R4 with address 4.4.4.4/32 and imported it into both areas to demonstrate an interesting behavior in contrast with Cisco's IOS that will show a big difference in INE's OSPF challenge I've mentioned earlier. Here is the topology for your reference:
The main difference is that VRP violates RFC3101 and R2 translate Type 7 LSA into Type 5 that leads to ECMP:
But let's talk about original question. What about reverse path from R4 to R1's loopback 1.1.1.1/32? Please note that I also changed cost of R1's loopback 0 to 1 to match IOS because by default cost of any Loopback interface on VRP equals 0.
By default VRP performs EMCP, but won't even if I specify it explicitly with:
And finally, this is not related to ospf path selection tricks, more about differences between vendors, take a look at VRP R4 ospf routes, do you see something suspicious? Sure, I highlighted it:
Here is R2's ospf config for reference, no magic:
That's really interesting and important to know when comparing platforms and vendors. Hope that was interesting for you. Don't forget to leave a comment below!
P.S. Thanks to my colleague Denis for pointing me to some spelling mistakes.
I remembered about this challenge because at the moment I'm preparing for HCIE lab (yes, I spelled this right, Huawei's Certified Internetwork Expert, yeah, just another one challenge for me) and repeating everything related to Routing&Switching that I used to know from my beloved Cisco. Actually much more interesting stuff hidden inside that topology and especially I'm taking about reverse path from R4 to R1. Just for sake of clarity I made this topology little bit more simple by removing R5 at all and here it is for your reference:
So what's going on here behind the scene with routing from R4 to R1's loopback? Can you guess what will be the result in the R4 routing table and why? By default R4 will install two equal cost routes to routing table and won't take into account that one of paths is through NSSA area:
R4#sh ip route 1.1.1.1
Routing entry for 1.1.1.1/32
Known via "ospf 1", distance 110, metric 111, type inter area
Last update from 10.1.24.2 on GigabitEthernet0/0.24, 00:00:15 ago
Routing Descriptor Blocks:
* 10.1.34.3, from 3.3.3.3, 00:00:15 ago, via GigabitEthernet0/0.34
Route metric is 111, traffic share count is 1
10.1.24.2, from 2.2.2.2, 00:00:15 ago, via GigabitEthernet0/0.24
Route metric is 111, traffic share count is 1
R4#sh ip cef 1.1.1.1/32
1.1.1.1/32
nexthop 10.1.24.2 GigabitEthernet0/0.24
nexthop 10.1.34.3 GigabitEthernet0/0.34
For purpose of route calculation there is nothing special, we have to find cost to advertising router + cost to summary from area 0. 11+100 = 101+10, the result is the same 111:
R4#sh ip ospf database summary 1.1.1.1
OSPF Router with ID (4.4.4.4) (Process ID 1)
Summary Net Link States (Area 1)
Routing Bit Set on this LSA in topology Base with MTID 0
LS age: 28
Options: (No TOS-capability, DC, Upward)
LS Type: Summary Links(Network)
Link State ID: 1.1.1.1 (summary Network Number)
Advertising Router: 3.3.3.3
LS Seq Number: 80000003
Checksum: 0xF2D2
Length: 28
Network Mask: /32
MTID: 0 Metric: 101
Summary Net Link States (Area 2)
Routing Bit Set on this LSA in topology Base with MTID 0
LS age: 970
Options: (No TOS-capability, DC, Upward)
LS Type: Summary Links(Network)
Link State ID: 1.1.1.1 (summary Network Number)
Advertising Router: 2.2.2.2
LS Seq Number: 80000002
Checksum: 0x31ED
Length: 28
Network Mask: /32
MTID: 0 Metric: 11
R4#sh ip os
R4#sh ip ospf da
R4#sh ip ospf database ro
R4#sh ip ospf database router 2.2.2.2
OSPF Router with ID (4.4.4.4) (Process ID 1)
Router Link States (Area 2)
Routing Bit Set on this LSA in topology Base with MTID 0
LS age: 114
Options: (No TOS-capability, DC)
LS Type: Router Links
Link State ID: 2.2.2.2
Advertising Router: 2.2.2.2
LS Seq Number: 80000006
Checksum: 0x3EA7
Length: 48
Area Border Router
AS Boundary Router
Number of Links: 2
Link connected to: another Router (point-to-point)
(Link ID) Neighboring Router ID: 4.4.4.4
(Link Data) Router Interface address: 10.1.24.2
Number of MTID metrics: 0
TOS 0 Metrics: 100
Link connected to: a Stub Network
(Link ID) Network/subnet number: 10.1.24.0
(Link Data) Network Mask: 255.255.255.0
Number of MTID metrics: 0
TOS 0 Metrics: 100
R4#sh ip ospf database router 3.3.3.3
OSPF Router with ID (4.4.4.4) (Process ID 1)
Router Link States (Area 1)
Routing Bit Set on this LSA in topology Base with MTID 0
LS age: 52
Options: (No TOS-capability, DC)
LS Type: Router Links
Link State ID: 3.3.3.3
Advertising Router: 3.3.3.3
LS Seq Number: 80000002
Checksum: 0xC0C8
Length: 48
Area Border Router
Number of Links: 2
Link connected to: another Router (point-to-point)
(Link ID) Neighboring Router ID: 4.4.4.4
(Link Data) Router Interface address: 10.1.34.3
Number of MTID metrics: 0
TOS 0 Metrics: 10
Link connected to: a Stub Network
(Link ID) Network/subnet number: 10.1.34.0
(Link Data) Network Mask: 255.255.255.0
Number of MTID metrics: 0
TOS 0 Metrics: 10
Ok, that was not so interesting. At least yet with Cisco IOS. Let's make thing little bit more complex. What if I add "maximum-paths 1" under ospf configuration? Which route will be selected and feed to the RIB and much more importantly why?
First let's take a look what was chosen by R4 after clear ip ospf process or reloading R4 router (just in these cases plus loss of both neighbors and then restoring at the same time, that's important but about that later):
As you can see, somehow link to 2.2.2.2 router was chosen. But why? Here is the debug to explain:
R4#sh ip route 1.1.1.1
Routing entry for 1.1.1.1/32
Known via "ospf 1", distance 110, metric 111, type inter area
Last update from 10.1.24.2 on GigabitEthernet0/0.24, 00:00:21 ago
Routing Descriptor Blocks:
* 10.1.24.2, from 2.2.2.2, 00:00:21 ago, via GigabitEthernet0/0.24
Route metric is 111, traffic share count is 1
R4#sh ip cef 1.1.1.1/32
1.1.1.1/32
nexthop 10.1.24.2 GigabitEthernet0/0.24
*Jul 21 21:52:25.083: %OSPF-5-ADJCHG: Process 1, Nbr 3.3.3.3 on GigabitEthernet0/0.34 from LOADING to FULL, Loading DoneI highlighted two most important parts of it. Obviously this is just a matter of algorithm and has nothing to do with RFC. Summaries for area 2 calculated right after area 1. What if I replace area 1 with area 3 or any larger ID number? Not hard to guess. Once again, let's take a look at the results and the debug. For sake of clarify I removed SPF debug for everything except summaries and once again highlighted most important and relevant part:
*Jul 21 21:52:25.083: OSPF-1 SPF : Do not schedule partial SPF type 3, LSID 1.1.1.1, adv_rtr 2.2.2.2, area 2: INTRA/INTER spf scheduled
*Jul 21 21:52:25.083: OSPF-1 SPF : Do not schedule partial SPF type 3, LSID 10.1.12.0, adv_rtr 2.2.2.2, area 2: INTRA/INTER spf scheduled
*Jul 21 21:52:25.083: OSPF-1 SPF : Do not schedule partial SPF type 3, LSID 10.1.13.0, adv_rtr 2.2.2.2, area 2: INTRA/INTER spf scheduled
*Jul 21 21:52:25.083: OSPF-1 SPF : Do not schedule partial SPF type 3, LSID 10.1.34.0, adv_rtr 2.2.2.2, area 2: INTRA/INTER spf scheduled
*Jul 21 21:52:25.083: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on GigabitEthernet0/0.24 from LOADING to FULL, Loading Done
*Jul 21 21:52:30.083: OSPF-1 INTRA: Running SPF for area 1, SPF-type Full
*Jul 21 21:52:30.083: OSPF-1 INTRA: Initializing to run spf
*Jul 21 21:52:30.083: OSPF-1 INTRA: spf_intra() - rebuilding the tree
*Jul 21 21:52:30.083: OSPF-1 INTRA: It is a router LSA 4.4.4.4. Link Count 2
*Jul 21 21:52:30.083: OSPF-1 INTRA: Processing link 0, id 3.3.3.3, link data 10.1.34.4, type 1
*Jul 21 21:52:30.083: OSPF-1 SPF : Add better path to LSA ID 3.3.3.3, gateway 10.1.34.3, dist 10
*Jul 21 21:52:30.083: OSPF-1 INTRA: Putting LSA on the clist LSID 3.3.3.3, Type 1, Adv Rtr. 3.3.3.3
*Jul 21 21:52:30.083: OSPF-1 SPF : Add path: next-hop 10.1.34.3, interface GigabitEthernet0/0.34
*Jul 21 21:52:30.083: OSPF-1 INTRA: Processing link 1, id 10.1.34.0, link data 255.255.255.0, type 3
*Jul 21 21:52:30.083: OSPF-1 SPF : Add better path to LSA ID 10.1.34.255, gateway 10.1.34.0, dist 10
*Jul 21 21:52:30.083: OSPF-1 SPF : Add path: next-hop 10.1.34.4, interface GigabitEthernet0/0.34
*Jul 21 21:52:30.083: OSPF-1 INTRA: Downheap LSA ID 3.3.3.3, Type 1, Adv 3.3.3.3 on clist from index 1 to 1
*Jul 21 21:52:30.083: OSPF-1 INTRA: Update ABR Router Route 3.3.3.3 via GigabitEthernet0/0.34/10.1.34.3, metric 10, area 1
*Jul 21 21:52:30.083: OSPF-1 SPF : Added ABR path to router 3.3.3.3 via 10.1.34.3, area 1, Area SPF 8, PDB SPF 31, Type Full
*Jul 21 21:52:30.083: OSPF-1 INTRA: It is a router LSA 3.3.3.3. Link Count 2
*Jul 21 21:52:30.083: OSPF-1 INTRA: Processing link 0, id 4.4.4.4, link data 10.1.34.3, type 1
*Jul 21 21:52:30.083: OSPF-1 INTRA: Ignore newdist 20 olddist 0
*Jul 21 21:52:30.083: OSPF-1 INTRA: Processing link 1, id 10.1.34.0, link data 255.255.255.0, type 3
*Jul 21 21:52:30.083: OSPF-1 SPF : Add better path to LSA ID 10.1.34.255, gateway 10.1.34.0, dist 20
*Jul 21 21:52:30.083: OSPF-1 SPF : Add path: next-hop 10.1.34.3, interface GigabitEthernet0/0.34
*Jul 21 21:52:30.083: OSPF-1 INTRA: Adding Stub nets
*Jul 21 21:52:30.083: OSPF-1 INTRA: Route update succeeded for 10.1.34.0/255.255.255.0, metric 10, Next Hop: GigabitEthernet0/0.34/10.1.34.4 area 1
*Jul 21 21:52:30.083: OSPF-1 INTRA: Entered intra-area route sync for area 1
*Jul 21 21:52:30.083: OSPF-1 INTRA: Entered intra-area route sync for area 1
*Jul 21 21:52:30.083: OSPF-1 INTRA: Running SPF for area 2, SPF-type Full
*Jul 21 21:52:30.083: OSPF-1 INTRA: Initializing to run spf
*Jul 21 21:52:30.083: OSPF-1 INTRA: spf_intra() - rebuilding the tree
*Jul 21 21:52:30.083: OSPF-1 INTRA: It is a router LSA 4.4.4.4. Link Count 2
*Jul 21 21:52:30.083: OSPF-1 INTRA: Processing link 0, id 2.2.2.2, link data 10.1.24.4, type 1
*Jul 21 21:52:30.083: OSPF-1 SPF : Add better path to LSA ID 2.2.2.2, gateway 10.1.24.2, dist 100
*Jul 21 21:52:30.083: OSPF-1 INTRA: Putting LSA on the clist LSID 2.2.2.2, Type 1, Adv Rtr. 2.2.2.2
*Jul 21 21:52:30.083: OSPF-1 SPF : Add path: next-hop 10.1.24.2, interface GigabitEthernet0/0.24
*Jul 21 21:52:30.083: OSPF-1 INTRA: Processing link 1, id 10.1.24.0, link data 255.255.255.0, type 3
*Jul 21 21:52:30.083: OSPF-1 SPF : Add better path to LSA ID 10.1.24.255, gateway 10.1.24.0, dist 100
*Jul 21 21:52:30.083: OSPF-1 SPF : Add path: next-hop 10.1.24.4, interface GigabitEthernet0/0.24
*Jul 21 21:52:30.083: OSPF-1 INTRA: Downheap LSA ID 2.2.2.2, Type 1, Adv 2.2.2.2 on clist from index 1 to 1
*Jul 21 21:52:30.083: OSPF-1 INTRA: Update ABR/ASBR Router Route 2.2.2.2 via GigabitEthernet0/0.24/10.1.24.2, metric 100, area 2
*Jul 21 21:52:30.083: OSPF-1 SPF : Added ABR/ASBR path to router 2.2.2.2 via 10.1.24.2, area 2, Area SPF 11, PDB SPF 31, Type Full
*Jul 21 21:52:30.083: OSPF-1 INTRA: It is a router LSA 2.2.2.2. Link Count 2
*Jul 21 21:52:30.083: OSPF-1 INTRA: Processing link 0, id 4.4.4.4, link data 10.1.24.2, type 1
*Jul 21 21:52:30.083: OSPF-1 INTRA: Ignore newdist 200 olddist 0
*Jul 21 21:52:30.083: OSPF-1 INTRA: Processing link 1, id 10.1.24.0, link data 255.255.255.0, type 3
*Jul 21 21:52:30.083: OSPF-1 SPF : Add better path to LSA ID 10.1.24.255, gateway 10.1.24.0, dist 200
*Jul 21 21:52:30.083: OSPF-1 SPF : Add path: next-hop 10.1.24.2, interface GigabitEthernet0/0.24
*Jul 21 21:52:30.083: OSPF-1 INTRA: Adding Stub nets
*Jul 21 21:52:30.083: OSPF-1 INTRA: Route update succeeded for 10.1.24.0/255.255.255.0, metric 100, Next Hop: GigabitEthernet0/0.24/10.1.24.4 area 2
*Jul 21 21:52:30.083: OSPF-1 INTRA: Entered intra-area route sync for area 2
*Jul 21 21:52:30.083: OSPF-1 INTRA: Entered intra-area route sync for area 2
*Jul 21 21:52:30.083: OSPF-1 INTER: Check and generate summary LSA into all areas
*Jul 21 21:52:30.083: OSPF-1 INTER: Running spf for summaries area 1
*Jul 21 21:52:30.083: OSPF-1 INTER: Start processing: type 3, LSID 1.1.1.1, mask 255.255.255.255,
*Jul 21 21:52:30.083: OSPF-1 INTER: adv_rtr 3.3.3.3, age 248, seq 0x80000003, area 1
*Jul 21 21:52:30.083: OSPF-1 SPF : Add better path to LSA ID 1.1.1.1, gateway 0.0.0.0, dist 111
*Jul 21 21:52:30.083: OSPF-1 SPF : Add path: next-hop 10.1.34.3, interface GigabitEthernet0/0.34
*Jul 21 21:52:30.083: OSPF-1 INTER: Add succeeded for summary route to 1.1.1.1/255.255.255.255, metric 111
*Jul 21 21:52:30.083: OSPF-1 INTER: next-hop GigabitEthernet0/0.34/10.1.34.3, area 1
*Jul 21 21:52:30.083: OSPF-1 INTER: Start processing: type 3, LSID 10.1.12.0, mask 255.255.255.0,
*Jul 21 21:52:30.083: OSPF-1 INTER: adv_rtr 3.3.3.3, age 253, seq 0x80000001, area 1
*Jul 21 21:52:30.083: OSPF-1 SPF : Add better path to LSA ID 10.1.12.0, gateway 0.0.0.0, dist 120
*Jul 21 21:52:30.083: OSPF-1 SPF : Add path: next-hop 10.1.34.3, interface GigabitEthernet0/0.34
*Jul 21 21:52:30.083: OSPF-1 INTER: Add succeeded for summary route to 10.1.12.0/255.255.255.0, metric 120
*Jul 21 21:52:30.083: OSPF-1 INTER: next-hop GigabitEthernet0/0.34/10.1.34.3, area 1
*Jul 21 21:52:30.083: OSPF-1 INTER: Start processing: type 3, LSID 10.1.13.0, mask 255.255.255.0,
*Jul 21 21:52:30.083: OSPF-1 INTER: adv_rtr 3.3.3.3, age 253, seq 0x80000001, area 1
*Jul 21 21:52:30.083: OSPF-1 SPF : Add better path to LSA ID 10.1.13.0, gateway 0.0.0.0, dist 110
*Jul 21 21:52:30.083: OSPF-1 SPF : Add path: next-hop 10.1.34.3, interface GigabitEthernet0/0.34
*Jul 21 21:52:30.083: OSPF-1 INTER: Add succeeded for summary route to 10.1.13.0/255.255.255.0, metric 110
*Jul 21 21:52:30.083: OSPF-1 INTER: next-hop GigabitEthernet0/0.34/10.1.34.3, area 1
*Jul 21 21:52:30.083: OSPF-1 INTER: Start processing: type 3, LSID 10.1.24.0, mask 255.255.255.0,
*Jul 21 21:52:30.083: OSPF-1 INTER: adv_rtr 3.3.3.3, age 253, seq 0x80000001, area 1
*Jul 21 21:52:30.083: OSPF-1 INTER: Intra-area or connected route exists
*Jul 21 21:52:30.083: OSPF-1 INTER: Start processing: type 4, LSID 2.2.2.2, mask 0.0.0.0,
*Jul 21 21:52:30.083: OSPF-1 INTER: adv_rtr 3.3.3.3, age 253, seq 0x80000001, area 1
*Jul 21 21:52:30.083: OSPF-1 INTER: Entered inter-area route sync for area 1
*Jul 21 21:52:30.083: OSPF-1 INTER: Entered inter-area route sync for area 1
*Jul 21 21:52:30.083: OSPF-1 INTER: Running spf for summaries area 2
*Jul 21 21:52:30.083: OSPF-1 INTER: Start processing: type 3, LSID 1.1.1.1, mask 255.255.255.255,
*Jul 21 21:52:30.083: OSPF-1 INTER: adv_rtr 2.2.2.2, age 1190, seq 0x80000002, area 2
*Jul 21 21:52:30.083: OSPF-1 SPF : Add better path to LSA ID 1.1.1.1, gateway 0.0.0.0, dist 111
*Jul 21 21:52:30.083: OSPF-1 SPF : Add path: next-hop 10.1.24.2, interface GigabitEthernet0/0.24
*Jul 21 21:52:30.083: OSPF-1 INTER: Add succeeded for summary route to 1.1.1.1/255.255.255.255, metric 111
*Jul 21 21:52:30.083: OSPF-1 INTER: next-hop GigabitEthernet0/0.24/10.1.24.2, area 2
*Jul 21 21:52:30.083: OSPF-1 INTER: Start processing: type 3, LSID 10.1.12.0, mask 255.255.255.0,
*Jul 21 21:52:30.083: OSPF-1 INTER: adv_rtr 2.2.2.2, age 1190, seq 0x80000002, area 2
*Jul 21 21:52:30.083: OSPF-1 SPF : Add better path to LSA ID 10.1.12.0, gateway 0.0.0.0, dist 110
*Jul 21 21:52:30.083: OSPF-1 SPF : Add path: next-hop 10.1.24.2, interface GigabitEthernet0/0.24
*Jul 21 21:52:30.083: OSPF-1 INTER: Add succeeded for summary route to 10.1.12.0/255.255.255.0, metric 110
*Jul 21 21:52:30.083: OSPF-1 INTER: next-hop GigabitEthernet0/0.24/10.1.24.2, area 2
*Jul 21 21:52:30.083: OSPF-1 INTER: Start processing: type 3, LSID 10.1.13.0, mask 255.255.255.0,
*Jul 21 21:52:30.083: OSPF-1 INTER: adv_rtr 2.2.2.2, age 1152, seq 0x80000003, area 2
*Jul 21 21:52:30.083: OSPF-1 INTER: Lower cost inter-area route exists
*Jul 21 21:52:30.083: OSPF-1 INTER: Start processing: type 3, LSID 10.1.34.0, mask 255.255.255.0,
*Jul 21 21:52:30.083: OSPF-1 INTER: adv_rtr 2.2.2.2, age 253, seq 0x80000001, area 2
*Jul 21 21:52:30.083: OSPF-1 INTER: Intra-area or connected route exists
*Jul 21 21:52:30.083: OSPF-1 INTER: Entered inter-area route sync for area 2
*Jul 21 21:52:30.083: OSPF-1 INTER: Entered inter-area route sync for area 2
*Jul 21 21:52:30.083: OSPF-1 EXTER: Started Building Type 5 External Routes
*Jul 21 21:52:30.083: OSPF-1 EXTER: Started Building Type 7 External Routes
*Jul 21 21:52:30.083: OSPF-1 EXTER: Started Building Type 7 External Routes
*Jul 21 21:52:30.083: OSPF-1 EXTER: Entered External route sync for area dummy area
*Jul 21 21:52:30.083: OSPF-1 EXTER: Entered External route sync for area dummy area
*Jul 21 21:52:30.083: OSPF-1 EXTER: Entered NSSA route sync for area 1
*Jul 21 21:52:30.083: OSPF-1 EXTER: Entered NSSA route sync for area 1
*Jul 21 21:52:30.083: OSPF-1 EXTER: Entered NSSA route sync for area 2
*Jul 21 21:52:30.083: OSPF-1 EXTER: Entered NSSA route sync for area 2
*Jul 21 22:00:16.775: OSPF-1 INTER: Check and generate summary LSA into all areasAs we expected now R3 is the preferred next-hop for R4 to 1.1.1.1/32:
*Jul 21 22:00:16.775: OSPF-1 INTER: Running spf for summaries area 2
*Jul 21 22:00:16.775: OSPF-1 INTER: Start processing: type 3, LSID 1.1.1.1, mask 255.255.255.255,
*Jul 21 22:00:16.775: OSPF-1 INTER: adv_rtr 2.2.2.2, age 1657, seq 0x80000002, area 2
*Jul 21 22:00:16.775: OSPF-1 SPF : Add better path to LSA ID 1.1.1.1, gateway 0.0.0.0, dist 111
*Jul 21 22:00:16.775: OSPF-1 SPF : Add path: next-hop 10.1.24.2, interface GigabitEthernet0/0.24
*Jul 21 22:00:16.775: OSPF-1 INTER: Add succeeded for summary route to 1.1.1.1/255.255.255.255, metric 111
*Jul 21 22:00:16.775: OSPF-1 INTER: next-hop GigabitEthernet0/0.24/10.1.24.2, area 2
*Jul 21 22:00:16.775: OSPF-1 INTER: Start processing: type 3, LSID 10.1.12.0, mask 255.255.255.0,
*Jul 21 22:00:16.775: OSPF-1 INTER: adv_rtr 2.2.2.2, age 1657, seq 0x80000002, area 2
*Jul 21 22:00:16.775: OSPF-1 SPF : Add better path to LSA ID 10.1.12.0, gateway 0.0.0.0, dist 110
*Jul 21 22:00:16.775: OSPF-1 SPF : Add path: next-hop 10.1.24.2, interface GigabitEthernet0/0.24
*Jul 21 22:00:16.775: OSPF-1 INTER: Add succeeded for summary route to 10.1.12.0/255.255.255.0, metric 110
*Jul 21 22:00:16.775: OSPF-1 INTER: next-hop GigabitEthernet0/0.24/10.1.24.2, area 2
*Jul 21 22:00:16.775: OSPF-1 INTER: Start processing: type 3, LSID 10.1.13.0, mask 255.255.255.0,
*Jul 21 22:00:16.775: OSPF-1 INTER: adv_rtr 2.2.2.2, age 1619, seq 0x80000003, area 2
*Jul 21 22:00:16.775: OSPF-1 SPF : Add better path to LSA ID 10.1.13.0, gateway 0.0.0.0, dist 210
*Jul 21 22:00:16.775: OSPF-1 SPF : Add path: next-hop 10.1.24.2, interface GigabitEthernet0/0.24
*Jul 21 22:00:16.775: OSPF-1 INTER: Add succeeded for summary route to 10.1.13.0/255.255.255.0, metric 210
*Jul 21 22:00:16.775: OSPF-1 INTER: next-hop GigabitEthernet0/0.24/10.1.24.2, area 2
*Jul 21 22:00:16.775: OSPF-1 INTER: Start processing: type 3, LSID 10.1.34.0, mask 255.255.255.0,
*Jul 21 22:00:16.775: OSPF-1 INTER: adv_rtr 2.2.2.2, age 33, seq 0x80000001, area 2
*Jul 21 22:00:16.775: OSPF-1 INTER: Intra-area or connected route exists
*Jul 21 22:00:16.775: OSPF-1 INTER: Entered inter-area route sync for area 2
*Jul 21 22:00:16.775: OSPF-1 INTER: Entered inter-area route sync for area 2
*Jul 21 22:00:16.775: OSPF-1 INTER: Running spf for summaries area 3
*Jul 21 22:00:16.775: OSPF-1 INTER: Start processing: type 3, LSID 1.1.1.1, mask 255.255.255.255,
*Jul 21 22:00:16.775: OSPF-1 INTER: adv_rtr 3.3.3.3, age 41, seq 0x80000002, area 3
*Jul 21 22:00:16.775: OSPF-1 SPF : Add better path to LSA ID 1.1.1.1, gateway 0.0.0.0, dist 111
*Jul 21 22:00:16.775: OSPF-1 SPF : Add path: next-hop 10.1.34.3, interface GigabitEthernet0/0.34
*Jul 21 22:00:16.775: OSPF-1 INTER: Add succeeded for summary route to 1.1.1.1/255.255.255.255, metric 111
*Jul 21 22:00:16.775: OSPF-1 INTER: next-hop GigabitEthernet0/0.34/10.1.34.3, area 3
*Jul 21 22:00:16.775: OSPF-1 INTER: Start processing: type 3, LSID 10.1.12.0, mask 255.255.255.0,
*Jul 21 22:00:16.775: OSPF-1 INTER: adv_rtr 3.3.3.3, age 41, seq 0x80000002, area 3
*Jul 21 22:00:16.775: OSPF-1 INTER: Lower cost inter-area route exists
*Jul 21 22:00:16.775: OSPF-1 INTER: Start processing: type 3, LSID 10.1.13.0, mask 255.255.255.0,
*Jul 21 22:00:16.775: OSPF-1 INTER: adv_rtr 3.3.3.3, age 41, seq 0x80000002, area 3
*Jul 21 22:00:16.775: OSPF-1 SPF : Add better path to LSA ID 10.1.13.0, gateway 0.0.0.0, dist 110
*Jul 21 22:00:16.775: OSPF-1 SPF : Add path: next-hop 10.1.34.3, interface GigabitEthernet0/0.34
*Jul 21 22:00:16.775: OSPF-1 INTER: Add succeeded for summary route to 10.1.13.0/255.255.255.0, metric 110
*Jul 21 22:00:16.775: OSPF-1 INTER: next-hop GigabitEthernet0/0.34/10.1.34.3, area 3
*Jul 21 22:00:16.775: OSPF-1 INTER: Start processing: type 3, LSID 10.1.24.0, mask 255.255.255.0,
*Jul 21 22:00:16.775: OSPF-1 INTER: adv_rtr 3.3.3.3, age 41, seq 0x80000002, area 3
*Jul 21 22:00:16.775: OSPF-1 INTER: Intra-area or connected route exists
*Jul 21 22:00:16.775: OSPF-1 INTER: Start processing: type 4, LSID 2.2.2.2, mask 0.0.0.0,
*Jul 21 22:00:16.775: OSPF-1 INTER: adv_rtr 3.3.3.3, age 41, seq 0x80000002, area 3
*Jul 21 22:00:16.775: OSPF-1 INTER: Entered inter-area route sync for area 3
*Jul 21 22:00:16.775: OSPF-1 INTER: Entered inter-area route sync for area 3
R4#sh ip route 1.1.1.1
Routing entry for 1.1.1.1/32
Known via "ospf 1", distance 110, metric 111, type inter area
Last update from 10.1.34.3 on GigabitEthernet0/0.34, 00:04:06 ago
Routing Descriptor Blocks:
* 10.1.34.3, from 3.3.3.3, 00:04:06 ago, via GigabitEthernet0/0.34
Route metric is 111, traffic share count is 1
R4#sh ip cef 1.1.1.1/32
1.1.1.1/32
nexthop 10.1.34.3 GigabitEthernet0/0.34
But if I flap only one interface to R2 that causes neighbor loss:
*Jul 21 22:05:45.189: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on GigabitEthernet0/0.24 from LOADING to FULL, Loading Done*Jul 21 22:05:46.086: OSPF-1 SPF : Detect change in LSA type 1, LSID 2.2.2.2 from 2.2.2.2 area 2*Jul 21 22:05:51.068: OSPF-1 INTRA: Running SPF for area 2, SPF-type Full*Jul 21 22:05:51.068: OSPF-1 INTRA: Initializing to run spf*Jul 21 22:05:51.068: OSPF-1 INTRA: spf_intra() - rebuilding the tree*Jul 21 22:05:51.068: OSPF-1 INTRA: It is a router LSA 4.4.4.4. Link Count 2*Jul 21 22:05:51.068: OSPF-1 INTRA: Processing link 0, id 2.2.2.2, link data 10.1.24.4, type 1*Jul 21 22:05:51.068: OSPF-1 SPF : Add better path to LSA ID 2.2.2.2, gateway 10.1.24.2, dist 100*Jul 21 22:05:51.068: OSPF-1 INTRA: Putting LSA on the clist LSID 2.2.2.2, Type 1, Adv Rtr. 2.2.2.2*Jul 21 22:05:51.068: OSPF-1 SPF : Add path: next-hop 10.1.24.2, interface GigabitEthernet0/0.24*Jul 21 22:05:51.068: OSPF-1 INTRA: Processing link 1, id 10.1.24.0, link data 255.255.255.0, type 3*Jul 21 22:05:51.068: OSPF-1 SPF : Add better path to LSA ID 10.1.24.255, gateway 10.1.24.0, dist 100*Jul 21 22:05:51.068: OSPF-1 SPF : Add path: next-hop 10.1.24.4, interface GigabitEthernet0/0.24*Jul 21 22:05:51.068: OSPF-1 INTRA: Downheap LSA ID 2.2.2.2, Type 1, Adv 2.2.2.2 on clist from index 1 to 1*Jul 21 22:05:51.068: OSPF-1 INTRA: Update ABR/ASBR Router Route 2.2.2.2 via GigabitEthernet0/0.24/10.1.24.2, metric 100, area 2*Jul 21 22:05:51.068: OSPF-1 SPF : Added ABR/ASBR path to router 2.2.2.2 via 10.1.24.2, area 2, Area SPF 15, PDB SPF 40, Type Full*Jul 21 22:05:51.068: OSPF-1 INTRA: It is a router LSA 2.2.2.2. Link Count 2*Jul 21 22:05:51.068: OSPF-1 INTRA: Processing link 0, id 4.4.4.4, link data 10.1.24.2, type 1*Jul 21 22:05:51.068: OSPF-1 INTRA: Ignore newdist 200 olddist 0*Jul 21 22:05:51.068: OSPF-1 INTRA: Processing link 1, id 10.1.24.0, link data 255.255.255.0, type 3*Jul 21 22:05:51.068: OSPF-1 SPF : Add better path to LSA ID 10.1.24.255, gateway 10.1.24.0, dist 200*Jul 21 22:05:51.068: OSPF-1 SPF : Add path: next-hop 10.1.24.2, interface GigabitEthernet0/0.24*Jul 21 22:05:51.068: OSPF-1 INTRA: Adding Stub nets*Jul 21 22:05:51.068: OSPF-1 INTRA: Route update succeeded for 10.1.24.0/255.255.255.0, metric 100, Next Hop: GigabitEthernet0/0.24/10.1.24.4 area 2*Jul 21 22:05:51.068: OSPF-1 INTRA: Entered intra-area route sync for area 2*Jul 21 22:05:51.068: OSPF-1 INTRA: Entered intra-area route sync for area 2*Jul 21 22:05:51.068: OSPF-1 INTRA: Running SPF for area 3, SPF-type Prefix Recalculation*Jul 21 22:05:51.068: OSPF-1 INTER: Check and generate summary LSA into all areas*Jul 21 22:05:51.068: OSPF-1 INTER: Running spf for summaries area 2*Jul 21 22:05:51.068: OSPF-1 INTER: Start processing: type 3, LSID 1.1.1.1, mask 255.255.255.255,*Jul 21 22:05:51.068: OSPF-1 INTER: adv_rtr 2.2.2.2, age 97, seq 0x80000003, area 2*Jul 21 22:05:51.068: OSPF-1 SPF : Add better path to LSA ID 1.1.1.1, gateway 0.0.0.0, dist 111*Jul 21 22:05:51.068: OSPF-1 SPF : Add path: next-hop 10.1.24.2, interface GigabitEthernet0/0.24*Jul 21 22:05:51.068: OSPF-1 INTER: Add succeeded for summary route to 1.1.1.1/255.255.255.255, metric 111*Jul 21 22:05:51.068: OSPF-1 INTER: next-hop GigabitEthernet0/0.24/10.1.24.2, area 2*Jul 21 22:05:51.068: OSPF-1 INTER: Start processing: type 3, LSID 10.1.12.0, mask 255.255.255.0,*Jul 21 22:05:51.068: OSPF-1 INTER: adv_rtr 2.2.2.2, age 97, seq 0x80000003, area 2*Jul 21 22:05:51.068: OSPF-1 SPF : Add better path to LSA ID 10.1.12.0, gateway 0.0.0.0, dist 110*Jul 21 22:05:51.068: OSPF-1 SPF : Add path: next-hop 10.1.24.2, interface GigabitEthernet0/0.24*Jul 21 22:05:51.068: OSPF-1 INTER: Add succeeded for summary route to 10.1.12.0/255.255.255.0, metric 110*Jul 21 22:05:51.068: OSPF-1 INTER: next-hop GigabitEthernet0/0.24/10.1.24.2, area 2*Jul 21 22:05:51.068: OSPF-1 INTER: Start processing: type 3, LSID 10.1.13.0, mask 255.255.255.0,*Jul 21 22:05:51.068: OSPF-1 INTER: adv_rtr 2.2.2.2, age 97, seq 0x80000004, area 2*Jul 21 22:05:51.068: OSPF-1 SPF : Add better path to LSA ID 10.1.13.0, gateway 0.0.0.0, dist 210*Jul 21 22:05:51.068: OSPF-1 SPF : Add path: next-hop 10.1.24.2, interface GigabitEthernet0/0.24*Jul 21 22:05:51.068: OSPF-1 INTER: Add succeeded for summary route to 10.1.13.0/255.255.255.0, metric 210*Jul 21 22:05:51.068: OSPF-1 INTER: next-hop GigabitEthernet0/0.24/10.1.24.2, area 2*Jul 21 22:05:51.068: OSPF-1 INTER: Start processing: type 3, LSID 10.1.34.0, mask 255.255.255.0,*Jul 21 22:05:51.068: OSPF-1 INTER: adv_rtr 2.2.2.2, age 367, seq 0x80000001, area 2*Jul 21 22:05:51.068: OSPF-1 INTER: Intra-area or connected route exists*Jul 21 22:05:51.068: OSPF-1 INTER: Entered inter-area route sync for area 2*Jul 21 22:05:51.068: OSPF-1 INTER: Entered inter-area route sync for area 2*Jul 21 22:05:51.068: OSPF-1 INTER: Running spf for summaries area 3*Jul 21 22:05:51.068: OSPF-1 INTER: Start processing: type 3, LSID 1.1.1.1, mask 255.255.255.255,*Jul 21 22:05:51.068: OSPF-1 INTER: adv_rtr 3.3.3.3, age 376, seq 0x80000002, area 3*Jul 21 22:05:51.068: OSPF-1 SPF : Add better path to LSA ID 1.1.1.1, gateway 0.0.0.0, dist 111*Jul 21 22:05:51.068: OSPF-1 SPF : Add path: next-hop 10.1.34.3, interface GigabitEthernet0/0.34*Jul 21 22:05:51.068: OSPF-1 INTER: Add succeeded for summary route to 1.1.1.1/255.255.255.255, metric 111*Jul 21 22:05:51.068: OSPF-1 INTER: next-hop GigabitEthernet0/0.34/10.1.34.3, area 3*Jul 21 22:05:51.068: OSPF-1 INTER: Start processing: type 3, LSID 10.1.12.0, mask 255.255.255.0,*Jul 21 22:05:51.068: OSPF-1 INTER: adv_rtr 3.3.3.3, age 376, seq 0x80000002, area 3*Jul 21 22:05:51.068: OSPF-1 INTER: Lower cost inter-area route exists*Jul 21 22:05:51.068: OSPF-1 INTER: Start processing: type 3, LSID 10.1.13.0, mask 255.255.255.0,*Jul 21 22:05:51.068: OSPF-1 INTER: adv_rtr 3.3.3.3, age 376, seq 0x80000002, area 3*Jul 21 22:05:51.068: OSPF-1 SPF : Add better path to LSA ID 10.1.13.0, gateway 0.0.0.0, dist 110*Jul 21 22:05:51.068: OSPF-1 SPF : Add path: next-hop 10.1.34.3, interface GigabitEthernet0/0.34*Jul 21 22:05:51.068: OSPF-1 INTER: Add succeeded for summary route to 10.1.13.0/255.255.255.0, metric 110*Jul 21 22:05:51.068: OSPF-1 INTER: next-hop GigabitEthernet0/0.34/10.1.34.3, area 3*Jul 21 22:05:51.068: OSPF-1 INTER: Start processing: type 3, LSID 10.1.24.0, mask 255.255.255.0,*Jul 21 22:05:51.068: OSPF-1 INTER: adv_rtr 3.3.3.3, age 376, seq 0x80000002, area 3*Jul 21 22:05:51.068: OSPF-1 INTER: Intra-area or connected route exists*Jul 21 22:05:51.068: OSPF-1 INTER: Start processing: type 4, LSID 2.2.2.2, mask 0.0.0.0,*Jul 21 22:05:51.068: OSPF-1 INTER: adv_rtr 3.3.3.3, age 376, seq 0x80000002, area 3*Jul 21 22:05:51.068: OSPF-1 INTER: Entered inter-area route sync for area 3*Jul 21 22:05:51.068: OSPF-1 INTER: Entered inter-area route sync for area 3*Jul 21 22:05:51.068: OSPF-1 SPF : Delete path to router 2.2.2.2 via 10.1.34.3, Area 3, Area SPF 4, PDB SPF 39, SPF Type Prefix Recalculation
R4#sh ip route 1.1.1.1
Routing entry for 1.1.1.1/32
Known via "ospf 1", distance 110, metric 111, type inter area
Last update from 10.1.24.2 on GigabitEthernet0/0.24, 00:05:41 ago
Routing Descriptor Blocks:
* 10.1.24.2, from 2.2.2.2, 00:05:41 ago, via GigabitEthernet0/0.24
Route metric is 111, traffic share count is 1
R4#sh ip cef 1.1.1.1/32
1.1.1.1/32
nexthop 10.1.24.2 GigabitEthernet0/0.24
As you can see, now R4 changed it's behavior and will prefer route to R2, no matter in which order we flap routes. Interesting enough? Rate corner case, but at least we know rules. Such tasty small details.
Now I'm going to tell you something about Huawei's VRP. The same topology, only one thing changed - I added Loopback 0 on R4 with address 4.4.4.4/32 and imported it into both areas to demonstrate an interesting behavior in contrast with Cisco's IOS that will show a big difference in INE's OSPF challenge I've mentioned earlier. Here is the topology for your reference:
The main difference is that VRP violates RFC3101 and R2 translate Type 7 LSA into Type 5 that leads to ECMP:
dis ospf lsdb ase 4.4.4.4
OSPF Process 1 with Router ID 1.1.1.1
Link State Database
Type : External
Ls id : 4.4.4.4
Adv rtr : 4.4.4.4
Ls age : 696
Len : 36
Options : E
seq# : 80000001
chksum : 0xcde2
Net mask : 255.255.255.255
TOS 0 Metric: 1
E type : 2
Forwarding Address : 0.0.0.0
Tag : 1
Priority : Medium
Type : External
Ls id : 4.4.4.4
Adv rtr : 2.2.2.2
Ls age : 263
Len : 36
Options : E
seq# : 80000001
chksum : 0xf59b
Net mask : 255.255.255.255
TOS 0 Metric: 1
E type : 2
Forwarding Address : 10.1.24.4
Tag : 1
Priority : Mediumdis ip routing-table 4.4.4.4
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 2
Destination/Mask Proto Pre Cost Flags NextHop Interface
4.4.4.4/32 O_ASE 150 1 D 10.1.12.2 Ethernet0/0/0
O_ASE 150 1 D 10.1.13.3 Ethernet0/0/1
But let's talk about original question. What about reverse path from R4 to R1's loopback 1.1.1.1/32? Please note that I also changed cost of R1's loopback 0 to 1 to match IOS because by default cost of any Loopback interface on VRP equals 0.
display ospf lsdb summary 1.1.1.1
OSPF Process 1 with Router ID 4.4.4.4
Area: 0.0.0.2
Link State Database
Type : Sum-Net
Ls id : 1.1.1.1
Adv rtr : 2.2.2.2
Ls age : 487
Len : 28
Options : None
seq# : 80000003
chksum : 0x7fc7
Net mask : 255.255.255.255
Tos 0 metric: 10
Priority : Medium
Area: 0.0.0.3
Link State Database
Type : Sum-Net
Ls id : 1.1.1.1
Adv rtr : 3.3.3.3
Ls age : 451
Len : 28
Options : E
seq# : 80000001
chksum : 0xce1a
Net mask : 255.255.255.255
Tos 0 metric: 100
Priority : Medium
display ospf lsdb router 2.2.2.2
OSPF Process 1 with Router ID 4.4.4.4
Area: 0.0.0.2
Link State Database
Type : Router
Ls id : 2.2.2.2
Adv rtr : 2.2.2.2
Ls age : 116
Len : 48
Options : ASBR ABR
seq# : 8000000b
chksum : 0x8e7a
Link count: 2
* Link ID: 4.4.4.4
Data : 10.1.24.2
Link Type: P-2-P
Metric : 100
* Link ID: 10.1.24.0
Data : 255.255.255.0
Link Type: StubNet
Metric : 100
Priority : Low
Area: 0.0.0.3
Link State Databasedisplay ospf lsdb router 3.3.3.3
OSPF Process 1 with Router ID 4.4.4.4
Area: 0.0.0.3
Link State Database
Type : Router
Ls id : 3.3.3.3
Adv rtr : 3.3.3.3
Ls age : 119
Len : 48
Options : ABR E
seq# : 80000008
chksum : 0x960d
Link count: 2
* Link ID: 4.4.4.4
Data : 10.1.34.3
Link Type: P-2-P
Metric : 10
* Link ID: 10.1.34.0
Data : 255.255.255.0
Link Type: StubNet
Metric : 10
Priority : Low
By default VRP performs EMCP, but won't even if I specify it explicitly with:
[R4-ospf-1]maximum load-balancing 2
[R4-ospf-1]dis ip ro 1.1.1.1In any case VRP prefers route from area with highest ID number, no matter in which order you flap neighbors. If link to R3 is in area 3, then R3 will be preferred next-hop.
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
1.1.1.1/32 OSPF 10 110 D 10.1.34.3 Ethernet0/0/1
And finally, this is not related to ospf path selection tricks, more about differences between vendors, take a look at VRP R4 ospf routes, do you see something suspicious? Sure, I highlighted it:
dis ip routing-table protocol ospf
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Public routing table : OSPF
Destinations : 4 Routes : 4
OSPF routing table status :
Destinations : 4 Routes : 4
Destination/Mask Proto Pre Cost Flags NextHop Interface
0.0.0.0/0 O_NSSA 150 1 D 10.1.24.2 Ethernet0/0/0
1.1.1.1/32 OSPF 10 110 D 10.1.34.3 Ethernet0/0/1
10.1.12.0/24 OSPF 10 110 D 10.1.24.2 Ethernet0/0/0
10.1.13.0/24 OSPF 10 110 D 10.1.34.3 Ethernet0/0/1
OSPF routing table status :
Destinations : 0 Routes : 0
Here is R2's ospf config for reference, no magic:
In contrast with IOS, R2 generated default route for NSSA area:display current-configuration configuration ospf
#
ospf 1
area 0.0.0.0
area 0.0.0.2
nssa
#
display ospf lsdb nssa self-originate
OSPF Process 1 with Router ID 2.2.2.2
Area: 0.0.0.0
Link State Database
Area: 0.0.0.2
Link State Database
Type : NSSA
Ls id : 0.0.0.0
Adv rtr : 2.2.2.2
Ls age : 1728
Len : 36
Options : None
seq# : 80000001
chksum : 0xc404
Net mask : 0.0.0.0
TOS 0 Metric: 1
E type : 2
Forwarding Address : 0.0.0.0
Tag : 1
Priority : Low
That's really interesting and important to know when comparing platforms and vendors. Hope that was interesting for you. Don't forget to leave a comment below!
P.S. Thanks to my colleague Denis for pointing me to some spelling mistakes.