From 697af1fcc67388a7cb97c30e80f1fb77570d0077 Mon Sep 17 00:00:00 2001 From: =?utf8?q?YOSHIFUJI=20Hideaki=20/=20=E5=90=89=E8=97=A4=E8=8B=B1?= =?utf8?q?=E6=98=8E?= Date: Mon, 8 Mar 2010 17:12:53 +0000 Subject: [PATCH] gaiconf: /etc/gai.conf configuration helper. This tool reads /etc/gai.conf, configuration for getaddrinfo(3), and set up kernel parameter. Signed-off-by: YOSHIFUJI Hideaki --- examples/gaiconf | 134 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 examples/gaiconf diff --git a/examples/gaiconf b/examples/gaiconf new file mode 100644 index 0000000..d75292b --- /dev/null +++ b/examples/gaiconf @@ -0,0 +1,134 @@ +#!/bin/sh + +# +# Setup address label from /etc/gai.conf +# +# Written by YOSHIFUJI Hideaki , 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:]]*//' <${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 + -- 2.39.2