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