> I haven't really tested it very well (in particular, the router-specific
> code is completely untested, because, well I don't really have the 
> ability at the moment).  Comments welcome, or if one of the KAME team 
> members with commit privileges wants to fix it up and/or try to get 
> this code commited, that's fine too.
> 
> Cheers,
> 
> Bruce.

Hi, sorry for delay but I tried it and added some fixes
including change of some variable names to look like somewhat
consistent with IPv4 variables.

Please try if this works in your environment.
Other people's trials are also welcome.

And again, thanks for creating the template. :-)
That was very helpful and I might not have tried to make this
because I am lazy.

Yoshinobu 

--- rc.orig     Tue Feb 15 03:59:38 2000
+++ rc  Sun Feb 13 17:27:21 2000
@@ -191,6 +191,15 @@
        network_pass1
 fi
 
+case ${ipv6_enable} in
+[Yy][Ee][Ss])
+       if [ -r /etc/rc.net6 ]; then
+               . /etc/rc.net6  # We only need to do this once also.
+               net6_pass1
+       fi
+       ;;
+esac
+
 # Mount NFS filesystems.
 echo -n "Mounting NFS file systems"
 mount -a -t nfs
--- defaults/rc.conf.orig       Tue Feb 15 03:59:29 2000
+++ defaults/rc.conf    Tue Feb 15 03:58:15 2000
@@ -184,6 +184,29 @@
 ### Miscellaneous network options: ###
 icmp_bmcastecho="NO"   # respond to broadcast ping packets
 
+### IPv6 options: ###
+ipv6_enable="NO"               # Set to YES to set up for IPv6.
+ipv6_network_interfaces="auto" # List of network interfaces (or "auto").
+ipv6_gateway_enable="NO"       # Set to YES if this host will be a gateway.
+ipv6_router_enable="NO"                # Set to YES to enable an IPv6 routing daemon.
+ipv6_router="/usr/sbin/route6d"        # Name of IPv6 routing daemon.
+ipv6_router_flags=""           # Flags to IPv6 routing daemon.
+#ipv6_router_flags="-l"                # example for route6d with IPv6 site local addr
+#ipv6_network_interfaces="ed0 ep0"                     #examples for router
+#prefix_ed0="fec0:0000:0000:0001 fec0:0000:0000:0002"  #examples for router
+#prefix_ep0="fec0:0000:0000:0003 fec0:0000:0000:0004"  #examples for router
+rtadvd_enable="NO"             # Set to YES to enable an IPv6 Router
+                               # Advertisement daemon
+rtadvd_flags=""
+mroute6d_enable="NO"           # Do IPv6 multicast routing.
+mroute6d="/usr/sbin/pim6dd"    # Name of IPv6 multicast routing daemon.
+mroute6d_flags=""              # Flags to IPv6 multicast routing daemon.
+gifs="NO"                      # List of GIF tunnels (or "NO").
+#gifs="gif0 gif1"              #examples typically for a router
+#gifconfig_gif0="10.1.1.1 10.1.2.1"    #examples typically for a router
+#gifconfig_gif1="10.1.1.2 10.1.2.2"    #examples typically for a router
+defaultiface=""                        # Default output interface for scoped addrs
+
 
 ##############################################################
 ###  System console options  #################################
#! /bin/sh
# $FreeBSD$

# Note that almost all of the user-configurable behavior is no longer in
# this file, but rather in /etc/defaults/rc.conf.  Please check that file
# first before contemplating any changes here.  If you do need to change
# this file for some reason, we would like to know about it.

# IPv6 startup

net6_pass1() {

        echo -n 'Doing IPv6 network setup:'

        if [ X"${ipv6_gateway_enable}" = X"YES" ]; then
        
                #
                # list of interfaces, and prefix for interfaces
                # NOTE: no trailing double colon necessary here!
                #
                case ${ipv6_network_interfaces} in
                [Aa][Uu][Tt][Oo])
                        ipv6_network_interfaces="`ifconfig -l`"
                        ;;
                esac
        else
                #
                # manual configurations - in case ip6router=NO
                # you can configure only single interface, as specification assumes 
that
                # autoconfigured host has single interface only.
                #
                case ${ipv6_network_interfaces} in
                [Aa][Uu][Tt][Oo])
                        ipv6_network_interfaces="`ifconfig -l | sed -e 's/ .*//'`"
                        ;;
                esac
        fi
        
        # tool locations
        prefixconfig=/usr/sbin/prefix
        rtsol=/sbin/rtsol
        gifconfig=/usr/sbin/gifconfig
        route=/sbin/route
        rtadvd=/usr/sbin/rtadvd
        ndp=/usr/sbin/ndp
        
        # just to make sure
        ifconfig lo0 up
        
        #determine the "default interface" used below
        #if [ X"$defaultiface" = X"" ]; then
        #       for i in $ipv6_network_interfaces; do # use 1st interface in the list
        #               defaultiface=$i
        #               break
        #       done
        #fi
        # disallow unicast packets without outgoing scope identifiers.
        # if you instead want to route such packets to a "default" interface,
        # comment out the 1st two lines, and enable the lines after them.
        if [ X"$defaultiface" != X"" ]; then
            $route add -inet6 fe80:: ::1 -prefixlen 10 -interface -ifp $defaultiface 
