Inter domain SRTE paths with express segments

In previous posts I talked about EPE adjacencies and express segments. Today, we are going to put all the pieces together to build inter-domain SR lsps.

First, let’s recall how express segments fit into the global picture. This image from Juniper official documentation says it all:

Express segments can be used to abstract and represent a whole domain with a label. For instance, in the example above domain 2 can be “summarized” with a single label representing an express segments set including 2 rsvp lsps that traverse domain 2.

Domain 2 uses RSVP but nothing prevents us from using SR there as well and defining express segments referencing SRTE paths as underlying lsps.

Between domains (if a link exists, in the image above we do not have it) we have BGP-LS-EPE adjs.

As a result we can build an end to end SRTE path from, let’s say, PE1 to PE4 which is the “sum” of multiple segments:

  • SRTE path to domain 1 border router (might be a single label, C1 node SID)
  • express segment label to traverse domain 2 (locally, C1 will swap expr-seg label with underlying lsp label which might be a single label in case of a rsvp tunnel or a stack of labels in case of SRTE path)
  • SRTE path from C4 to PE4

Ideally, we want to have N labels, where N is the number of domains to traverse; in this case, three.

This way we can minimize the number of labels used to define the end-to-end path which might be a good idea to avoid issues with devices not supporting “deep” label stacks.
Anyhow, this is true up to a certain point. As anticipated before, let’s consider C1. MPLS packet with expr-seg label arrives. The underlying lsp is a SR one. C1 swaps expr-seg label with SR lsp stack. For some reasons, that lsp has a 4 labels stack, meaning C1 will send out a packet with 5 labels (4 for the SR lsp up to C4 and 1 to traverse domain 3 to the final destination), meaning domain 2 devices have to support at least stacks of 5 labels.
After all, this is not a real problem…or better, it is a potential domain 2 problem and domain 2 owner is responsible for that and should take care of it.
The principle is still valid from an end-to-end perspective. With express segments we can compress and minimize the number of needed labels at the ingress router. This is, in my opinion, enough. What happens along the road is a responsibility of the single domains.

Enough with the theory, let’s go back to our lab.

Here, I will only have 2 domains but with an inter-domain link so we expect to have an EPE Adj segment into play as well.

Here is our topology:

Our goal is to define a SRTE path from r1a (domain 1) to r1b (domain 2).

On r4b we define 3 RSVP lsps:

set protocols mpls label-switched-path r1a-up to 200.1.1.1
set protocols mpls label-switched-path r1a-up primary up
set protocols mpls label-switched-path r1a-down to 200.1.1.1
set protocols mpls label-switched-path r1a-down primary down
set protocols mpls label-switched-path video-lsp-r1a to 200.1.1.1
set protocols mpls label-switched-path video-lsp-r1a primary video
set protocols mpls path up 200.2.2.2 strict
set protocols mpls path up 200.3.3.3 strict
set protocols mpls path down 200.3.3.3 strict
set protocols mpls path video 200.2.2.2 strict
set protocols mpls path video 200.3.3.3 strict

root@r4b# run show mpls lsp ingress
Ingress LSP: 3 sessions
To              From            State Rt P     ActivePath       LSPname
200.1.1.1       200.4.4.4       Up     0 *     down             r1a-down
200.1.1.1       200.4.4.4       Up     0 *     up               r1a-up
200.1.1.1       200.4.4.4       Up     0 *     video            video-lsp-r1a

On that same router, we configure two express segments:

set protocols express-segments segment-set r1a membership-policy exp-seg-r1a
set protocols express-segments segment-set r1a template premium
set protocols express-segments segment-template premium admin-group premium
set protocols express-segments segment-template premium metric te 15
set protocols express-segments segment-template premium metric igp 10
set policy-options policy-statement exp-seg-r1a from route-filter 200.1.1.1/32 exact install-nexthop lsp-regex r1a-.*
set policy-options policy-statement exp-seg-r1a then accept

set protocols express-segments segment-template video admin-group video
set protocols express-segments segment-set r1-video membership-policy exp-seg-video-lsp-r1a
set protocols express-segments segment-set r1-video template video
set policy-options policy-statement exp-seg-video-lsp-r1a from route-filter 200.1.1.1/32 exact install-nexthop lsp video-lsp-r1a
set policy-options policy-statement exp-seg-video-lsp-r1a then accept

