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