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:
![](https://iosonounrouter.wordpress.com/wp-content/uploads/2023/08/image.png?w=1024)
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:
![](https://iosonounrouter.wordpress.com/wp-content/uploads/2023/08/image-1.png?w=1024)
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”