root@r4b# run show express-segments detail

Name: r1-video-200.1.1.1
  To: 200.1.1.1, Type: Dynamic (Set: r1-video)
  Label: 299840 (Route installed in mpls.0, TED entry not added)
  Status: Up (ElapsedTime: 2d 21:10:15)
  LinkAttributes:
    LocalID: 2147483653
    TE-Metric: 3, IGP-Metric: 2
    Delay metrics: Min: 50331645, Max: 50331645, Avg: 50331645
    BW: 0bps
    AdminGroups: video*
  UnderlayPaths: 1
    RSVP LSP: video-lsp-r1a
      TE-Metric: 3, IGP-Metric: 2
      Delay metrics: Min: 50331645, Max: 50331645, Avg: 50331645
      BW: 0bps

Name: r1a-200.1.1.1
  To: 200.1.1.1, Type: Dynamic (Set: r1a)
  Label: 299856 (Route installed in mpls.0, TED entry not added)
  Status: Up (ElapsedTime: 2d 21:10:15)
  LinkAttributes:
    LocalID: 2147483654
    TE-Metric: 15*, IGP-Metric: 10*
    Delay metrics: Min: 50331645, Max: 50331645, Avg: 50331645
    BW: 0bps
    AdminGroups: premium*
  UnderlayPaths: 2
    RSVP LSP: r1a-up
      TE-Metric: 3, IGP-Metric: 2
      Delay metrics: Min: 50331645, Max: 50331645, Avg: 50331645
      BW: 0bps
    RSVP LSP: r1a-down
      TE-Metric: 2, IGP-Metric: 2
      Delay metrics: Min: 33554430, Max: 33554430, Avg: 33554430
      BW: 0bps

TED entry is not there yet so we add express segments to TED:

set protocols express-segments traffic-engineering

root@r4b# run show express-segments detail

Name: r1-video-200.1.1.1
  To: 200.1.1.1, Type: Dynamic (Set: r1-video)
  Label: 299840 (Route installed in mpls.0, TED entry added)
  Status: Up (ElapsedTime: 2d 21:10:15)
  LinkAttributes:
    LocalID: 2147483653
    TE-Metric: 3, IGP-Metric: 2
    Delay metrics: Min: 50331645, Max: 50331645, Avg: 50331645
    BW: 0bps
    AdminGroups: video*
  UnderlayPaths: 1
    RSVP LSP: video-lsp-r1a
      TE-Metric: 3, IGP-Metric: 2
      Delay metrics: Min: 50331645, Max: 50331645, Avg: 50331645
      BW: 0bps

Name: r1a-200.1.1.1
  To: 200.1.1.1, Type: Dynamic (Set: r1a)
  Label: 299856 (Route installed in mpls.0, TED entry added)
  Status: Up (ElapsedTime: 2d 21:10:15)
  LinkAttributes:
    LocalID: 2147483654
    TE-Metric: 15*, IGP-Metric: 10*
    Delay metrics: Min: 50331645, Max: 50331645, Avg: 50331645
    BW: 0bps
    AdminGroups: premium*
  UnderlayPaths: 2
    RSVP LSP: r1a-up
      TE-Metric: 3, IGP-Metric: 2
      Delay metrics: Min: 50331645, Max: 50331645, Avg: 50331645
      BW: 0bps
    RSVP LSP: r1a-down
      TE-Metric: 2, IGP-Metric: 2
      Delay metrics: Min: 33554430, Max: 33554430, Avg: 33554430
      BW: 0bps

root@r4b# run show ted database topology-type l3-unicast
TED database: 0 ISIS nodes 3 INET nodes 0 INET6 nodes
...
    To: 200.1.1.1, Local: 200.4.4.4, Remote: 200.1.1.1
      Local interface index: 2147483653, Remote interface index: 0
      Link name: r1-video-200.1.1.1
    To: 200.1.1.1, Local: 200.4.4.4, Remote: 200.1.1.1
      Local interface index: 2147483654, Remote interface index: 0
      Link name: r1a-200.1.1.1

