1e47528f3SDavid du Colombier#!/bin/rc 2*588d0145SDavid du Colombier# ipv6on [netdir ndbfile] - configure an interface for ipv6. 3*588d0145SDavid du Colombier# use ipv6 address from ndb if present, 4*588d0145SDavid du Colombier# else do stateless address autoconfiguration (SLAAC). 5e47528f3SDavid du Colombierif (! ~ $#* 0 2 3) { 6*588d0145SDavid du Colombier echo usage: $0 '[netdir ndbfile [obs-gw-v4-name]]' >[1=2] 7e47528f3SDavid du Colombier exit usage 8e47528f3SDavid du Colombier} 9e47528f3SDavid du Colombierrfork e 10*588d0145SDavid du Colombierfn ipq { # attr val rattr 11*588d0145SDavid du Colombier ndb/ipquery $* | sed 's/^[a-z0-9]+=//' 12*588d0145SDavid du Colombier} 13*588d0145SDavid du Colombier 14e47528f3SDavid du Colombierif (~ $#* 0) { 15e47528f3SDavid du Colombier netdir=/net 16e47528f3SDavid du Colombier ndbf=/lib/ndb/local 17e47528f3SDavid du Colombier} 18e47528f3SDavid du Colombierif not { 19e47528f3SDavid du Colombier netdir=$1 20e47528f3SDavid du Colombier ndbf=$2 21e47528f3SDavid du Colombier} 22e47528f3SDavid du Colombierif (~ $netdir /net) { 23e47528f3SDavid du Colombier xsfx=() 24e47528f3SDavid du Colombier xdir=() 25e47528f3SDavid du Colombier} 26e47528f3SDavid du Colombierif not { 27e47528f3SDavid du Colombier xsfx=(-x `{echo $netdir | sed 's;^/net;;'}) 28e47528f3SDavid du Colombier xdir=(-x $netdir) 29e47528f3SDavid du Colombier} 30e47528f3SDavid du Colombier 31edc15dd6SDavid du Colombierfn nonnil { # variable 32edc15dd6SDavid du Colombier if (~ $#$1 0) { 333853f77fSDavid du Colombier echo ipv6on: no ip for $1 >[1=2] 34e47528f3SDavid du Colombier exit no-ip 35e47528f3SDavid du Colombier } 36edc15dd6SDavid du Colombier if (! ~ $#$1 1) { 373853f77fSDavid du Colombier echo ipv6on: multiple ips for $1 >[1=2] 38edc15dd6SDavid du Colombier exit multiple-ips 39edc15dd6SDavid du Colombier } 40e47528f3SDavid du Colombier} 41e47528f3SDavid du Colombier 42e47528f3SDavid du Colombier# 435c88beaeSDavid du Colombier# configure v6 for link-local addresses (fe80::) & multicast (ff02::). 44*588d0145SDavid du Colombier# accept router advertisements, which will contain a default route. 45e47528f3SDavid du Colombier# 46e47528f3SDavid du Colombierif (! ip/ipconfig -6 $xdir ether $netdir/ether?) 47e47528f3SDavid du Colombier exit 'ipconfig -6 failed' 487ef45392SDavid du Colombierip/ipconfig $xdir ether $netdir/ether? ra6 recvra 1 49e47528f3SDavid du Colombier 50*588d0145SDavid du Colombier# lookup any v6 address for me in ndb, else use slaac 51*588d0145SDavid du Colombiermyeth=`{cat $netdir/ether?/addr} 52*588d0145SDavid du Colombiermev6=`{ndb/query -f $ndbf ether $myeth ipv6} 53*588d0145SDavid du Colombierif (~ $#mev6 0 || ~ $mev6 '') 54e47528f3SDavid du Colombier mev6=`{ndb/query -f $ndbf sys $sysname ipv6} 55*588d0145SDavid du Colombierif (~ $#mev6 0 || ~ $mev6 '') { 56*588d0145SDavid du Colombier # slaac: could perhaps get prefix from above RA 57*588d0145SDavid du Colombier ipnet=`{ipq ether $myeth ipnet} 58*588d0145SDavid du Colombier if (~ $#ipnet 0 || ~ $ipnet '') 59*588d0145SDavid du Colombier ipnet=`{ipq sys $sysname ipnet} 60*588d0145SDavid du Colombier nonnil ipnet 61*588d0145SDavid du Colombier v6pfx=`{ipq ipnet $ipnet ipv6pfx} 62*588d0145SDavid du Colombier nonnil v6pfx 63*588d0145SDavid du Colombier mev6=`{ip/linklocal $myeth | sed 's/^fe80:/'$v6pfx'/'} 64e47528f3SDavid du Colombier} 65edc15dd6SDavid du Colombiernonnil mev6 66*588d0145SDavid du Colombier 67e47528f3SDavid du Colombier# 68e47528f3SDavid du Colombier# configure my global v6 addresses 69e47528f3SDavid du Colombier# 70*588d0145SDavid du Colombierv6mask=`{ipq ip $mev6 ipmask} 715c88beaeSDavid du Colombierip/ipconfig $xdir ether $netdir/ether? add $mev6 $v6mask 72e47528f3SDavid du Colombierip/ipconfig $xdir loopback /dev/null add $mev6 /128 73