| #!/bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| # |
| # add private ipv4 and ipv6 addresses to loopback |
| |
| readonly V6_INNER='100::a/128' |
| readonly V4_INNER='192.168.0.1/32' |
| |
| if getopts ":s" opt; then |
| readonly SIT_DEV_NAME='sixtofourtest0' |
| readonly V6_SIT='2::/64' |
| readonly V4_SIT='172.17.0.1/32' |
| shift |
| fi |
| |
| fail() { |
| echo "error: $*" 1>&2 |
| exit 1 |
| } |
| |
| setup() { |
| ip -6 addr add "${V6_INNER}" dev lo || fail 'failed to setup v6 address' |
| ip -4 addr add "${V4_INNER}" dev lo || fail 'failed to setup v4 address' |
| |
| if [[ -n "${V6_SIT}" ]]; then |
| ip link add "${SIT_DEV_NAME}" type sit remote any local any \ |
| || fail 'failed to add sit' |
| ip link set dev "${SIT_DEV_NAME}" up \ |
| || fail 'failed to bring sit device up' |
| ip -6 addr add "${V6_SIT}" dev "${SIT_DEV_NAME}" \ |
| || fail 'failed to setup v6 SIT address' |
| ip -4 addr add "${V4_SIT}" dev "${SIT_DEV_NAME}" \ |
| || fail 'failed to setup v4 SIT address' |
| fi |
| |
| sleep 2 # avoid race causing bind to fail |
| } |
| |
| cleanup() { |
| if [[ -n "${V6_SIT}" ]]; then |
| ip -4 addr del "${V4_SIT}" dev "${SIT_DEV_NAME}" |
| ip -6 addr del "${V6_SIT}" dev "${SIT_DEV_NAME}" |
| ip link del "${SIT_DEV_NAME}" |
| fi |
| |
| ip -4 addr del "${V4_INNER}" dev lo |
| ip -6 addr del "${V6_INNER}" dev lo |
| } |
| |
| trap cleanup EXIT |
| |
| setup |
| "$@" |
| exit "$?" |