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