Home | History | Annotate | Line # | Download | only in rc.d
ip6addrctl revision 1.2.18.2
      1       1.1  christos #!/bin/sh
      2       1.1  christos #
      3  1.2.18.2    martin # $NetBSD: ip6addrctl,v 1.2.18.2 2020/01/31 11:19:58 martin Exp $
      4  1.2.18.2    martin # 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.1  christos # REQUIRE: root bootconf mountcritlocal tty
      9       1.1  christos 
     10  1.2.18.1    martin $_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.1  christos 		if [ -r "${config_file}" -a -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.1  christos 	ip6addrctl 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