Label routes are added:

root@r4b# run show express-segments
To               Segment     Link        Status         Elapsed    Segment
                 Label       LocalID                    Time       Name
--               -------     -------     ------         -------    -------
200.1.1.1        299840      2147483653  Up (T)     2d 21:12:27    r1-video-200.1.1.1
200.1.1.1        299856      2147483654  Up (T)     2d 21:12:27    r1a-200.1.1.1

root@r4b# run show route label 299840

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

299840             *[EXPRESS-SEG/6] 2d 21:14:19, metric 1
                    >  to 192.168.124.0 via ge-0/0/0.0, Swap 299872

[edit]
root@r4b# run show route label 299856

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

299856             *[EXPRESS-SEG/6] 2d 21:14:31, metric 1
                       to 192.168.124.0 via ge-0/0/0.0, Swap 299840
                    >  to 192.168.134.0 via ge-0/0/1.0, Swap 299776

[edit]
root@r4b# run show route table inet.3 200.1.1.1

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

200.1.1.1/32       *[RSVP/7/1] 2d 21:16:27, metric 2
                       to 192.168.124.0 via ge-0/0/0.0, label-switched-path r1a-up
                    >  to 192.168.134.0 via ge-0/0/1.0, label-switched-path r1a-down
                       to 192.168.124.0 via ge-0/0/0.0, label-switched-path video-lsp-r1a

[edit]
root@r4b# run show route table inet.3 200.1.1.1 extensive | match None
                Load balance label: Label 299840: None;
                Load balance label: Label 299776: None;
                Load balance label: Label 299872: None;

When enabling TE for express segments, entries are added into a TED table called express-segments.

We want them to be into TED l3-unicast topology.

root@r4b# show | display set | match l3-uni

[edit]
root@r4b#

We define policies to copy routes to/from BGP and TED.

root@r4b# show policy-options policy-statement ted-to-bgp | display set
set policy-options policy-statement ted-to-bgp term ok from protocol express-segments
set policy-options policy-statement ted-to-bgp term ok from protocol bgp-ls-epe
set policy-options policy-statement ted-to-bgp term ok then accept
set policy-options policy-statement ted-to-bgp then reject

root@r4b# show policy-options policy-statement bgp-to-ted | display set
set policy-options policy-statement bgp-to-ted term ok from family traffic-engineering
set policy-options policy-statement bgp-to-ted term ok then accept
set policy-options policy-statement bgp-to-ted then reject

First policy should make express-segments route available into lsdist.0. Anyhow, still empty:

root@r4b# run show route table lsdist.0 | match AS:200

[edit]
root@r4b#

We need more configuration:

set protocols mpls traffic-engineering database import l3-unicast-topology bgp-link-state
set protocols mpls traffic-engineering database export l3-unicast-topology

root@r4b# set protocols mpls traffic-engineering database export ?
  l3-unicast-topology  Download RIB entries into L3-Unicast topology

root@r4b# set protocols mpls traffic-engineering database import ?
> l3-unicast-topology  Download L3-Unicast topology into RIB

Those lines allow, for example, with import, to download l3-unicast topology entries into lsdist.0.

Router r4b has a BGP-LS session with r1b. On top of that we have this export policy:

set policy-options policy-statement exp-bgp-ls term ok from family traffic-engineering
set policy-options policy-statement exp-bgp-ls term ok from protocol express-segments
set policy-options policy-statement exp-bgp-ls term ok from protocol bgp-ls-epe
set policy-options policy-statement exp-bgp-ls term ok then accept
set policy-options policy-statement exp-bgp-ls then reject

As a result, we should export express segment data to the other domain:

root@r4b# run show route advertising-protocol bgp 192.168.45.0 protocol express-segments

lsdist.0: 10 destinations, 10 routes (10 active, 0 holddown, 0 hidden)
  Prefix                  Nexthop              MED     Lclpref    AS path
  NODE { AS:200 BGP-LS ID:200 IPv4:200.1.1.1 STATIC:0 }/1216
