summaryrefslogtreecommitdiff
path: root/meta-google
diff options
context:
space:
mode:
authorWilliam A. Kennington III <wak@google.com>2022-05-20 19:47:33 +0300
committerWilliam A. Kennington III <wak@google.com>2022-05-27 02:02:20 +0300
commit80a752812ce71d4cb663bc4524436327b8066070 (patch)
treee5a6df0c96ec99dfc459c3f0b892eaa6a2989635 /meta-google
parent9326df82f9966b65bd3f1070bba844d7eb9bd0f8 (diff)
downloadopenbmc-80a752812ce71d4cb663bc4524436327b8066070.tar.xz
meta-google: gbmc-ncsi-config: Fix ND answering without bridge
We want to answer all of the possible BMC addresses for neighbor discovery in cases where the bridge is not present on the BMC image. Change-Id: Id8f0f929bbac2c8526a5ab87b410124357e4bd3d 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.in62
1 files changed, 21 insertions, 41 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 d6bc9eb77c..a1b16caf65 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
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-[ -z "${gbmc_ncsi_br_deprecated_ips_lib-}" ] || return
+[ -n "${gbmc_ncsi_br_deprecated_ips_lib-}" ] && return
source /usr/share/network/lib.sh || exit
@@ -20,41 +20,12 @@ gbmc_ncsi_br_deprecated_ips_init=
gbmc_ncsi_br_deprecated_ips_confip=
gbmc_ncsi_br_deprecated_ips_lastip=
-gbmc_ncsi_br_deprecated_ips_addr_contents() {
- local addr="$1"
-
- # If our address is assigned explicitly, don't mark it deprecated
- local line
- for line in $(grep '^Address=' /etc/systemd/network/*-bmc-@NCSI_IF@.network); do
- # Remove `Address=` on the input line
- local apfx="$(echo "$line" | sed 's,^[^=]*=,,')"
- # ip_pfx_concat is used to normalize the address string for comparison
- [[ "$addr/128" == "$(ip_pfx_concat "$apfx" ::)" ]] && return
- done
-
- cat <<EOF
-[Address]
-Address=$addr/128
-PreferredLifetime=0
-EOF
-}
-
-gbmc_ncsi_br_deprecated_ips_host_contents() {
- local addr="$1"
-
- cat <<EOF
-[Network]
-IPv6ProxyNDP=yes
-IPv6ProxyNDPAddress=$addr
-EOF
-}
-
gbmc_ncsi_br_deprecated_ips_update() {
[ -n "$gbmc_ncsi_br_deprecated_ips_init" ] || return
[ "$gbmc_ncsi_br_deprecated_ips_confip" != "$gbmc_ncsi_br_deprecated_ips_lastip" ] || return
gbmc_ncsi_br_deprecated_ips_confip="$gbmc_ncsi_br_deprecated_ips_lastip"
- printf 'gBMC Bridge NCSI Deprecated Addrs: %s\n' \
+ printf 'gBMC NCSI Deprecated Addrs: %s\n' \
"${gbmc_ncsi_br_deprecated_ips_lastip:-(deleted)}" >&2
local contents=
@@ -66,21 +37,29 @@ gbmc_ncsi_br_deprecated_ips_update() {
local pfx="$(ip_bytes_to_str pfx_bytes)"
(( pfx_bytes[9] &= 0xf0 ))
local stateless_pfx="$(ip_bytes_to_str pfx_bytes)"
- local gbmcbr_mac="$(ip link show gbmcbr | tail -n 1 | awk '{print $2}')"
- local gbmcbr_eui48="$(mac_to_eui48 "$gbmcbr_mac")"
- local stateless_ip="$(ip_pfx_concat "$stateless_pfx/80" "$gbmcbr_eui48")"
- stateless_ip="${stateless_ip%/*}"
+ local stateless_ip=
+ if [ -e /sys/class/net/gbmcbr ]; then
+ local gbmcbr_mac="$(ip link show gbmcbr | tail -n 1 | awk '{print $2}')"
+ local gbmcbr_eui48="$(mac_to_eui48 "$gbmcbr_mac")"
+ stateless_ip="$(ip_pfx_concat "$stateless_pfx/80" "$gbmcbr_eui48")"
+ stateless_ip="${stateless_ip%/*}"
+ fi
pfx_bytes[8]=0
pfx_bytes[9]=0
local host_pfx="$(ip_bytes_to_str pfx_bytes)"
- contents+="$(gbmc_ncsi_br_deprecated_ips_addr_contents "$pfx")"$'\n'
- contents+="$(gbmc_ncsi_br_deprecated_ips_addr_contents "$stateless_pfx")"$'\n'
- contents+="$(gbmc_ncsi_br_deprecated_ips_addr_contents "$stateless_ip")"$'\n'
- contents+="$(gbmc_ncsi_br_deprecated_ips_host_contents "$host_pfx")"$'\n'
+ read -r -d '' contents <<EOF
+[Network]
+IPv6ProxyNDP=yes
+IPv6ProxyNDPAddress=$pfx
+IPv6ProxyNDPAddress=$stateless_pfx
+IPv6ProxyNDPAddress=$host_pfx
+${stateless_ip:+IPv6ProxyNDPAddress=}$stateless_ip
+EOF
read -r -d '' nfcontents <<EOF
table inet filter {
chain ncsi_input {
ip6 saddr != $pfx/76 ip6 daddr $pfx/76 goto ncsi_gbmc_br_pub_input
+ ip6 daddr $host_pfx/64 goto ncsi_legacy_input
}
chain ncsi_forward {
ip6 saddr != $pfx/76 ip6 daddr $pfx/76 accept
@@ -123,8 +102,9 @@ gbmc_ncsi_br_deprecated_ips_hook() {
gbmc_ip_monitor_defer
elif [ "$change" = 'defer' ]; then
gbmc_ncsi_br_deprecated_ips_update
- elif [ "$change" = 'addr' -a "$intf" = 'gbmcbr' ] &&
- [ "$scope" = 'global' -a "$fam" = 'inet6' ]; then
+ elif [ "$change" = 'addr' -a "$scope" = 'global' -a "$fam" = 'inet6' ] &&
+ [ "$intf" = 'gbmcbr' -o "$intf" = '@NCSI_IF@' ] &&
+ [[ "$flags" != *deprecated* ]]; then
local pfx_bytes=()
ip_to_bytes pfx_bytes "$ip" || return
# No ULA Addresses