meta-google: gbmc-ncsi-config: Migrate to common RA handler

This gets rid of our bespoke RA handling code and uses the common RA
code for both RA processes on the NCSI port.

Tested: Ran on a NCSI CN and verified that RAs are still parsed and the
addresses / hostname can still be found with the smartnic WA executed.

Change-Id: Ia9667f9b6ada2668f2096abbced6d8571a686e49
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/meta-google/recipes-google/ncsi/files/gbmc-ncsi-ra.sh b/meta-google/recipes-google/ncsi/files/gbmc-ncsi-ra.sh
new file mode 100644
index 0000000..016ec4c
--- /dev/null
+++ b/meta-google/recipes-google/ncsi/files/gbmc-ncsi-ra.sh
@@ -0,0 +1,69 @@
+#!/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.
+
+RA_IF=$1
+IP_OFFSET=1
+# NCSI is known to be closer to the ToR than bridge routes. Prefer over bridge routes.
+ROUTE_METRIC=900
+
+has_bridge=1
+# shellcheck source=meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-lib.sh
+source /usr/share/gbmc-br-lib.sh || has_bridge=
+
+update_rtr() {
+  busctl set-property xyz.openbmc_project.Network /xyz/openbmc_project/network/"$RA_IF" \
+    xyz.openbmc_project.Network.EthernetInterface DefaultGateway6 s "" || true
+
+  default_update_rtr "$@"
+}
+
+ncsi_is_active() {
+  systemctl is-active -q nic-hostless@"$RA_IF".target && return
+  systemctl is-active -q nic-hostful@"$RA_IF".target && return
+  return 1
+}
+
+update_fqdn() {
+  # We only do this for smartNICs (which don't use NCSI)
+  ncsi_is_active && return
+
+  default_update_fqdn "$@"
+}
+
+update_pfx() {
+  local pfx="$1"
+
+  # We only do this for smartNICs (which don't use NCSI)
+  ncsi_is_active && return
+
+  # Don't change anything for an empty prefix
+  [ -z "$pfx" ] && return
+
+  # We no longer need NCSId if we are in this configuration
+  systemctl stop --no-block ncsid@"$RA_IF" || true
+
+  # Save the IP address for the interface
+  if [ -n "$has_bridge" ]; then
+    gbmc_br_set_ip "$1" || true
+    echo "IP $pfx set on $RA_IF" >&2
+  fi
+
+  # DHCP Relay workaround until alternate source port is supported
+  # TODO: Remove this once internal relaying cleanups land
+  gbmc-ncsi-smartnic-wa.sh || true
+}
+
+# shellcheck source=meta-google/recipes-google/networking/gbmc-net-common/gbmc-ra.sh
+source /usr/share/gbmc-ra.sh || exit