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