Home | History | Annotate | Line # | Download | only in rc.d
ip6addrctl revision 1.3
      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.3  nakayama $_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