peer=$1 ifname=$2 family=$3; shift 3
## Parse the address family.
+case "$family" in
+ INET) ipsz=20 ;;
+ INET6) ipsz=40 ;;
+ *) echo >&2 "$0: unknown address family $family"; exit 1 ;;
+esac
case "$family,$#" in
- INET,1) addr=$1 port=4070 ;;
- INET,2) addr=$1 port=$2 ;;
- INET,*) echo >&2 "$0: bad INET address"; exit 1 ;;
- *) echo >&2 "$0: unknown address family $family"; exit 1 ;;
+ INET,1 | INET6,1) addr=$1 port=4070 ;;
+ INET,2 | INET6,2) addr=$1 port=$2 ;;
+ INET,* | INET6,*) echo >&2 "$0: bad $family address"; exit 1 ;;
+ *) echo >&2 "$0: unknown address family $family"; exit 1 ;;
esac
###--------------------------------------------------------------------------
set -- $l6addr
case $have6,$# in
t,[1-9]*)
+
+ ## If we're configured to set IPv6 addresses then we should ensure that
+ ## they're going to work, even if the default setting for new interfaces
+ ## is to disable IPv6.
+ try sysctl -q net.ipv6.conf."$ifname".disable_ipv6=0
+
+ ## Now add the source and destination addresses.
for a in "$@"; do
try ip addr add "$a" dev "$ifname"
haveaddr6=t
mtu=$P_MTU;;
*)
pathmtu=$(pathmtu "$addr")
- mtu=$(expr "$pathmtu" - 29 - $A_BULK_OVERHEAD)
+ mtu=$(( $pathmtu - $ipsz - 9 - $A_BULK_OVERHEAD ))
;;
esac
try ip link set dev "$ifname" up mtu "$mtu"