]> CyberLeo.Net >> Repos - FreeBSD/releng/9.0.git/blob - etc/rc.d/ip6addrctl
Copy stable/9 to releng/9.0 as part of the FreeBSD 9.0-RELEASE release
[FreeBSD/releng/9.0.git] / etc / rc.d / ip6addrctl
1 #!/bin/sh
2 #
3 # $FreeBSD$
4 #
5
6 # PROVIDE: ip6addrctl
7 # REQUIRE: FILESYSTEMS
8 # BEFORE: netif
9 # KEYWORD: nojail
10
11 . /etc/rc.subr
12 . /etc/network.subr
13
14 name="ip6addrctl"
15 rcvar=`set_rcvar`
16 start_cmd="ip6addrctl_start"
17 stop_cmd="ip6addrctl_stop"
18 extra_commands="status prefer_ipv6 prefer_ipv4"
19 status_cmd="ip6addrctl"
20 prefer_ipv6_cmd="ip6addrctl_prefer_ipv6"
21 prefer_ipv4_cmd="ip6addrctl_prefer_ipv4"
22 config_file="/etc/ip6addrctl.conf"
23
24 set_rcvar_obsolete ipv6_enable ipv6_activate_all_interfaces
25 set_rcvar_obsolete ipv6_prefer ip6addrctl_policy
26
27 ip6addrctl_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
40 ip6addrctl_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
53 ip6addrctl_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         *)
87                 warn "\$ip6addrctl_policy is invalid: ${ip6addrctl_policy}. " \
88                     " \"ipv4_prefer\" is used instead."
89                 ip6addrctl_prefer_ipv4
90         ;;
91         esac
92 }
93
94 ip6addrctl_stop()
95 {
96         afexists inet6 || return 0
97
98         ip6addrctl flush >/dev/null 2>&1
99 }
100
101 load_rc_config $name
102 run_rc_command "$1"