*                         Self                                    I
                Area border router: No
                External router: No
                Attached: No
                Overload: No
  Prefix                  Nexthop              MED     Lclpref    AS path
  NODE { AS:200 BGP-LS ID:200 IPv4:200.4.4.4 STATIC:0 }/1216
*                         Self                                    I
                Area border router: No
                External router: No
                Attached: No
                Overload: No
  Prefix                  Nexthop              MED     Lclpref    AS path
  LINK { Local { AS:200 BGP-LS ID:200 IPv4:200.4.4.4 }.{ IfIndex:2147483653 } Remote { AS:200 BGP-LS ID:200 IPv4:200.1.1.1 }.{ IfIndex:0 } STATIC:0 }/1216
*                         Self                                    I
                Color: 4
                Metric: 2
                TE Metric: 3
                Average delay: 50331645
                Minimum delay: 50331645
                Maximum delay: 50331645
                Link name: r1-video-200.1.1.1
                Label: 299840, Flags: 0x60, Weight: 1
  Prefix                  Nexthop              MED     Lclpref    AS path
  LINK { Local { AS:200 BGP-LS ID:200 IPv4:200.4.4.4 }.{ IfIndex:2147483654 } Remote { AS:200 BGP-LS ID:200 IPv4:200.1.1.1 }.{ IfIndex:0 } STATIC:0 }/1216
*                         Self                                    I
                Color: 2
                Metric: 10
                TE Metric: 15
                Average delay: 50331645
                Minimum delay: 50331645
                Maximum delay: 50331645
                Link name: r1a-200.1.1.1
                Label: 299856, Flags: 0x60, Weight: 1

Express segments link routes are there.

TED includes that information as well:

200.4.4.4->200.1.1.1, Local: 200.4.4.4, Remote: 200.1.1.1
  Local interface index: 2147483653, Remote interface index: 0
  Link name: r1-video-200.1.1.1
  LocalPath: 0, Metric: 3, IGP metric: 2, Average delay: 50331645, Minimum delay: 50331645, Maximum delay: 50331645
      Color: 0x4 video
  localBW [0] 0bps  [1] 0bps  [2] 0bps  [3] 0bps
  localBW [4] 0bps  [5] 0bps  [6] 0bps  [7] 0bps
  IPV4 P2P-Adj-SID SID: 299840 Flags: 0x30 Weight: 1
200.4.4.4->200.1.1.1, Local: 200.4.4.4, Remote: 200.1.1.1
  Local interface index: 2147483654, Remote interface index: 0
  Link name: r1a-200.1.1.1
  LocalPath: 0, Metric: 15, IGP metric: 10, Average delay: 50331645, Minimum delay: 50331645, Maximum delay: 50331645
      Color: 0x2 premium
  localBW [0] 0bps  [1] 0bps  [2] 0bps  [3] 0bps
  localBW [4] 0bps  [5] 0bps  [6] 0bps  [7] 0bps
  IPV4 P2P-Adj-SID SID: 299856 Flags: 0x30 Weight: 1

Next, we define EPE Adj SID between domains:

###R4B
set protocols bgp group bgp-ls neighbor 192.168.45.0 egress-te-adj-segment to-r4a label 1000450
set protocols bgp group bgp-ls neighbor 192.168.45.0 egress-te-adj-segment to-r4a next-hop 192.168.45.0
set protocols bgp group bgp-ls neighbor 192.168.45.0 egress-te-adj-segment to-r4a te-link-attribute te-metric 4
set protocols bgp group bgp-ls neighbor 192.168.45.0 egress-te-adj-segment to-r4a te-link-attribute igp-metric 3
set protocols bgp group bgp-ls neighbor 192.168.45.0 egress-te-adj-segment to-r4a te-link-attribute admin-group premium

###R4A
set protocols bgp group bgp-ls neighbor 192.168.45.1 egress-te-adj-segment to-r4b label 1000451
set protocols bgp group bgp-ls neighbor 192.168.45.1 egress-te-adj-segment to-r4b next-hop 192.168.45.1
set protocols bgp group bgp-ls neighbor 192.168.45.1 egress-te-adj-segment to-r4b te-link-attribute te-metric 4
set protocols bgp group bgp-ls neighbor 192.168.45.1 egress-te-adj-segment to-r4b te-link-attribute igp-metric 3
set protocols bgp group bgp-ls neighbor 192.168.45.1 egress-te-adj-segment to-r4b te-link-attribute admin-group premium

