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