ip6addrctl revision 1.7
11.1Schristos#!/bin/sh
21.1Schristos#
31.7Smartin# $NetBSD: ip6addrctl,v 1.7 2020/09/08 12:52:18 martin Exp $
41.4Skim# FreeBSD: head/etc/rc.d/ip6addrctl 270836 2014-08-30 07:08:10Z hrs
51.1Schristos#
61.1Schristos
71.1Schristos# PROVIDE: ip6addrctl
81.7Smartin# REQUIRE: root bootconf CRITLOCALMOUNTED tty
91.1Schristos
101.3Snakayama$_rc_subr_loaded . /etc/rc.subr
111.1Schristos
121.1Schristosname="ip6addrctl"
131.2Schristosrcvar="ip6addrctl"
141.1Schristosstart_cmd="ip6addrctl_start"
151.1Schristosstop_cmd="ip6addrctl_stop"
161.1Schristosextra_commands="status prefer_ipv6 prefer_ipv4"
171.1Schristosstatus_cmd="ip6addrctl"
181.1Schristosprefer_ipv6_cmd="ip6addrctl_prefer_ipv6"
191.1Schristosprefer_ipv4_cmd="ip6addrctl_prefer_ipv4"
201.1Schristosconfig_file="/etc/ip6addrctl.conf"
211.1Schristos
221.1SchristosIP6ADDRCTL_CMD="/usr/sbin/ip6addrctl"
231.1Schristos
241.1Schristosip6addrctl_prefer_ipv6()
251.1Schristos{
261.1Schristos	${IP6ADDRCTL_CMD} flush >/dev/null 2>&1
271.1Schristos	cat <<EOT | ${IP6ADDRCTL_CMD} install /dev/stdin
281.1Schristos	::1/128		 50	 0
291.1Schristos	::/0		 40	 1
301.1Schristos	::ffff:0:0/96	 35	 4
311.1Schristos	2002::/16	 30	 2
321.1Schristos	2001::/32	  5	 5
331.1Schristos	fc00::/7	  3	13
341.1Schristos	::/96		  1	 3
351.1Schristos	fec0::/10	  1	11
361.1Schristos	3ffe::/16	  1	12
371.1SchristosEOT
381.1Schristos}
391.1Schristos
401.1Schristosip6addrctl_prefer_ipv4()
411.1Schristos{
421.1Schristos	${IP6ADDRCTL_CMD} flush >/dev/null 2>&1
431.1Schristos	cat <<EOT | ${IP6ADDRCTL_CMD} install /dev/stdin
441.1Schristos	::1/128		 50	 0
451.1Schristos	::/0		 40	 1
461.1Schristos	::ffff:0:0/96	100	 4
471.1Schristos	2002::/16	 30	 2
481.1Schristos	2001::/32	  5	 5
491.1Schristos	fc00::/7	  3	13
501.1Schristos	::/96		  1	 3
511.1Schristos	fec0::/10	  1	11
521.1Schristos	3ffe::/16	  1	12
531.1SchristosEOT
541.1Schristos}
551.1Schristos
561.1Schristosip6addrctl_start()
571.1Schristos{
581.1Schristos	# install the policy of the address selection algorithm.
591.1Schristos	case "${ip6addrctl_policy}" in
601.1Schristos	[Aa][Uu][Tt][Oo])
611.1Schristos		if [ -r "${config_file}" -a -s "${config_file}" ]; then
621.1Schristos			${IP6ADDRCTL_CMD} flush >/dev/null 2>&1
631.1Schristos			${IP6ADDRCTL_CMD} install "${config_file}"
641.1Schristos		else
651.2Schristos			ip6addrctl_prefer_ipv6
661.1Schristos		fi
671.1Schristos	;;
681.1Schristos	ipv4_prefer)
691.1Schristos		ip6addrctl_prefer_ipv4
701.1Schristos	;;
711.1Schristos	ipv6_prefer)
721.1Schristos		ip6addrctl_prefer_ipv6
731.1Schristos	;;
741.1Schristos	*)
751.1Schristos		warn "\$ip6addrctl_policy is invalid: ${ip6addrctl_policy}. " \
761.1Schristos		    " \"ipv4_prefer\" is used instead."
771.1Schristos		ip6addrctl_prefer_ipv4
781.1Schristos	;;
791.1Schristos	esac
801.1Schristos
811.1Schristos	if checkyesno ip6addrctl_verbose; then
821.1Schristos		echo 'Address selection policy table for IPv4 and IPv6:'
831.1Schristos		${IP6ADDRCTL_CMD}
841.1Schristos	fi
851.1Schristos}
861.1Schristos
871.1Schristosip6addrctl_stop()
881.1Schristos{
891.5Skim	${IP6ADDRCTL_CMD} flush >/dev/null 2>&1
901.1Schristos}
911.1Schristos
921.1Schristosload_rc_config $name
931.1Schristosrun_rc_command "$1"
94