ip6addrctl revision 246598
1#!/bin/sh
2#
3# $FreeBSD: stable/9/etc/rc.d/ip6addrctl 246598 2013-02-09 17:56:57Z ume $
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 ::ffff:0:0/96	 35	 4
35	ip6addrctl add 2002::/16	 30	 2
36	ip6addrctl add 2001::/32	  5	 5
37	ip6addrctl add fc00::/7		  3	13
38	ip6addrctl add ::/96		  1	 3
39	ip6addrctl add fec0::/10	  1	11
40	ip6addrctl add 3ffe::/16	  1	12
41	checkyesno ip6addrctl_verbose && ip6addrctl
42}
43
44ip6addrctl_prefer_ipv4()
45{
46	afexists inet6 || return 0
47
48	ip6addrctl flush >/dev/null 2>&1
49	ip6addrctl add ::1/128		 50	 0
50	ip6addrctl add ::/0		 40	 1
51	ip6addrctl add ::ffff:0:0/96	100	 4
52	ip6addrctl add 2002::/16	 30	 2
53	ip6addrctl add 2001::/32	  5	 5
54	ip6addrctl add fc00::/7		  3	13
55	ip6addrctl add ::/96		  1	 3
56	ip6addrctl add fec0::/10	  1	11
57	ip6addrctl add 3ffe::/16	  1	12
58	checkyesno ip6addrctl_verbose && ip6addrctl
59}
60
61ip6addrctl_start()
62{
63	afexists inet6 || return 0
64
65	# install the policy of the address selection algorithm.
66	case "${ip6addrctl_policy}" in
67	[Aa][Uu][Tt][Oo])
68		if [ -r "${config_file}" -a -s "${config_file}" ]; then
69			ip6addrctl flush >/dev/null 2>&1
70			ip6addrctl install "${config_file}"
71			checkyesno ip6addrctl_verbose && ip6addrctl
72		else
73			if checkyesno ipv6_activate_all_interfaces; then
74				ip6addrctl_prefer_ipv6
75			else
76				ip6addrctl_prefer_ipv4
77			fi
78		fi
79	;;
80	ipv4_prefer)
81		ip6addrctl_prefer_ipv4
82	;;
83	ipv6_prefer)
84		ip6addrctl_prefer_ipv6
85	;;
86	[Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1)
87		# Backward compatibility when ipv6_prefer=YES
88		ip6addrctl_prefer_ipv6
89	;;
90	[Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0)
91		# Backward compatibility when ipv6_prefer=NO
92		ip6addrctl_prefer_ipv4
93	;;
94	[Nn][Oo][Nn][Ee])
95		ip6addrctl flush >/dev/null 2>&1
96	;;
97	*)
98		warn "\$ip6addrctl_policy is invalid: ${ip6addrctl_policy}. " \
99		    " \"ipv4_prefer\" is used instead."
100		ip6addrctl_prefer_ipv4
101	;;
102	esac
103}
104
105ip6addrctl_stop()
106{
107	afexists inet6 || return 0
108
109	ip6addrctl flush >/dev/null 2>&1
110}
111
112load_rc_config $name
113run_rc_command "$1"
114