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
###--------------------------------------------------------------------------
try ip addr add "$a" dev "$ifname"
haveaddr6=t
done
- case ${r6addr+set} in
- set) try ip route add $r6addr proto static dev "$ifname" ;;
- esac
;;
esac
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"
;;
esac
+###--------------------------------------------------------------------------
+### Set the peer IPv6 address if any.
+
+## IPv6 point-to-point links seem broken in Linux. Attach the local and
+## remote addresses by hand.
+set -- $l6addr
+case $have6,$#,${r6addr+set} in
+ t,[1-9]*,set)
+ try ip route add $r6addr proto static dev "$ifname"
+ ;;
+esac
+
###--------------------------------------------------------------------------
### Set up routing.