]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
gaiconf: /etc/gai.conf configuration helper.
authorYOSHIFUJI Hideaki / 吉藤英明 <yoshfuji@linux-ipv6.org>
Mon, 8 Mar 2010 17:12:53 +0000 (17:12 +0000)
committerStephen Hemminger <stephen.hemminger@vyatta.com>
Mon, 29 Mar 2010 20:59:28 +0000 (13:59 -0700)
This tool reads /etc/gai.conf, configuration for getaddrinfo(3), and
set up kernel parameter.

Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
examples/gaiconf [new file with mode: 0644]

diff --git a/examples/gaiconf b/examples/gaiconf
new file mode 100644 (file)
index 0000000..d75292b
--- /dev/null
@@ -0,0 +1,134 @@
+#!/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
+