1*0696600cSBjoern A. Zeeb#!/bin/sh 2*0696600cSBjoern A. Zeeb# 3*0696600cSBjoern A. Zeeb# 4*0696600cSBjoern A. Zeeb 5*0696600cSBjoern A. Zeeb# PROVIDE: ip6addrctl 6*0696600cSBjoern A. Zeeb# REQUIRE: FILESYSTEMS 7*0696600cSBjoern A. Zeeb# BEFORE: netif 8*0696600cSBjoern A. Zeeb# KEYWORD: nojailvnet 9*0696600cSBjoern A. Zeeb 10*0696600cSBjoern A. Zeeb. /etc/rc.subr 11*0696600cSBjoern A. Zeeb. /etc/network.subr 12*0696600cSBjoern A. Zeeb 13*0696600cSBjoern A. Zeebname="ip6addrctl" 14*0696600cSBjoern A. Zeebdesc="configure address selection policy for IPv6 and IPv4" 15*0696600cSBjoern A. Zeebrcvar="ip6addrctl_enable" 16*0696600cSBjoern A. Zeebstart_cmd="ip6addrctl_start" 17*0696600cSBjoern A. Zeebstop_cmd="ip6addrctl_stop" 18*0696600cSBjoern A. Zeebextra_commands="status prefer_ipv6 prefer_ipv4" 19*0696600cSBjoern A. Zeebstatus_cmd="ip6addrctl" 20*0696600cSBjoern A. Zeebprefer_ipv6_cmd="ip6addrctl_prefer_ipv6" 21*0696600cSBjoern A. Zeebprefer_ipv4_cmd="ip6addrctl_prefer_ipv4" 22*0696600cSBjoern A. Zeebconfig_file="/etc/ip6addrctl.conf" 23*0696600cSBjoern A. Zeeb 24*0696600cSBjoern A. Zeebset_rcvar_obsolete ipv6_enable ipv6_activate_all_interfaces 25*0696600cSBjoern A. Zeebset_rcvar_obsolete ipv6_prefer ip6addrctl_policy 26*0696600cSBjoern A. Zeeb 27*0696600cSBjoern A. ZeebIP6ADDRCTL_CMD="/usr/sbin/ip6addrctl" 28*0696600cSBjoern A. Zeeb 29*0696600cSBjoern A. Zeebip6addrctl_prefer_ipv6() 30*0696600cSBjoern A. Zeeb{ 31*0696600cSBjoern A. Zeeb afexists inet6 || return 0 32*0696600cSBjoern A. Zeeb 33*0696600cSBjoern A. Zeeb ${IP6ADDRCTL_CMD} flush >/dev/null 2>&1 34*0696600cSBjoern A. Zeeb cat <<EOT | ${IP6ADDRCTL_CMD} install /dev/stdin 35*0696600cSBjoern A. Zeeb ::1/128 50 0 36*0696600cSBjoern A. Zeeb ::/0 40 1 37*0696600cSBjoern A. Zeeb ::ffff:0:0/96 35 4 38*0696600cSBjoern A. Zeeb 2002::/16 30 2 39*0696600cSBjoern A. Zeeb 2001::/32 5 5 40*0696600cSBjoern A. Zeeb fc00::/7 3 13 41*0696600cSBjoern A. Zeeb ::/96 1 3 42*0696600cSBjoern A. Zeeb fec0::/10 1 11 43*0696600cSBjoern A. Zeeb 3ffe::/16 1 12 44*0696600cSBjoern A. ZeebEOT 45*0696600cSBjoern A. Zeeb} 46*0696600cSBjoern A. Zeeb 47*0696600cSBjoern A. Zeebip6addrctl_prefer_ipv4() 48*0696600cSBjoern A. Zeeb{ 49*0696600cSBjoern A. Zeeb afexists inet6 || return 0 50*0696600cSBjoern A. Zeeb 51*0696600cSBjoern A. Zeeb ${IP6ADDRCTL_CMD} flush >/dev/null 2>&1 52*0696600cSBjoern A. Zeeb cat <<EOT | ${IP6ADDRCTL_CMD} install /dev/stdin 53*0696600cSBjoern A. Zeeb ::1/128 50 0 54*0696600cSBjoern A. Zeeb ::/0 40 1 55*0696600cSBjoern A. Zeeb ::ffff:0:0/96 100 4 56*0696600cSBjoern A. Zeeb 2002::/16 30 2 57*0696600cSBjoern A. Zeeb 2001::/32 5 5 58*0696600cSBjoern A. Zeeb fc00::/7 3 13 59*0696600cSBjoern A. Zeeb ::/96 1 3 60*0696600cSBjoern A. Zeeb fec0::/10 1 11 61*0696600cSBjoern A. Zeeb 3ffe::/16 1 12 62*0696600cSBjoern A. ZeebEOT 63*0696600cSBjoern A. Zeeb} 64*0696600cSBjoern A. Zeeb 65*0696600cSBjoern A. Zeebip6addrctl_start() 66*0696600cSBjoern A. Zeeb{ 67*0696600cSBjoern A. Zeeb afexists inet6 || return 0 68*0696600cSBjoern A. Zeeb 69*0696600cSBjoern A. Zeeb # install the policy of the address selection algorithm. 70*0696600cSBjoern A. Zeeb case "${ip6addrctl_policy}" in 71*0696600cSBjoern A. Zeeb [Aa][Uu][Tt][Oo]) 72*0696600cSBjoern A. Zeeb if [ -r "${config_file}" -a -s "${config_file}" ]; then 73*0696600cSBjoern A. Zeeb ${IP6ADDRCTL_CMD} flush >/dev/null 2>&1 74*0696600cSBjoern A. Zeeb ${IP6ADDRCTL_CMD} install "${config_file}" 75*0696600cSBjoern A. Zeeb else 76*0696600cSBjoern A. Zeeb if checkyesno ipv6_activate_all_interfaces; then 77*0696600cSBjoern A. Zeeb ip6addrctl_prefer_ipv6 78*0696600cSBjoern A. Zeeb elif [ -n "$(list_vars ifconfig_\*_ipv6)" ]; then 79*0696600cSBjoern A. Zeeb ip6addrctl_prefer_ipv6 80*0696600cSBjoern A. Zeeb else 81*0696600cSBjoern A. Zeeb ip6addrctl_prefer_ipv4 82*0696600cSBjoern A. Zeeb fi 83*0696600cSBjoern A. Zeeb fi 84*0696600cSBjoern A. Zeeb ;; 85*0696600cSBjoern A. Zeeb ipv4_prefer) 86*0696600cSBjoern A. Zeeb ip6addrctl_prefer_ipv4 87*0696600cSBjoern A. Zeeb ;; 88*0696600cSBjoern A. Zeeb ipv6_prefer) 89*0696600cSBjoern A. Zeeb ip6addrctl_prefer_ipv6 90*0696600cSBjoern A. Zeeb ;; 91*0696600cSBjoern A. Zeeb [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1) 92*0696600cSBjoern A. Zeeb # Backward compatibility when ipv6_prefer=YES 93*0696600cSBjoern A. Zeeb ip6addrctl_prefer_ipv6 94*0696600cSBjoern A. Zeeb ;; 95*0696600cSBjoern A. Zeeb [Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0) 96*0696600cSBjoern A. Zeeb # Backward compatibility when ipv6_prefer=NO 97*0696600cSBjoern A. Zeeb ip6addrctl_prefer_ipv4 98*0696600cSBjoern A. Zeeb ;; 99*0696600cSBjoern A. Zeeb [Nn][Oo][Nn][Ee]) 100*0696600cSBjoern A. Zeeb ${IP6ADDRCTL_CMD} flush >/dev/null 2>&1 101*0696600cSBjoern A. Zeeb ;; 102*0696600cSBjoern A. Zeeb *) 103*0696600cSBjoern A. Zeeb warn "\$ip6addrctl_policy is invalid: ${ip6addrctl_policy}. " \ 104*0696600cSBjoern A. Zeeb " \"ipv4_prefer\" is used instead." 105*0696600cSBjoern A. Zeeb ip6addrctl_prefer_ipv4 106*0696600cSBjoern A. Zeeb ;; 107*0696600cSBjoern A. Zeeb esac 108*0696600cSBjoern A. Zeeb 109*0696600cSBjoern A. Zeeb if checkyesno ip6addrctl_verbose; then 110*0696600cSBjoern A. Zeeb echo 'Address selection policy table for IPv4 and IPv6:' 111*0696600cSBjoern A. Zeeb ${IP6ADDRCTL_CMD} 112*0696600cSBjoern A. Zeeb fi 113*0696600cSBjoern A. Zeeb} 114*0696600cSBjoern A. Zeeb 115*0696600cSBjoern A. Zeebip6addrctl_stop() 116*0696600cSBjoern A. Zeeb{ 117*0696600cSBjoern A. Zeeb afexists inet6 || return 0 118*0696600cSBjoern A. Zeeb 119*0696600cSBjoern A. Zeeb ip6addrctl flush >/dev/null 2>&1 120*0696600cSBjoern A. Zeeb} 121*0696600cSBjoern A. Zeeb 122*0696600cSBjoern A. Zeebload_rc_config $name 123*0696600cSBjoern A. Zeebrun_rc_command "$1" 124