routing revision 197527
1218885Sdim#!/bin/sh 2218885Sdim# 3218885Sdim# Configure routing and miscellaneous network tunables 4218885Sdim# 5218885Sdim# $FreeBSD: head/etc/rc.d/routing 197527 2009-09-26 19:00:20Z hrs $ 6218885Sdim# 7218885Sdim 8218885Sdim# PROVIDE: routing 9218885Sdim# REQUIRE: faith netif ppp stf 10218885Sdim# KEYWORD: nojail 11218885Sdim 12218885Sdim. /etc/rc.subr 13249423Sdim. /etc/network.subr 14218885Sdim 15218885Sdimname="routing" 16218885Sdimstart_cmd="routing_start" 17218885Sdimstop_cmd="routing_stop" 18218885Sdimextra_commands="options static" 19218885Sdimstatic_cmd="static_start" 20218885Sdimoptions_cmd="options_start" 21249423Sdim 22249423Sdimrouting_start() 23249423Sdim{ 24249423Sdim static_start "$@" 25243830Sdim options_start "$@" 26243830Sdim} 27263508Sdim 28263508Sdimrouting_stop() 29243830Sdim{ 30243830Sdim static_stop "$@" 31263508Sdim route -n flush 32263508Sdim for i in ${ipv6_network_interfaces}; do 33243830Sdim ifconfig $i inet6 -defaultif 34243830Sdim done 35243830Sdim} 36243830Sdim 37243830Sdimstatic_start() 38243830Sdim{ 39243830Sdim local _af 40243830Sdim _af=$1 41243830Sdim 42243830Sdim case ${_af} in 43243830Sdim inet) 44243830Sdim do_static inet add 45243830Sdim ;; 46243830Sdim inet6) 47243830Sdim do_static inet6 add 48243830Sdim ;; 49263508Sdim atm) 50263508Sdim do_static atm add 51263508Sdim ;; 52263508Sdim *) 53239462Sdim do_static inet add 54239462Sdim do_static inet6 add 55239462Sdim do_static atm add 56239462Sdim ;; 57239462Sdim esac 58239462Sdim} 59239462Sdim 60239462Sdimstatic_stop() 61239462Sdim{ 62249423Sdim local _af 63249423Sdim _af=$1 64249423Sdim 65249423Sdim case ${_af} in 66239462Sdim inet) 67239462Sdim do_static inet delete 68263508Sdim ;; 69263508Sdim inet6) 70263508Sdim do_static inet6 delete 71263508Sdim ;; 72263508Sdim atm) 73263508Sdim do_static atm delete 74263508Sdim ;; 75263508Sdim *) 76263508Sdim do_static inet delete 77263508Sdim do_static inet6 delete 78263508Sdim do_static atm delete 79263508Sdim ;; 80263508Sdim esac 81263508Sdim} 82249423Sdim 83249423Sdimdo_static() 84249423Sdim{ 85249423Sdim local _af _action 86249423Sdim _af=$1 87249423Sdim _action=$2 88249423Sdim 89249423Sdim eval $1_static $2 90249423Sdim} 91249423Sdim 92234353Sdiminet_static() 93234353Sdim{ 94239462Sdim local _action 95239462Sdim _action=$1 96243830Sdim 97243830Sdim case ${defaultrouter} in 98243830Sdim [Nn][Oo] | '') 99243830Sdim ;; 100243830Sdim *) 101243830Sdim static_routes="default ${static_routes}" 102234353Sdim route_default="default ${defaultrouter}" 103234353Sdim ;; 104234353Sdim esac 105234353Sdim 106239462Sdim if [ -n "${static_routes}" ]; then 107239462Sdim for i in ${static_routes}; do 108243830Sdim route_args=`get_if_var $i route_IF` 109243830Sdim route ${_action} ${route_args} 110243830Sdim done 111243830Sdim fi 112243830Sdim} 113243830Sdim 114234353Sdiminet6_static() 115234353Sdim{ 116234353Sdim local _action i 117234353Sdim _action=$1 118234353Sdim 119234353Sdim # disallow "internal" addresses to appear on the wire 120239462Sdim route ${_action} -inet6 ::ffff:0.0.0.0 -prefixlen 96 ::1 -reject 121239462Sdim route ${_action} -inet6 ::0.0.0.0 -prefixlen 96 ::1 -reject 122234353Sdim 123234353Sdim case ${ipv6_defaultrouter} in 124239462Sdim [Nn][Oo] | '') 125239462Sdim ;; 126243830Sdim *) 127243830Sdim ipv6_static_routes="default ${ipv6_static_routes}" 128243830Sdim ipv6_route_default="default ${ipv6_defaultrouter}" 129243830Sdim ;; 130243830Sdim esac 131243830Sdim 132239462Sdim if [ -n "${ipv6_static_routes}" ]; then 133239462Sdim for i in ${ipv6_static_routes}; do 134249423Sdim ipv6_route_args=`get_if_var $i ipv6_route_IF` 135249423Sdim route ${_action} -inet6 ${ipv6_route_args} 136249423Sdim done 137249423Sdim fi 138249423Sdim 139249423Sdim # Fixup $ipv6_network_interfaces 140249423Sdim case ${ipv6_network_interfaces} in 141249423Sdim [Nn][Oo][Nn][Ee]) 142249423Sdim ipv6_network_interfaces='' 143249423Sdim ;; 144249423Sdim esac 145249423Sdim 146249423Sdim if checkyesno ipv6_gateway_enable; then 147249423Sdim for i in ${ipv6_network_interfaces}; do 148243830Sdim 149243830Sdim laddr=`network6_getladdr $i exclude_tentative` 150243830Sdim case ${laddr} in 151243830Sdim '') 152243830Sdim ;; 153243830Sdim *) 154243830Sdim ipv6_working_interfaces="$i \ 155243830Sdim ${ipv6_working_interfaces}" 156234353Sdim ;; 157234353Sdim esac 158239462Sdim done 159239462Sdim ipv6_network_interfaces=${ipv6_working_interfaces} 160234353Sdim fi 161234353Sdim 162249423Sdim # Install the "default interface" to kernel, which will be used 163249423Sdim # as the default route when there's no router. 164249423Sdim case "${ipv6_default_interface}" in 165249423Sdim [Nn][Oo] | [Nn][Oo][Nn][Ee]) 166249423Sdim ipv6_default_interface="" 167249423Sdim ;; 168249423Sdim [Aa][Uu][Tt][Oo] | "") 169249423Sdim for i in ${ipv6_network_interfaces}; do 170234353Sdim case $i in 171234353Sdim lo0|faith[0-9]*) 172234353Sdim continue 173234353Sdim ;; 174234353Sdim esac 175234353Sdim laddr=`network6_getladdr $i exclude_tentative` 176234353Sdim case ${laddr} in 177234353Sdim '') 178234353Sdim ;; 179234353Sdim *) 180234353Sdim ipv6_default_interface=$i 181234353Sdim break 182239462Sdim ;; 183239462Sdim esac 184234353Sdim done 185234353Sdim ;; 186239462Sdim esac 187239462Sdim 188249423Sdim # Disallow unicast packets without outgoing scope identifiers, 189249423Sdim # or route such packets to a "default" interface, if it is specified. 190234353Sdim route ${_action} -inet6 fe80:: -prefixlen 10 ::1 -reject 191234353Sdim 192243830Sdim case ${ipv6_default_interface} in 193243830Sdim '') 194243830Sdim route ${_action} -inet6 ff02:: -prefixlen 16 ::1 -reject 195243830Sdim ;; 196243830Sdim *) 197243830Sdim laddr=`network6_getladdr ${ipv6_default_interface}` 198234353Sdim route ${_action} -inet6 ff02:: ${laddr} -prefixlen 16 -interface 199234353Sdim 200239462Sdim # Disable installing the default interface with the 201239462Sdim # case net.inet6.ip6.forwarding=0 and 202234353Sdim # the interface with no ND6_IFF_ACCEPT_RTADV 203234353Sdim # to avoid conflict between the default router list and 204239462Sdim # the manual configured default route. 205239462Sdim if ! checkyesno ipv6_gateway_enable; then 206239462Sdim ifconfig ${ipv6_default_interface} nd6 | \ 207239462Sdim while read proto options 208234353Sdim do 209234353Sdim case "${proto}:${options}" in 210239462Sdim nd6:*ACCEPT_RTADV*) 211239462Sdim ifconfig ${ipv6_default_interface} inet6 defaultif 212234353Sdim break 213234353Sdim ;; 214234353Sdim esac 215234353Sdim done 216239462Sdim fi 217239462Sdim ;; 218234353Sdim esac 219234353Sdim} 220249423Sdim 221249423Sdimatm_static() 222249423Sdim{ 223249423Sdim local _action i 224249423Sdim _action=$1 225249423Sdim 226249423Sdim if [ -n "${natm_static_routes}" ]; then 227249423Sdim for i in ${natm_static_routes}; do 228249423Sdim route_args=`get_if_var $i route_IF` 229249423Sdim atmconfig natm ${_action} ${route_args} 230249423Sdim done 231249423Sdim fi 232249423Sdim} 233249423Sdim 234249423Sdim_ropts_initdone= 235249423Sdimropts_init() 236249423Sdim{ 237249423Sdim if [ -z "${_ropts_initdone}" ]; then 238249423Sdim echo -n 'Additional routing options:' 239249423Sdim _ropts_initdone=yes 240249423Sdim fi 241249423Sdim} 242249423Sdim 243249423Sdimoptions_start() 244239462Sdim{ 245239462Sdim if checkyesno icmp_bmcastecho; then 246249423Sdim ropts_init 247249423Sdim echo -n ' broadcast ping responses=YES' 248234353Sdim sysctl net.inet.icmp.bmcastecho=1 >/dev/null 249234353Sdim fi 250239462Sdim 251239462Sdim if checkyesno icmp_drop_redirect; then 252234353Sdim ropts_init 253234353Sdim echo -n ' ignore ICMP redirect=YES' 254234353Sdim sysctl net.inet.icmp.drop_redirect=1 >/dev/null 255234353Sdim fi 256239462Sdim 257239462Sdim if checkyesno icmp_log_redirect; then 258234353Sdim ropts_init 259234353Sdim echo -n ' log ICMP redirect=YES' 260249423Sdim sysctl net.inet.icmp.log_redirect=1 >/dev/null 261249423Sdim fi 262249423Sdim 263249423Sdim if checkyesno gateway_enable; then 264249423Sdim ropts_init 265249423Sdim echo -n ' IPv4 gateway=YES' 266239462Sdim sysctl net.inet.ip.forwarding=1 >/dev/null 267239462Sdim fi 268234353Sdim 269234353Sdim if checkyesno ipv6_gateway_enable; then 270249423Sdim ropts_init 271249423Sdim echo -n ' IPv6 gateway=YES' 272243830Sdim sysctl net.inet6.ip6.forwarding=1 >/dev/null 273243830Sdim fi 274249423Sdim 275249423Sdim if checkyesno forward_sourceroute; then 276249423Sdim ropts_init 277249423Sdim echo -n ' do source routing=YES' 278249423Sdim sysctl net.inet.ip.sourceroute=1 >/dev/null 279249423Sdim fi 280249423Sdim 281249423Sdim if checkyesno accept_sourceroute; then 282249423Sdim ropts_init 283249423Sdim echo -n ' accept source routing=YES' 284249423Sdim sysctl net.inet.ip.accept_sourceroute=1 >/dev/null 285249423Sdim fi 286249423Sdim 287249423Sdim if checkyesno ipxgateway_enable; then 288249423Sdim ropts_init 289249423Sdim echo -n ' IPX gateway=YES' 290249423Sdim sysctl net.ipx.ipx.ipxforwarding=1 >/dev/null 291249423Sdim fi 292249423Sdim 293249423Sdim if checkyesno arpproxy_all; then 294249423Sdim ropts_init 295249423Sdim echo -n ' ARP proxyall=YES' 296249423Sdim sysctl net.link.ether.inet.proxyall=1 >/dev/null 297249423Sdim fi 298249423Sdim 299249423Sdim [ -n "${_ropts_initdone}" ] && echo '.' 300249423Sdim} 301249423Sdim 302249423Sdimload_rc_config $name 303249423Sdimrun_rc_command "$@" 304249423Sdim