Complete sample configuration on r4a:

set protocols bgp group bgp-ls type external
set protocols bgp group bgp-ls family traffic-engineering unicast
set protocols bgp group bgp-ls export exp-bgp-ls
set protocols bgp group bgp-ls peer-as 200
set protocols bgp group bgp-ls neighbor 192.168.45.1 egress-te-adj-segment to-r4b label 1000451
set protocols bgp group bgp-ls neighbor 192.168.45.1 egress-te-adj-segment to-r4b next-hop 192.168.45.1
set protocols bgp group bgp-ls neighbor 192.168.45.1 egress-te-adj-segment to-r4b te-link-attribute te-metric 4
set protocols bgp group bgp-ls neighbor 192.168.45.1 egress-te-adj-segment to-r4b te-link-attribute igp-metric 3
set protocols bgp group bgp-ls neighbor 192.168.45.1 egress-te-adj-segment to-r4b te-link-attribute admin-group premium
set policy-options policy-statement exp-bgp-ls term ok from family traffic-engineering
set policy-options policy-statement exp-bgp-ls term ok from protocol express-segments
set policy-options policy-statement exp-bgp-ls term ok from protocol bgp-ls-epe
set policy-options policy-statement exp-bgp-ls term ok then accept
set policy-options policy-statement exp-bgp-ls then reject

R4b advertises EPE link to r4a:

root@r4b# run show route advertising-protocol bgp 192.168.45.0 protocol bgp-ls-epe

lsdist.0: 9 destinations, 9 routes (9 active, 0 holddown, 0 hidden)
  Prefix                  Nexthop              MED     Lclpref    AS path
  NODE { AS:200 BGP-LS ID:200 IPv4:100.4.4.4 BGP-LS-EPE:0 }/1216
*                         Self                                    I
                Area border router: No
                External router: No
                Attached: No
                Overload: No
  Prefix                  Nexthop              MED     Lclpref    AS path
  NODE { AS:200 BGP-LS ID:200 IPv4:200.4.4.4 BGP-LS-EPE:0 }/1216
*                         Self                                    I
                Area border router: No
                External router: No
                Attached: No
                Overload: No
  Prefix                  Nexthop              MED     Lclpref    AS path
  LINK { Local { AS:200 BGP-LS ID:200 IPv4:200.4.4.4 }.{ IfIndex:360 } Remote { AS:100 BGP-LS ID:200 IPv4:100.4.4.4 }.{ IfIndex:0 } BGP-LS-EPE:0 }/1216
*                         Self                                    I
                Color: 2
                Metric: 3
                TE Metric: 4
                Link name: to-r4a
                Label: 1000450, Flags: 0xd0, Weight: 0

EPE label routes are loaded into mpls.0 on border routers (each router only has the locally defined label):

root@r4b# run show route label 1000450

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

1000450            *[BGP-LS-EPE/170] 00:09:45
                    >  to 192.168.45.0 via ge-0/0/2.0, Pop
1000450(S=0)       *[BGP-LS-EPE/170] 00:09:45
                    >  to 192.168.45.0 via ge-0/0/2.0, Pop

root@r4a# run show route label 1000451

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

1000451            *[BGP-LS-EPE/170] 00:10:12
                    >  to 192.168.45.1 via ge-0/0/2.0, Pop
1000451(S=0)       *[BGP-LS-EPE/170] 00:10:12
                    >  to 192.168.45.1 via ge-0/0/2.0, Pop

R4a router imports data from domain 2 into its TED:

root@r4a# run show ted link topology-type l3-unicast
ID                         ->ID                          LocalPath LocalBW
100.4.4.4                    200.4.4.4                           0 0bps
200.4.4.4                    100.4.4.4                           0 0bps
200.4.4.4                    200.1.1.1                           0 0bps
200.4.4.4                    200.1.1.1                           0 0bps

