summaryrefslogtreecommitdiff
path: root/meta-ibm/recipes-phosphor
diff options
context:
space:
mode:
authorAndrew Geissler <geissonator@yahoo.com>2023-01-11 21:51:58 +0300
committerAndrew Geissler <andrew@geissonator.com>2023-01-14 00:05:22 +0300
commit3da13b3a39f123f81094675f0802c4578f8b7a84 (patch)
tree41c4d82329d5aefd0910943ffe59ed2aaed98122 /meta-ibm/recipes-phosphor
parent517393d903089f921915530ffa689a7a1d113420 (diff)
downloadopenbmc-3da13b3a39f123f81094675f0802c4578f8b7a84.tar.xz
meta-ibm:ncsi: ensure eth speeds set to 1 gigabit
IBM has run into some issues recently with certain network configurations where eth1 is not getting set to 1 gigabit. This can cause issues in scenarios where a network environment is running on 1 gigabit minimum-speed network switches. Removing link-local support from eth1 seemed to aggravated this. link-local is only on eth0 to avoid subnet issues. But without link-local, the systemd call, systemd-networkd-wait-online, does not always find an active eth1 so it never runs the command to force eth1 up to 1 gigabit. As far as we can tell, there's no appropriate mapping within systemd-networkd-wait-online for it to know when the NCSI stack is appropriately up on a network interface (allowing the 1 gigabit speed to be set). Therefore the solution taken in this commit is to just keep retrying for a period of time. Tested: - Verified new script ran and set eth ports as expected Signed-off-by: Andrew Geissler <geissonator@yahoo.com> Change-Id: I6737e208b59830262f51a8e30c78a97fc698e4fd
Diffstat (limited to 'meta-ibm/recipes-phosphor')
-rw-r--r--meta-ibm/recipes-phosphor/network/network/ncsi-linkspeed@.service5
-rw-r--r--meta-ibm/recipes-phosphor/network/network/ncsi-wait-and-set-speed37
-rw-r--r--meta-ibm/recipes-phosphor/network/phosphor-network_%.bbappend5
3 files changed, 44 insertions, 3 deletions
diff --git a/meta-ibm/recipes-phosphor/network/network/ncsi-linkspeed@.service b/meta-ibm/recipes-phosphor/network/network/ncsi-linkspeed@.service
index 00bce85132..26737b9735 100644
--- a/meta-ibm/recipes-phosphor/network/network/ncsi-linkspeed@.service
+++ b/meta-ibm/recipes-phosphor/network/network/ncsi-linkspeed@.service
@@ -3,10 +3,9 @@ Description=Set %i gigabit link speed
After=network.target
[Service]
+TimeoutSec=90s
Restart=no
-ExecCondition=/lib/systemd/systemd-networkd-wait-online --timeout 30 -i %i
-# package 0, channel 0, oem command, see Intel I210 datasheet section 10.6.3.10.1
-ExecStart=/usr/libexec/ncsi-netlink-ifindex %i -p 0 -c 0 -o 00000157200001
+ExecStart=/usr/libexec/ncsi-wait-and-set-speed %i
SyslogIdentifier=nsci-linkspeed
Type=oneshot
diff --git a/meta-ibm/recipes-phosphor/network/network/ncsi-wait-and-set-speed b/meta-ibm/recipes-phosphor/network/network/ncsi-wait-and-set-speed
new file mode 100644
index 0000000000..e435831ab6
--- /dev/null
+++ b/meta-ibm/recipes-phosphor/network/network/ncsi-wait-and-set-speed
@@ -0,0 +1,37 @@
+#!/bin/bash
+set -e
+
+# This script tries to periodically set the passed in network interface to
+# 1 gigabit. It will run until it is successful or it hits its max retries.
+# This script is necessary because there is no clear indication from the kernel
+# NCSI stack when it is in a proper state for this speed setting to succeed
+
+# This script expects 1 parameter
+# - Network interface to configure (i.e. eth0, eth1, ...)
+
+if [ $# -ne 1 ]; then
+ echo "Required network interface not provided"
+ exit 1
+fi
+
+netIface=$1
+
+# 60s total: 12 tries with 5s sleeps
+for i in {1..12}
+do
+ echo "attempt number $i: setting $netIface to 1 gigabit"
+ rc=0
+ # package 0, channel 0, oem command, see Intel I210 datasheet section 10.6.3.10.1
+ /usr/libexec/ncsi-netlink-ifindex "$netIface" -p 0 -c 0 -o 00000157200001 || rc=$?
+ if [ $rc -ne 0 ]; then
+ echo "error code is $rc setting $netIface to 1 gigabit, sleep and retry"
+ sleep 5
+ else
+ echo "success setting $netIface to 1 gigabit"
+ exit 0
+ fi
+
+done
+
+echo "ERROR: all retry attempts exhausted, unable to configure $netIface to 1 gigabit"
+exit 1 \ No newline at end of file
diff --git a/meta-ibm/recipes-phosphor/network/phosphor-network_%.bbappend b/meta-ibm/recipes-phosphor/network/phosphor-network_%.bbappend
index be233f8751..eac0503aee 100644
--- a/meta-ibm/recipes-phosphor/network/phosphor-network_%.bbappend
+++ b/meta-ibm/recipes-phosphor/network/phosphor-network_%.bbappend
@@ -2,6 +2,8 @@ FILESEXTRAPATHS:prepend := "${THISDIR}/network:"
inherit obmc-phosphor-systemd
+RDEPENDS:${PN} += "bash"
+
OBMC_NETWORK_INTERFACES ?= "eth0"
OBMC_NETWORK_INTERFACES:append:p10bmc = " eth1"
@@ -9,6 +11,7 @@ FAILOVER_TMPL = "ncsi-failover@.service"
LINKSPEED_TMPL = "ncsi-linkspeed@.service"
SRC_URI += " file://ncsi-netlink-ifindex"
+SRC_URI += " file://ncsi-wait-and-set-speed"
SRC_URI:append:ibm-ac-server = " file://${FAILOVER_TMPL}"
SRC_URI:append:p10bmc = " file://${LINKSPEED_TMPL}"
@@ -24,6 +27,7 @@ SYSTEMD_LINK:${PN}:append:ibm-ac-server = "${@compose_list(d, 'FAILOVER_FMT', 'O
SYSTEMD_LINK:${PN}:append:p10bmc = "${@compose_list(d, 'LINKSPEED_FMT', 'OBMC_NETWORK_INTERFACES')}"
FILES:${PN} += "${libexecdir}/ncsi-netlink-ifindex"
+FILES:${PN} += "${libexecdir}/ncsi-wait-and-set-speed"
FILES:${PN} += "${datadir}/network/*.json"
PACKAGECONFIG:append = " sync-mac"
@@ -37,6 +41,7 @@ install_network_configuration(){
do_install:append() {
install -d ${D}${libexecdir}
install -m 0755 ${WORKDIR}/ncsi-netlink-ifindex ${D}${libexecdir}
+ install -m 0755 ${WORKDIR}/ncsi-wait-and-set-speed ${D}${libexecdir}
}
SRC_URI:append:p10bmc = " file://inventory-object-map.json"