ref: cd752a39f8b0b36378800740c0e5915beabfb56d
parent: ab4c0a012f4b57e9a9a2c084097c919a40029380
author: cinap_lenrek <[email protected]>
date: Wed Aug 15 17:39:30 EDT 2018
ipv6 autoconfiguration on ethernet for ip autoconfiguration, setup ipv6 link local addresses and do SLAAC in parallel to DHCP.
--- a/rc/bin/cpurc
+++ b/rc/bin/cpurc
@@ -62,9 +62,13 @@
addr=`{cat $ether/addr}
switch($addr){
case $addrs
- # try /lib/ndb first, then do dhcp
- ip/ipconfig -N ether $ether >[2]/dev/null \
- || ip/ipconfig -h $sysname ether $ether
+ # try /lib/ndb first, then do dhcp/slaac
+ ip/ipconfig -6 ether $ether
+ ip/ipconfig -N ether $ether >[2]/dev/null || @{
+ ip/ipconfig ether $ether ra6 recvra 1 &
+ ip/ipconfig -h $sysname ether $ether &
+ wait
+ }
}
}
}
--- a/rc/bin/inst/configether
+++ b/rc/bin/inst/configether
@@ -8,10 +8,10 @@
echo 'Please choose a method for configuring your ethernet connection.'
echo
echo ' manual - specify IP address, network mask, gateway IP address'
- echo ' dhcp - use DHCP to automatically configure'
+ echo ' automatic - use DHCP and SLAAC to automatically configure'
echo
- prompt -d dhcp 'Configuration method' manual dhcp
+ prompt -d automatic 'Configuration method' manual automatic
ethermethod=$rd
gwaddr=xxx
ipaddr=xxx
@@ -26,11 +26,11 @@
export DNSSERVER
}
}
- export ethermethod gwaddr ipaddr ipmask dhcphost
+ export ethermethod gwaddr ipaddr ipmask
exec ./startether go
case checkdone
- if(! ~ $ethermethod manual dhcp) {
+ if(! ~ $ethermethod manual automatic) {
configether=notdone
export configether
}
--- a/rc/bin/inst/ndbsetup
+++ b/rc/bin/inst/ndbsetup
@@ -7,7 +7,7 @@
switch($1){
case checkready checkdone
- if(~ $#etheraddr 1 && ~ $netisfrom ether && ~ $ethermethod dhcp manual && \
+ if(~ $#etheraddr 1 && ~ $netisfrom ether && ~ $ethermethod automatic manual && \
! grep -s $etheraddr /n/newfs/lib/ndb/local)
ndbsetup=ready
if not
@@ -33,7 +33,7 @@
echo
switch($ethermethod){
- case dhcp
+ case automatic
echo $se
case manual
echo $se 'ip='^$ipaddr 'ipmask='^$ipmask 'ipgw='^$gwaddr
--- a/rc/bin/inst/startether
+++ b/rc/bin/inst/startether
@@ -15,11 +15,16 @@
exit
log starting ethernet $ethermethod config
+ ip/ipconfig -6
switch($ethermethod) {
case manual
ip/ipconfig -g $gwaddr ether $netdev $ipaddr $ipmask >>[2]/srv/log
- case dhcp
- ip/ipconfig >>[2]/srv/log
+ case automatic
+ >>[2]/srv/log @{
+ ip/ipconfig ra6 recva 1 &
+ ip/ipconfig &
+ wait
+ }
}
case checkdone
--- a/rc/bin/termrc
+++ b/rc/bin/termrc
@@ -63,9 +63,13 @@
addr=`{cat $ether/addr}
switch($addr){
case $addrs
- # try /lib/ndb first, then do dhcp
- ip/ipconfig -N ether $ether >[2]/dev/null \
- || ip/ipconfig -h $sysname ether $ether
+ # try /lib/ndb first, then do dhcp/slaac
+ ip/ipconfig -6 ether $ether
+ ip/ipconfig -N ether $ether >[2]/dev/null || @{
+ ip/ipconfig ether $ether ra6 recvra 1 &
+ ip/ipconfig -h $sysname ether $ether &
+ wait
+ }
}
}
}
--- a/sys/src/9/boot/net.rc
+++ b/sys/src/9/boot/net.rc
@@ -15,7 +15,16 @@
}
}
- must ip/ipconfig -p $*
+ if(~ $1 ether && ~ $#* 2) @{
+ ip/ipconfig -6 $*
+ ip/ipconfig $* ra6 recvra 1 &
+ ip/ipconfig -p $* &
+ wait
+ }
+ if not {
+ ip/ipconfig -p $*
+ }
+
if(~ $#fs 0)
fs=`{awk -F'=' '/^[ ]*fs=/{print $2}' /net/ndb}
if(~ $#auth 0)
@@ -33,13 +42,13 @@
}
}
- # set bootstrap authservers for factotum
- if(! ~ $#auth 0){
- grep -v '^[ ]*auth=' /net/ndb >/env/x
- cat /env/x <{echo ' auth='^$auth^'
-'} >/net/ndb
- rm /env/x
- }
+ # publish info in /net/ndb for factotum
+ >> /net/ndb {
+ echo
+ echo 'ipbootinfo='
+ for(i in $fs) echo ' fs='^$i
+ for(i in $auth) echo ' auth='^$i
+ }
}
fn connecttcp{