On r4a ted has local bgp-epe and remote bgp-epe + express-segments but lsdist.0 only has bgp-epe and express-segments due to ted-to-bgp policy.
No need for local ted here as we assume it is not an ingress node (in other words no need to have local SR topology copied into l3-unicast topology).

At this point, r4a has this important info:

  • how to reach domain 2 border node (r4b) via EPE adj sid
  • how to reach r1b in domain 2 via express segment

That information is sent to r1a via BGP-LS:

set protocols bgp group ibgp-ls type internal
set protocols bgp group ibgp-ls local-address 100.4.4.4
set protocols bgp group ibgp-ls family traffic-engineering unicast
set protocols bgp group ibgp-ls export exp-ibgp-ls
set protocols bgp group ibgp-ls neighbor 100.1.1.1

set policy-options policy-statement exp-ibgp-ls term ok then accept

root@r4a# run show route advertising-protocol bgp 100.1.1.1 | match AS
  Prefix                  Nexthop              MED     Lclpref    AS path
  NODE { AS:200 BGP-LS ID:200 IPv4:200.1.1.1 STATIC:0 }/1216
  Prefix                  Nexthop              MED     Lclpref    AS path
  NODE { AS:200 BGP-LS ID:200 IPv4:200.4.4.4 STATIC:0 }/1216
  Prefix                  Nexthop              MED     Lclpref    AS path
  NODE { AS:100 BGP-LS ID:100 IPv4:100.4.4.4 BGP-LS-EPE:0 }/1216
  Prefix                  Nexthop              MED     Lclpref    AS path
  NODE { AS:100 BGP-LS ID:100 IPv4:200.4.4.4 BGP-LS-EPE:0 }/1216
  Prefix                  Nexthop              MED     Lclpref    AS path
  NODE { AS:200 BGP-LS ID:200 IPv4:100.4.4.4 BGP-LS-EPE:0 }/1216
  Prefix                  Nexthop              MED     Lclpref    AS path
  NODE { AS:200 BGP-LS ID:200 IPv4:200.4.4.4 BGP-LS-EPE:0 }/1216
  Prefix                  Nexthop              MED     Lclpref    AS path
  LINK { Local { AS:200 BGP-LS ID:200 IPv4:200.4.4.4 }.{ IfIndex:2147483653 } Remote { AS:200 BGP-LS ID:200 IPv4:200.1.1.1 }.{ IfIndex:0 } STATIC:0 }/1216
  Prefix                  Nexthop              MED     Lclpref    AS path
  LINK { Local { AS:200 BGP-LS ID:200 IPv4:200.4.4.4 }.{ IfIndex:2147483654 } Remote { AS:200 BGP-LS ID:200 IPv4:200.1.1.1 }.{ IfIndex:0 } STATIC:0 }/1216
  Prefix                  Nexthop              MED     Lclpref    AS path
  LINK { Local { AS:100 BGP-LS ID:100 IPv4:100.4.4.4 }.{ IfIndex:336 } Remote { AS:200 BGP-LS ID:100 IPv4:200.4.4.4 }.{ IfIndex:0 } BGP-LS-EPE:0 }/1216
  Prefix                  Nexthop              MED     Lclpref    AS path
  LINK { Local { AS:200 BGP-LS ID:200 IPv4:200.4.4.4 }.{ IfIndex:360 } Remote { AS:100 BGP-LS ID:200 IPv4:100.4.4.4 }.{ IfIndex:0 } BGP-LS-EPE:0 }/1216

R4a advertises to r1a:

  • local EPE
  • remote EPE + express segments

On r1a, I have iBGP to receive those routes:

set protocols bgp group ibgp-ls type internal
set protocols bgp group ibgp-ls local-address 100.1.1.1
set protocols bgp group ibgp-ls family traffic-engineering unicast
set protocols bgp group ibgp-ls neighbor 100.4.4.4

Domain 1 runs SR. We omit SR configuration.

iBGP-LS data is copied into local TED (l3-unicast topology):

