|  | #!/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 "$?" |