ncsid: Import from gBMC
This is the initial code drop from gBMC.
Google-Bug-Id: 179618516
Upstream: 1e71af914bc8c54d8b91d0a1cf377e2696713c2f
Change-Id: Ic653e8271dacd205e04f2bc713071ef2ec5936a4
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/ncsid/src/ncsid_udhcpc6.script b/ncsid/src/ncsid_udhcpc6.script
new file mode 100644
index 0000000..c5a3d7f
--- /dev/null
+++ b/ncsid/src/ncsid_udhcpc6.script
@@ -0,0 +1,62 @@
+#!/bin/bash
+source "$(dirname "${BASH_SOURCE[0]}")"/ncsid_lib.sh
+
+DiscoverRouter6() {
+ local netdev="$1"
+
+ local output
+ local st=0
+ output="$(RunInterruptible rdisc6 -1 -r 5 -w 1000 -n "$netdev")" || st=$?
+ if (( st != 0 )); then
+ echo "rdisc6 failed with: " >&2
+ echo "$output" >&2
+ return $st
+ fi
+
+ local ip="$(echo "$output" | grep 'from' | awk '{print $2}')"
+ local mac="$(echo "$output" | grep 'Source link-layer' | ParseMACFromLine)"
+ printf '{"router_ip":"%s","router_mac":"%s"}\n' "$ip" "$mac"
+}
+
+HandleDHCP6() {
+ local op="$1"
+
+ if [ "$op" = "bound" ]; then
+ echo "INTF: $interface" >&2
+ echo "IP: $ipv6/128" >&2
+
+ local disc
+ if ! disc="$(DiscoverRouter6 "$interface")"; then
+ echo "Failed to discover router" >&2
+ return 1
+ fi
+ local vars
+ vars="$(echo "$disc" | JSONToVars)" || return
+ eval "$vars" || return
+ echo "GW: $router_ip" >&2
+ echo "GW_MAC: $router_mac" >&2
+
+ SuppressTerm
+ local service='xyz.openbmc_project.Network'
+ local rc=0
+ UpdateIP "$service" "$interface" "$ipv6" '128' && \
+ UpdateGateway "$service" "$router_ip" && \
+ UpdateNeighbor "$service" "$interface" "$router_ip" "$router_mac" || \
+ rc=$?
+ UnsuppressTerm
+ touch /run/dhcp6.done
+ return $rc
+ fi
+}
+
+Main() {
+ set -o nounset
+ set -o errexit
+ set -o pipefail
+
+ InitTerm
+ HandleDHCP6 "$@"
+}
+
+return 0 2>/dev/null
+Main "$@"