Colored and Uncolored LSPs

In previous posts I defined both colored (here) and uncolored (here) SRTE LSPs. Anyhow, I think it is beneficial to compare them side by side in order to better understand the differences.

Let’s recall our topology:

We are going to define two LSPs from R1 to R8.

The main difference between colored and uncolored LSPs is… the color.

The color is nothing more than an extended bgp community:

set policy-options community color1234 members color:0:1234
set policy-options community color5678 members color:0:5678

We will see later when colors come into play.

Now, let’s define LSPs.

First, we configure segment lists (assuming we do not use DCSPF and compute profiles).

This is a segment list for an uncolored LSP:

set protocols source-packet-routing segment-list adj-list r4 ip-address 192.168.14.1
set protocols source-packet-routing segment-list adj-list r6 label 20
set protocols source-packet-routing segment-list adj-list r7 label 20
set protocols source-packet-routing segment-list adj-list r8 label 24

This is for a colored LSP:

set protocols source-packet-routing segment-list r8-via-r5 r5 label 1105
set protocols source-packet-routing segment-list r8-via-r5 r8 label 1108

Here, we see the first difference: uncolored LSPs require the first segment to be an ip address, not a label.

Next, we move to the LSP itself.

Colored:

set protocols source-packet-routing source-routing-path r8-colored to 8.8.8.8
set protocols source-packet-routing source-routing-path r8-colored color 5678
set protocols source-packet-routing source-routing-path r8-colored binding-sid 1005678
set protocols source-packet-routing source-routing-path r8-colored primary r8-via-r5 bfd-liveness-detection sbfd remote-discriminator 8
set protocols source-packet-routing source-routing-path r8-colored primary r8-via-r5 bfd-liveness-detection minimum-interval 1000
set protocols source-packet-routing source-routing-path r8-colored primary r8-via-r5 bfd-liveness-detection multiplier 3

There it is! The configured color will map to this community: “color:0:5678”.

Uncolored:

set protocols source-packet-routing source-routing-path r8-adj to 8.8.8.8
set protocols source-packet-routing source-routing-path r8-adj binding-sid 1000008
set protocols source-packet-routing source-routing-path r8-adj primary adj-list-transl bfd-liveness-detection sbfd remote-discriminator 8
set protocols source-packet-routing source-routing-path r8-adj primary adj-list-transl bfd-liveness-detection minimum-interval 1000
set protocols source-packet-routing source-routing-path r8-adj primary adj-list-transl bfd-liveness-detection multiplier 3

As you can see, the only difference is the color definition lacking.

The LSPs end up in different routing tables.

Uncolored LSPs are placed into inet.3:

root@r1_re# run show route table inet.3 8.8.8.8

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

8.8.8.8/32         *[SPRING-TE/8] 00:00:03, metric 1, metric2 30
                    >  to 192.168.14.1 via ge-0/0/2.0, Push 26, Push 20, Push 20(top)

while colored LSPs are placed into inetcolor.0 (2 next-hops as we have 2 ECMP paths to reach R5 via label 1105):

root@r1_re# run show route table inetcolor.0

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

8.8.8.8-5678<c>/64
                   *[SPRING-TE/8] 00:28:12, metric 1, metric2 30
                       to 192.168.13.1 via ge-0/0/1.0, Push 1108, Push 1105(top)
                    >  to 192.168.14.1 via ge-0/0/2.0, Push 1108, Push 1105(top)

root@r1_re# run show route label 1105

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

1105               *[L-ISIS/14] 00:34:35, metric 20
                    >  to 192.168.13.1 via ge-0/0/1.0, Swap 1105
                       to 192.168.14.1 via ge-0/0/2.0, Swap 1105

Now, we add BGP.

R8 advertises 2 routes:

root@r8_re# run show route advertising-protocol bgp 1.1.1.1 extensive

inet.0: 24 destinations, 26 routes (24 active, 0 holddown, 0 hidden)
* 8.5.6.7/32 (2 entries, 1 announced)
 BGP group ibgp type Internal
     Nexthop: Self
     Localpref: 100
     AS path: [100] I
     Communities: color:0:5678

* 8.8.8.100/32 (1 entry, 1 announced)
 BGP group ibgp type Internal
     Nexthop: Self
     Localpref: 100
     AS path: [100] I

Only route 8.5.6.7 is colored. Let’s see what happens on R1.

First, we need R1 to be able to resolve colored NHs (to perform lookup in inetcolor.0):

set protocols bgp family inet unicast extended-nexthop-color

Checking RIBs:

root@r1_re# run show route table inet.0 8.8.8.100

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

8.8.8.100/32       *[BGP/170] 00:11:24, localpref 100, from 8.8.8.8
                      AS path: I, validation-state: unverified
                    >  to 192.168.14.1 via ge-0/0/2.0, Push 26, Push 20, Push 20(top)

[edit]
root@r1_re# run show route table inet.0 8.5.6.7

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

8.5.6.7/32         *[BGP/170] 00:45:51, localpref 100, from 8.8.8.8
                      AS path: I, validation-state: unverified
                       to 192.168.13.1 via ge-0/0/1.0, Push 1108, Push 1105(top)
                    >  to 192.168.14.1 via ge-0/0/2.0, Push 1108, Push 1105(top)

As you can see, first route (uncolored) uses the uncolored lsp while second route uses the colored lsp (color 5678) found in inetcolor.0.

These are the main differences between colored and uncolored.

Earlier, we showed the difference when configuring the segment list.
Segment list for uncolored LSP must have the first segment as an ip address.
On the other hand, colored LSP only has labels.
This has a consequence.
While Junos sees an uncolored segment list with N segments as 1 ip + N-1 labels, it sees colored segment list with N segments as N labels.
Junos, by default, support 3 labels stack. To support bigger stacks, we need to configure this on mpls interfaces:

set interfaces <IF> unit 0 family mpls maximum-labels 16

Without that, colored LSP is installed into inetcolor.0 but it becomes unusable when a BGP route tries to use it to resolve the next-hop.

There is still one open question…why should I use a colored lsp instead of an uncolored one? Next time.

Ciao
IoSonoUmberto

2 thoughts on “Colored and Uncolored LSPs”

Leave a comment