[docker-fpm-frr]: TSA/B/C changes for multi-asic (#6510)

- Introduced TS common file in docker as well and moved common functions.
- TSA/B/C scripts run only in BGP instances for front end ASICs.
       In addition skip enforcing it on route maps used between internal BGP sessions.

admin@str--acs-1:~$ sudo /usr/bin/TSA
System Mode: Normal -> Maintenance

and in case of Multi-ASIC
admin@str--acs-1:~$ sudo /usr/bin/TSA
BGP0 : System Mode: Normal -> Maintenance
BGP1 : System Mode: Normal -> Maintenance
BGP2 : System Mode: Normal -> Maintenance
This commit is contained in:
judyjoseph 2021-02-12 10:56:44 -08:00 committed by GitHub
parent 0252425377
commit ad88700912
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 82 additions and 66 deletions

View File

@ -53,6 +53,7 @@ COPY ["snmp.conf", "/etc/snmp/frr.conf"]
COPY ["TSA", "/usr/bin/TSA"] COPY ["TSA", "/usr/bin/TSA"]
COPY ["TSB", "/usr/bin/TSB"] COPY ["TSB", "/usr/bin/TSB"]
COPY ["TSC", "/usr/bin/TSC"] COPY ["TSC", "/usr/bin/TSC"]
COPY ["TS", "/usr/bin/TS"]
COPY ["files/supervisor-proc-exit-listener", "/usr/bin"] COPY ["files/supervisor-proc-exit-listener", "/usr/bin"]
COPY ["zsocket.sh", "/usr/bin/"] COPY ["zsocket.sh", "/usr/bin/"]
RUN chmod a+x /usr/bin/TSA && \ RUN chmod a+x /usr/bin/TSA && \

40
dockers/docker-fpm-frr/TS Executable file
View File

@ -0,0 +1,40 @@
#!/bin/bash
# Check whether the routemap is for internal BGP sessions.
function is_internal_route_map()
{
[[ "$1" =~ .*"_INTERNAL_".* ]]
}
function check_not_installed()
{
c=0
config=$(vtysh -c "show run")
for route_map_name in $(echo "$config" | sed -ne 's/ neighbor \S* route-map \(\S*\) out/\1/p' | egrep 'V4|V6');
do
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$"
c=$((c+$?))
done
return $c
}
function check_installed()
{
c=0
e=0
config=$(vtysh -c "show run")
for route_map_name in $(echo "$config" | sed -ne 's/ neighbor \S* route-map \(\S*\) out/\1/p' | egrep 'V4|V6');
do
is_internal_route_map $route_map_name && continue
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$"
c=$((c+$?))
e=$((e+1))
done
return $((e-c))
}

View File

@ -1,18 +1,7 @@
#!/bin/bash #!/bin/bash
function check_not_installed() # Load the common functions
{ source /usr/bin/TS
c=0
config=$(vtysh -c "show run")
for route_map_name in $(echo "$config" | sed -ne 's/ neighbor \S* route-map \(\S*\) out/\1/p');
do
echo "$config" | egrep -q "^route-map $route_map_name permit 20$"
c=$((c+$?))
echo "$config" | egrep -q "^route-map $route_map_name deny 30$"
c=$((c+$?))
done
return $c
}
check_not_installed check_not_installed
not_installed=$? not_installed=$?
@ -21,6 +10,7 @@ then
TSA_FILE=$(mktemp) TSA_FILE=$(mktemp)
for route_map_name in $(echo "$config" | sed -ne 's/ neighbor \S* route-map \(\S*\) out/\1/p'); for route_map_name in $(echo "$config" | sed -ne 's/ neighbor \S* route-map \(\S*\) out/\1/p');
do do
is_internal_route_map $route_map_name && continue
case "$route_map_name" in case "$route_map_name" in
*V4*) *V4*)
ip_version=V4 ip_version=V4

View File

@ -1,21 +1,7 @@
#!/bin/bash #!/bin/bash
function check_installed() # Load the common functions
{ source /usr/bin/TS
c=0
e=0
config=$(vtysh -c "show run")
for route_map_name in $(echo "$config" | sed -ne 's/ neighbor \S* route-map \(\S*\) out/\1/p');
do
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$"
c=$((c+$?))
e=$((e+1))
done
return $((e-c))
}
check_installed check_installed
installed=$? installed=$?
@ -24,6 +10,7 @@ then
TSB_FILE=$(mktemp) TSB_FILE=$(mktemp)
for route_map_name in $(echo "$config" | sed -ne 's/ neighbor \S* route-map \(\S*\) out/\1/p'); for route_map_name in $(echo "$config" | sed -ne 's/ neighbor \S* route-map \(\S*\) out/\1/p');
do do
is_internal_route_map $route_map_name && continue
case "$route_map_name" in case "$route_map_name" in
*V4*) *V4*)
;; ;;