-cloning
            $route add -inet6 fec0:: ::1 -prefixlen 10 -interface -ifp $defaultiface 
-cloning
        else
            $route add -inet6 fe80:: -prefixlen 10 ::1 -reject
            $route add -inet6 fec0:: -prefixlen 10 ::1 -reject
        fi
        
        # disallow "internal" addresses to appear on the wire
        $route add -inet6 ::ffff:0.0.0.0 -prefixlen 96 ::1 -reject
        $route add -inet6 ::0.0.0.0 -prefixlen 96 ::1 -reject

        if [ X"${ipv6_gateway_enable}" = X"YES" ]; then
                # act as a router
                sysctl -w net.inet6.ip6.forwarding=1
                sysctl -w net.inet6.ip6.accept_rtadv=0
        
                # wait for DAD
                for i in $ipv6_network_interfaces; do
                        ifconfig $i up
                done
                sleep `sysctl net.inet6.ip6.dad_count | awk '{print $NF}'`
                sleep 1
        
                # setting up interfaces
                for i in $ipv6_network_interfaces; do
                        eval prefix=\$prefix_$i
                        if [ X"$prefix" = X"" ]; then
                                continue
                        fi
                        for j in $prefix; do
                                if [ -x $prefixconfig ]; then
                                        $prefixconfig $i $j::
                                else
                                        laddr=`ifconfig $i inet6 | grep 'inet6 fe80:' 
| head -1 | \
                                                awk '{print $2}'`
                                        hostid=`echo $laddr | sed -e 
's/fe80:[0-9a-fA-F]+::/fe80::/' -e 's/fe80:://' -e 's/@.*//'`
                                        address=$j\:$hostid
        
                                        eval hostid_$i=$hostid
                                        eval address_$i=$address
        
                                        ifconfig $i inet6 $address prefixlen 64 alias
                                fi
        
                                # subnet-router anycast address (rfc2373)
                                ifconfig $i inet6 $j:: prefixlen 64 alias anycast
                        done
        
                        ifconfig $i inet6
                done
        
                # again, wait for DAD's completion (for global addrs)
                sleep `sysctl net.inet6.ip6.dad_count | awk '{print $NF}'`
                sleep 1
        
                # gifconfig
                case ${gifs} in
                [Nn][Oo] | '')
                        ;;
                *)
                        for i in $gifs; do
                                eval peers=\$gifconfig_$i
                                if [ X"$peers" = X"" ]; then
                                        continue
                                fi
                                $gifconfig $i $peers
                        done
                        ;;
                esac

                # ipv6_router
                if [ X"${ipv6_router_enable}" = X"YES" -a -x $ipv6_router ]; then
                        $ipv6_router $ipv6_router_flags
                fi

                # rtadvd
                # This should enabled with a great care.
                # You may want to fine-tune /etc/rtadvd.conf.
                if [ X"${rtadvd_enable}" = X"YES" -a -x $rtadvd ]; then
#                       $rtadvd $rtadvd_flags $ipv6_network_interfaces
                        $rtadvd -P "in ipsec 
ah/transport/fec0:0:0:1000::2a0:c9ff:fe84:ebd9-fec0:0:0:1000::1/require" 
$ipv6_network_interfaces
                fi

                # mroute6d
                if [ X"${mroute6d_enable}" = X"YES" -a -x $mroute6d ]; then
                        $mroute6d $mroute6d_flags
                fi
        else
                # act as endhost - automatically configured
                sysctl -w net.inet6.ip6.forwarding=0
                sysctl -w net.inet6.ip6.accept_rtadv=1
        
                ifconfig $ipv6_network_interfaces up
                $rtsol $ipv6_network_interfaces
        
                # install the "default interface" to kernel, which will be used 
                # as the default route when there's no router.
        #       [ -x $ndp ] && $ndp -I $defaultiface
        
                # wait for DAD's completion (for global addrs)
                sleep `sysctl net.inet6.ip6.dad_count | awk '{print $NF}'`
                sleep 1
        fi

        echo '.'

        # Let future generations know we made it.
        #
        net6_pass1_done=YES
}
        

Reply via email to