root@r1a# run show ted link topology-type l3-unicast
ID                         ->ID                          LocalPath LocalBW
r1a.00(100.1.1.1)            r2a.00(100.2.2.2)                   0 0bps
r1a.00(100.1.1.1)            r3a.00(100.3.3.3)                   0 0bps
r2a.00(100.2.2.2)            r1a.00(100.1.1.1)                   0 0bps
r2a.00(100.2.2.2)            r4a.00(100.4.4.4)                   0 0bps
r2a.00(100.2.2.2)            r3a.00(100.3.3.3)                   0 0bps
r3a.00(100.3.3.3)            r1a.00(100.1.1.1)                   0 0bps
r3a.00(100.3.3.3)            r2a.00(100.2.2.2)                   0 0bps
r3a.00(100.3.3.3)            r4a.00(100.4.4.4)                   0 0bps
r4a.00(100.4.4.4)            r2a.00(100.2.2.2)                   0 0bps
r4a.00(100.4.4.4)            r3a.00(100.3.3.3)                   0 0bps
r4a.00(100.4.4.4)            200.4.4.4                           0 0bps
r4a.00(100.4.4.4)            rr100.00(100.0.0.100)               0 0bps
rr100.00(100.0.0.100)        r4a.00(100.4.4.4)                   0 0bps
200.4.4.4                    r4a.00(100.4.4.4)                   0 0bps
200.4.4.4                    200.1.1.1                           0 0bps
200.4.4.4                    200.1.1.1                           0 0bps

TED has the following entries:

  • local SR domain routes
  • remote EPE + express segments

As a result, r1a has all the information needed to build a path up to r1b.

This is exactly what we are going to do:

set protocols source-packet-routing compute-profile premium admin-group include-all premium
set protocols source-packet-routing compute-profile premium no-label-stack-compression
set protocols source-packet-routing compute-profile premium metric-type igp
set protocols source-packet-routing source-routing-path r1b to 200.1.1.1
set protocols source-packet-routing source-routing-path r1b color 888
set protocols source-packet-routing source-routing-path r1b binding-sid 1000888
set protocols source-packet-routing source-routing-path r1b primary premium compute premium

Please notice, we are using dcspf with premium links as a constraint (premium admin group was configured across the network on some links but we omit that conf as it is standard). This is possible as we can assign admin groups (e.g. premium color) to EPE Adj SIDs and express segments.

root@r1a# run show spring-traffic-engineering lsp color 888 detail
Name: r1b
  Tunnel-source: Static configuration
  Tunnel Forward Type: SRMPLS
  To: 200.1.1.1-888<c>
  State: Up
    Path: premium
    Path Status: NA
    Outgoing interface: NA
    Auto-translate status: Disabled Auto-translate result: N/A
    Compute Status:Enabled , Compute Result:success , Compute-Profile Name:premium
    Total number of computed paths: 1
    Segment ID : 128
    Computed-path-index: 1
      BFD status: N/A BFD name: N/A
      BFD remote-discriminator: N/A
      TE metric: 39, IGP metric: 33
      Delay metrics: Min: 100663290, Max: 100663290, Avg: 100663290
      Metric optimized by type: IGP
      computed segments count: 4
        computed segment : 1 (computed-adjacency-segment):
          label: 16
          source router-id: 100.1.1.1, destination router-id: 100.2.2.2
          source interface-address: 192.168.12.0, destination interface-address: 192.168.12.1
        computed segment : 2 (computed-adjacency-segment):
          label: 17
          source router-id: 100.2.2.2, destination router-id: 100.4.4.4
          source interface-address: 192.168.24.0, destination interface-address: 192.168.24.1
        computed segment : 3 (computed-adjacency-segment):
          label: 1000451
          source router-id: 100.4.4.4, destination router-id: 200.4.4.4
          source interface-address: 0.0.0.0, destination interface-address: 0.0.0.0
        computed segment : 4 (computed-adjacency-segment):
          label: 299856
          source router-id: 200.4.4.4, destination router-id: 200.1.1.1
          source interface-address: 0.0.0.0, destination interface-address: 0.0.0.0


Total displayed LSPs: 1 (Up: 1, Down: 0)

Tunnel is up. Label stack depth is 3 (first label is automatically resolved and translated into something like “send via interface X):

  • label to r4a
  • EPE adj SID label
  • express segment label to r1b

