10696600cSBjoern A. Zeeb#!/bin/sh 20696600cSBjoern A. Zeeb# 30696600cSBjoern A. Zeeb# 40696600cSBjoern A. Zeeb 50696600cSBjoern A. Zeeb# PROVIDE: ip6addrctl 60696600cSBjoern A. Zeeb# REQUIRE: FILESYSTEMS 70696600cSBjoern A. Zeeb# BEFORE: netif 80696600cSBjoern A. Zeeb# KEYWORD: nojailvnet 90696600cSBjoern A. Zeeb 100696600cSBjoern A. Zeeb. /etc/rc.subr 110696600cSBjoern A. Zeeb. /etc/network.subr 120696600cSBjoern A. Zeeb 130696600cSBjoern A. Zeebname="ip6addrctl" 140696600cSBjoern A. Zeebdesc="configure address selection policy for IPv6 and IPv4" 150696600cSBjoern A. Zeebrcvar="ip6addrctl_enable" 160696600cSBjoern A. Zeebstart_cmd="ip6addrctl_start" 170696600cSBjoern A. Zeebstop_cmd="ip6addrctl_stop" 180696600cSBjoern A. Zeebextra_commands="status prefer_ipv6 prefer_ipv4" 190696600cSBjoern A. Zeebstatus_cmd="ip6addrctl" 200696600cSBjoern A. Zeebprefer_ipv6_cmd="ip6addrctl_prefer_ipv6" 210696600cSBjoern A. Zeebprefer_ipv4_cmd="ip6addrctl_prefer_ipv4" 220696600cSBjoern A. Zeebconfig_file="/etc/ip6addrctl.conf" 230696600cSBjoern A. Zeeb 240696600cSBjoern A. Zeebset_rcvar_obsolete ipv6_enable ipv6_activate_all_interfaces 250696600cSBjoern A. Zeebset_rcvar_obsolete ipv6_prefer ip6addrctl_policy 260696600cSBjoern A. Zeeb 270696600cSBjoern A. ZeebIP6ADDRCTL_CMD="/usr/sbin/ip6addrctl" 280696600cSBjoern A. Zeeb 290696600cSBjoern A. Zeebip6addrctl_prefer_ipv6() 300696600cSBjoern A. Zeeb{ 310696600cSBjoern A. Zeeb afexists inet6 || return 0 320696600cSBjoern A. Zeeb 330696600cSBjoern A. Zeeb ${IP6ADDRCTL_CMD} flush >/dev/null 2>&1 340696600cSBjoern A. Zeeb cat <<EOT | ${IP6ADDRCTL_CMD} install /dev/stdin 350696600cSBjoern A. Zeeb ::1/128 50 0 360696600cSBjoern A. Zeeb ::/0 40 1 370696600cSBjoern A. Zeeb ::ffff:0:0/96 35 4 380696600cSBjoern A. Zeeb 2002::/16 30 2 390696600cSBjoern A. Zeeb 2001::/32 5 5 400696600cSBjoern A. Zeeb fc00::/7 3 13 410696600cSBjoern A. Zeeb ::/96 1 3 420696600cSBjoern A. Zeeb fec0::/10 1 11 430696600cSBjoern A. Zeeb 3ffe::/16 1 12 440696600cSBjoern A. ZeebEOT 450696600cSBjoern A. Zeeb} 460696600cSBjoern A. Zeeb 470696600cSBjoern A. Zeebip6addrctl_prefer_ipv4() 480696600cSBjoern A. Zeeb{ 490696600cSBjoern A. Zeeb afexists inet6 || return 0 500696600cSBjoern A. Zeeb 510696600cSBjoern A. Zeeb ${IP6ADDRCTL_CMD} flush >/dev/null 2>&1 520696600cSBjoern A. Zeeb cat <<EOT | ${IP6ADDRCTL_CMD} install /dev/stdin 530696600cSBjoern A. Zeeb ::1/128 50 0 540696600cSBjoern A. Zeeb ::/0 40 1 550696600cSBjoern A. Zeeb ::ffff:0:0/96 100 4 560696600cSBjoern A. Zeeb 2002::/16 30 2 570696600cSBjoern A. Zeeb 2001::/32 5 5 580696600cSBjoern A. Zeeb fc00::/7 3 13 590696600cSBjoern A. Zeeb ::/96 1 3 600696600cSBjoern A. Zeeb fec0::/10 1 11 610696600cSBjoern A. Zeeb 3ffe::/16 1 12 620696600cSBjoern A. ZeebEOT 630696600cSBjoern A. Zeeb} 640696600cSBjoern A. Zeeb 650696600cSBjoern A. Zeebip6addrctl_start() 660696600cSBjoern A. Zeeb{ 670696600cSBjoern A. Zeeb afexists inet6 || return 0 680696600cSBjoern A. Zeeb 690696600cSBjoern A. Zeeb # install the policy of the address selection algorithm. 700696600cSBjoern A. Zeeb case "${ip6addrctl_policy}" in 710696600cSBjoern A. Zeeb [Aa][Uu][Tt][Oo]) 720696600cSBjoern A. Zeeb if [ -r "${config_file}" -a -s "${config_file}" ]; then 730696600cSBjoern A. Zeeb ${IP6ADDRCTL_CMD} flush >/dev/null 2>&1 740696600cSBjoern A. Zeeb ${IP6ADDRCTL_CMD} install "${config_file}" 750696600cSBjoern A. Zeeb else 760696600cSBjoern A. Zeeb if checkyesno ipv6_activate_all_interfaces; then 770696600cSBjoern A. Zeeb ip6addrctl_prefer_ipv6 780696600cSBjoern A. Zeeb elif [ -n "$(list_vars ifconfig_\*_ipv6)" ]; then 790696600cSBjoern A. Zeeb ip6addrctl_prefer_ipv6 800696600cSBjoern A. Zeeb else 810696600cSBjoern A. Zeeb ip6addrctl_prefer_ipv4 820696600cSBjoern A. Zeeb fi 830696600cSBjoern A. Zeeb fi 840696600cSBjoern A. Zeeb ;; 850696600cSBjoern A. Zeeb ipv4_prefer) 860696600cSBjoern A. Zeeb ip6addrctl_prefer_ipv4 870696600cSBjoern A. Zeeb ;; 880696600cSBjoern A. Zeeb ipv6_prefer) 890696600cSBjoern A. Zeeb ip6addrctl_prefer_ipv6 900696600cSBjoern A. Zeeb ;; 910696600cSBjoern A. Zeeb [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1) 920696600cSBjoern A. Zeeb # Backward compatibility when ipv6_prefer=YES 930696600cSBjoern A. Zeeb ip6addrctl_prefer_ipv6 940696600cSBjoern A. Zeeb ;; 950696600cSBjoern A. Zeeb [Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0) 960696600cSBjoern A. Zeeb # Backward compatibility when ipv6_prefer=NO 970696600cSBjoern A. Zeeb ip6addrctl_prefer_ipv4 980696600cSBjoern A. Zeeb ;; 990696600cSBjoern A. Zeeb [Nn][Oo][Nn][Ee]) 1000696600cSBjoern A. Zeeb ${IP6ADDRCTL_CMD} flush >/dev/null 2>&1 1010696600cSBjoern A. Zeeb ;; 1020696600cSBjoern A. Zeeb *) 1030696600cSBjoern A. Zeeb warn "\$ip6addrctl_policy is invalid: ${ip6addrctl_policy}. " \ 1040696600cSBjoern A. Zeeb " \"ipv4_prefer\" is used instead." 1050696600cSBjoern A. Zeeb ip6addrctl_prefer_ipv4 1060696600cSBjoern A. Zeeb ;; 1070696600cSBjoern A. Zeeb esac 1080696600cSBjoern A. Zeeb 1090696600cSBjoern A. Zeeb if checkyesno ip6addrctl_verbose; then 1100696600cSBjoern A. Zeeb echo 'Address selection policy table for IPv4 and IPv6:' 1110696600cSBjoern A. Zeeb ${IP6ADDRCTL_CMD} 1120696600cSBjoern A. Zeeb fi 1130696600cSBjoern A. Zeeb} 1140696600cSBjoern A. Zeeb 1150696600cSBjoern A. Zeebip6addrctl_stop() 1160696600cSBjoern A. Zeeb{ 1170696600cSBjoern A. Zeeb afexists inet6 || return 0 1180696600cSBjoern A. Zeeb 1190696600cSBjoern A. Zeeb ip6addrctl flush >/dev/null 2>&1 1200696600cSBjoern A. Zeeb} 1210696600cSBjoern A. Zeeb 1220696600cSBjoern A. Zeebload_rc_config $name 123*f99f0ee1SAlexander Leidinger 124*f99f0ee1SAlexander Leidinger# doesn't make sense to run in a svcj: config setting 125*f99f0ee1SAlexander Leidingeripv6addrctl_svcj="NO" 126*f99f0ee1SAlexander Leidinger 1270696600cSBjoern A. Zeebrun_rc_command "$1" 128