1#!/bin/sh
2#
3# $NetBSD: ip6addrctl,v 1.8 2023/12/25 07:49:22 kre Exp $
4# FreeBSD: head/etc/rc.d/ip6addrctl 270836 2014-08-30 07:08:10Z hrs
5#
6
7# PROVIDE: ip6addrctl
8# REQUIRE: root bootconf CRITLOCALMOUNTED tty
9
10$_rc_subr_loaded . /etc/rc.subr
11
12name="ip6addrctl"
13rcvar="ip6addrctl"
14start_cmd="ip6addrctl_start"
15stop_cmd="ip6addrctl_stop"
16extra_commands="status prefer_ipv6 prefer_ipv4"
17status_cmd="ip6addrctl"
18prefer_ipv6_cmd="ip6addrctl_prefer_ipv6"
19prefer_ipv4_cmd="ip6addrctl_prefer_ipv4"
20config_file="/etc/ip6addrctl.conf"
21
22IP6ADDRCTL_CMD="/usr/sbin/ip6addrctl"
23
24ip6addrctl_prefer_ipv6()
25{
26	${IP6ADDRCTL_CMD} flush >/dev/null 2>&1
27	cat <<EOT | ${IP6ADDRCTL_CMD} install /dev/stdin
28	::1/128		 50	 0
29	::/0		 40	 1
30	::ffff:0:0/96	 35	 4
31	2002::/16	 30	 2
32	2001::/32	  5	 5
33	fc00::/7	  3	13
34	::/96		  1	 3
35	fec0::/10	  1	11
36	3ffe::/16	  1	12
37EOT
38}
39
40ip6addrctl_prefer_ipv4()
41{
42	${IP6ADDRCTL_CMD} flush >/dev/null 2>&1
43	cat <<EOT | ${IP6ADDRCTL_CMD} install /dev/stdin
44	::1/128		 50	 0
45	::/0		 40	 1
46	::ffff:0:0/96	100	 4
47	2002::/16	 30	 2
48	2001::/32	  5	 5
49	fc00::/7	  3	13
50	::/96		  1	 3
51	fec0::/10	  1	11
52	3ffe::/16	  1	12
53EOT
54}
55
56ip6addrctl_start()
57{
58	# install the policy of the address selection algorithm.
59	case "${ip6addrctl_policy}" in
60	[Aa][Uu][Tt][Oo])
61		if [ -r "${config_file}" ] && [ -s "${config_file}" ]; then
62			${IP6ADDRCTL_CMD} flush >/dev/null 2>&1
63			${IP6ADDRCTL_CMD} install "${config_file}"
64		else
65			ip6addrctl_prefer_ipv6
66		fi
67	;;
68	ipv4_prefer)
69		ip6addrctl_prefer_ipv4
70	;;
71	ipv6_prefer)
72		ip6addrctl_prefer_ipv6
73	;;
74	*)
75		warn "\$ip6addrctl_policy is invalid: ${ip6addrctl_policy}. " \
76		    " \"ipv4_prefer\" is used instead."
77		ip6addrctl_prefer_ipv4
78	;;
79	esac
80
81	if checkyesno ip6addrctl_verbose; then
82		echo 'Address selection policy table for IPv4 and IPv6:'
83		${IP6ADDRCTL_CMD}
84	fi
85}
86
87ip6addrctl_stop()
88{
89	${IP6ADDRCTL_CMD} flush >/dev/null 2>&1
90}
91
92load_rc_config $name
93run_rc_command "$1"
94