xref: /freebsd/libexec/rc/rc.d/routing (revision 0696600c41600d80bcd993bfd8e675d0ae6951fe)
1*0696600cSBjoern A. Zeeb#!/bin/sh
2*0696600cSBjoern A. Zeeb#
3*0696600cSBjoern A. Zeeb# Configure routing and miscellaneous network tunables
4*0696600cSBjoern A. Zeeb#
5*0696600cSBjoern A. Zeeb# $FreeBSD$
6*0696600cSBjoern A. Zeeb#
7*0696600cSBjoern A. Zeeb
8*0696600cSBjoern A. Zeeb# PROVIDE: routing
9*0696600cSBjoern A. Zeeb# REQUIRE: netif ppp stf
10*0696600cSBjoern A. Zeeb# KEYWORD: nojailvnet
11*0696600cSBjoern A. Zeeb
12*0696600cSBjoern A. Zeeb. /etc/rc.subr
13*0696600cSBjoern A. Zeeb. /etc/network.subr
14*0696600cSBjoern A. Zeeb
15*0696600cSBjoern A. Zeebname="routing"
16*0696600cSBjoern A. Zeebdesc="Routing setup"
17*0696600cSBjoern A. Zeebstart_cmd="routing_start doall"
18*0696600cSBjoern A. Zeebstop_cmd="routing_stop"
19*0696600cSBjoern A. Zeebextra_commands="options static"
20*0696600cSBjoern A. Zeebstatic_cmd="routing_start static"
21*0696600cSBjoern A. Zeeboptions_cmd="routing_start options"
22*0696600cSBjoern A. Zeeb
23*0696600cSBjoern A. ZeebROUTE_CMD="/sbin/route"
24*0696600cSBjoern A. Zeeb
25*0696600cSBjoern A. Zeebrouting_start()
26*0696600cSBjoern A. Zeeb{
27*0696600cSBjoern A. Zeeb	local _cmd _af _if _a _ret
28*0696600cSBjoern A. Zeeb	_cmd=$1
29*0696600cSBjoern A. Zeeb	_af=$2
30*0696600cSBjoern A. Zeeb	_if=$3
31*0696600cSBjoern A. Zeeb	_ret=0
32*0696600cSBjoern A. Zeeb
33*0696600cSBjoern A. Zeeb	case $_if in
34*0696600cSBjoern A. Zeeb	""|[Aa][Ll][Ll]|[Aa][Nn][Yy])	_if="" ;;
35*0696600cSBjoern A. Zeeb	esac
36*0696600cSBjoern A. Zeeb
37*0696600cSBjoern A. Zeeb	case $_af in
38*0696600cSBjoern A. Zeeb	""|[Aa][Ll][Ll]|[Aa][Nn][Yy])
39*0696600cSBjoern A. Zeeb		for _a in inet inet6; do
40*0696600cSBjoern A. Zeeb			afexists $_a || continue
41*0696600cSBjoern A. Zeeb			setroutes $_cmd $_a $_if || _ret=1
42*0696600cSBjoern A. Zeeb		done
43*0696600cSBjoern A. Zeeb	;;
44*0696600cSBjoern A. Zeeb	*)
45*0696600cSBjoern A. Zeeb		if afexists $_af; then
46*0696600cSBjoern A. Zeeb			setroutes $_cmd $_af $_if || _ret=1
47*0696600cSBjoern A. Zeeb		else
48*0696600cSBjoern A. Zeeb			err 1 "Unsupported address family: $_af."
49*0696600cSBjoern A. Zeeb		fi
50*0696600cSBjoern A. Zeeb	;;
51*0696600cSBjoern A. Zeeb	esac
52*0696600cSBjoern A. Zeeb
53*0696600cSBjoern A. Zeeb	return $_ret
54*0696600cSBjoern A. Zeeb}
55*0696600cSBjoern A. Zeeb
56*0696600cSBjoern A. Zeebrouting_stop()
57*0696600cSBjoern A. Zeeb{
58*0696600cSBjoern A. Zeeb	local _af _if _a
59*0696600cSBjoern A. Zeeb	_af=$1
60*0696600cSBjoern A. Zeeb	_if=$2
61*0696600cSBjoern A. Zeeb
62*0696600cSBjoern A. Zeeb	case $_if in
63*0696600cSBjoern A. Zeeb	""|[Aa][Ll][Ll]|[Aa][Nn][Yy])	_if="" ;;
64*0696600cSBjoern A. Zeeb	esac
65*0696600cSBjoern A. Zeeb
66*0696600cSBjoern A. Zeeb	case $_af in
67*0696600cSBjoern A. Zeeb	""|[Aa][Ll][Ll]|[Aa][Nn][Yy])
68*0696600cSBjoern A. Zeeb		for _a in inet inet6; do
69*0696600cSBjoern A. Zeeb			afexists $_a || continue
70*0696600cSBjoern A. Zeeb			eval static_${_a} delete $_if
71*0696600cSBjoern A. Zeeb			# When $_if is specified, do not flush routes.
72*0696600cSBjoern A. Zeeb			if ! [ -n "$_if" ]; then
73*0696600cSBjoern A. Zeeb				eval routing_stop_${_a}
74*0696600cSBjoern A. Zeeb			fi
75*0696600cSBjoern A. Zeeb		done
76*0696600cSBjoern A. Zeeb	;;
77*0696600cSBjoern A. Zeeb	*)
78*0696600cSBjoern A. Zeeb		if afexists $_af; then
79*0696600cSBjoern A. Zeeb			eval static_${_af} delete $_if
80*0696600cSBjoern A. Zeeb			# When $_if is specified, do not flush routes.
81*0696600cSBjoern A. Zeeb			if ! [ -n "$_if" ]; then
82*0696600cSBjoern A. Zeeb				eval routing_stop_${_af}
83*0696600cSBjoern A. Zeeb			fi
84*0696600cSBjoern A. Zeeb		else
85*0696600cSBjoern A. Zeeb			err 1 "Unsupported address family: $_af."
86*0696600cSBjoern A. Zeeb		fi
87*0696600cSBjoern A. Zeeb	;;
88*0696600cSBjoern A. Zeeb	esac
89*0696600cSBjoern A. Zeeb}
90*0696600cSBjoern A. Zeeb
91*0696600cSBjoern A. Zeebsetroutes()
92*0696600cSBjoern A. Zeeb{
93*0696600cSBjoern A. Zeeb	local _ret
94*0696600cSBjoern A. Zeeb	_ret=0
95*0696600cSBjoern A. Zeeb	case $1 in
96*0696600cSBjoern A. Zeeb	static)
97*0696600cSBjoern A. Zeeb		static_$2 add $3
98*0696600cSBjoern A. Zeeb		_ret=$?
99*0696600cSBjoern A. Zeeb		;;
100*0696600cSBjoern A. Zeeb	options)
101*0696600cSBjoern A. Zeeb		options_$2
102*0696600cSBjoern A. Zeeb		;;
103*0696600cSBjoern A. Zeeb	doall)
104*0696600cSBjoern A. Zeeb		static_$2 add $3
105*0696600cSBjoern A. Zeeb		_ret=$?
106*0696600cSBjoern A. Zeeb		options_$2
107*0696600cSBjoern A. Zeeb		;;
108*0696600cSBjoern A. Zeeb	esac
109*0696600cSBjoern A. Zeeb	return $_ret
110*0696600cSBjoern A. Zeeb}
111*0696600cSBjoern A. Zeeb
112*0696600cSBjoern A. Zeebrouting_stop_inet()
113*0696600cSBjoern A. Zeeb{
114*0696600cSBjoern A. Zeeb	${ROUTE_CMD} -n flush -inet
115*0696600cSBjoern A. Zeeb}
116*0696600cSBjoern A. Zeeb
117*0696600cSBjoern A. Zeebrouting_stop_inet6()
118*0696600cSBjoern A. Zeeb{
119*0696600cSBjoern A. Zeeb	local i
120*0696600cSBjoern A. Zeeb
121*0696600cSBjoern A. Zeeb	${ROUTE_CMD} -n flush -inet6
122*0696600cSBjoern A. Zeeb	for i in `list_net_interfaces`; do
123*0696600cSBjoern A. Zeeb		if ipv6if $i; then
124*0696600cSBjoern A. Zeeb			ifconfig $i inet6 -defaultif
125*0696600cSBjoern A. Zeeb		fi
126*0696600cSBjoern A. Zeeb	done
127*0696600cSBjoern A. Zeeb}
128*0696600cSBjoern A. Zeeb
129*0696600cSBjoern A. Zeebget_fibmod()
130*0696600cSBjoern A. Zeeb{
131*0696600cSBjoern A. Zeeb	local _fibs
132*0696600cSBjoern A. Zeeb
133*0696600cSBjoern A. Zeeb	_fibs=$((`${SYSCTL_N} net.fibs` - 1))
134*0696600cSBjoern A. Zeeb	if [ ${_fibs} -gt 0 ]; then
135*0696600cSBjoern A. Zeeb		echo "-fib 0-${_fibs}"
136*0696600cSBjoern A. Zeeb	else
137*0696600cSBjoern A. Zeeb		echo
138*0696600cSBjoern A. Zeeb	fi
139*0696600cSBjoern A. Zeeb}
140*0696600cSBjoern A. Zeeb
141*0696600cSBjoern A. Zeebstatic_inet()
142*0696600cSBjoern A. Zeeb{
143*0696600cSBjoern A. Zeeb	local _action _if _skip _fibmod
144*0696600cSBjoern A. Zeeb	_action=$1
145*0696600cSBjoern A. Zeeb	_if=$2
146*0696600cSBjoern A. Zeeb
147*0696600cSBjoern A. Zeeb	_fibmod=`get_fibmod`
148*0696600cSBjoern A. Zeeb
149*0696600cSBjoern A. Zeeb	# Provide loopback route in all routing tables.  This has to come
150*0696600cSBjoern A. Zeeb	# first so that any following routes can be added.
151*0696600cSBjoern A. Zeeb	static_routes="_loopback ${static_routes}"
152*0696600cSBjoern A. Zeeb	route__loopback="-inet 127.0.0.1 -iface lo0 ${_fibmod}"
153*0696600cSBjoern A. Zeeb
154*0696600cSBjoern A. Zeeb	# Add default route.
155*0696600cSBjoern A. Zeeb	case ${defaultrouter} in
156*0696600cSBjoern A. Zeeb	[Nn][Oo] | '')
157*0696600cSBjoern A. Zeeb		;;
158*0696600cSBjoern A. Zeeb	*)
159*0696600cSBjoern A. Zeeb		static_routes="${static_routes} _default"
160*0696600cSBjoern A. Zeeb		route__default="default ${defaultrouter}"
161*0696600cSBjoern A. Zeeb		;;
162*0696600cSBjoern A. Zeeb	esac
163*0696600cSBjoern A. Zeeb
164*0696600cSBjoern A. Zeeb	# Install configured routes.
165*0696600cSBjoern A. Zeeb	if [ -n "${static_routes}" ]; then
166*0696600cSBjoern A. Zeeb		for i in ${static_routes}; do
167*0696600cSBjoern A. Zeeb			_skip=0
168*0696600cSBjoern A. Zeeb			if [ -n "$_if" ]; then
169*0696600cSBjoern A. Zeeb				case $i in
170*0696600cSBjoern A. Zeeb				*:$_if)	;;
171*0696600cSBjoern A. Zeeb				*)	_skip=1 ;;
172*0696600cSBjoern A. Zeeb				esac
173*0696600cSBjoern A. Zeeb			fi
174*0696600cSBjoern A. Zeeb			if [ $_skip = 0 ]; then
175*0696600cSBjoern A. Zeeb				route_args=`get_if_var ${i%:*} route_IF`
176*0696600cSBjoern A. Zeeb				if [ -n "$route_args" ]; then
177*0696600cSBjoern A. Zeeb					${ROUTE_CMD} ${_action} ${route_args}
178*0696600cSBjoern A. Zeeb				else
179*0696600cSBjoern A. Zeeb					warn "route_${i%:*} not found."
180*0696600cSBjoern A. Zeeb				fi
181*0696600cSBjoern A. Zeeb			fi
182*0696600cSBjoern A. Zeeb		done
183*0696600cSBjoern A. Zeeb	fi
184*0696600cSBjoern A. Zeeb}
185*0696600cSBjoern A. Zeeb
186*0696600cSBjoern A. Zeebstatic_inet6()
187*0696600cSBjoern A. Zeeb{
188*0696600cSBjoern A. Zeeb	local _action _if _skip fibmod allfibs
189*0696600cSBjoern A. Zeeb	_action=$1
190*0696600cSBjoern A. Zeeb	_if=$2
191*0696600cSBjoern A. Zeeb
192*0696600cSBjoern A. Zeeb	fibmod=`get_fibmod`
193*0696600cSBjoern A. Zeeb
194*0696600cSBjoern A. Zeeb	# Add pre-defined static routes first.
195*0696600cSBjoern A. Zeeb	ipv6_static_routes="_v4mapped _v4compat ${ipv6_static_routes}"
196*0696600cSBjoern A. Zeeb	ipv6_static_routes="_lla _llma ${ipv6_static_routes}"
197*0696600cSBjoern A. Zeeb	ipv6_static_routes="_loopback ${ipv6_static_routes}"
198*0696600cSBjoern A. Zeeb
199*0696600cSBjoern A. Zeeb	# disallow "internal" addresses to appear on the wire
200*0696600cSBjoern A. Zeeb	ipv6_route__v4mapped="::ffff:0.0.0.0 -prefixlen 96 ::1 -reject ${fibmod}"
201*0696600cSBjoern A. Zeeb	ipv6_route__v4compat="::0.0.0.0 -prefixlen 96 ::1 -reject ${fibmod}"
202*0696600cSBjoern A. Zeeb
203*0696600cSBjoern A. Zeeb	# Create a loopback route in every fib
204*0696600cSBjoern A. Zeeb	ipv6_route__loopback="::1 -prefixlen 128 -iface lo0 ${fibmod}"
205*0696600cSBjoern A. Zeeb
206*0696600cSBjoern A. Zeeb	# Disallow link-local unicast packets without outgoing scope
207*0696600cSBjoern A. Zeeb	# identifiers.  However, if you set "ipv6_default_interface",
208*0696600cSBjoern A. Zeeb	# for the host case, you will allow to omit the identifiers.
209*0696600cSBjoern A. Zeeb	# Under this configuration, the packets will go to the default
210*0696600cSBjoern A. Zeeb	# interface.
211*0696600cSBjoern A. Zeeb	ipv6_route__lla="fe80:: -prefixlen 10 ::1 -reject ${fibmod}"
212*0696600cSBjoern A. Zeeb	ipv6_route__llma="ff02:: -prefixlen 16 ::1 -reject ${fibmod}"
213*0696600cSBjoern A. Zeeb
214*0696600cSBjoern A. Zeeb	# Add default route.
215*0696600cSBjoern A. Zeeb	case ${ipv6_defaultrouter} in
216*0696600cSBjoern A. Zeeb	[Nn][Oo] | '')
217*0696600cSBjoern A. Zeeb		;;
218*0696600cSBjoern A. Zeeb	*)
219*0696600cSBjoern A. Zeeb		ipv6_static_routes="${ipv6_static_routes} _default"
220*0696600cSBjoern A. Zeeb		ipv6_route__default="default ${ipv6_defaultrouter}"
221*0696600cSBjoern A. Zeeb		;;
222*0696600cSBjoern A. Zeeb	esac
223*0696600cSBjoern A. Zeeb
224*0696600cSBjoern A. Zeeb	# Install configured routes.
225*0696600cSBjoern A. Zeeb	if [ -n "${ipv6_static_routes}" ]; then
226*0696600cSBjoern A. Zeeb		for i in ${ipv6_static_routes}; do
227*0696600cSBjoern A. Zeeb			_skip=0
228*0696600cSBjoern A. Zeeb			if [ -n "$_if" ]; then
229*0696600cSBjoern A. Zeeb				case $i in
230*0696600cSBjoern A. Zeeb				*:$_if)	;;
231*0696600cSBjoern A. Zeeb				*)	_skip=1 ;;
232*0696600cSBjoern A. Zeeb				esac
233*0696600cSBjoern A. Zeeb			fi
234*0696600cSBjoern A. Zeeb			if [ $_skip = 0 ]; then
235*0696600cSBjoern A. Zeeb				ipv6_route_args=`get_if_var ${i%:*} ipv6_route_IF`
236*0696600cSBjoern A. Zeeb				if [ -n "$ipv6_route_args" ]; then
237*0696600cSBjoern A. Zeeb					${ROUTE_CMD} ${_action} \
238*0696600cSBjoern A. Zeeb						-inet6 ${ipv6_route_args}
239*0696600cSBjoern A. Zeeb				else
240*0696600cSBjoern A. Zeeb					warn "route_${i%:*} not found"
241*0696600cSBjoern A. Zeeb				fi
242*0696600cSBjoern A. Zeeb			fi
243*0696600cSBjoern A. Zeeb		done
244*0696600cSBjoern A. Zeeb	fi
245*0696600cSBjoern A. Zeeb
246*0696600cSBjoern A. Zeeb	# Install the "default interface" to kernel, which will be used
247*0696600cSBjoern A. Zeeb	# as the default route when there's no router.
248*0696600cSBjoern A. Zeeb
249*0696600cSBjoern A. Zeeb	# Disable installing the default interface when we act
250*0696600cSBjoern A. Zeeb	# as router to avoid conflict between the default
251*0696600cSBjoern A. Zeeb	# router list and the manual configured default route.
252*0696600cSBjoern A. Zeeb	if checkyesno ipv6_gateway_enable; then
253*0696600cSBjoern A. Zeeb		return
254*0696600cSBjoern A. Zeeb	fi
255*0696600cSBjoern A. Zeeb
256*0696600cSBjoern A. Zeeb	case "${ipv6_default_interface}" in
257*0696600cSBjoern A. Zeeb	[Nn][Oo] | [Nn][Oo][Nn][Ee])
258*0696600cSBjoern A. Zeeb		return
259*0696600cSBjoern A. Zeeb		;;
260*0696600cSBjoern A. Zeeb	[Aa][Uu][Tt][Oo] | "")
261*0696600cSBjoern A. Zeeb		for i in ${ipv6_network_interfaces}; do
262*0696600cSBjoern A. Zeeb			case $i in
263*0696600cSBjoern A. Zeeb			[Nn][Oo][Nn][Ee])
264*0696600cSBjoern A. Zeeb				return
265*0696600cSBjoern A. Zeeb				;;
266*0696600cSBjoern A. Zeeb			lo0)
267*0696600cSBjoern A. Zeeb				continue
268*0696600cSBjoern A. Zeeb				;;
269*0696600cSBjoern A. Zeeb			esac
270*0696600cSBjoern A. Zeeb			laddr=`network6_getladdr $i exclude_tentative`
271*0696600cSBjoern A. Zeeb			case ${laddr} in
272*0696600cSBjoern A. Zeeb			'')
273*0696600cSBjoern A. Zeeb				;;
274*0696600cSBjoern A. Zeeb			*)
275*0696600cSBjoern A. Zeeb				ipv6_default_interface=$i
276*0696600cSBjoern A. Zeeb				break
277*0696600cSBjoern A. Zeeb				;;
278*0696600cSBjoern A. Zeeb			esac
279*0696600cSBjoern A. Zeeb		done
280*0696600cSBjoern A. Zeeb		;;
281*0696600cSBjoern A. Zeeb	esac
282*0696600cSBjoern A. Zeeb
283*0696600cSBjoern A. Zeeb	ifconfig ${ipv6_default_interface} inet6 defaultif
284*0696600cSBjoern A. Zeeb	${SYSCTL} net.inet6.ip6.use_defaultzone=1 > /dev/null
285*0696600cSBjoern A. Zeeb}
286*0696600cSBjoern A. Zeeb
287*0696600cSBjoern A. Zeebropts_init()
288*0696600cSBjoern A. Zeeb{
289*0696600cSBjoern A. Zeeb	if [ -z "${_ropts_initdone}" ]; then
290*0696600cSBjoern A. Zeeb		echo -n "Additional $1 routing options:"
291*0696600cSBjoern A. Zeeb		_ropts_initdone=yes
292*0696600cSBjoern A. Zeeb	fi
293*0696600cSBjoern A. Zeeb}
294*0696600cSBjoern A. Zeeb
295*0696600cSBjoern A. Zeeboptions_inet()
296*0696600cSBjoern A. Zeeb{
297*0696600cSBjoern A. Zeeb	_ropts_initdone=
298*0696600cSBjoern A. Zeeb	if checkyesno icmp_bmcastecho; then
299*0696600cSBjoern A. Zeeb		ropts_init inet
300*0696600cSBjoern A. Zeeb		echo -n ' broadcast ping responses=YES'
301*0696600cSBjoern A. Zeeb		${SYSCTL} net.inet.icmp.bmcastecho=1 > /dev/null
302*0696600cSBjoern A. Zeeb	else
303*0696600cSBjoern A. Zeeb		${SYSCTL} net.inet.icmp.bmcastecho=0 > /dev/null
304*0696600cSBjoern A. Zeeb	fi
305*0696600cSBjoern A. Zeeb
306*0696600cSBjoern A. Zeeb	if checkyesno icmp_drop_redirect; then
307*0696600cSBjoern A. Zeeb		ropts_init inet
308*0696600cSBjoern A. Zeeb		echo -n ' ignore ICMP redirect=YES'
309*0696600cSBjoern A. Zeeb		${SYSCTL} net.inet.icmp.drop_redirect=1 > /dev/null
310*0696600cSBjoern A. Zeeb	else
311*0696600cSBjoern A. Zeeb		${SYSCTL} net.inet.icmp.drop_redirect=0 > /dev/null
312*0696600cSBjoern A. Zeeb	fi
313*0696600cSBjoern A. Zeeb
314*0696600cSBjoern A. Zeeb	if checkyesno icmp_log_redirect; then
315*0696600cSBjoern A. Zeeb		ropts_init inet
316*0696600cSBjoern A. Zeeb		echo -n ' log ICMP redirect=YES'
317*0696600cSBjoern A. Zeeb		${SYSCTL} net.inet.icmp.log_redirect=1 > /dev/null
318*0696600cSBjoern A. Zeeb	else
319*0696600cSBjoern A. Zeeb		${SYSCTL} net.inet.icmp.log_redirect=0 > /dev/null
320*0696600cSBjoern A. Zeeb	fi
321*0696600cSBjoern A. Zeeb
322*0696600cSBjoern A. Zeeb	if checkyesno gateway_enable; then
323*0696600cSBjoern A. Zeeb		ropts_init inet
324*0696600cSBjoern A. Zeeb		echo -n ' gateway=YES'
325*0696600cSBjoern A. Zeeb		${SYSCTL} net.inet.ip.forwarding=1 > /dev/null
326*0696600cSBjoern A. Zeeb	else
327*0696600cSBjoern A. Zeeb		${SYSCTL} net.inet.ip.forwarding=0 > /dev/null
328*0696600cSBjoern A. Zeeb	fi
329*0696600cSBjoern A. Zeeb
330*0696600cSBjoern A. Zeeb	if checkyesno forward_sourceroute; then
331*0696600cSBjoern A. Zeeb		ropts_init inet
332*0696600cSBjoern A. Zeeb		echo -n ' do source routing=YES'
333*0696600cSBjoern A. Zeeb		${SYSCTL} net.inet.ip.sourceroute=1 > /dev/null
334*0696600cSBjoern A. Zeeb	else
335*0696600cSBjoern A. Zeeb		${SYSCTL} net.inet.ip.sourceroute=0 > /dev/null
336*0696600cSBjoern A. Zeeb	fi
337*0696600cSBjoern A. Zeeb
338*0696600cSBjoern A. Zeeb	if checkyesno accept_sourceroute; then
339*0696600cSBjoern A. Zeeb		ropts_init inet
340*0696600cSBjoern A. Zeeb		echo -n ' accept source routing=YES'
341*0696600cSBjoern A. Zeeb		${SYSCTL} net.inet.ip.accept_sourceroute=1 > /dev/null
342*0696600cSBjoern A. Zeeb	else
343*0696600cSBjoern A. Zeeb		${SYSCTL} net.inet.ip.accept_sourceroute=0 > /dev/null
344*0696600cSBjoern A. Zeeb	fi
345*0696600cSBjoern A. Zeeb
346*0696600cSBjoern A. Zeeb	if checkyesno arpproxy_all; then
347*0696600cSBjoern A. Zeeb		ropts_init inet
348*0696600cSBjoern A. Zeeb		echo -n ' ARP proxyall=YES'
349*0696600cSBjoern A. Zeeb		${SYSCTL} net.link.ether.inet.proxyall=1 > /dev/null
350*0696600cSBjoern A. Zeeb	else
351*0696600cSBjoern A. Zeeb		${SYSCTL} net.link.ether.inet.proxyall=0 > /dev/null
352*0696600cSBjoern A. Zeeb	fi
353*0696600cSBjoern A. Zeeb
354*0696600cSBjoern A. Zeeb	[ -n "${_ropts_initdone}" ] && echo '.'
355*0696600cSBjoern A. Zeeb}
356*0696600cSBjoern A. Zeeb
357*0696600cSBjoern A. Zeeboptions_inet6()
358*0696600cSBjoern A. Zeeb{
359*0696600cSBjoern A. Zeeb	_ropts_initdone=
360*0696600cSBjoern A. Zeeb
361*0696600cSBjoern A. Zeeb	if checkyesno ipv6_gateway_enable; then
362*0696600cSBjoern A. Zeeb		ropts_init inet6
363*0696600cSBjoern A. Zeeb		echo -n ' gateway=YES'
364*0696600cSBjoern A. Zeeb		${SYSCTL} net.inet6.ip6.forwarding=1 > /dev/null
365*0696600cSBjoern A. Zeeb	else
366*0696600cSBjoern A. Zeeb		${SYSCTL} net.inet6.ip6.forwarding=0 > /dev/null
367*0696600cSBjoern A. Zeeb	fi
368*0696600cSBjoern A. Zeeb
369*0696600cSBjoern A. Zeeb	[ -n "${_ropts_initdone}" ] && echo '.'
370*0696600cSBjoern A. Zeeb}
371*0696600cSBjoern A. Zeeb
372*0696600cSBjoern A. Zeebload_rc_config $name
373*0696600cSBjoern A. Zeebrun_rc_command "$@"
374