summaryrefslogtreecommitdiff
path: root/meta-google
diff options
context:
space:
mode:
authorWilliam A. Kennington III <wak@google.com>2022-05-20 20:11:57 +0300
committerWilliam A. Kennington III <wak@google.com>2022-05-27 02:02:20 +0300
commite70461f58cb36a5fcb880f760a8304d598f14ab3 (patch)
treebbe093e9a2f79f5159c6d966be752b22022c012e /meta-google
parent37e6f396313e8b4b9c7827fbdcce259b97a37184 (diff)
downloadopenbmc-e70461f58cb36a5fcb880f760a8304d598f14ab3.tar.xz
meta-google: gbmc-bridge: Conditionally advertise default route
We only want to advertise that we have a default route if we have an external (non-bridge) interface that has a default route. This disambiguates routes on the internal machine network to avoid blackholes. Change-Id: I4059ddf0f74a0b15ca3f93f096b79415a851d3f7 Signed-off-by: William A. Kennington III <wak@google.com>
Diffstat (limited to 'meta-google')
-rw-r--r--meta-google/recipes-google/networking/gbmc-bridge/-bmc-gbmcbr.network.in2
-rw-r--r--meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-gw-src.sh33
2 files changed, 33 insertions, 2 deletions
diff --git a/meta-google/recipes-google/networking/gbmc-bridge/-bmc-gbmcbr.network.in b/meta-google/recipes-google/networking/gbmc-bridge/-bmc-gbmcbr.network.in
index 09ef620351..a2bfc0da4c 100644
--- a/meta-google/recipes-google/networking/gbmc-bridge/-bmc-gbmcbr.network.in
+++ b/meta-google/recipes-google/networking/gbmc-bridge/-bmc-gbmcbr.network.in
@@ -11,4 +11,4 @@ IPv6PrefixDelegation=yes
[IPv6AcceptRA]
DHCPv6Client=false
[IPv6PrefixDelegation]
-RouterLifetimeSec=30
+RouterLifetimeSec=0
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 cfe993f28e..9e01d4a6f9 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
@@ -12,12 +12,41 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-[ -z "${gbmc_br_gw_src_lib-}" ] || return
+[ -n "${gbmc_br_gw_src_lib-}" ] && return
source /usr/share/network/lib.sh || exit
gbmc_br_gw_src_ip=
declare -A gbmc_br_gw_src_routes=()
+gbmc_br_gw_defgw=
+
+gbmc_br_set_router() {
+ local defgw=
+ local route
+ for route in "${!gbmc_br_gw_src_routes[@]}"; do
+ if [[ "$route" != *' dev gbmcbr '* ]]; then
+ defgw=1
+ break
+ fi
+ done
+ [ "$defgw" = "$gbmc_br_gw_defgw" ] && return
+ gbmc_br_gw_defgw="$defgw"
+
+ local files=(/run/systemd/network/{00,}-bmc-gbmcbr.network.d/50-defgw.conf)
+ if [ -n "$defgw" ]; then
+ local file
+ for file in "${files[@]}"; do
+ mkdir -p "$(dirname "$file")"
+ printf '[IPv6PrefixDelegation]\nRouterLifetimeSec=30\n' >"$file"
+ done
+ else
+ rm -f "${files[@]}"
+ fi
+
+ if [ "$(systemctl is-active systemd-networkd)" != 'inactive' ]; then
+ networkctl reload && networkctl reconfigure gbmcbr
+ fi
+}
gbmc_br_gw_src_update() {
[ -n "$gbmc_br_gw_src_ip" ] || return
@@ -42,9 +71,11 @@ gbmc_br_gw_src_hook() {
if [ "$action" = 'add' -a -z "${gbmc_br_gw_src_routes["$route"]}" ]; then
gbmc_br_gw_src_routes["$route"]=1
gbmc_br_gw_src_update
+ gbmc_br_set_router
elif [ "$action" = 'del' -a -n "${gbmc_br_gw_src_routes["$route"]}" ]; then
unset 'gbmc_br_gw_src_routes[$route]'
gbmc_br_gw_src_update
+ gbmc_br_set_router
fi
# Match only global IP addresses on the bridge that match the BMC stateless
# prefix (<mpfx>:fd00:). So 2002:af4:3480:2248:fd00:6345:3069:9186 would be