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