summaryrefslogtreecommitdiff
path: root/meta-google
diff options
context:
space:
mode:
authorWilliam A. Kennington III <wak@google.com>2024-09-13 00:39:38 +0300
committerWilliam A. Kennington III <wak@google.com>2024-09-13 07:34:03 +0300
commita108fcdfbaa34ea8e9b014609295dfea0c803e41 (patch)
tree14d81cff703b193df7692b01f39d52a0447882fd /meta-google
parent031f6a673b19e00677d247b752e2c01671096153 (diff)
downloadopenbmc-a108fcdfbaa34ea8e9b014609295dfea0c803e41.tar.xz
meta-google: Refactor networkd reloads to one place
We want to have common logging and conditional routines when we talk to networkd. Change-Id: I44c83c8137399d2126c565a1f753520603a9f97b Signed-off-by: William A. Kennington III <wak@google.com>
Diffstat (limited to 'meta-google')
-rw-r--r--meta-google/recipes-google/ncsi/files/gbmc-ncsi-br-deprecated-ips.sh.in5
-rw-r--r--meta-google/recipes-google/ncsi/files/gbmc-ncsi-ra.sh7
-rw-r--r--meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-gw-src.sh7
-rwxr-xr-xmeta-google/recipes-google/networking/gbmc-bridge/gbmc-br-hostname.sh8
-rw-r--r--meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-lib.sh15
-rw-r--r--meta-google/recipes-google/networking/gbmc-net-common.bb2
-rw-r--r--meta-google/recipes-google/networking/gbmc-net-common/gbmc-net-lib.sh31
-rw-r--r--meta-google/recipes-google/networking/gbmc-net-common/gbmc-ra.sh4
-rw-r--r--meta-google/recipes-google/networking/gbmc-nic-config/gbmc-nic-neigh.sh.in7
9 files changed, 61 insertions, 25 deletions
diff --git a/meta-google/recipes-google/ncsi/files/gbmc-ncsi-br-deprecated-ips.sh.in b/meta-google/recipes-google/ncsi/files/gbmc-ncsi-br-deprecated-ips.sh.in
index 93c6b27668..c2783be525 100644
--- a/meta-google/recipes-google/ncsi/files/gbmc-ncsi-br-deprecated-ips.sh.in
+++ b/meta-google/recipes-google/ncsi/files/gbmc-ncsi-br-deprecated-ips.sh.in
@@ -15,6 +15,7 @@
[ -n "${gbmc_ncsi_br_deprecated_ips_lib-}" ] && return
source /usr/share/network/lib.sh || exit
+source /usr/share/gbmc-net-lib.sh || exit
gbmc_ncsi_br_deprecated_ips_init=
gbmc_ncsi_br_deprecated_ips_confip=
@@ -115,9 +116,7 @@ EOF
lookup $GBMC_NCSI_ROUTE_TABLE || st=$?
fi
- if (( st != 0 )); then
- networkctl reload && networkctl reconfigure @NCSI_IF@
- fi
+ (( st == 0 )) || gbmc_net_networkd_reload @NCSI_IF@
local rfile=/run/nftables/40-gbmc-ncsi-br.rules
mkdir -p -m 755 "$(dirname "$rfile")"
diff --git a/meta-google/recipes-google/ncsi/files/gbmc-ncsi-ra.sh b/meta-google/recipes-google/ncsi/files/gbmc-ncsi-ra.sh
index 34c59abe04..ca8fa05caa 100644
--- a/meta-google/recipes-google/ncsi/files/gbmc-ncsi-ra.sh
+++ b/meta-google/recipes-google/ncsi/files/gbmc-ncsi-ra.sh
@@ -13,6 +13,9 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+# shellcheck source=meta-google/recipes-google/networking/gbmc-net-common/gbmc-net-lib.sh
+source /usr/share/gbmc-net-lib.sh || exit
+
RA_IF=$1
IP_OFFSET=1
# NCSI is known to be closer to the ToR than bridge routes. Prefer over bridge routes.
@@ -33,7 +36,7 @@ update_rtr() {
done
ip -6 route replace default via "$rtr" onlink dev "$RA_IF" table "$ROUTE_TABLE" || \
- networkctl reload && networkctl reconfigure "$RA_IF"
+ gbmc_net_networkd_reload "$RA_IF"
}
ncsi_is_active() {
@@ -78,7 +81,7 @@ update_pfx() {
ip -6 addr del "$old_ncsi_pfx/128" dev gbmcbr || true
fi
ip -6 addr replace "$pfx/128" dev gbmcbr || \
- (networkctl reload && networkctl reconfigure gbmcbr) || true
+ gbmc_net_networkd_reload gbmcbr || true
old_ncsi_pfx=$pfx
echo "Set NCSI addr $pfx on gbmcbr" >&2
diff --git a/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-gw-src.sh b/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-gw-src.sh
index 56dd840284..5865946e04 100644
--- a/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-gw-src.sh
+++ b/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-gw-src.sh
@@ -17,6 +17,8 @@
# shellcheck source=meta-google/recipes-google/networking/network-sh/lib.sh
source /usr/share/network/lib.sh || exit
+# shellcheck source=meta-google/recipes-google/networking/gbmc-net-common/gbmc-net-lib.sh
+source /usr/share/gbmc-net-lib.sh || exit
declare -A gbmc_br_gw_src_ips=()
declare -A gbmc_br_gw_src_routes=()
@@ -50,9 +52,8 @@ gbmc_br_set_router() {
rm -f "${files[@]}"
fi
- if [[ $(systemctl is-active systemd-networkd) != inactive ]]; then
- networkctl reload && networkctl reconfigure gbmcbr
- fi
+ # shellcheck disable=SC2119
+ gbmc_net_networkd_reload
}
gbmc_br_gw_src_update() {
diff --git a/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-hostname.sh b/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-hostname.sh
index 408ffb6154..d680e148f4 100755
--- a/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-hostname.sh
+++ b/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-hostname.sh
@@ -12,7 +12,10 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-#
+
+# shellcheck source=meta-google/recipes-google/networking/gbmc-net-common/gbmc-net-lib.sh
+source /usr/share/gbmc-net-lib.sh || exit
+
oldname=
while read -r _; do
# Don't bother parsing the output, just read the final hostname
@@ -27,5 +30,6 @@ while read -r _; do
printf '%s' "$contents" >"$netfile"
done
- networkctl reload && networkctl reconfigure gbmcbr
+ # shellcheck disable=SC2119
+ gbmc_net_networkd_reload
done < <(dbus-monitor --system "type='signal',interface='org.freedesktop.DBus.Properties',member='PropertiesChanged',arg0='org.freedesktop.hostname1'")
diff --git a/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-lib.sh b/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-lib.sh
index 31596ca2ba..912a3c119d 100644
--- a/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-lib.sh
+++ b/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-lib.sh
@@ -15,9 +15,10 @@
[ -n "${gbmc_br_lib_init-}" ] && return
-# SC can't find this path during repotest
-# shellcheck disable=SC1091
+# shellcheck source=meta-google/recipes-google/networking/network-sh/lib.sh
source /usr/share/network/lib.sh || exit
+# shellcheck source=meta-google/recipes-google/networking/gbmc-net-common/gbmc-net-lib.sh
+source /usr/share/gbmc-net-lib.sh || exit
# A list of functions which get executed for each configured IP.
# These are configured by the files included below.
@@ -49,16 +50,10 @@ gbmc_br_run_hooks() {
done
}
-gbmc_br_reload() {
- if [ "$(systemctl is-active systemd-networkd)" != 'inactive' ]; then
- networkctl reload && networkctl reconfigure gbmcbr
- fi
-}
-
gbmc_br_no_ip() {
echo "Runtime removing gbmcbr IP" >&2
rm -f /run/systemd/network/{00,}-bmc-gbmcbr.network.d/50-public.conf
- gbmc_br_reload
+ gbmc_net_networkd_reload gbmcbr
}
gbmc_br_reload_ip() {
@@ -109,7 +104,7 @@ EOF
printf '%s' "$contents" >"$file"
done
- gbmc_br_reload
+ gbmc_net_networkd_reload gbmcbr
}
gbmc_br_set_ip() {
diff --git a/meta-google/recipes-google/networking/gbmc-net-common.bb b/meta-google/recipes-google/networking/gbmc-net-common.bb
index 1f709b4eef..1a3ca7722c 100644
--- a/meta-google/recipes-google/networking/gbmc-net-common.bb
+++ b/meta-google/recipes-google/networking/gbmc-net-common.bb
@@ -4,6 +4,7 @@ LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
SRC_URI += " \
+ file://gbmc-net-lib.sh \
file://gbmc-ra.sh \
"
S = "${WORKDIR}"
@@ -20,6 +21,7 @@ RDEPENDS:${PN}:append = " \
do_install() {
install -d -m0755 ${D}${datadir}
+ install -m0644 ${S}/gbmc-net-lib.sh ${D}${datadir}/
install -m0644 ${S}/gbmc-ra.sh ${D}${datadir}/
}
diff --git a/meta-google/recipes-google/networking/gbmc-net-common/gbmc-net-lib.sh b/meta-google/recipes-google/networking/gbmc-net-common/gbmc-net-lib.sh
new file mode 100644
index 0000000000..6e4ba365e0
--- /dev/null
+++ b/meta-google/recipes-google/networking/gbmc-net-common/gbmc-net-lib.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+# Copyright 2024 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+[ -n "${gbmc_net_lib_init-}" ] && return
+
+gbmc_net_networkd_reload() {
+ if [ "$(systemctl is-active systemd-networkd)" != 'inactive' ]; then
+ echo "Reloading networkd + reconfiguring ($*) from $(caller 0)" >&2
+ networkctl reload || return
+ local st=0
+ local intf
+ for intf in "$@"; do
+ networkctl reconfigure "$intf" || st=$?
+ done
+ return $st
+ fi
+}
+
+gbmc_net_lib_init=1
diff --git a/meta-google/recipes-google/networking/gbmc-net-common/gbmc-ra.sh b/meta-google/recipes-google/networking/gbmc-net-common/gbmc-ra.sh
index d2e92a57b4..280083a8c9 100644
--- a/meta-google/recipes-google/networking/gbmc-net-common/gbmc-ra.sh
+++ b/meta-google/recipes-google/networking/gbmc-net-common/gbmc-ra.sh
@@ -15,6 +15,8 @@
# shellcheck source=meta-google/recipes-google/networking/network-sh/lib.sh
source /usr/share/network/lib.sh || exit
+# shellcheck source=meta-google/recipes-google/networking/gbmc-net-common/gbmc-net-lib.sh
+source /usr/share/gbmc-net-lib.sh || exit
: "${RA_IF:?No RA interface set}"
: "${IP_OFFSET=?1}"
@@ -55,7 +57,7 @@ default_update_rtr() {
# Fall back to reload only if ip link commands fail
(ip -6 route replace default via "$rtr" onlink dev "$RA_IF" metric "$ROUTE_METRIC" && \
ip -6 neigh replace "$rtr" dev "$RA_IF" lladdr "$mac") || \
- (networkctl reload && networkctl reconfigure "$RA_IF") || true
+ gbmc_net_networkd_reload "$RA_IF" || true
echo "Set router $rtr on $RA_IF" >&2
}
diff --git a/meta-google/recipes-google/networking/gbmc-nic-config/gbmc-nic-neigh.sh.in b/meta-google/recipes-google/networking/gbmc-nic-config/gbmc-nic-neigh.sh.in
index 5f3f47fedd..d7c0f023b7 100644
--- a/meta-google/recipes-google/networking/gbmc-nic-config/gbmc-nic-neigh.sh.in
+++ b/meta-google/recipes-google/networking/gbmc-nic-config/gbmc-nic-neigh.sh.in
@@ -17,6 +17,8 @@
# shellcheck source=meta-google/recipes-google/networking/network-sh/lib.sh
source /usr/share/network/lib.sh || exit
+# shellcheck source=meta-google/recipes-google/networking/gbmc-net-common/gbmc-net-lib.sh
+source /usr/share/gbmc-net-lib.sh || exit
gbmc_nic_neigh_intfs=(@IFS@)
gbmc_nic_neigh_addr=
@@ -55,11 +57,8 @@ gbmc_nic_neigh_set() {
done
[[ "$act" == del ]] && return
if (( "${#failed_intfs[@]}" > 0 )); then
- networkctl reload || true
+ gbmc_net_networkd_reload "${failed_intfs[@]}"
fi
- for intf in "${failed_intfs[@]}"; do
- networkctl reconfigure "$intf" || true
- done
}
gbmc_nic_neigh_hook() {