ref: 9b2d3ed37a9d58d8ea4692858b47a9f1b03d7e65
dir: /rc/bin/ipv6on/
#!/bin/rc # ipv6on [netdir ndbfile [gwv4]] - configure an interface for ipv6, # once ipv4 is configured. if (! ~ $#* 0 2 3) { echo usage: $0 '[netdir ndbfile [gw-v4-name]]' >[1=2] exit usage } rfork e if (~ $#* 0) { netdir=/net ndbf=/lib/ndb/local gw=`{ndb/ipquery sys $sysname ipgw | sed 's/ipgw=//'} } if not { netdir=$1 ndbf=$2 if (~ $#* 2) # gw=() gw=`{ndb/ipquery sys $sysname ipgw | sed 's/ipgw=//'} if not gw=$3 } if (~ $netdir /net) { xsfx=() xdir=() } if not { xsfx=(-x `{echo $netdir | sed 's;^/net;;'}) xdir=(-x $netdir) } fn nonnil { # variable if (~ $#$1 0) { echo no ip for $1 exit no-ip } if (! ~ $#$1 1) { echo multiple ips for $1 exit multiple-ips } } devdir=`{awk '/^device/{print $2}' $netdir/ipifc/*/status | grep -v /dev/null} nonnil devdir devtype=pkt if(~ $devdir *ether*) devtype=ether # # configure v6 for link-local addresses (fe80::) & multicast (ff02::) # if (! ip/ipconfig -6 $xdir $devtype $devdir) exit 'ipconfig -6 failed' ip/ipconfig $xdir $devtype $devdir ra6 recvra 1 mev6=`{ndb/query -f $ndbf sys $sysname ipv6 | grep :} if (~ $#mev6 0) mev6=`{ndb/query -mf $ndbf sys $sysname ip | grep :} # mev4=`{ndb/query -f $ndbf sys $sysname ip | grep -v :} # for testing if(~ $devtype ether){ mylnk=`{ip/linklocal `{cat $devdir/addr}} nonnil mylnk } if (~ $#gw 1) { if (~ $gw [0-9]*.[0-9]*.[0-9]*.[0-9]*) gwv4=$gw if (~ $#gwv4 0) gwv4=`{ndb/query -f $ndbf sys $gw ip | grep -v :} if (~ $gw *:*) gwv6=$gw if (~ $#gwv6 0) gwv6=`{ndb/query -f $ndbf sys $gw ipv6 | grep :} if (~ $#gwv6 0) gwv6=`{ndb/query -f $ndbf sys $gw ip | grep :} if (~ $#gwv6 0) { if (~ $#gwv4 1) { # echo ping gw $gwv4... # load arp cache with gw mac ip/ping -qn 3 $netdir/icmp!$gwv4 >/dev/null >[2=1] & sleep 1 # wait for ping gweth=`{grep '* '^$gwv4^' ' $netdir/arp | awk '{print $4}' } nonnil gweth gwlnk=`{ip/linklocal $gweth} nonnil gwlnk gwv6=$gwlnk } } } nonnil mev6 # # configure my global v6 addresses # ip/ipconfig $xdir $devtype $devdir add $mev6 /64 ip/ipconfig $xdir loopback /dev/null add $mev6 /128 if (~ $#gwv6 1) { # # add default v6 route to v6 addr of v4 gw # echo add :: /0 $gwv6 >$netdir/iproute # need not be link-local } exit ''