- Fix a bug in ipv6_prefix_IF. It did not work with the 64-bit prefix

notation like 2001:db8:1:1.

- Use eui64 flag in ifconfig(8) instead of network6_getladdr()[*] for
  interface indentifier part.

Suggested by:	ume [*]
MFC after:	3 days
This commit is contained in:
Hiroki Sato 2013-07-18 02:58:24 +00:00
parent 8207f478fc
commit 1c26ccaba0
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=253444

View file

@ -1052,16 +1052,12 @@ ifalias_af_common()
#
ipv6_prefix_hostid_addr_common()
{
local _if _action prefix laddr hostid j address
local _if _action prefix j
_if=$1
_action=$2
prefix=`get_if_var ${_if} ipv6_prefix_IF`
if [ -n "${prefix}" ]; then
laddr=`network6_getladdr ${_if}`
hostid=${laddr#fe80::}
hostid=${hostid%\%*}
for j in ${prefix}; do
# The default prefixlen is 64.
plen=${j#*/}
@ -1071,18 +1067,10 @@ ipv6_prefix_hostid_addr_common()
esac
# Normalize the last part by removing ":"
j=${j%:*}
j=${j%::*}
j=${j%:}
OIFS=$IFS; IFS=":"; set -- $j; nj=$#; IFS=$OIFS
OIFS=$IFS; IFS=":"; set -- $hostid; nh=$#; IFS=$OIFS
if [ $(($nj + $nh)) -eq 8 ]; then
address=$j\:$hostid
else
address=$j\::$hostid
fi
${IFCONFIG_CMD} ${_if} inet6 ${address} \
prefixlen $plen ${_action}
${IFCONFIG_CMD} ${_if} inet6 $j:: \
prefixlen $plen eui64 ${_action}
# if I am a router, add subnet router
# anycast address (RFC 2373).