ip6addrctl revision 238995
1#!/bin/sh
2#
3# $FreeBSD: stable/9/etc/rc.d/ip6addrctl 238995 2012-08-02 20:49:11Z emax $
4#
5
6# PROVIDE: ip6addrctl
7# REQUIRE: FILESYSTEMS
8# BEFORE: netif
9# KEYWORD: nojail
10
11. /etc/rc.subr
12. /etc/network.subr
13
14name="ip6addrctl"
15rcvar="ip6addrctl_enable"
16start_cmd="ip6addrctl_start"
17stop_cmd="ip6addrctl_stop"
18extra_commands="status prefer_ipv6 prefer_ipv4"
19status_cmd="ip6addrctl"
20prefer_ipv6_cmd="ip6addrctl_prefer_ipv6"
21prefer_ipv4_cmd="ip6addrctl_prefer_ipv4"
22config_file="/etc/ip6addrctl.conf"
23
24set_rcvar_obsolete ipv6_enable ipv6_activate_all_interfaces
25set_rcvar_obsolete ipv6_prefer ip6addrctl_policy
26
27ip6addrctl_prefer_ipv6()
28{
29	afexists inet6 || return 0
30
31	ip6addrctl flush >/dev/null 2>&1
32	ip6addrctl add ::1/128		50	0
33	ip6addrctl add ::/0		40	1
34	ip6addrctl add 2002::/16	30	2
35	ip6addrctl add ::/96		20	3
36	ip6addrctl add ::ffff:0:0/96	10	4
37	checkyesno ip6addrctl_verbose && ip6addrctl
38}
39
40ip6addrctl_prefer_ipv4()
41{
42	afexists inet6 || return 0
43
44	ip6addrctl flush >/dev/null 2>&1
45	ip6addrctl add ::ffff:0:0/96	50	0
46	ip6addrctl add ::1/128		40	1
47	ip6addrctl add ::/0		30	2
48	ip6addrctl add 2002::/16	20	3
49	ip6addrctl add ::/96		10	4
50	checkyesno ip6addrctl_verbose && ip6addrctl
51}
52
53ip6addrctl_start()
54{
55	afexists inet6 || return 0
56
57	# install the policy of the address selection algorithm.
58	case "${ip6addrctl_policy}" in
59	[Aa][Uu][Tt][Oo])
60		if [ -r "${config_file}" -a -s "${config_file}" ]; then
61			ip6addrctl flush >/dev/null 2>&1
62			ip6addrctl install "${config_file}"
63			checkyesno ip6addrctl_verbose && ip6addrctl
64		else
65			if checkyesno ipv6_activate_all_interfaces; then
66				ip6addrctl_prefer_ipv6
67			else
68				ip6addrctl_prefer_ipv4
69			fi
70		fi
71	;;
72	ipv4_prefer)
73		ip6addrctl_prefer_ipv4
74	;;
75	ipv6_prefer)
76		ip6addrctl_prefer_ipv6
77	;;
78	[Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1)
79		# Backward compatibility when ipv6_prefer=YES
80		ip6addrctl_prefer_ipv6
81	;;
82	[Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0)
83		# Backward compatibility when ipv6_prefer=NO
84		ip6addrctl_prefer_ipv4
85	;;
86	[Nn][Oo][Nn][Ee])
87		ip6addrctl flush >/dev/null 2>&1
88	;;
89	*)
90		warn "\$ip6addrctl_policy is invalid: ${ip6addrctl_policy}. " \
91		    " \"ipv4_prefer\" is used instead."
92		ip6addrctl_prefer_ipv4
93	;;
94	esac
95}
96
97ip6addrctl_stop()
98{
99	afexists inet6 || return 0
100
101	ip6addrctl flush >/dev/null 2>&1
102}
103
104load_rc_config $name
105run_rc_command "$1"
106