blob: c5a3d7f291dc9df9584d0e8287b69b9c0b84d7c9 [file] [log] [blame]
#!/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 "$@"