1#!/bin/sh 2# 3# Copyright (c) 2000 The KAME Project 4# All rights reserved. 5# 6# Redistribution and use in source and binary forms, with or without 7# modification, are permitted provided that the following conditions 8# are met: 9# 1. Redistributions of source code must retain the above copyright 10# notice, this list of conditions and the following disclaimer. 11# 2. Redistributions in binary form must reproduce the above copyright 12# notice, this list of conditions and the following disclaimer in the 13# documentation and/or other materials provided with the distribution. 14# 15# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25# SUCH DAMAGE. 26# 27# $FreeBSD: src/etc/rc.d/network_ipv6,v 1.35 2003/06/29 05:15:57 mtm Exp $ 28# From: src/etc/rc.network6,v 1.29 2002/04/06 15:15:43 29# 30 31# PROVIDE: network_ipv6 32# REQUIRE: ip6addrctl routing 33# BEFORE: NETWORKING 34 35. /etc/rc.subr 36. /etc/network.subr 37 38name="network_ipv6" 39rcvar=`set_rcvar ipv6` 40start_cmd="network_ipv6_start" 41 42network_ipv6_start() 43{ 44 # disallow "internal" addresses to appear on the wire 45 route add -inet6 ::ffff:0.0.0.0 -prefixlen 96 ::1 -reject 46 route add -inet6 ::0.0.0.0 -prefixlen 96 ::1 -reject 47 48 case ${ipv6_network_interfaces} in 49 [Aa][Uu][Tt][Oo]) 50 # Get a list of network interfaces 51 ipv6_network_interfaces="`ifconfig -l`" 52 ;; 53 [Nn][Oo][Nn][Ee]) 54 ipv6_network_interfaces='' 55 ;; 56 esac 57 58 if checkyesno ipv6_gateway_enable; then 59 # act as a router 60 ${SYSCTL_W} net.inet6.ip6.forwarding=1 61 ${SYSCTL_W} net.inet6.ip6.accept_rtadv=0 62 63 # wait for DAD 64 for i in $ipv6_network_interfaces; do 65 ifconfig $i up 66 done 67 sleep `${SYSCTL_N} net.inet6.ip6.dad_count` 68 sleep 1 69 else 70 # act as endhost - start with manual configuration 71 # Setup of net.inet6.ip6.accept_rtadv is done later by 72 # network6_interface_setup. 73 ${SYSCTL_W} net.inet6.ip6.forwarding=0 74 fi 75 76 if [ -n "${ipv6_network_interfaces}" ]; then 77 # Setup the interfaces 78 network6_interface_setup $ipv6_network_interfaces 79 80 # wait for DAD's completion (for global addrs) 81 sleep `${SYSCTL_N} net.inet6.ip6.dad_count` 82 sleep 1 83 fi 84 85 # Filter out interfaces on which IPv6 initialization failed. 86 if checkyesno ipv6_gateway_enable; then 87 ipv6_working_interfaces="" 88 for i in ${ipv6_network_interfaces}; do 89 laddr=`network6_getladdr $i exclude_tentative` 90 case ${laddr} in 91 '') 92 ;; 93 *) 94 ipv6_working_interfaces="$i \ 95 ${ipv6_working_interfaces}" 96 ;; 97 esac 98 done 99 ipv6_network_interfaces=${ipv6_working_interfaces} 100 fi 101 102 # Setup IPv6 to IPv4 mapping 103 network6_stf_setup 104 105 # Install the "default interface" to kernel, which will be used 106 # as the default route when there's no router. 107 network6_default_interface_setup 108 109 # Setup static routes 110 network6_static_routes_setup 111} 112 113load_rc_config $name 114run_rc_command "$1" 115