Skip to content

Commit

Permalink
[chassis] Support advertisement of Loopback0 of all LC's across all e…
Browse files Browse the repository at this point in the history
…-BGP peers in TSA mode (#16714) (#17837)

What I did:
In Chassis TSA mode Loopback0 Ip's of each LC's should be advertise through e-BGP peers of each remote LC's

How I did:

- Route-map policy to Advertise own/self Loopback IP to other internal iBGP peers with a community internal_community as define in constants.yml
- Route-map policy to match on above internal_community when route is received from internal iBGP peers and set a internal tag as define in constants.yml and also delete the internal_community so we don't send to any of e-BGP peers
- In TSA new route-map match on above internal tag and permit the route (Loopback0 IP's of remote LC's) and set the community to traffic_shift_community.
- In TSB delete the above new route-map.

How I verify:

Manual Verification

UT updated.
sonic-mgmt PR: sonic-net/sonic-mgmt#10239

Signed-off-by: Abhishek Dosi <abdosi@microsoft.com>
  • Loading branch information
abdosi committed Jan 19, 2024
1 parent 898f126 commit 6d767e5
Show file tree
Hide file tree
Showing 22 changed files with 214 additions and 41 deletions.
9 changes: 7 additions & 2 deletions dockers/docker-fpm-frr/TS
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ function check_not_installed()
is_internal_route_map $route_map_name && continue
echo "$config" | egrep -q "^route-map $route_map_name permit 20$"
c=$((c+$?))
echo "$config" | egrep -q "^route-map $route_map_name deny 30$"
echo "$config" | egrep -q "^route-map $route_map_name permit 30$"
c=$((c+$?))
echo "$config" | egrep -q "^route-map $route_map_name deny 40$"
c=$((c+$?))
done
return $c
Expand All @@ -33,7 +35,10 @@ function check_installed()
echo "$config" | egrep -q "^route-map $route_map_name permit 20$"
c=$((c+$?))
e=$((e+1))
echo "$config" | egrep -q "^route-map $route_map_name deny 30$"
echo "$config" | egrep -q "^route-map $route_map_name permit 30$"
c=$((c+$?))
e=$((e+1))
echo "$config" | egrep -q "^route-map $route_map_name deny 40$"
c=$((c+$?))
e=$((e+1))
done
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,56 @@
!
{% from "common/functions.conf.j2" import get_ipv4_loopback_address %}
!
route-map FROM_BGP_INTERNAL_PEER_V4 permit 100
{% if CONFIG_DB__DEVICE_METADATA['localhost']['sub_role'] == 'BackEnd' %}
route-map FROM_BGP_INTERNAL_PEER_V4 permit 1
set originator-id {{ get_ipv4_loopback_address(CONFIG_DB__LOOPBACK_INTERFACE, "Loopback4096") | ip }}
!
route-map TO_BGP_INTERNAL_PEER_V4 permit 100
route-map FROM_BGP_INTERNAL_PEER_V6 permit 1
set ipv6 next-hop prefer-global
on-match next
!
route-map FROM_BGP_INTERNAL_PEER_V6 permit 2
set originator-id {{ get_ipv4_loopback_address(CONFIG_DB__LOOPBACK_INTERFACE, "Loopback4096") | ip }}
{% elif CONFIG_DB__DEVICE_METADATA['localhost']['switch_type'] == 'chassis-packet' %}
bgp community-list standard DEVICE_INTERNAL_COMMUNITY permit {{ constants.bgp.internal_community }}
!
route-map FROM_BGP_INTERNAL_PEER_V4 permit 1
match community DEVICE_INTERNAL_COMMUNITY
set comm-list DEVICE_INTERNAL_COMMUNITY delete
set tag {{ constants.bgp.internal_community_match_tag }}
!
route-map FROM_BGP_INTERNAL_PEER_V6 permit 1
set ipv6 next-hop prefer-global
on-match next
!
route-map FROM_BGP_INTERNAL_PEER_V6 permit 100
route-map FROM_BGP_INTERNAL_PEER_V6 permit 2
match community DEVICE_INTERNAL_COMMUNITY
set comm-list DEVICE_INTERNAL_COMMUNITY delete
set tag {{ constants.bgp.internal_community_match_tag }}
!
route-map TO_BGP_INTERNAL_PEER_V6 permit 100
route-map TO_BGP_INTERNAL_PEER_V4 permit 1
match ip address prefix-list PL_LoopbackV4
set community {{ constants.bgp.internal_community }}
!
{% if CONFIG_DB__DEVICE_METADATA['localhost']['sub_role'] == 'BackEnd' %}
route-map FROM_BGP_INTERNAL_PEER_V4 permit 2
set originator-id {{ get_ipv4_loopback_address(CONFIG_DB__LOOPBACK_INTERFACE, "Loopback4096") | ip }}
route-map TO_BGP_INTERNAL_PEER_V6 permit 2
match ipv6 address prefix-list PL_LoopbackV6
set community {{ constants.bgp.internal_community }}
!
{% else %}
route-map FROM_BGP_INTERNAL_PEER_V6 permit 1
set ipv6 next-hop prefer-global
on-match next
!
route-map FROM_BGP_INTERNAL_PEER_V6 permit 2
set originator-id {{ get_ipv4_loopback_address(CONFIG_DB__LOOPBACK_INTERFACE, "Loopback4096") | ip }}
{% endif %}
!
route-map FROM_BGP_INTERNAL_PEER_V4 permit 100
!
route-map FROM_BGP_INTERNAL_PEER_V6 permit 100
!
route-map TO_BGP_INTERNAL_PEER_V4 permit 100
!
route-map TO_BGP_INTERNAL_PEER_V6 permit 100
!
!
! end of template: bgpd/templates/internal/policies.conf.j2
!
Original file line number Diff line number Diff line change
@@ -1,17 +1,37 @@
!
! template: bgpd/templates/voq_chassis/policies.conf.j2
!
bgp community-list standard DEVICE_INTERNAL_COMMUNITY permit {{ constants.bgp.internal_community }}
!
route-map FROM_VOQ_CHASSIS_V4_PEER permit 1
match community DEVICE_INTERNAL_COMMUNITY
set comm-list DEVICE_INTERNAL_COMMUNITY delete
set tag {{ constants.bgp.internal_community_match_tag }}
!
route-map FROM_VOQ_CHASSIS_V4_PEER permit 100
!
route-map TO_VOQ_CHASSIS_V4_PEER permit 1
match ip address prefix-list PL_LoopbackV4
set community {{ constants.bgp.internal_community }}
!
route-map TO_VOQ_CHASSIS_V4_PEER permit 100
!
!
route-map FROM_VOQ_CHASSIS_V6_PEER permit 1
set ipv6 next-hop prefer-global
on-match next
!
route-map FROM_VOQ_CHASSIS_V6_PEER permit 2
match community DEVICE_INTERNAL_COMMUNITY
set comm-list DEVICE_INTERNAL_COMMUNITY delete
set tag {{ constants.bgp.internal_community_match_tag }}
!
route-map FROM_VOQ_CHASSIS_V6_PEER permit 100
!
route-map TO_VOQ_CHASSIS_V6_PEER permit 1
match ipv6 address prefix-list PL_LoopbackV6
set community {{ constants.bgp.internal_community }}
!
route-map TO_VOQ_CHASSIS_V6_PEER permit 100
!
! end of template: bgpd/templates/voq_chassis/policies.conf.j2
Expand Down
5 changes: 4 additions & 1 deletion dockers/docker-fpm-frr/frr/bgpd/tsa/bgpd.tsa.isolate.conf.j2
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
route-map {{ route_map_name }} permit 20
match {{ ip_protocol }} address prefix-list PL_Loopback{{ ip_version }}
set community {{ constants.bgp.traffic_shift_community }}
route-map {{ route_map_name }} deny 30
route-map {{ route_map_name }} permit 30
match tag {{ constants.bgp.internal_community_match_tag }}
set community {{ constants.bgp.traffic_shift_community }}
route-map {{ route_map_name }} deny 40
!
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
no route-map {{ route_map_name }} permit 20
no route-map {{ route_map_name }} deny 30
no route-map {{ route_map_name }} permit 30
no route-map {{ route_map_name }} deny 40
!
2 changes: 2 additions & 0 deletions files/image_config/constants/constants.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ constants:
"2" : 65433
bgp:
traffic_shift_community: 12345:12345
internal_community: 11111:11111
internal_community_match_tag: 1002
families:
- ipv4
- ipv6
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,17 @@
route-map TO_BGP_PEER_V4 permit 20
match ip address prefix-list PL_LoopbackV4
set community 12345:12345
route-map TO_BGP_PEER_V4 deny 30
route-map TO_BGP_PEER_V4 permit 30
match tag 1001
set community 12345:12345
route-map TO_BGP_PEER_V4 deny 40
!
route-map TO_BGP_PEER_V6 permit 20
match ipv6 address prefix-list PL_LoopbackV6
set community 12345:12345
route-map TO_BGP_PEER_V6 deny 30
route-map TO_BGP_PEER_V6 permit 30
match tag 1001
set community 12345:12345
route-map TO_BGP_PEER_V6 deny 40
!

Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,11 @@


no route-map TO_BGP_PEER_V4 permit 20
no route-map TO_BGP_PEER_V4 deny 30
no route-map TO_BGP_PEER_V4 permit 30
no route-map TO_BGP_PEER_V4 deny 40
!
no route-map TO_BGP_PEER_V6 permit 20
no route-map TO_BGP_PEER_V6 deny 30
no route-map TO_BGP_PEER_V6 permit 30
no route-map TO_BGP_PEER_V6 deny 40
!

Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,16 @@
route-map TO_BGP_PEER_V4 permit 20
match ip address prefix-list PL_LoopbackV4
set community 12345:12345
route-map TO_BGP_PEER_V4 deny 30
route-map TO_BGP_PEER_V4 permit 30
match tag 1001
set community 12345:12345
route-map TO_BGP_PEER_V4 deny 40
!
route-map TO_BGP_PEER_V6 permit 20
match ipv6 address prefix-list PL_LoopbackV6
set community 12345:12345
route-map TO_BGP_PEER_V6 deny 30
route-map TO_BGP_PEER_V6 permit 30
match tag 1001
set community 12345:12345
route-map TO_BGP_PEER_V6 deny 40
!
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@

no route-map TO_BGP_PEER_V4 permit 20
no route-map TO_BGP_PEER_V4 deny 30
no route-map TO_BGP_PEER_V4 permit 30
no route-map TO_BGP_PEER_V4 deny 40
!
no route-map TO_BGP_PEER_V6 permit 20
no route-map TO_BGP_PEER_V6 deny 30
no route-map TO_BGP_PEER_V6 permit 30
no route-map TO_BGP_PEER_V6 deny 40
!
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,11 @@
},
"CONFIG_DB__LOOPBACK_INTERFACE": {
"Loopback4096|10.10.10.10/32": {}
},
"constants": {
"bgp": {
"internal_community": "12345:556",
"internal_community_match_tag": "101"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"CONFIG_DB__DEVICE_METADATA": {
"localhost": {
"type": "SpineRouter",
"sub_role": "FrontEnd",
"switch_type": "chassis-packet"
}
},
"constants": {
"bgp": {
"internal_community": "12345:556",
"internal_community_match_tag": "101"
}
},
"loopback0_ipv4": "10.10.10.10/32"
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
{
"CONFIG_DB__DEVICE_METADATA": {
"localhost": {
"sub_role": "FrontkEnd"
"sub_role": "FrontEnd"
}
},
"constants": {
"bgp": {
"internal_community": "12345:556",
"internal_community_match_tag": "101"
}
},
"loopback0_ipv4": "10.10.10.10/32"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
!
! template: bgpd/templates/internal/policies.conf.j2
!
route-map FROM_BGP_INTERNAL_PEER_V4 permit 100
!
route-map TO_BGP_INTERNAL_PEER_V4 permit 100
route-map FROM_BGP_INTERNAL_PEER_V4 permit 1
set originator-id 10.10.10.10
!
route-map FROM_BGP_INTERNAL_PEER_V6 permit 1
set ipv6 next-hop prefer-global
on-match next
!
route-map FROM_BGP_INTERNAL_PEER_V6 permit 100
route-map FROM_BGP_INTERNAL_PEER_V6 permit 2
set originator-id 10.10.10.10
!
route-map TO_BGP_INTERNAL_PEER_V6 permit 100
route-map FROM_BGP_INTERNAL_PEER_V4 permit 100
!
route-map FROM_BGP_INTERNAL_PEER_V4 permit 2
set originator-id 10.10.10.10
route-map FROM_BGP_INTERNAL_PEER_V6 permit 100
!
route-map FROM_BGP_INTERNAL_PEER_V6 permit 2
set originator-id 10.10.10.10
route-map TO_BGP_INTERNAL_PEER_V4 permit 100
!
route-map TO_BGP_INTERNAL_PEER_V6 permit 100
!
! end of template: bgpd/templates/internal/policies.conf.j2
!
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
!
! template: bgpd/templates/internal/policies.conf.j2
!
bgp community-list standard DEVICE_INTERNAL_COMMUNITY permit 12345:556
!
route-map FROM_BGP_INTERNAL_PEER_V4 permit 1
match community DEVICE_INTERNAL_COMMUNITY
set comm-list DEVICE_INTERNAL_COMMUNITY delete
set tag 101
!
route-map FROM_BGP_INTERNAL_PEER_V6 permit 1
set ipv6 next-hop prefer-global
on-match next
!
route-map FROM_BGP_INTERNAL_PEER_V6 permit 2
match community DEVICE_INTERNAL_COMMUNITY
set comm-list DEVICE_INTERNAL_COMMUNITY delete
set tag 101
!
route-map TO_BGP_INTERNAL_PEER_V4 permit 1
match ip address prefix-list PL_LoopbackV4
set community 12345:556
!
route-map TO_BGP_INTERNAL_PEER_V6 permit 2
match ipv6 address prefix-list PL_LoopbackV6
set community 12345:556
!
route-map FROM_BGP_INTERNAL_PEER_V4 permit 100
!
route-map FROM_BGP_INTERNAL_PEER_V6 permit 100
!
route-map TO_BGP_INTERNAL_PEER_V4 permit 100
!
route-map TO_BGP_INTERNAL_PEER_V6 permit 100
!
! end of template: bgpd/templates/internal/policies.conf.j2
!
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
!
! template: bgpd/templates/internal/policies.conf.j2
!
route-map FROM_BGP_INTERNAL_PEER_V4 permit 100
!
route-map TO_BGP_INTERNAL_PEER_V4 permit 100
!
route-map FROM_BGP_INTERNAL_PEER_V6 permit 1
set ipv6 next-hop prefer-global
on-match next
!
route-map FROM_BGP_INTERNAL_PEER_V4 permit 100
!
route-map FROM_BGP_INTERNAL_PEER_V6 permit 100
!
route-map TO_BGP_INTERNAL_PEER_V4 permit 100
!
route-map TO_BGP_INTERNAL_PEER_V6 permit 100
!
! end of template: bgpd/templates/internal/policies.conf.j2
Expand Down
5 changes: 4 additions & 1 deletion src/sonic-bgpcfgd/tests/data/sonic-cfggen/tsa/isolate.conf
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
route-map test_rm_name permit 20
match ip address prefix-list PL_LoopbackV4
set community 12345:555
route-map test_rm_name deny 30
route-map test_rm_name permit 30
match tag 1002
set community 12345:555
route-map test_rm_name deny 40
!
5 changes: 3 additions & 2 deletions src/sonic-bgpcfgd/tests/data/sonic-cfggen/tsa/isolate.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
{
"constants": {
"bgp": {
"traffic_shift_community": "12345:555"
"traffic_shift_community": "12345:555",
"internal_community_match_tag": "1002"
}
},
"route_map_name": "test_rm_name",
"ip_version": "V4",
"ip_protocol": "ip"
}
}
3 changes: 2 additions & 1 deletion src/sonic-bgpcfgd/tests/data/sonic-cfggen/tsa/unisolate.conf
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
no route-map test_rm permit 20
no route-map test_rm deny 30
no route-map test_rm permit 30
no route-map test_rm deny 40
!
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
{
"CONFIG_DB__DEVICE_METADATA": {
"localhost": {}
},
"constants": {
"bgp": {
"internal_community": "12345:556",
"internal_community_match_tag": "101"
}
}
}
Loading

0 comments on commit 6d767e5

Please sign in to comment.