mirror of
				https://git.proxmox.com/git/mirror_iproute2
				synced 2025-11-03 14:14:16 +00:00 
			
		
		
		
	This tool reads /etc/gai.conf, configuration for getaddrinfo(3), and set up kernel parameter. Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
		
			
				
	
	
		
			135 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/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
 | 
						|
 |