View File

@ -1,37 +1,7 @@
#!/bin/bash #!/bin/bash
function check_not_installed() # Load the common functions
{ source /usr/bin/TS
c=0
config=$(vtysh -c "show run")
for route_map_name in $(echo "$config" | sed -ne 's/ neighbor \S* route-map \(\S*\) out/\1/p' | egrep 'V4|V6');
do
echo "$config" | egrep -q "^route-map $route_map_name permit 20$"
c=$((c+$?))
echo "$config" | egrep -q "^route-map $route_map_name deny 30$"
c=$((c+$?))
done
return $c
}
function check_installed()
{
c=0
e=0
config=$(vtysh -c "show run")
for route_map_name in $(echo "$config" | sed -ne 's/ neighbor \S* route-map \(\S*\) out/\1/p' | egrep 'V4|V6');
do
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$"
c=$((c+$?))
e=$((e+1))
done
return $((e-c))
}
echo "Traffic Shift Check:"
check_not_installed check_not_installed
not_installed=$? not_installed=$?
@ -48,5 +18,3 @@ then
else else
echo "System Mode: Not consistent" echo "System Mode: Not consistent"
fi fi
echo

View File

@ -0,0 +1,29 @@
#!/bin/bash
# read SONiC immutable variables
[ -f /etc/sonic/sonic-environment ] && . /etc/sonic/sonic-environment
PLATFORM=${PLATFORM:-`sonic-cfggen -H -v DEVICE_METADATA.localhost.platform`}
# Parse the device specific asic conf file, if it exists
ASIC_CONF=/usr/share/sonic/device/$PLATFORM/asic.conf
[ -f $ASIC_CONF ] && . $ASIC_CONF
if [[ ($NUM_ASIC -gt 1) ]]; then
asic=0
NAMESPACE_PREFIX='asic'
while [ $asic -lt $NUM_ASIC ]
do
# Run TSA/TSB/TSC scripts in BGP instance for frontend ASICs.
sub_role=`sonic-cfggen -d -v "DEVICE_METADATA['localhost']['sub_role']" -n $NAMESPACE_PREFIX$asic`
if [ $sub_role == 'FrontEnd' ]
then
echo -e "BGP"$asic" : \c"
docker exec -i bgp$asic /usr/bin/$1
fi
asic=$[$asic+1]
done
else
docker exec -i bgp /usr/bin/$1
fi

View File

@ -1,3 +1,3 @@
#!/bin/bash #!/bin/bash
docker exec -i bgp /usr/bin/TSA /usr/bin/TS TSA

View File

@ -1,3 +1,3 @@
#!/bin/bash #!/bin/bash
docker exec -i bgp /usr/bin/TSB /usr/bin/TS TSB

View File

@ -1,5 +1,5 @@
#!/bin/bash #!/bin/bash
docker exec -i bgp /usr/bin/TSC /usr/bin/TS TSC
portstat -p 5 portstat -p 5

View File

@ -30,4 +30,5 @@ $(DOCKER_FPM_FRR)_BASE_IMAGE_FILES += vtysh:/usr/bin/vtysh
$(DOCKER_FPM_FRR)_BASE_IMAGE_FILES += TSA:/usr/bin/TSA $(DOCKER_FPM_FRR)_BASE_IMAGE_FILES += TSA:/usr/bin/TSA
$(DOCKER_FPM_FRR)_BASE_IMAGE_FILES += TSB:/usr/bin/TSB $(DOCKER_FPM_FRR)_BASE_IMAGE_FILES += TSB:/usr/bin/TSB
$(DOCKER_FPM_FRR)_BASE_IMAGE_FILES += TSC:/usr/bin/TSC $(DOCKER_FPM_FRR)_BASE_IMAGE_FILES += TSC:/usr/bin/TSC
$(DOCKER_FPM_FRR)_BASE_IMAGE_FILES += TS:/usr/bin/TS
$(DOCKER_FPM_FRR)_BASE_IMAGE_FILES += monit_bgp:/etc/monit/conf.d $(DOCKER_FPM_FRR)_BASE_IMAGE_FILES += monit_bgp:/etc/monit/conf.d