1121749Sume#!/bin/sh 2121749Sume# 3121749Sume# $FreeBSD: releng/10.3/etc/rc.d/ip6addrctl 272864 2014-10-09 23:40:08Z hrs $ 4121749Sume# 5121749Sume 6121749Sume# PROVIDE: ip6addrctl 7197139Shrs# REQUIRE: FILESYSTEMS 8197139Shrs# BEFORE: netif 9136224Smtm# KEYWORD: nojail 10121749Sume 11121749Sume. /etc/rc.subr 12197697Shrs. /etc/network.subr 13121749Sume 14121749Sumename="ip6addrctl" 15230099Sdougbrcvar="ip6addrctl_enable" 16121749Sumestart_cmd="ip6addrctl_start" 17129994Sumestop_cmd="ip6addrctl_stop" 18129994Sumeextra_commands="status prefer_ipv6 prefer_ipv4" 19129994Sumestatus_cmd="ip6addrctl" 20129994Sumeprefer_ipv6_cmd="ip6addrctl_prefer_ipv6" 21129994Sumeprefer_ipv4_cmd="ip6addrctl_prefer_ipv4" 22212579Shrsconfig_file="/etc/ip6addrctl.conf" 23121749Sume 24212579Shrsset_rcvar_obsolete ipv6_enable ipv6_activate_all_interfaces 25212579Shrsset_rcvar_obsolete ipv6_prefer ip6addrctl_policy 26212574Shrs 27250240ShrsIP6ADDRCTL_CMD="/usr/sbin/ip6addrctl" 28250240Shrs 29129994Sumeip6addrctl_prefer_ipv6() 30129994Sume{ 31197697Shrs afexists inet6 || return 0 32197697Shrs 33250240Shrs ${IP6ADDRCTL_CMD} flush >/dev/null 2>&1 34250240Shrs cat <<EOT | ${IP6ADDRCTL_CMD} install /dev/stdin 35250240Shrs ::1/128 50 0 36250240Shrs ::/0 40 1 37250240Shrs ::ffff:0:0/96 35 4 38250240Shrs 2002::/16 30 2 39250240Shrs 2001::/32 5 5 40250240Shrs fc00::/7 3 13 41250240Shrs ::/96 1 3 42250240Shrs fec0::/10 1 11 43250240Shrs 3ffe::/16 1 12 44250240ShrsEOT 45129994Sume} 46129994Sume 47129994Sumeip6addrctl_prefer_ipv4() 48129994Sume{ 49197697Shrs afexists inet6 || return 0 50197697Shrs 51250240Shrs ${IP6ADDRCTL_CMD} flush >/dev/null 2>&1 52250240Shrs cat <<EOT | ${IP6ADDRCTL_CMD} install /dev/stdin 53250240Shrs ::1/128 50 0 54250240Shrs ::/0 40 1 55250240Shrs ::ffff:0:0/96 100 4 56250240Shrs 2002::/16 30 2 57250240Shrs 2001::/32 5 5 58250240Shrs fc00::/7 3 13 59250240Shrs ::/96 1 3 60250240Shrs fec0::/10 1 11 61250240Shrs 3ffe::/16 1 12 62250240ShrsEOT 63129994Sume} 64129994Sume 65121749Sumeip6addrctl_start() 66121749Sume{ 67197697Shrs afexists inet6 || return 0 68121749Sume 69197697Shrs # install the policy of the address selection algorithm. 70212579Shrs case "${ip6addrctl_policy}" in 71212579Shrs [Aa][Uu][Tt][Oo]) 72212579Shrs if [ -r "${config_file}" -a -s "${config_file}" ]; then 73250240Shrs ${IP6ADDRCTL_CMD} flush >/dev/null 2>&1 74250240Shrs ${IP6ADDRCTL_CMD} install "${config_file}" 75129994Sume else 76212579Shrs if checkyesno ipv6_activate_all_interfaces; then 77212579Shrs ip6addrctl_prefer_ipv6 78272864Shrs elif [ -n "$(list_vars ifconfig_\*_ipv6)" ]; then 79272864Shrs ip6addrctl_prefer_ipv6 80212579Shrs else 81212579Shrs ip6addrctl_prefer_ipv4 82212579Shrs fi 83121749Sume fi 84212579Shrs ;; 85212579Shrs ipv4_prefer) 86212579Shrs ip6addrctl_prefer_ipv4 87212579Shrs ;; 88212579Shrs ipv6_prefer) 89212579Shrs ip6addrctl_prefer_ipv6 90212579Shrs ;; 91212579Shrs [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1) 92212579Shrs # Backward compatibility when ipv6_prefer=YES 93212579Shrs ip6addrctl_prefer_ipv6 94212579Shrs ;; 95212579Shrs [Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0) 96212579Shrs # Backward compatibility when ipv6_prefer=NO 97212579Shrs ip6addrctl_prefer_ipv4 98212579Shrs ;; 99238622Semax [Nn][Oo][Nn][Ee]) 100250240Shrs ${IP6ADDRCTL_CMD} flush >/dev/null 2>&1 101238622Semax ;; 102212579Shrs *) 103212579Shrs warn "\$ip6addrctl_policy is invalid: ${ip6addrctl_policy}. " \ 104212579Shrs " \"ipv4_prefer\" is used instead." 105212579Shrs ip6addrctl_prefer_ipv4 106212579Shrs ;; 107212579Shrs esac 108250240Shrs 109250240Shrs if checkyesno ip6addrctl_verbose; then 110250240Shrs echo 'Address selection policy table for IPv4 and IPv6:' 111250240Shrs ${IP6ADDRCTL_CMD} 112250240Shrs fi 113121749Sume} 114121749Sume 115129994Sumeip6addrctl_stop() 116129994Sume{ 117197697Shrs afexists inet6 || return 0 118197697Shrs 119197697Shrs ip6addrctl flush >/dev/null 2>&1 120129994Sume} 121129994Sume 122121749Sumeload_rc_config $name 123121749Sumerun_rc_command "$1" 124