#!/bin/sh # # Setup address label from /etc/gai.conf # # Written by YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>, 2010. # IP=ip DEFAULT_GAICONF=/etc/gai.conf verbose= debug= function run () { if [ x"$verbose" != x"" ]; then echo "$@" fi if [ x"$debug" = x"" ]; then "$@" fi } function do_load_config () { file=$1; shift flush=1 cat $file | while read command prefix label; do if [ x"$command" = x"#label" ]; then if [ ${flush} = 1 ]; then run ${IP} -6 addrlabel flush flush=0 fi run ${IP} -6 addrlabel add prefix $prefix label $label fi done } function do_list_config () { ${IP} -6 addrlabel list | while read p pfx l lbl; do echo label ${pfx} ${lbl} done } function help () { echo "Usage: $0 [-v] {--list | --config [ ${DEFAULT_GAICONF} ] | --default}" exit 1 } TEMP=`getopt -o c::dlv -l config::,default,list,verbose -n gaiconf -- "$@"` if [ $? != 0 ]; then echo "Terminating..." >&2 exit 1 fi TEMPFILE=`mktemp` eval set -- "$TEMP" while true ; do case "$1" in -c|--config) if [ x"$cmd" != x"" ]; then help fi case "$2" in "") gai_conf="${DEFAULT_GAICONF}" shift 2 ;; *) gai_conf="$2" shift 2 esac cmd=config ;; -d|--default) if [ x"$cmd" != x"" ]; then help fi gai_conf=${TEMPFILE} cmd=config ;; -l|--list) if [ x"$cmd" != x"" ]; then help fi cmd=list shift ;; -v) verbose=1 shift ;; --) shift; break ;; *) echo "Internal error!" >&2 exit 1 ;; esac done case "$cmd" in config) if [ x"$gai_conf" = x"${TEMPFILE}" ]; then sed -e 's/^[[:space:]]*//' <<END_OF_DEFAULT >${TEMPFILE} label ::1/128 0 label ::/0 1 label 2002::/16 2 label ::/96 3 label ::ffff:0:0/96 4 label fec0::/10 5 label fc00::/7 6 label 2001:0::/32 7 END_OF_DEFAULT fi do_load_config "$gai_conf" ;; list) do_list_config ;; *) help ;; esac rm -f "${TEMPFILE}" exit 0