1 1.1 christos #!/bin/sh 2 1.1 christos # 3 1.8 kre # $NetBSD: ip6addrctl,v 1.8 2023/12/25 07:49:22 kre Exp $ 4 1.4 kim # 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.7 martin # REQUIRE: root bootconf CRITLOCALMOUNTED tty 9 1.1 christos 10 1.3 nakayama $_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.8 kre if [ -r "${config_file}" ] && [ -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.5 kim ${IP6ADDRCTL_CMD} 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