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