12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #!/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
- }
- }
- #
- # configure v6 for link-local addresses (fe80::) & multicast (ff02::)
- #
- if (! ip/ipconfig -6 $xdir ether $netdir/ether?)
- exit 'ipconfig -6 failed'
- ip/ipconfig $xdir ether $netdir/ether? ra6 recvra 1
- mev6=`{ndb/query -f $ndbf sys $sysname ipv6}
- if (~ $#sysname 0 || ~ $sysname '')
- mev6=`{ndb/query -f $ndbf sys $sysname ip | grep :}
- # mev4=`{ndb/query -f $ndbf sys $sysname ip | grep -v :}
- # for testing
- mylnk=`{ip/linklocal `{cat $netdir/ether?/addr}}
- nonnil mylnk
- if (~ $#gw 1) {
- if (~ $gw [0-9]*.[0-9]*.[0-9]*.[0-9]*)
- gwv4 = $gw
- if (~ $#gwv4 0 || ~ $gwv4 '') # assume namev6 and name
- gwv4=`{ndb/query -f $ndbf sys $gw ip}
- gwv6=`{ndb/query -f $ndbf sys $gw ipv6}
- if (! ~ $#gwv4 0) {
- # 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
- }
- }
- nonnil mev6
- #
- # configure my global v6 addresses
- #
- ip/ipconfig $xdir ether $netdir/ether? add $mev6 /64
- ip/ipconfig $xdir loopback /dev/null add $mev6 /128
- if (~ $#gw 1) {
- if (~ $#gwv6 0 || ~ $gwv6 '')
- gwv6=`{ip/linklocal $gweth}
- nonnil gwv6
- #
- # add default v6 route to v6 addr of v4 gw
- #
- echo add :: /0 $gwv6 >$netdir/iproute # need not be link-local
- }
- exit ''
|