diff options
author | William A. Kennington III <wak@google.com> | 2022-02-09 03:50:30 +0300 |
---|---|---|
committer | William A. Kennington III <wak@google.com> | 2022-03-29 20:21:37 +0300 |
commit | bef990f88c404ae96dd43cc051b977f1e97ad8dd (patch) | |
tree | e6f9e174420bbdfb06b30b1271b1dee9a82413d5 /meta-google | |
parent | 6886bfed9f534fdd0f16aca0f01f30ace0fe6cc9 (diff) | |
download | openbmc-bef990f88c404ae96dd43cc051b977f1e97ad8dd.tar.xz |
meta-google: gbmc-bridge: Terminate DHCP after reachable
We don't want to continue running DHCP after a machine is ready to serve
traffic. We will only run the DHCP process for a short amount of time if
we can determine that the BMC can reach network services because it was
already correctly configured.
Change-Id: Ie79e0582718af88a4a170b2a77beebfbadd5d0af
Signed-off-by: William A. Kennington III <wak@google.com>
Diffstat (limited to 'meta-google')
4 files changed, 53 insertions, 0 deletions
diff --git a/meta-google/recipes-google/networking/gbmc-bridge.bb b/meta-google/recipes-google/networking/gbmc-bridge.bb index bc3b51367f..57f78ea4ac 100644 --- a/meta-google/recipes-google/networking/gbmc-bridge.bb +++ b/meta-google/recipes-google/networking/gbmc-bridge.bb @@ -22,6 +22,8 @@ SRC_URI += " \ file://gbmc-br-nft.sh \ file://gbmc-br-dhcp.sh \ file://gbmc-br-dhcp.service \ + file://gbmc-br-dhcp-term.sh \ + file://gbmc-br-dhcp-term.service \ " FILES:${PN}:append = " \ @@ -43,6 +45,7 @@ RDEPENDS:${PN}:append = " \ SYSTEMD_SERVICE:${PN} += " \ gbmc-br-ensure-ra.service \ gbmc-br-dhcp.service \ + gbmc-br-dhcp-term.service \ " GBMC_BR_MAC_ADDR ?= "" @@ -101,9 +104,11 @@ do_install() { install -d -m0755 ${D}${libexecdir} install -m0755 ${WORKDIR}/gbmc-br-ensure-ra.sh ${D}${libexecdir}/ install -m0755 ${WORKDIR}/gbmc-br-dhcp.sh ${D}${libexecdir}/ + install -m0755 ${WORKDIR}/gbmc-br-dhcp-term.sh ${D}${libexecdir}/ install -d -m0755 ${D}${systemd_system_unitdir} install -m0644 ${WORKDIR}/gbmc-br-ensure-ra.service ${D}${systemd_system_unitdir}/ install -m0644 ${WORKDIR}/gbmc-br-dhcp.service ${D}${systemd_system_unitdir}/ + install -m0644 ${WORKDIR}/gbmc-br-dhcp-term.service ${D}${systemd_system_unitdir}/ } do_rm_work:prepend() { diff --git a/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-dhcp-term.service b/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-dhcp-term.service new file mode 100644 index 0000000000..1a60545b0b --- /dev/null +++ b/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-dhcp-term.service @@ -0,0 +1,13 @@ +[Unit] +Description=gBMC DHCP Client terminator +After=network.target +StartLimitIntervalSec=10 +StartLimitBurst=3 + +[Service] +Restart=on-failure +RestartSec=5 +ExecStart=/usr/libexec/gbmc-br-dhcp-term.sh + +[Install] +WantedBy=multi-user.target diff --git a/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-dhcp-term.sh b/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-dhcp-term.sh new file mode 100644 index 0000000000..29fbbdeda5 --- /dev/null +++ b/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-dhcp-term.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# Copyright 2022 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. + +# Wait until a well known service is network available +echo "Waiting for network reachability" >&2 +while ! ping -c 1 -W 1 2001:4860:4860::8888 >/dev/null 2>&1; do + sleep 1 +done +wait_min=5 +echo "Network is reachable, waiting $wait_min minutes" >&2 +# Wait 5 minutes for any potential DHCP that hasn't landed yet +sleep $((60 * wait_min)) +# If the DHCP configuration process is running, wait for it to finish +if pid="$(cat /run/gbmc-br-dhcp.pid 2>/dev/null)"; then + echo "DHCP still running ($pid), waiting" >&2 + wait "$pid" +fi +echo "Stopping DHCP processing" >&2 +systemctl stop --no-block gbmc-br-dhcp diff --git a/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-dhcp.sh b/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-dhcp.sh index 1a6c71af1b..19fa7b1010 100644 --- a/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-dhcp.sh +++ b/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-dhcp.sh @@ -37,6 +37,10 @@ gbmc_br_dhcp_run_hooks() { # shellcheck disable=SC1091 source /usr/share/network/lib.sh || exit +# Write out the current PID and cleanup when complete +trap 'rm -f /run/gbmc-br-dhcp.pid' EXIT +echo "$$" >/run/gbmc-br-dhcp.pid + if [ "$1" = bound ]; then # Variable is from the environment via udhcpc6 # shellcheck disable=SC2154 |