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# $DragonFly: src/etc/rc.d/network_ipv6,v 1.2 2004/01/27 00:42:45 rob Exp $ 30# 31 32# PROVIDE: network_ipv6 33# REQUIRE: routing 34# KEYWORD: DragonFly 35 36. /etc/rc.subr 37. /etc/network.subr 38 39name="network_ipv6" 40rcvar=`set_rcvar ipv6` 41start_cmd="network_ipv6_start" 42 43network_ipv6_start() 44{ 45 # disallow "internal" addresses to appear on the wire 46 route add -inet6 ::ffff:0.0.0.0 -prefixlen 96 ::1 -reject 47 route add -inet6 ::0.0.0.0 -prefixlen 96 ::1 -reject 48 49 case ${ipv6_network_interfaces} in 50 [Aa][Uu][Tt][Oo]) 51 # Get a list of network interfaces 52 ipv6_network_interfaces="`ifconfig -l`" 53 ;; 54 [Nn][Oo][Nn][Ee]) 55 ipv6_network_interfaces='' 56 ;; 57 esac 58 59 if checkyesno ipv6_gateway_enable; then 60 # act as a router 61 ${SYSCTL_W} net.inet6.ip6.forwarding=1 62 ${SYSCTL_W} net.inet6.ip6.accept_rtadv=0 63 64 # wait for DAD 65 for i in $ipv6_network_interfaces; do 66 ifconfig $i up 67 done 68 sleep `${SYSCTL_N} net.inet6.ip6.dad_count` 69 sleep 1 70 else 71 # act as endhost - start with manual configuration 72 # Setup of net.inet6.ip6.accept_rtadv is done later by 73 # network6_interface_setup. 74 ${SYSCTL_W} net.inet6.ip6.forwarding=0 75 fi 76 77 if [ -n "${ipv6_network_interfaces}" ]; then 78 # Setup the interfaces 79 network6_interface_setup $ipv6_network_interfaces 80 81 # wait for DAD's completion (for global addrs) 82 sleep `${SYSCTL_N} net.inet6.ip6.dad_count` 83 sleep 1 84 fi 85 86 # Filter out interfaces on which IPv6 initialization failed. 87 if checkyesno ipv6_gateway_enable; then 88 ipv6_working_interfaces="" 89 for i in ${ipv6_network_interfaces}; do 90 laddr=`network6_getladdr $i exclude_tentative` 91 case ${laddr} in 92 '') 93 ;; 94 *) 95 ipv6_working_interfaces="$i \ 96 ${ipv6_working_interfaces}" 97 ;; 98 esac 99 done 100 ipv6_network_interfaces=${ipv6_working_interfaces} 101 fi 102 103 # Setup IPv6 to IPv4 mapping 104 network6_stf_setup 105 106 # Install the "default interface" to kernel, which will be used 107 # as the default route when there's no router. 108 network6_default_interface_setup 109 110 # Setup static routes 111 network6_static_routes_setup 112 113 # Setup faith 114 network6_faith_setup 115 116 # Support for IPv4 address tacked onto an IPv6 address 117 if checkyesno ipv6_ipv4mapping; then 118 echo 'IPv4 mapped IPv6 address support=YES' 119 ${SYSCTL_W} net.inet6.ip6.v6only=0 >/dev/null 120 else 121 echo 'IPv4 mapped IPv6 address support=NO' 122 ${SYSCTL_W} net.inet6.ip6.v6only=1 >/dev/null 123 fi 124} 125 126load_rc_config $name 127run_rc_command "$1" 128