-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support bgp l3vpn over srv6 te policy #17609
base: master
Are you sure you want to change the base?
Conversation
ec9c40d
to
d507421
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Please reuse IPV[46]_* macros to keep the code maintable;
- Unified config for new topotests is mandatory;
- Some minor nits/cleanups for the code yet;
- frrbot + verify check also must be vanished.
if ((path->type == ZEBRA_ROUTE_VNC) || | ||
(path->type == ZEBRA_ROUTE_VNC_DIRECT)) | ||
if (bnc->srte_color) { | ||
LIST_FOREACH (path, &(bnc->paths), te_nh_thread) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this basically the same as LIST_FOREACH (path, &(bnc->paths), nh_thread)
? Then can we just move to the separate function and reuse? Because now we have lots of duplicated stuff + the indentation is bad at some level (due to nesting).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sometimes, two BNC are needed, for example, one route has a color while the other route does not, and they have the same nexthop, the route with a color select SRv6 TE policy, and the other route select SRv6 BE
Signed-off-by: guozhongfeng.gzf <guozhongfeng.gzf@alibaba-inc.com>
bacf24a
to
bcfd2fe
Compare
command: router2(config-sr-te)# segment-list test_srv6 router2(config-sr-te-segment-list)# index 10 ipv6-address X:X::X:X IPv6 address router2(config-sr-te-segment-list)# index 10 ipv6-address 100:1::1 router2(config-sr-te-segment-list)# index 20 ipv6-address 200:1::1 router2(config-sr-te-segment-list)# index 30 mpls label (16-1048575) Label Value router2(config-sr-te-segment-list)# index 30 mpls label 100 % Configuration failed. Error type: validation Error description: The Segment List(test_srv6) Type must be SRv6! router2(config-sr-te-segment-list)# router2(config-sr-te)# segment-list test_mpls router2(config-sr-te-segment-list)# index 10 mpls label 100 router2(config-sr-te-segment-list)# index 20 mpls label 200 router2(config-sr-te-segment-list)# index 30 ipv6-address 1:1::1 % Configuration failed. Error type: validation Error description: The Segment List(test_mpls) Type must be MPLS! router2(config-sr-te-segment-list)# router2# configure router2(config)# seg router2(config-sr)# traffic-eng router2(config-sr-te)# policy color 100 endpoint A.B.C.D SR Policy endpoint IPv4 address X:X::X:X SR Policy endpoint IPv6 address router2(config-sr-te)# policy color 100 endpoint 1.1.1.1 <cr> router2(config-sr-te)# policy color 100 endpoint 1.1.1.1 router2(config-sr-te-policy)# candidate-path preference 1 name mpls explicit segment-list test_mpls <cr> router2(config-sr-te-policy)# candidate-path preference 1 name mpls explicit segment-list test_mpls router2(config-sr-te-policy)# candidate-path preference 2 name srv6 explicit segment-list test_srv6 % Configuration failed. Error type: validation Error description: The Segment List type(2) and Policy type(1) must match! router2(config-sr-te-policy)# exit router2(config-sr-te)# policy color 200 endpoint 1:1::1 router2(config-sr-te-policy)# candidate-path preference 1 name srv6 explicit segment-list test_srv6 router2(config-sr-te-policy)# candidate-path preference 2 name mpls explicit segment-list test_mpls % Configuration failed. Error type: validation Error description: The Segment List type(1) and Policy type(2) must match! config: segment-routing traffic-eng segment-list test_srv6 index 10 ipv6-address 100:1::1 index 20 ipv6-address 200:1::1 exit segment-list test_mpls index 10 mpls label 100 index 20 mpls label 200 exit policy color 100 endpoint 1.1.1.1 candidate-path preference 1 name mpls explicit segment-list test_mpls exit policy color 200 endpoint 1:1::1 candidate-path preference 1 name srv6 explicit segment-list test_srv6 exit exit exit ! end show: router2# show sr-te policy detail Endpoint: 1.1.1.1 Color: 100 Name: BSID: - Status: Inactive Type: MPLS * Preference: 1 Name: mpls Type: explicit Segment-List: test_mpls Protocol-Origin: Local Endpoint: 1:1::1 Color: 200 Name: BSID: - Status: Active Type: SRV6 * Preference: 1 Name: srv6 Type: explicit Segment-List: test_srv6 Protocol-Origin: Local router2# Signed-off-by: guozhongfeng.gzf <guozhongfeng.gzf@alibaba-inc.com>
config: segment-routing traffic-eng segment-list a index 10 ipv6-address 100:1::100 index 20 ipv6-address 200:1::200 exit policy color 100 endpoint 1::1 candidate-path preference 1 name a explicit segment-list a exit exit exit ! end show: router2# show sr-te policy detail Endpoint: 1::1 Color: 100 Name: BSID: - Status: Active Type: SRV6 * Preference: 1 Name: a Type: explicit Segment-List: a Protocol-Origin: Local router2# show bgp ipv4 vpn BGP table version is 2, local router ID is 2.2.2.2, vrf id 0 Default local pref 100, local AS 2 Status codes: s suppressed, d damped, h history, u unsorted, * valid, > best, = multipath, i internal, r RIB-failure, S Stale, R Removed Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self Origin codes: i - IGP, e - EGP, ? - incomplete RPKI validation codes: V valid, I invalid, N Not found Network Next Hop Metric LocPrf Weight Path Route Distinguisher: 1:1 *> 192.168.11.0/24 1::1 0 0 1 ? UN=1::1 EC{1:1 Color:01:100} label=16 sid=2001:db8:1:1:: sid_structure=[40,24,16,0] type=bgp, subtype=0 *> 192.168.15.0/24 1::1 0 0 1 ? UN=1::1 EC{1:1 Color:01:100} label=16 sid=2001:db8:1:1:: sid_structure=[40,24,16,0] type=bgp, subtype=0 Displayed 2 routes and 2 total paths router2# show bgp ipv4 vpn 192.168.11.0 BGP routing table entry for 1:1:192.168.11.0/24, version 1 not allocated Paths: (1 available, best #1) Advertised to non peer-group peers: 1::1 1 0.0.0.0 (metric 1024) from 1::1 (1.1.1.1) Origin incomplete, metric 0, valid, external, best (First path received) Relay-Nexthop(ip): gate 3fff:172:20:20::1, if eth0, Relay-Nexthop(tunnel): srv6-tunnel:1::1|100(endpoint|color), Extended Community: RT:1:1 Color:01:100 Remote label: 16 Remote SID: 2001:db8:1:1:: Last update: Sat Dec 7 04:27:16 2024 router2# show ip route vrf Vrf1 192.168.11.0 Routing entry for 192.168.11.0/24 Known via "bgp", distance 20, metric 0, vrf Vrf1, best Last update 00:01:31 ago 1::1(vrf default) (recursive), label 16, seg6 100:1::100,200:1::200, srv6(endpoint|color):1::1|100, weight 1 * fe80::a8c1:abff:fe5c:7e19, via eth3(vrf default), label 16, seg6 100:1::100,200:1::200, srv6(endpoint|color):fe80::a8c1:abff:fe5c:7e19|0, weight 1 * fe80::a8c1:abff:feb5:6de9, via eth4(vrf default), label 16, seg6 100:1::100,200:1::200, srv6(endpoint|color):fe80::a8c1:abff:feb5:6de9|0, weight 1 frr@router2:/$ ip route show vrf Vrf1 192.168.11.0/24 nhid 74 proto bgp metric 20 nexthop encap seg6 mode encap segs 2 [ 100:1::100 200:1::200 ] via inet6 fe80::a8c1:abff:fe5c:7e19 dev eth3 weight 1 nexthop encap seg6 mode encap segs 2 [ 100:1::100 200:1::200 ] via inet6 fe80::a8c1:abff:feb5:6de9 dev eth4 weight 1 192.168.15.0/24 nhid 74 proto bgp metric 20 nexthop encap seg6 mode encap segs 2 [ 100:1::100 200:1::200 ] via inet6 fe80::a8c1:abff:fe5c:7e19 dev eth3 weight 1 nexthop encap seg6 mode encap segs 2 [ 100:1::100 200:1::200 ] via inet6 fe80::a8c1:abff:feb5:6de9 dev eth4 weight 1 192.168.23.0/24 dev eth1 proto kernel scope link src 192.168.23.1 192.168.25.0/24 dev eth5 proto kernel scope link src 192.168.25.1 frr@router2:/$ Signed-off-by: guozhongfeng.gzf <guozhongfeng.gzf@alibaba-inc.com>
Signed-off-by: guozhongfeng.gzf <guozhongfeng.gzf@alibaba-inc.com>
784c85a
to
4844dc7
Compare
Hi @guoguojia2021 , thanks for contribution. |
Signed-off-by: guozhongfeng.gzf <guozhongfeng.gzf@alibaba-inc.com>
4844dc7
to
0a91c99
Compare
Add SID list support IPv6 address.
router2(config-sr-te)# segment-list test_srv6
router2(config-sr-te-segment-list)# index 10 ipv6-address
X:X::X:X IPv6 address
router2(config-sr-te-segment-list)# index 10 ipv6-address 100:1::1
router2(config-sr-te-segment-list)# index 20 ipv6-address 200:1::1
router2(config-sr-te-segment-list)# index 30 mpls label
(16-1048575) Label Value
router2(config-sr-te-segment-list)# index 30 mpls label 100
% Configuration failed.
Error type: validation
Error description: The Segment List(test_srv6) Type must be SRv6!
router2(config-sr-te-segment-list)#
router2(config-sr-te)# segment-list test_mpls
router2(config-sr-te-segment-list)# index 10 mpls label 100
router2(config-sr-te-segment-list)# index 20 mpls label 200
router2(config-sr-te-segment-list)# index 30 ipv6-address 1:1::1
% Configuration failed.
Error type: validation
Error description: The Segment List(test_mpls) Type must be MPLS!
router2(config-sr-te-segment-list)#
router2# configure
router2(config)# seg
router2(config-sr)# traffic-eng
router2(config-sr-te)# policy color 100 endpoint
A.B.C.D SR Policy endpoint IPv4 address
X:X::X:X SR Policy endpoint IPv6 address
router2(config-sr-te)# policy color 100 endpoint 1.1.1.1
router2(config-sr-te)# policy color 100 endpoint 1.1.1.1
router2(config-sr-te-policy)# candidate-path preference 1 name mpls explicit segment-list test_mpls
router2(config-sr-te-policy)# candidate-path preference 1 name mpls explicit segment-list test_mpls
router2(config-sr-te-policy)# candidate-path preference 2 name srv6 explicit segment-list test_srv6
% Configuration failed.
Error type: validation
Error description: The Segment List type(2) and Policy type(1) must match!
router2(config-sr-te-policy)# exit
router2(config-sr-te)# policy color 200 endpoint 1:1::1
router2(config-sr-te-policy)# candidate-path preference 1 name srv6 explicit segment-list test_srv6
router2(config-sr-te-policy)# candidate-path preference 2 name mpls explicit segment-list test_mpls
% Configuration failed.
Error type: validation
Error description: The Segment List type(1) and Policy type(2) must match!
BGP L3vpn over SRv6-TE policy
config:
segment-routing
traffic-eng
segment-list a
index 10 ipv6-address 100:1::100
index 20 ipv6-address 200:1::200
exit
policy color 100 endpoint 1::1
candidate-path preference 1 name a explicit segment-list a
exit
exit
exit
!
end
show:
router2# show sr-te policy detail
Endpoint: 1::1 Color: 100 Name: BSID: - Status: Active Type: SRV6
router2# show bgp ipv4 vpn
BGP table version is 2, local router ID is 2.2.2.2, vrf id 0
Default local pref 100, local AS 2
Route Distinguisher: 1:1
*> 192.168.11.0/24 1::1 0 0 1 ?
UN=1::1 EC{1:1 Color:01:100} label=16 sid=2001:db8:1:1:: sid_structure=[40,24,16,0] type=bgp, subtype=0
*> 192.168.15.0/24 1::1 0 0 1 ?
UN=1::1 EC{1:1 Color:01:100} label=16 sid=2001:db8:1:1:: sid_structure=[40,24,16,0] type=bgp, subtype=0
Displayed 2 routes and 2 total paths
router2# show bgp ipv4 vpn 192.168.11.0
BGP routing table entry for 1:1:192.168.11.0/24, version 1
not allocated
Paths: (1 available, best #1)
Advertised to non peer-group peers:
1::1
1
0.0.0.0 (metric 1024) from 1::1 (1.1.1.1)
Origin incomplete, metric 0, valid, external, best (First path received)
Relay-Nexthop(ip): gate 3fff:172:20:20::1, if eth0,
Relay-Nexthop(tunnel): srv6-tunnel:1::1|100(endpoint|color),
Extended Community: RT:1:1 Color:01:100
Remote label: 16
Remote SID: 2001:db8:1:1::
Last update: Sat Dec 7 04:27:16 2024
router2# show ip route vrf Vrf1 192.168.11.0
Routing entry for 192.168.11.0/24
Known via "bgp", distance 20, metric 0, vrf Vrf1, best
Last update 00:01:31 ago
_**1::1(vrf default) (recursive), label 16, seg6 100:1::100,200:1::200, srv6(endpoint|color):1::1|100, weight 1