1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3#
4# add private ipv4 and ipv6 addresses to loopback
5
6readonly V6_INNER='100::a/128'
7readonly V4_INNER='192.168.0.1/32'
8
9if getopts ":s" opt; then
10  readonly SIT_DEV_NAME='sixtofourtest0'
11  readonly V6_SIT='2::/64'
12  readonly V4_SIT='172.17.0.1/32'
13  shift
14fi
15
16fail() {
17  echo "error: $*" 1>&2
18  exit 1
19}
20
21setup() {
22  ip -6 addr add "${V6_INNER}" dev lo || fail 'failed to setup v6 address'
23  ip -4 addr add "${V4_INNER}" dev lo || fail 'failed to setup v4 address'
24
25  if [[ -n "${V6_SIT}" ]]; then
26    ip link add "${SIT_DEV_NAME}" type sit remote any local any \
27	    || fail 'failed to add sit'
28    ip link set dev "${SIT_DEV_NAME}" up \
29	    || fail 'failed to bring sit device up'
30    ip -6 addr add "${V6_SIT}" dev "${SIT_DEV_NAME}" \
31	    || fail 'failed to setup v6 SIT address'
32    ip -4 addr add "${V4_SIT}" dev "${SIT_DEV_NAME}" \
33	    || fail 'failed to setup v4 SIT address'
34  fi
35
36  sleep 2	# avoid race causing bind to fail
37}
38
39cleanup() {
40  if [[ -n "${V6_SIT}" ]]; then
41    ip -4 addr del "${V4_SIT}" dev "${SIT_DEV_NAME}"
42    ip -6 addr del "${V6_SIT}" dev "${SIT_DEV_NAME}"
43    ip link del "${SIT_DEV_NAME}"
44  fi
45
46  ip -4 addr del "${V4_INNER}" dev lo
47  ip -6 addr del "${V6_INNER}" dev lo
48}
49
50trap cleanup EXIT
51
52setup
53"$@"
54exit "$?"
55