xref: /aosp_15_r20/external/iproute2/examples/gaiconf (revision de1e4e894b0c224df933550f0afdecc354b238c4)
1*de1e4e89SAndroid Build Coastguard Worker#!/bin/sh
2*de1e4e89SAndroid Build Coastguard Worker
3*de1e4e89SAndroid Build Coastguard Worker#
4*de1e4e89SAndroid Build Coastguard Worker# Setup address label from /etc/gai.conf
5*de1e4e89SAndroid Build Coastguard Worker#
6*de1e4e89SAndroid Build Coastguard Worker# Written by YOSHIFUJI Hideaki <[email protected]>, 2010.
7*de1e4e89SAndroid Build Coastguard Worker#
8*de1e4e89SAndroid Build Coastguard Worker
9*de1e4e89SAndroid Build Coastguard WorkerIP=ip
10*de1e4e89SAndroid Build Coastguard WorkerDEFAULT_GAICONF=/etc/gai.conf
11*de1e4e89SAndroid Build Coastguard Workerverbose=
12*de1e4e89SAndroid Build Coastguard Workerdebug=
13*de1e4e89SAndroid Build Coastguard Worker
14*de1e4e89SAndroid Build Coastguard Workerfunction run ()
15*de1e4e89SAndroid Build Coastguard Worker{
16*de1e4e89SAndroid Build Coastguard Worker	if [ x"$verbose" != x"" ]; then
17*de1e4e89SAndroid Build Coastguard Worker		echo "$@"
18*de1e4e89SAndroid Build Coastguard Worker	fi
19*de1e4e89SAndroid Build Coastguard Worker	if [ x"$debug" = x"" ]; then
20*de1e4e89SAndroid Build Coastguard Worker		"$@"
21*de1e4e89SAndroid Build Coastguard Worker	fi
22*de1e4e89SAndroid Build Coastguard Worker}
23*de1e4e89SAndroid Build Coastguard Worker
24*de1e4e89SAndroid Build Coastguard Workerfunction do_load_config ()
25*de1e4e89SAndroid Build Coastguard Worker{
26*de1e4e89SAndroid Build Coastguard Worker	file=$1; shift
27*de1e4e89SAndroid Build Coastguard Worker	flush=1
28*de1e4e89SAndroid Build Coastguard Worker	cat $file | while read command prefix label; do
29*de1e4e89SAndroid Build Coastguard Worker		if [ x"$command" = x"#label" ]; then
30*de1e4e89SAndroid Build Coastguard Worker			if [ ${flush} = 1 ]; then
31*de1e4e89SAndroid Build Coastguard Worker				run ${IP} -6 addrlabel flush
32*de1e4e89SAndroid Build Coastguard Worker				flush=0
33*de1e4e89SAndroid Build Coastguard Worker			fi
34*de1e4e89SAndroid Build Coastguard Worker			run ${IP} -6 addrlabel add prefix $prefix label $label
35*de1e4e89SAndroid Build Coastguard Worker		fi
36*de1e4e89SAndroid Build Coastguard Worker	done
37*de1e4e89SAndroid Build Coastguard Worker}
38*de1e4e89SAndroid Build Coastguard Worker
39*de1e4e89SAndroid Build Coastguard Workerfunction do_list_config ()
40*de1e4e89SAndroid Build Coastguard Worker{
41*de1e4e89SAndroid Build Coastguard Worker	${IP} -6 addrlabel list | while read p pfx l lbl; do
42*de1e4e89SAndroid Build Coastguard Worker		echo label ${pfx} ${lbl}
43*de1e4e89SAndroid Build Coastguard Worker	done
44*de1e4e89SAndroid Build Coastguard Worker}
45*de1e4e89SAndroid Build Coastguard Worker
46*de1e4e89SAndroid Build Coastguard Workerfunction help ()
47*de1e4e89SAndroid Build Coastguard Worker{
48*de1e4e89SAndroid Build Coastguard Worker	echo "Usage: $0 [-v] {--list | --config [ ${DEFAULT_GAICONF} ] | --default}"
49*de1e4e89SAndroid Build Coastguard Worker	exit 1
50*de1e4e89SAndroid Build Coastguard Worker}
51*de1e4e89SAndroid Build Coastguard Worker
52*de1e4e89SAndroid Build Coastguard WorkerTEMP=`getopt -o c::dlv -l config::,default,list,verbose -n gaiconf -- "$@"`
53*de1e4e89SAndroid Build Coastguard Worker
54*de1e4e89SAndroid Build Coastguard Workerif [ $? != 0 ]; then
55*de1e4e89SAndroid Build Coastguard Worker	echo "Terminating..." >&2
56*de1e4e89SAndroid Build Coastguard Worker	exit 1
57*de1e4e89SAndroid Build Coastguard Workerfi
58*de1e4e89SAndroid Build Coastguard Worker
59*de1e4e89SAndroid Build Coastguard WorkerTEMPFILE=`mktemp`
60*de1e4e89SAndroid Build Coastguard Worker
61*de1e4e89SAndroid Build Coastguard Workereval set -- "$TEMP"
62*de1e4e89SAndroid Build Coastguard Worker
63*de1e4e89SAndroid Build Coastguard Workerwhile true ; do
64*de1e4e89SAndroid Build Coastguard Worker	case "$1" in
65*de1e4e89SAndroid Build Coastguard Worker		-c|--config)
66*de1e4e89SAndroid Build Coastguard Worker			if [ x"$cmd" != x"" ]; then
67*de1e4e89SAndroid Build Coastguard Worker				help
68*de1e4e89SAndroid Build Coastguard Worker			fi
69*de1e4e89SAndroid Build Coastguard Worker			case "$2" in
70*de1e4e89SAndroid Build Coastguard Worker			"")	gai_conf="${DEFAULT_GAICONF}"
71*de1e4e89SAndroid Build Coastguard Worker				shift 2
72*de1e4e89SAndroid Build Coastguard Worker				;;
73*de1e4e89SAndroid Build Coastguard Worker			*)	gai_conf="$2"
74*de1e4e89SAndroid Build Coastguard Worker				shift 2
75*de1e4e89SAndroid Build Coastguard Worker			esac
76*de1e4e89SAndroid Build Coastguard Worker			cmd=config
77*de1e4e89SAndroid Build Coastguard Worker			;;
78*de1e4e89SAndroid Build Coastguard Worker		-d|--default)
79*de1e4e89SAndroid Build Coastguard Worker			if [ x"$cmd" != x"" ]; then
80*de1e4e89SAndroid Build Coastguard Worker				help
81*de1e4e89SAndroid Build Coastguard Worker			fi
82*de1e4e89SAndroid Build Coastguard Worker			gai_conf=${TEMPFILE}
83*de1e4e89SAndroid Build Coastguard Worker			cmd=config
84*de1e4e89SAndroid Build Coastguard Worker			;;
85*de1e4e89SAndroid Build Coastguard Worker		-l|--list)
86*de1e4e89SAndroid Build Coastguard Worker			if [ x"$cmd" != x"" ]; then
87*de1e4e89SAndroid Build Coastguard Worker				help
88*de1e4e89SAndroid Build Coastguard Worker			fi
89*de1e4e89SAndroid Build Coastguard Worker			cmd=list
90*de1e4e89SAndroid Build Coastguard Worker			shift
91*de1e4e89SAndroid Build Coastguard Worker			;;
92*de1e4e89SAndroid Build Coastguard Worker		-v)
93*de1e4e89SAndroid Build Coastguard Worker			verbose=1
94*de1e4e89SAndroid Build Coastguard Worker			shift
95*de1e4e89SAndroid Build Coastguard Worker			;;
96*de1e4e89SAndroid Build Coastguard Worker		--)
97*de1e4e89SAndroid Build Coastguard Worker			shift;
98*de1e4e89SAndroid Build Coastguard Worker			break
99*de1e4e89SAndroid Build Coastguard Worker			;;
100*de1e4e89SAndroid Build Coastguard Worker		*)
101*de1e4e89SAndroid Build Coastguard Worker			echo "Internal error!" >&2
102*de1e4e89SAndroid Build Coastguard Worker			exit 1
103*de1e4e89SAndroid Build Coastguard Worker			;;
104*de1e4e89SAndroid Build Coastguard Worker	esac
105*de1e4e89SAndroid Build Coastguard Workerdone
106*de1e4e89SAndroid Build Coastguard Worker
107*de1e4e89SAndroid Build Coastguard Workercase "$cmd" in
108*de1e4e89SAndroid Build Coastguard Worker	config)
109*de1e4e89SAndroid Build Coastguard Worker		if [ x"$gai_conf" = x"${TEMPFILE}" ]; then
110*de1e4e89SAndroid Build Coastguard Worker			sed -e 's/^[[:space:]]*//' <<END_OF_DEFAULT >${TEMPFILE}
111*de1e4e89SAndroid Build Coastguard Worker				label ::1/128       0
112*de1e4e89SAndroid Build Coastguard Worker				label ::/0          1
113*de1e4e89SAndroid Build Coastguard Worker				label 2002::/16     2
114*de1e4e89SAndroid Build Coastguard Worker				label ::/96         3
115*de1e4e89SAndroid Build Coastguard Worker				label ::ffff:0:0/96 4
116*de1e4e89SAndroid Build Coastguard Worker				label fec0::/10     5
117*de1e4e89SAndroid Build Coastguard Worker				label fc00::/7      6
118*de1e4e89SAndroid Build Coastguard Worker				label 2001:0::/32   7
119*de1e4e89SAndroid Build Coastguard WorkerEND_OF_DEFAULT
120*de1e4e89SAndroid Build Coastguard Worker		fi
121*de1e4e89SAndroid Build Coastguard Worker		do_load_config "$gai_conf"
122*de1e4e89SAndroid Build Coastguard Worker		;;
123*de1e4e89SAndroid Build Coastguard Worker	list)
124*de1e4e89SAndroid Build Coastguard Worker		do_list_config
125*de1e4e89SAndroid Build Coastguard Worker		;;
126*de1e4e89SAndroid Build Coastguard Worker	*)
127*de1e4e89SAndroid Build Coastguard Worker		help
128*de1e4e89SAndroid Build Coastguard Worker		;;
129*de1e4e89SAndroid Build Coastguard Workeresac
130*de1e4e89SAndroid Build Coastguard Worker
131*de1e4e89SAndroid Build Coastguard Workerrm -f "${TEMPFILE}"
132*de1e4e89SAndroid Build Coastguard Worker
133*de1e4e89SAndroid Build Coastguard Workerexit 0
134*de1e4e89SAndroid Build Coastguard Worker
135