8 mins read

RSVP – install option

1. Intro

By default, only /32 prefixes are installed in the inet.3 table. Using the install option, you can add additional prefixes to inet.3. By including the active parameter, the prefix is also added to the inet.0 table, which means that the IGP can also use this prefix. Remember that by default only BGP can use prefixes in the inet.3 table.

This is the topology we will be using to test the install feature:

And the starting config:

2. R1 to R9 fails

This is a network with a BGP free core, so R1 to R9 ping fails on the P routers:

We could redistribute BGP routes in OSPF, but that is not really a good idea.

Instead, we should use MPLS, but we will not extend MPLS/RSVP beyond the R7 router. This is where the install feature comes handy.

3. install feature

Typically only Loopbacks are installed in the inet.3 table, how to tell the router to use MPLS for prefixes to R9? It is rather simple actually, configure the install feature on the RSVP LSP.

We are using inet.3 for BGP next-hop resolution, so we need to add the next-hop to R9: 17.7.9.9.

### Let's add the full subnet to inet.3: 

root@R1# set protocols mpls label-switched-path R1-to-R7 install 17.7.9.0/24 

[edit]
root@R1# show | compare 
[edit protocols mpls label-switched-path R1-to-R7]
+     install 17.7.9.0/24;

[edit]
root@R1# commit 
commit complete

### Now we have that subnet in the inet.3 table: 

root@R1# run show route table inet.3 

inet.3: 2 destinations, 2 routes (2 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

17.0.0.7/32        *[RSVP/7/1] 00:00:04, metric 3000
                    >  to 17.1.3.3 via ge-0/0/2.0, label-switched-path R1-to-R7
17.7.9.0/24        *[RSVP/7/1] 00:00:04, metric 3000
                    >  to 17.1.3.3 via ge-0/0/2.0, label-switched-path R1-to-R7

### Our ping works now: 

root@R1# run ping 17.0.0.9 source 17.0.0.1    
PING 17.0.0.9 (17.0.0.9): 56 data bytes
64 bytes from 17.0.0.9: icmp_seq=0 ttl=61 time=5.710 ms
64 bytes from 17.0.0.9: icmp_seq=1 ttl=61 time=5.420 ms
64 bytes from 17.0.0.9: icmp_seq=2 ttl=61 time=5.798 ms
^C
--- 17.0.0.9 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 5.420/5.643/5.798/0.161 ms

Let’s do some tcpdump captures to better understand what is happening:

Note: we can even remove the passive OSPF interface on the R7 router and it will still work.

### In inet.0 table, R1 learns the 17.7.9.7/24 route form R7: 

root@R1# run show route 17.7.9.7/24 

inet.0: 45 destinations, 45 routes (45 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

17.7.9.0/24        *[OSPF/10] 21:08:39, metric 3001
                    >  to 17.1.3.3 via ge-0/0/2.0

inet.3: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

17.7.9.0/24        *[RSVP/7/1] 19:33:40, metric 3000
                    >  to 17.1.3.3 via ge-0/0/2.0, label-switched-path R1-to-R7

### Remove the passive interface on R7: 

root@R7# show | compare 
[edit protocols ospf area 0.0.0.0]
-     interface ge-0/0/4.0 {
-         passive;
-     }

[edit]
root@R7# commit 
commit complete

### The prefix is no longer there in inet.0
### In inet.3 we still have the route because of the configured install option 

root@R1# run show route 17.7.9.7/24    

inet.3: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

17.7.9.0/24        *[RSVP/7/1] 19:38:21, metric 3000
                    >  to 17.1.3.3 via ge-0/0/2.0, label-switched-path R1-to-R7

### We still have connectivity: 

root@R1# run ping 17.0.0.9 source 17.0.0.1    
PING 17.0.0.9 (17.0.0.9): 56 data bytes
64 bytes from 17.0.0.9: icmp_seq=0 ttl=61 time=5.877 ms
64 bytes from 17.0.0.9: icmp_seq=1 ttl=61 time=6.353 ms
64 bytes from 17.0.0.9: icmp_seq=2 ttl=61 time=5.911 ms
^C
--- 17.0.0.9 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 5.877/6.047/6.353/0.217 ms

4. active knob

### We can install the route in inet.0 (instead of inet.3) by configuring the 'active' knob: 

root@R1# show | compare 
[edit protocols mpls label-switched-path R1-to-R7 install 17.7.9.0/24]
+     active;

root@R1# commit 
commit complete

### Now the route is in inet.0 instead of inet.3:

root@R1# run show route 17.7.9.7/24                                                   

inet.0: 45 destinations, 45 routes (45 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

17.7.9.0/24        *[RSVP/7/1] 00:08:54, metric 3000
                    >  to 17.1.3.3 via ge-0/0/2.0, label-switched-path R1-to-R7

### Ping still works: 

root@R1# run ping 17.0.0.9 source 17.0.0.1    
PING 17.0.0.9 (17.0.0.9): 56 data bytes
64 bytes from 17.0.0.9: icmp_seq=0 ttl=61 time=5.311 ms
64 bytes from 17.0.0.9: icmp_seq=1 ttl=61 time=6.841 ms
^C
--- 17.0.0.9 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max/stddev = 5.311/6.076/6.841/0.765 ms

5. Conclusion

This is really interesting, in the R1-to-R9 direction:

  • traffic is using the R1-to-R7 LSP, hence the P routers are using labels to forward the ping
  • we can see the penultimate hop popping that R6 is doing.
  • R7-to-R9 unlabeled forwarding (in fact, family mpls is not even activate on the link)

In the R9-to-R1 direction:

  • the full path is using unlabeled forwarding
  • this is working because all core routers know how to reach R1
  • not the case here, but in some scenarios we might need to use the install feature for the return traffic as well

External Resources: