summaryrefslogtreecommitdiff
path: root/meta-google
diff options
context:
space:
mode:
authorWilliam A. Kennington III <wak@google.com>2022-11-04 00:17:35 +0300
committerWilliam A. Kennington III <wak@google.com>2022-11-18 14:40:08 +0300
commit9f57cee9ed8ab3f949d0f8e164ba971ccb850012 (patch)
tree48b9e879d56ef928239347a8d9c40c7d8201fb32 /meta-google
parent75429298267770d6262e1ef9cd678a42ce1b385a (diff)
downloadopenbmc-9f57cee9ed8ab3f949d0f8e164ba971ccb850012.tar.xz
meta-google: gbmc-ncsi-config: Only impersonate host under NCSI
This adds a flag to the interface based on the presence of the NCSI state machine. Non-NCSI connections will not impersonate the CN to avoid breaking flat network topologies where the BMC and CN share an ethernet channel. Tested: On a machine without an NCSI stack to verify the impersonation record is not present. Also on a machine with NCSI to prove that impersonation is still working. Change-Id: Ifb8048abe443c60a333e7eff7cdc9d063a8c656a 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-alias.service.in12
-rw-r--r--meta-google/recipes-google/ncsi/files/gbmc-ncsi-br-deprecated-ips.sh.in24
-rw-r--r--meta-google/recipes-google/ncsi/gbmc-ncsi-config.bb8
3 files changed, 40 insertions, 4 deletions
diff --git a/meta-google/recipes-google/ncsi/files/gbmc-ncsi-alias.service.in b/meta-google/recipes-google/ncsi/files/gbmc-ncsi-alias.service.in
new file mode 100644
index 0000000000..93ad535890
--- /dev/null
+++ b/meta-google/recipes-google/ncsi/files/gbmc-ncsi-alias.service.in
@@ -0,0 +1,12 @@
+[Unit]
+BindsTo=ncsid@@NCSI_IF@.service
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/usr/bin/ip link set @NCSI_IF@ alias ncsi
+ExecStop=/usr/bin/ip link set @NCSI_IF@ alias ''
+
+[Install]
+WantedBy=nic-hostful@@NCSI_IF@.target
+WantedBy=nic-hostless@@NCSI_IF@.target
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 a1b16caf65..5d6411d1c4 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
@@ -19,11 +19,15 @@ source /usr/share/network/lib.sh || exit
gbmc_ncsi_br_deprecated_ips_init=
gbmc_ncsi_br_deprecated_ips_confip=
gbmc_ncsi_br_deprecated_ips_lastip=
+gbmc_ncsi_br_deprecated_ips_lastncsi=
+gbmc_ncsi_br_deprecated_ips_confncsi=
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" ] || \
+ [ "$gbmc_ncsi_br_deprecated_ips_confncsi" != "$gbmc_ncsi_br_deprecated_ips_lastncsi" ] || return
gbmc_ncsi_br_deprecated_ips_confip="$gbmc_ncsi_br_deprecated_ips_lastip"
+ gbmc_ncsi_br_deprecated_ips_confncsi="$gbmc_ncsi_br_deprecated_ips_lastncsi"
printf 'gBMC NCSI Deprecated Addrs: %s\n' \
"${gbmc_ncsi_br_deprecated_ips_lastip:-(deleted)}" >&2
@@ -46,20 +50,24 @@ gbmc_ncsi_br_deprecated_ips_update() {
fi
pfx_bytes[8]=0
pfx_bytes[9]=0
- local host_pfx="$(ip_bytes_to_str pfx_bytes)"
+ local host_pfx=
+ if [ -n "${gbmc_ncsi_br_deprecated_ips_confncsi}" ]; then
+ # Only impersonate the host if we have an NCSI state machine
+ host_pfx="$(ip_bytes_to_str pfx_bytes)"
+ fi
read -r -d '' contents <<EOF
[Network]
IPv6ProxyNDP=yes
IPv6ProxyNDPAddress=$pfx
IPv6ProxyNDPAddress=$stateless_pfx
-IPv6ProxyNDPAddress=$host_pfx
+${host_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
+ ${host_pfx:+ip6 daddr $host_pfx/64 goto ncsi_legacy_input}
}
chain ncsi_forward {
ip6 saddr != $pfx/76 ip6 daddr $pfx/76 accept
@@ -128,6 +136,14 @@ gbmc_ncsi_br_deprecated_ips_hook() {
gbmc_ncsi_br_deprecated_ips_lastip=
gbmc_ip_monitor_defer
fi
+ elif [ "$change" = 'link' -a "$action" = 'add' -a "$intf" = '@NCSI_IF@' ]; then
+ if ip link show '@NCSI_IF@' | grep -q '^ *alias ncsi$'; then
+ gbmc_ncsi_br_deprecated_ips_lastncsi=1
+ gbmc_ip_monitor_defer
+ else
+ gbmc_ncsi_br_deprecated_ips_lastncsi=
+ gbmc_ip_monitor_defer
+ fi
fi
}
diff --git a/meta-google/recipes-google/ncsi/gbmc-ncsi-config.bb b/meta-google/recipes-google/ncsi/gbmc-ncsi-config.bb
index 364afee58e..3ae1c72980 100644
--- a/meta-google/recipes-google/ncsi/gbmc-ncsi-config.bb
+++ b/meta-google/recipes-google/ncsi/gbmc-ncsi-config.bb
@@ -21,6 +21,7 @@ SRC_URI += " \
file://gbmc-ncsi-br-pub-addr.sh.in \
file://gbmc-ncsi-br-deprecated-ips.sh.in \
file://gbmc-ncsi-set-nicenabled.service.in \
+ file://gbmc-ncsi-alias.service.in \
file://50-gbmc-ncsi-clear-ip.sh.in \
"
@@ -92,6 +93,13 @@ do_install:append() {
install -d -m0755 "$wantdir"
ln -sv ../ncsid@.service "$wantdir"/ncsid@$if_name.service
+ sed "s,@NCSI_IF@,$if_name,g" ${WORKDIR}/gbmc-ncsi-alias.service.in \
+ >${D}${systemd_system_unitdir}/gbmc-ncsi-alias.service
+ install -d -m0755 "${D}${systemd_system_unitdir}/nic-hostless@$if_name.target.wants"
+ ln -sv ../gbmc-ncsi-alias.service "${D}${systemd_system_unitdir}/nic-hostless@$if_name.target.wants"/
+ install -d -m0755 "${D}${systemd_system_unitdir}/nic-hostful@$if_name.target.wants"
+ ln -sv ../gbmc-ncsi-alias.service "${D}${systemd_system_unitdir}/nic-hostful@$if_name.target.wants"/
+
install -m 0644 ${WORKDIR}/gbmc-ncsi-sslh.service ${D}${systemd_system_unitdir}
sed "s,@NCSI_IF@,$if_name,g" ${WORKDIR}/gbmc-ncsi-sslh.socket.in \
>${D}${systemd_system_unitdir}/gbmc-ncsi-sslh.socket