0606add017
Asic PCI ID (PCI address) is collected by chassisd (inside pmon - Azure/sonic-platform-daemons#175) and saved in CHASSIS_STATE_DB (in redis_chassis). CHASSIS_STATE_DB is accessible by swss containers. At docker-init.sh (script is called after swss container is created and before anything that could run in swss like orchagent...), we wait until asic PCI ID of the corresponding asic is populated by chassisd. We then update asic_id in CONFIG_DB of asic's database. A system supporting dynamic asic PCI ID identification requires to have a file (empty) use_pci_id_chassis in its platform dir. When orchagent runs, it has correct asic PCI ID in its CONFIG_DB. Together with this PR: Azure/sonic-platform-daemons#175 Azure/sonic-platform-common#185 Signed-off-by: Maxime Lorrillere <mlorrillere@arista.com> Co-authored-by: Maxime Lorrillere <mlorrillere@arista.com>
61 lines
2.2 KiB
Django/Jinja
Executable File
61 lines
2.2 KiB
Django/Jinja
Executable File
#!/usr/bin/env bash
|
|
|
|
mkdir -p /etc/swss/config.d/
|
|
mkdir -p /etc/supervisor/
|
|
mkdir -p /etc/supervisor/conf.d/
|
|
|
|
CFGGEN_PARAMS=" \
|
|
-d \
|
|
{% if ENABLE_ASAN == "y" %}
|
|
-a "{\"ENABLE_ASAN\":\"{{ENABLE_ASAN}}\"}" \
|
|
{% endif %}
|
|
-y /etc/sonic/constants.yml \
|
|
-t /usr/share/sonic/templates/switch.json.j2,/etc/swss/config.d/switch.json \
|
|
-t /usr/share/sonic/templates/vxlan.json.j2,/etc/swss/config.d/vxlan.json \
|
|
-t /usr/share/sonic/templates/ipinip.json.j2,/etc/swss/config.d/ipinip.json \
|
|
-t /usr/share/sonic/templates/ports.json.j2,/etc/swss/config.d/ports.json \
|
|
-t /usr/share/sonic/templates/vlan_vars.j2 \
|
|
-t /usr/share/sonic/templates/ndppd.conf.j2,/etc/ndppd.conf \
|
|
-t /usr/share/sonic/templates/critical_processes.j2,/etc/supervisor/critical_processes \
|
|
-t /usr/share/sonic/templates/supervisord.conf.j2,/etc/supervisor/conf.d/supervisord.conf
|
|
-t /usr/share/sonic/templates/wait_for_link.sh.j2,/usr/bin/wait_for_link.sh \
|
|
"
|
|
VLAN=$(sonic-cfggen $CFGGEN_PARAMS)
|
|
|
|
chmod +x /usr/bin/wait_for_link.sh
|
|
|
|
# Executed platform specific initialization tasks.
|
|
if [ -x /usr/share/sonic/platform/platform-init ]; then
|
|
/usr/share/sonic/platform/platform-init
|
|
fi
|
|
|
|
# Executed HWSKU specific initialization tasks.
|
|
if [ -x /usr/share/sonic/hwsku/hwsku-init ]; then
|
|
/usr/share/sonic/hwsku/hwsku-init
|
|
fi
|
|
|
|
# Start arp_update and NDP proxy daemon when VLAN exists
|
|
if [ "$VLAN" != "" ]; then
|
|
cp /usr/share/sonic/templates/arp_update.conf /etc/supervisor/conf.d/
|
|
cp /usr/share/sonic/templates/ndppd.conf /etc/supervisor/conf.d/
|
|
fi
|
|
|
|
USE_PCI_ID_IN_CHASSIS_STATE_DB=/usr/share/sonic/platform/use_pci_id_chassis
|
|
ASIC_ID="asic$NAMESPACE_ID"
|
|
if [ -f "$USE_PCI_ID_IN_CHASSIS_STATE_DB" ]; then
|
|
while true; do
|
|
PCI_ID=$(sonic-db-cli -s CHASSIS_STATE_DB HGET "CHASSIS_ASIC_TABLE|$ASIC_ID" asic_pci_address)
|
|
if [ -z "$PCI_ID" ]; then
|
|
sleep 3
|
|
else
|
|
# Update asic_id in CONFIG_DB, which is used by orchagent and fed to syncd
|
|
if [[ $PCI_ID == ????:??:??.? ]]; then
|
|
sonic-db-cli CONFIG_DB HSET 'DEVICE_METADATA|localhost' 'asic_id' ${PCI_ID#*:}
|
|
break
|
|
fi
|
|
fi
|
|
done
|
|
fi
|
|
|
|
exec /usr/local/bin/supervisord
|