From 4766fcf100f1709dd598def1e96d74a69db12eb4 Mon Sep 17 00:00:00 2001 From: Abhishek Dosi Date: Sat, 3 Apr 2021 01:41:30 +0000 Subject: [PATCH 1/4] [submodule update] sonic-db-syncd df46ed418e661a9bccdb2639d8873def356f8ba0 (HEAD -> master, origin/master, origin/HEAD) Fix the LLDP_LOC_CHASSIS not getting populated if no remote neighbors are present (#39) e487532e11cc0e97cfce573b6b997fdd0beeb660 [CI] Set up CI&PR with Azure Pipelines (#38) 3c9f488490a1dbded20dbf2d8a88a5ab4dbda8df Replace swsssdk's SonicV2Connector with swsscommon's implementation (#35) Signed-off-by: Abhishek Dosi --- src/sonic-dbsyncd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-dbsyncd b/src/sonic-dbsyncd index 5cc29a1b32d8..df46ed418e66 160000 --- a/src/sonic-dbsyncd +++ b/src/sonic-dbsyncd @@ -1 +1 @@ -Subproject commit 5cc29a1b32d8d1f4dfbc967bfea2727c50a49c76 +Subproject commit df46ed418e661a9bccdb2639d8873def356f8ba0 From 52b0a5a4468ea1d91a2c70671cf32e9c441bd4f6 Mon Sep 17 00:00:00 2001 From: Abhishek Dosi Date: Fri, 1 Apr 2022 18:29:31 +0000 Subject: [PATCH 2/4] [Submodule update] sonic-py-swssdk 78f167e4728f939712b3f3ea550949e2ea675fec With the changes in PR:https://github.com/Azure/sonic-buildimage/pull/5289 access to redis unix socket is given to the redis group members. Many of sonic-util commands (especially in multi-asic) case use redis unix socket to connect to DB and thus those comamnd fails without providing sudo. This PR is continuation of PR: https://github.com/Azure/sonic-buildimage/pull/7002 where we default to use TCP for Redis if user is not root Signed-off-by: Abhishek Dosi --- src/sonic-py-swsssdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-py-swsssdk b/src/sonic-py-swsssdk index 96c05900fc6e..653bdba51750 160000 --- a/src/sonic-py-swsssdk +++ b/src/sonic-py-swsssdk @@ -1 +1 @@ -Subproject commit 96c05900fc6e4063c51e3f6256f8a8e765605be4 +Subproject commit 653bdba51750cac95feb3dd47904bf4de2353fec From d0f9aee46dac497910f5ef2cf5ab5c8e8282158e Mon Sep 17 00:00:00 2001 From: Abhishek Dosi Date: Thu, 7 Apr 2022 23:54:25 +0000 Subject: [PATCH 3/4] [chassis] Fix issues regarding database service failure handling and mid-plane connectivity for namespace. Signed-off-by: Abhishek Dosi --- dockers/docker-database/flush_unused_database | 8 +++- files/build_templates/docker_image_ctl.j2 | 42 +++++++++++++++---- .../interfaces/interfaces-config.sh | 42 ------------------- 3 files changed, 40 insertions(+), 52 deletions(-) diff --git a/dockers/docker-database/flush_unused_database b/dockers/docker-database/flush_unused_database index b1d4af063860..e1f7394d9776 100755 --- a/dockers/docker-database/flush_unused_database +++ b/dockers/docker-database/flush_unused_database @@ -3,6 +3,7 @@ import swsssdk import redis import subprocess import time +import syslog while(True): output = subprocess.Popen(['sonic-db-cli', 'PING'], stdout=subprocess.PIPE, text=True).communicate()[0] @@ -24,5 +25,8 @@ for instname, v in instlists.items(): if dbinst == instname: continue - r = redis.Redis(host=insthost, unix_socket_path=instsocket, db=dbid) - r.flushdb() + try: + r = redis.Redis(host=insthost, unix_socket_path=instsocket, db=dbid) + r.flushdb() + except (redis.exceptions.ConnectionError): + syslog.syslog(syslog.LOG_INFO,"flushdb:Redis Unix Socket connection error for path {} and dbaname {}".format(instsocket, dbname)) diff --git a/files/build_templates/docker_image_ctl.j2 b/files/build_templates/docker_image_ctl.j2 index b139eb570b3a..24464dfc1c61 100644 --- a/files/build_templates/docker_image_ctl.j2 +++ b/files/build_templates/docker_image_ctl.j2 @@ -118,18 +118,16 @@ function preStartAction() function setPlatformLagIdBoundaries() { - CHASSIS_CONF=/usr/share/sonic/device/$PLATFORM/chassisdb.conf - if [ -f "$CHASSIS_CONF" ]; then - source $CHASSIS_CONF - docker exec -i ${DOCKERNAME} $SONIC_DB_CLI CHASSIS_APP_DB SET "SYSTEM_LAG_ID_START" "$lag_id_start" - docker exec -i ${DOCKERNAME} $SONIC_DB_CLI CHASSIS_APP_DB SET "SYSTEM_LAG_ID_END" "$lag_id_end" - fi + docker exec -i ${DOCKERNAME} $SONIC_DB_CLI CHASSIS_APP_DB SET "SYSTEM_LAG_ID_START" "$lag_id_start" + docker exec -i ${DOCKERNAME} $SONIC_DB_CLI CHASSIS_APP_DB SET "SYSTEM_LAG_ID_END" "$lag_id_end" } {%- endif %} function postStartAction() { {%- if docker_container_name == "database" %} + CHASSISDB_CONF="/usr/share/sonic/device/$PLATFORM/chassisdb.conf" + [ -f $CHASSISDB_CONF ] && source $CHASSISDB_CONF if [ "$DEV" ]; then # Enable the forwarding on eth0 interface in namespace. SYSCTL_NET_CONFIG="/etc/sysctl.d/sysctl-net.conf" @@ -137,6 +135,31 @@ function postStartAction() s/^net.ipv6.conf.eth0.forwarding=0/net.ipv6.conf.eth0.forwarding=1/" $SYSCTL_NET_CONFIG docker exec -i database$DEV sysctl --system -e link_namespace $DEV + + + if [[ -n "$midplane_subnet" ]]; then + # Use /16 for loopback interface + ip netns exec "$NET_NS" ip addr add 127.0.0.1/16 dev lo + ip netns exec "$NET_NS" ip addr del 127.0.0.1/8 dev lo + + # Create eth1 in database instance + ip link add name ns-eth1"$NET_NS" link eth1-midplane type macvlan mode bridge + ip link set dev ns-eth1"$NET_NS" netns "$NET_NS" + ip netns exec "$NET_NS" ip link set ns-eth1"$NET_NS" name eth1 + + # Configure IP address and enable eth1 + lc_slot_id=$(python3 -c 'import sonic_platform.platform; platform_chassis = sonic_platform.platform.Platform().get_chassis(); print(platform_chassis.get_my_slot())' 2>/dev/null) + lc_ip_address=`echo $midplane_subnet | awk -F. '{print $1 "." $2}'`.$lc_slot_id.$(($DEV + 10)) + lc_subnet_mask=${midplane_subnet#*/} + ip netns exec "$NET_NS" ip addr add $lc_ip_address/$lc_subnet_mask dev eth1 + ip netns exec "$NET_NS" ip link set dev eth1 up + + # Allow localnet routing on the new interfaces if midplane is using a + # subnet in the 127/8 range. + if [[ "${midplane_subnet#127}" != "$midplane_subnet" ]]; then + ip netns exec "$NET_NS" bash -c "echo 1 > /proc/sys/net/ipv4/conf/eth1/route_localnet" + fi + fi fi # Setup ebtables configuration ebtables_config @@ -152,7 +175,8 @@ function postStartAction() # then we catch python exception of file not valid # that comes to syslog which is unwanted so wait till database # config is ready and then ping - until [[ ($(docker exec -i database$DEV pgrep -x -c supervisord) -gt 0) && ($($SONIC_DB_CLI PING | grep -c PONG) -gt 0) ]]; do + until [[ ($(docker exec -i database$DEV pgrep -x -c supervisord) -gt 0) && ($($SONIC_DB_CLI PING | grep -c PONG) -gt 0) && + ($(docker exec -i database$DEV sonic-db-cli PING | grep -c PONG) -gt 0) ]]; do sleep 1; done if [[ ("$BOOT_TYPE" == "warm" || "$BOOT_TYPE" == "fastfast") && -f $WARM_DIR/dump.rdb ]]; then @@ -189,7 +213,9 @@ function postStartAction() ($(docker exec -i ${DOCKERNAME} $SONIC_DB_CLI CHASSIS_APP_DB PING | grep -c True) -gt 0) ]]; do sleep 1 done - setPlatformLagIdBoundaries + if [[ -n "$lag_id_start" && -n "$lag_id_end" ]]; then + setPlatformLagIdBoundaries + fi REDIS_SOCK="/var/run/redis-chassis/redis_chassis.sock" fi chgrp -f redis $REDIS_SOCK && chmod -f 0760 $REDIS_SOCK diff --git a/files/image_config/interfaces/interfaces-config.sh b/files/image_config/interfaces/interfaces-config.sh index 5753bebd378d..688b2f8433a5 100755 --- a/files/image_config/interfaces/interfaces-config.sh +++ b/files/image_config/interfaces/interfaces-config.sh @@ -34,48 +34,6 @@ for intf_pid in $(ls -1 /var/run/dhclient*.Ethernet*.pid 2> /dev/null); do [ -f ${intf_pid} ] && kill `cat ${intf_pid}` && rm -f ${intf_pid} done - -# Setup eth1 if we connect to a remote chassis DB. -PLATFORM=${PLATFORM:-`sonic-cfggen -H -v DEVICE_METADATA.localhost.platform`} -CHASSISDB_CONF="/usr/share/sonic/device/$PLATFORM/chassisdb.conf" -[ -f $CHASSISDB_CONF ] && source $CHASSISDB_CONF - -ASIC_CONF="/usr/share/sonic/device/$PLATFORM/asic.conf" -[ -f $ASIC_CONF ] && source $ASIC_CONF - -if [[ -n "$midplane_subnet" && ($NUM_ASIC -gt 1) ]]; then - for asic_id in `seq 0 $((NUM_ASIC - 1))`; do - NET_NS="asic$asic_id" - - PIDS=`ip netns pids "$NET_NS" 2>/dev/null` - if [ "$?" -ne "0" ]; then # namespace doesn't exist - continue - fi - - # Use /16 for loopback interface - ip netns exec $NET_NS ip addr add 127.0.0.1/16 dev lo - ip netns exec $NET_NS ip addr del 127.0.0.1/8 dev lo - - # Create eth1 in database instance - ip link add name ns-eth1 link eth1-midplane type ipvlan mode l2 - ip link set dev ns-eth1 netns $NET_NS - ip netns exec $NET_NS ip link set ns-eth1 name eth1 - - # Configure IP address and enable eth1 - lc_slot_id=$(python3 -c 'import sonic_platform.platform; platform_chassis = sonic_platform.platform.Platform().get_chassis(); print(platform_chassis.get_my_slot())' 2>/dev/null) - lc_ip_address=`echo $midplane_subnet | awk -F. '{print $1 "." $2}'`.$lc_slot_id.$((asic_id + 10)) - lc_subnet_mask=${midplane_subnet#*/} - ip netns exec $NET_NS ip addr add $lc_ip_address/$lc_subnet_mask dev eth1 - ip netns exec $NET_NS ip link set dev eth1 up - - # Allow localnet routing on the new interfaces if midplane is using a - # subnet in the 127/8 range. - if [[ "${midplane_subnet#127}" != "$midplane_subnet" ]]; then - ip netns exec $NET_NS bash -c "echo 1 > /proc/sys/net/ipv4/conf/eth1/route_localnet" - fi - done -fi - # Read sysctl conf files again sysctl -p /etc/sysctl.d/90-dhcp6-systcl.conf From 5e89d2d6503e3f2cdaf122f968a9304b1fbb2971 Mon Sep 17 00:00:00 2001 From: Abhishek Dosi Date: Mon, 16 May 2022 21:18:55 +0000 Subject: [PATCH 4/4] Removed midplane_subner from supervisor chassisdb.conf Signed-off-by: Abhishek Dosi --- device/nokia/x86_64-nokia_ixr7250e_sup-r0/chassisdb.conf | 1 - 1 file changed, 1 deletion(-) diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/chassisdb.conf b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/chassisdb.conf index a2daf40b9fef..3296a7929a81 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/chassisdb.conf +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/chassisdb.conf @@ -2,4 +2,3 @@ start_chassis_db=1 chassis_db_address=10.6.0.100 lag_id_start=1 lag_id_end=512 -midplane_subnet=10.6.0.0/16