diff options
author | William A. Kennington III <wak@google.com> | 2024-09-13 00:39:38 +0300 |
---|---|---|
committer | William A. Kennington III <wak@google.com> | 2024-09-13 07:34:03 +0300 |
commit | a108fcdfbaa34ea8e9b014609295dfea0c803e41 (patch) | |
tree | 14d81cff703b193df7692b01f39d52a0447882fd /meta-google | |
parent | 031f6a673b19e00677d247b752e2c01671096153 (diff) | |
download | openbmc-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')
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() { |