Not over yet.

On r4a, we add a new admin group to the EPE link:

set protocols bgp group bgp-ls neighbor 192.168.45.1 egress-te-adj-segment to-r4b te-link-attribute admin-group video

This time we configure dynamic tunnels using a template forcing the path to go over video links:

set routing-options dynamic-tunnels dyn-video spring-te source-routing-path-template video-template color 888
set routing-options dynamic-tunnels dyn-video spring-te destination-networks 200.0.0.0/8
set protocols source-packet-routing source-routing-path-template video-template primary video-path compute video-compute
set protocols source-packet-routing compute-profile video-compute admin-group include-all video
set protocols source-packet-routing compute-profile video-compute no-label-stack-compression
set protocols source-packet-routing compute-profile video-compute metric-type igp

We configure our RR in the network (not showed in the topology image but it can be anywere within the domain) to advertise route 1.2.3.4/32 with color 888 and next-hop 200.1.1.1.

As a result, SRTE tunnel in dynamically created:

root@r1a# run show spring-traffic-engineering lsp color 888 detail
Name: 200.1.1.1:378:dt-srte-dyn-video
  Tunnel-source: Dynamic Tunnel Module(DTM)
  Tunnel Forward Type: SRMPLS
  Tunnel-template: video-template
  To: 200.1.1.1-888<c>
  State: Up
    Path: video-path
    Path Status: NA
    Outgoing interface: NA
    Auto-translate status: Disabled Auto-translate result: N/A
    Compute Status:Enabled , Compute Result:success , Compute-Profile Name:video-compute
    Total number of computed paths: 1
    Segment ID : 128
    Computed-path-index: 1
      BFD status: N/A BFD name: N/A
      BFD remote-discriminator: N/A
      TE metric: 27, IGP metric: 25
      Delay metrics: Min: 100663290, Max: 100663290, Avg: 100663290
      Metric optimized by type: IGP
      computed segments count: 4
        computed segment : 1 (computed-adjacency-segment):
          label: 17
          source router-id: 100.1.1.1, destination router-id: 100.3.3.3
          source interface-address: 192.168.13.0, destination interface-address: 192.168.13.1
        computed segment : 2 (computed-adjacency-segment):
          label: 17
          source router-id: 100.3.3.3, destination router-id: 100.4.4.4
          source interface-address: 192.168.34.0, destination interface-address: 192.168.34.1
        computed segment : 3 (computed-adjacency-segment):
          label: 1000451
          source router-id: 100.4.4.4, destination router-id: 200.4.4.4
          source interface-address: 0.0.0.0, destination interface-address: 0.0.0.0
        computed segment : 4 (computed-adjacency-segment):
          label: 299840
          source router-id: 200.4.4.4, destination router-id: 200.1.1.1
          source interface-address: 0.0.0.0, destination interface-address: 0.0.0.0

And bgp routes is resolved:

root@r1a# run show route receive-protocol bgp 100.0.0.100 extensive

inet.0: 17 destinations, 17 routes (17 active, 0 holddown, 0 hidden)
* 1.2.3.4/32 (1 entry, 1 announced)
     Accepted
     Nexthop: 200.1.1.1
     Localpref: 100
     AS path: 200 I
     Communities: color:0:888

root@r1a# run show route 1.2.3.4

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

1.2.3.4/32         *[BGP/170] 00:01:02, localpref 100, from 100.0.0.100
                      AS path: 200 I, validation-state: unverified
                    >  to 192.168.13.1 via ge-0/0/1.0, Push 299840, Push 1000451, Push 17(top)

[edit]
root@r1a# run show route 1.2.3.4 extensive | match orig
                                200.1.1.1-888<c>/64 Originating RIB: inetcolor.0
                                        17 /52 Originating RIB: mpls.0

What we have just done is normally called eODN, enhanced on-demand next-hop.

We might do one more thing and define transport classes . Things will work but only with static SRTE paths, not dynamic ones.

Our end to end inter-domain SRTE paths leveraging EPE segments and express segments are ready!

Ciao
IoSonoUmberto

One thought on “Inter domain SRTE paths with express segments”

Leave a comment