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