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