]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - etc/rc.d/ip6addrctl
Upgrade our copy of llvm/clang to trunk r178860, in preparation of the
[FreeBSD/FreeBSD.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="ip6addrctl_enable"
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 ::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
44 ip6addrctl_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
61 ip6addrctl_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
105 ip6addrctl_stop()
106 {
107         afexists inet6 || return 0
108
109         ip6addrctl flush >/dev/null 2>&1
110 }
111
112 load_rc_config $name
113 run_rc_command "$1"