| #!/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 |
| |