xref: /dragonfly/etc/rc.d/network_ipv6 (revision 71126e33)
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