Home | History | Annotate | Line # | Download | only in rc.d
      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 
     12 name="ip6addrctl"
     13 rcvar="ip6addrctl"
     14 start_cmd="ip6addrctl_start"
     15 stop_cmd="ip6addrctl_stop"
     16 extra_commands="status prefer_ipv6 prefer_ipv4"
     17 status_cmd="ip6addrctl"
     18 prefer_ipv6_cmd="ip6addrctl_prefer_ipv6"
     19 prefer_ipv4_cmd="ip6addrctl_prefer_ipv4"
     20 config_file="/etc/ip6addrctl.conf"
     21 
     22 IP6ADDRCTL_CMD="/usr/sbin/ip6addrctl"
     23 
     24 ip6addrctl_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
     37 EOT
     38 }
     39 
     40 ip6addrctl_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
     53 EOT
     54 }
     55 
     56 ip6addrctl_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 
     87 ip6addrctl_stop()
     88 {
     89 	${IP6ADDRCTL_CMD} flush >/dev/null 2>&1
     90 }
     91 
     92 load_rc_config $name
     93 run_rc_command "$1"
     94