#!/bin/bash
fail() { echo "$@" 1>&2; exit 1; }
IFACE="eth0"
ADDR="169.254.169.10/24"
URL="http://169.254.169.254/"
mode=${1:-link-local}
DHCP_ADDR=$(ip addr show eth0 | awk '$1 == "inet" { print $2 }') ||
fail "empty dhcp addr"
run() { echo "$" "$@" 1>&2; "$@"; }
cleanup() {
run ifup "$IFACE"
}
case "$mode" in
addr|link-local) :;;
*) fail "mode must be 'addr' or 'link-local'";;
esac
# not root, become root.
[ "$(id -u)" = "0" ] || exec sudo "$0" "$@"
trap cleanup EXIT
if [ "$mode" != "link-local" ]; then
ADDR="${DHCP_ADDR}"
exroute="169.254.169.254/32 dev ${IFACE}"
fi
echo "mode=$mode DHCP_ADDR=${DHCP_ADDR} ADDR=${ADDR} IFACE=${IFACE}"
echo "exroute=$exroute"
run ifdown "$IFACE"
run ip addr add "$ADDR" dev "$IFACE"
run ip link set dev "$IFACE" up
[ -z "$exroute" ] || run ip route add ${exroute}
run wget "$URL" --timeout=2 -O - --tries=2
[ -z "$exroute" ] || run ip route del ${exroute}
run ip addr flush dev "$IFACE"
run ip link set dev "$IFACE" down