1*0696600cSBjoern A. Zeeb#!/bin/sh 2*0696600cSBjoern A. Zeeb# 3*0696600cSBjoern A. Zeeb# Configure routing and miscellaneous network tunables 4*0696600cSBjoern A. Zeeb# 5*0696600cSBjoern A. Zeeb# $FreeBSD$ 6*0696600cSBjoern A. Zeeb# 7*0696600cSBjoern A. Zeeb 8*0696600cSBjoern A. Zeeb# PROVIDE: routing 9*0696600cSBjoern A. Zeeb# REQUIRE: netif ppp stf 10*0696600cSBjoern A. Zeeb# KEYWORD: nojailvnet 11*0696600cSBjoern A. Zeeb 12*0696600cSBjoern A. Zeeb. /etc/rc.subr 13*0696600cSBjoern A. Zeeb. /etc/network.subr 14*0696600cSBjoern A. Zeeb 15*0696600cSBjoern A. Zeebname="routing" 16*0696600cSBjoern A. Zeebdesc="Routing setup" 17*0696600cSBjoern A. Zeebstart_cmd="routing_start doall" 18*0696600cSBjoern A. Zeebstop_cmd="routing_stop" 19*0696600cSBjoern A. Zeebextra_commands="options static" 20*0696600cSBjoern A. Zeebstatic_cmd="routing_start static" 21*0696600cSBjoern A. Zeeboptions_cmd="routing_start options" 22*0696600cSBjoern A. Zeeb 23*0696600cSBjoern A. ZeebROUTE_CMD="/sbin/route" 24*0696600cSBjoern A. Zeeb 25*0696600cSBjoern A. Zeebrouting_start() 26*0696600cSBjoern A. Zeeb{ 27*0696600cSBjoern A. Zeeb local _cmd _af _if _a _ret 28*0696600cSBjoern A. Zeeb _cmd=$1 29*0696600cSBjoern A. Zeeb _af=$2 30*0696600cSBjoern A. Zeeb _if=$3 31*0696600cSBjoern A. Zeeb _ret=0 32*0696600cSBjoern A. Zeeb 33*0696600cSBjoern A. Zeeb case $_if in 34*0696600cSBjoern A. Zeeb ""|[Aa][Ll][Ll]|[Aa][Nn][Yy]) _if="" ;; 35*0696600cSBjoern A. Zeeb esac 36*0696600cSBjoern A. Zeeb 37*0696600cSBjoern A. Zeeb case $_af in 38*0696600cSBjoern A. Zeeb ""|[Aa][Ll][Ll]|[Aa][Nn][Yy]) 39*0696600cSBjoern A. Zeeb for _a in inet inet6; do 40*0696600cSBjoern A. Zeeb afexists $_a || continue 41*0696600cSBjoern A. Zeeb setroutes $_cmd $_a $_if || _ret=1 42*0696600cSBjoern A. Zeeb done 43*0696600cSBjoern A. Zeeb ;; 44*0696600cSBjoern A. Zeeb *) 45*0696600cSBjoern A. Zeeb if afexists $_af; then 46*0696600cSBjoern A. Zeeb setroutes $_cmd $_af $_if || _ret=1 47*0696600cSBjoern A. Zeeb else 48*0696600cSBjoern A. Zeeb err 1 "Unsupported address family: $_af." 49*0696600cSBjoern A. Zeeb fi 50*0696600cSBjoern A. Zeeb ;; 51*0696600cSBjoern A. Zeeb esac 52*0696600cSBjoern A. Zeeb 53*0696600cSBjoern A. Zeeb return $_ret 54*0696600cSBjoern A. Zeeb} 55*0696600cSBjoern A. Zeeb 56*0696600cSBjoern A. Zeebrouting_stop() 57*0696600cSBjoern A. Zeeb{ 58*0696600cSBjoern A. Zeeb local _af _if _a 59*0696600cSBjoern A. Zeeb _af=$1 60*0696600cSBjoern A. Zeeb _if=$2 61*0696600cSBjoern A. Zeeb 62*0696600cSBjoern A. Zeeb case $_if in 63*0696600cSBjoern A. Zeeb ""|[Aa][Ll][Ll]|[Aa][Nn][Yy]) _if="" ;; 64*0696600cSBjoern A. Zeeb esac 65*0696600cSBjoern A. Zeeb 66*0696600cSBjoern A. Zeeb case $_af in 67*0696600cSBjoern A. Zeeb ""|[Aa][Ll][Ll]|[Aa][Nn][Yy]) 68*0696600cSBjoern A. Zeeb for _a in inet inet6; do 69*0696600cSBjoern A. Zeeb afexists $_a || continue 70*0696600cSBjoern A. Zeeb eval static_${_a} delete $_if 71*0696600cSBjoern A. Zeeb # When $_if is specified, do not flush routes. 72*0696600cSBjoern A. Zeeb if ! [ -n "$_if" ]; then 73*0696600cSBjoern A. Zeeb eval routing_stop_${_a} 74*0696600cSBjoern A. Zeeb fi 75*0696600cSBjoern A. Zeeb done 76*0696600cSBjoern A. Zeeb ;; 77*0696600cSBjoern A. Zeeb *) 78*0696600cSBjoern A. Zeeb if afexists $_af; then 79*0696600cSBjoern A. Zeeb eval static_${_af} delete $_if 80*0696600cSBjoern A. Zeeb # When $_if is specified, do not flush routes. 81*0696600cSBjoern A. Zeeb if ! [ -n "$_if" ]; then 82*0696600cSBjoern A. Zeeb eval routing_stop_${_af} 83*0696600cSBjoern A. Zeeb fi 84*0696600cSBjoern A. Zeeb else 85*0696600cSBjoern A. Zeeb err 1 "Unsupported address family: $_af." 86*0696600cSBjoern A. Zeeb fi 87*0696600cSBjoern A. Zeeb ;; 88*0696600cSBjoern A. Zeeb esac 89*0696600cSBjoern A. Zeeb} 90*0696600cSBjoern A. Zeeb 91*0696600cSBjoern A. Zeebsetroutes() 92*0696600cSBjoern A. Zeeb{ 93*0696600cSBjoern A. Zeeb local _ret 94*0696600cSBjoern A. Zeeb _ret=0 95*0696600cSBjoern A. Zeeb case $1 in 96*0696600cSBjoern A. Zeeb static) 97*0696600cSBjoern A. Zeeb static_$2 add $3 98*0696600cSBjoern A. Zeeb _ret=$? 99*0696600cSBjoern A. Zeeb ;; 100*0696600cSBjoern A. Zeeb options) 101*0696600cSBjoern A. Zeeb options_$2 102*0696600cSBjoern A. Zeeb ;; 103*0696600cSBjoern A. Zeeb doall) 104*0696600cSBjoern A. Zeeb static_$2 add $3 105*0696600cSBjoern A. Zeeb _ret=$? 106*0696600cSBjoern A. Zeeb options_$2 107*0696600cSBjoern A. Zeeb ;; 108*0696600cSBjoern A. Zeeb esac 109*0696600cSBjoern A. Zeeb return $_ret 110*0696600cSBjoern A. Zeeb} 111*0696600cSBjoern A. Zeeb 112*0696600cSBjoern A. Zeebrouting_stop_inet() 113*0696600cSBjoern A. Zeeb{ 114*0696600cSBjoern A. Zeeb ${ROUTE_CMD} -n flush -inet 115*0696600cSBjoern A. Zeeb} 116*0696600cSBjoern A. Zeeb 117*0696600cSBjoern A. Zeebrouting_stop_inet6() 118*0696600cSBjoern A. Zeeb{ 119*0696600cSBjoern A. Zeeb local i 120*0696600cSBjoern A. Zeeb 121*0696600cSBjoern A. Zeeb ${ROUTE_CMD} -n flush -inet6 122*0696600cSBjoern A. Zeeb for i in `list_net_interfaces`; do 123*0696600cSBjoern A. Zeeb if ipv6if $i; then 124*0696600cSBjoern A. Zeeb ifconfig $i inet6 -defaultif 125*0696600cSBjoern A. Zeeb fi 126*0696600cSBjoern A. Zeeb done 127*0696600cSBjoern A. Zeeb} 128*0696600cSBjoern A. Zeeb 129*0696600cSBjoern A. Zeebget_fibmod() 130*0696600cSBjoern A. Zeeb{ 131*0696600cSBjoern A. Zeeb local _fibs 132*0696600cSBjoern A. Zeeb 133*0696600cSBjoern A. Zeeb _fibs=$((`${SYSCTL_N} net.fibs` - 1)) 134*0696600cSBjoern A. Zeeb if [ ${_fibs} -gt 0 ]; then 135*0696600cSBjoern A. Zeeb echo "-fib 0-${_fibs}" 136*0696600cSBjoern A. Zeeb else 137*0696600cSBjoern A. Zeeb echo 138*0696600cSBjoern A. Zeeb fi 139*0696600cSBjoern A. Zeeb} 140*0696600cSBjoern A. Zeeb 141*0696600cSBjoern A. Zeebstatic_inet() 142*0696600cSBjoern A. Zeeb{ 143*0696600cSBjoern A. Zeeb local _action _if _skip _fibmod 144*0696600cSBjoern A. Zeeb _action=$1 145*0696600cSBjoern A. Zeeb _if=$2 146*0696600cSBjoern A. Zeeb 147*0696600cSBjoern A. Zeeb _fibmod=`get_fibmod` 148*0696600cSBjoern A. Zeeb 149*0696600cSBjoern A. Zeeb # Provide loopback route in all routing tables. This has to come 150*0696600cSBjoern A. Zeeb # first so that any following routes can be added. 151*0696600cSBjoern A. Zeeb static_routes="_loopback ${static_routes}" 152*0696600cSBjoern A. Zeeb route__loopback="-inet 127.0.0.1 -iface lo0 ${_fibmod}" 153*0696600cSBjoern A. Zeeb 154*0696600cSBjoern A. Zeeb # Add default route. 155*0696600cSBjoern A. Zeeb case ${defaultrouter} in 156*0696600cSBjoern A. Zeeb [Nn][Oo] | '') 157*0696600cSBjoern A. Zeeb ;; 158*0696600cSBjoern A. Zeeb *) 159*0696600cSBjoern A. Zeeb static_routes="${static_routes} _default" 160*0696600cSBjoern A. Zeeb route__default="default ${defaultrouter}" 161*0696600cSBjoern A. Zeeb ;; 162*0696600cSBjoern A. Zeeb esac 163*0696600cSBjoern A. Zeeb 164*0696600cSBjoern A. Zeeb # Install configured routes. 165*0696600cSBjoern A. Zeeb if [ -n "${static_routes}" ]; then 166*0696600cSBjoern A. Zeeb for i in ${static_routes}; do 167*0696600cSBjoern A. Zeeb _skip=0 168*0696600cSBjoern A. Zeeb if [ -n "$_if" ]; then 169*0696600cSBjoern A. Zeeb case $i in 170*0696600cSBjoern A. Zeeb *:$_if) ;; 171*0696600cSBjoern A. Zeeb *) _skip=1 ;; 172*0696600cSBjoern A. Zeeb esac 173*0696600cSBjoern A. Zeeb fi 174*0696600cSBjoern A. Zeeb if [ $_skip = 0 ]; then 175*0696600cSBjoern A. Zeeb route_args=`get_if_var ${i%:*} route_IF` 176*0696600cSBjoern A. Zeeb if [ -n "$route_args" ]; then 177*0696600cSBjoern A. Zeeb ${ROUTE_CMD} ${_action} ${route_args} 178*0696600cSBjoern A. Zeeb else 179*0696600cSBjoern A. Zeeb warn "route_${i%:*} not found." 180*0696600cSBjoern A. Zeeb fi 181*0696600cSBjoern A. Zeeb fi 182*0696600cSBjoern A. Zeeb done 183*0696600cSBjoern A. Zeeb fi 184*0696600cSBjoern A. Zeeb} 185*0696600cSBjoern A. Zeeb 186*0696600cSBjoern A. Zeebstatic_inet6() 187*0696600cSBjoern A. Zeeb{ 188*0696600cSBjoern A. Zeeb local _action _if _skip fibmod allfibs 189*0696600cSBjoern A. Zeeb _action=$1 190*0696600cSBjoern A. Zeeb _if=$2 191*0696600cSBjoern A. Zeeb 192*0696600cSBjoern A. Zeeb fibmod=`get_fibmod` 193*0696600cSBjoern A. Zeeb 194*0696600cSBjoern A. Zeeb # Add pre-defined static routes first. 195*0696600cSBjoern A. Zeeb ipv6_static_routes="_v4mapped _v4compat ${ipv6_static_routes}" 196*0696600cSBjoern A. Zeeb ipv6_static_routes="_lla _llma ${ipv6_static_routes}" 197*0696600cSBjoern A. Zeeb ipv6_static_routes="_loopback ${ipv6_static_routes}" 198*0696600cSBjoern A. Zeeb 199*0696600cSBjoern A. Zeeb # disallow "internal" addresses to appear on the wire 200*0696600cSBjoern A. Zeeb ipv6_route__v4mapped="::ffff:0.0.0.0 -prefixlen 96 ::1 -reject ${fibmod}" 201*0696600cSBjoern A. Zeeb ipv6_route__v4compat="::0.0.0.0 -prefixlen 96 ::1 -reject ${fibmod}" 202*0696600cSBjoern A. Zeeb 203*0696600cSBjoern A. Zeeb # Create a loopback route in every fib 204*0696600cSBjoern A. Zeeb ipv6_route__loopback="::1 -prefixlen 128 -iface lo0 ${fibmod}" 205*0696600cSBjoern A. Zeeb 206*0696600cSBjoern A. Zeeb # Disallow link-local unicast packets without outgoing scope 207*0696600cSBjoern A. Zeeb # identifiers. However, if you set "ipv6_default_interface", 208*0696600cSBjoern A. Zeeb # for the host case, you will allow to omit the identifiers. 209*0696600cSBjoern A. Zeeb # Under this configuration, the packets will go to the default 210*0696600cSBjoern A. Zeeb # interface. 211*0696600cSBjoern A. Zeeb ipv6_route__lla="fe80:: -prefixlen 10 ::1 -reject ${fibmod}" 212*0696600cSBjoern A. Zeeb ipv6_route__llma="ff02:: -prefixlen 16 ::1 -reject ${fibmod}" 213*0696600cSBjoern A. Zeeb 214*0696600cSBjoern A. Zeeb # Add default route. 215*0696600cSBjoern A. Zeeb case ${ipv6_defaultrouter} in 216*0696600cSBjoern A. Zeeb [Nn][Oo] | '') 217*0696600cSBjoern A. Zeeb ;; 218*0696600cSBjoern A. Zeeb *) 219*0696600cSBjoern A. Zeeb ipv6_static_routes="${ipv6_static_routes} _default" 220*0696600cSBjoern A. Zeeb ipv6_route__default="default ${ipv6_defaultrouter}" 221*0696600cSBjoern A. Zeeb ;; 222*0696600cSBjoern A. Zeeb esac 223*0696600cSBjoern A. Zeeb 224*0696600cSBjoern A. Zeeb # Install configured routes. 225*0696600cSBjoern A. Zeeb if [ -n "${ipv6_static_routes}" ]; then 226*0696600cSBjoern A. Zeeb for i in ${ipv6_static_routes}; do 227*0696600cSBjoern A. Zeeb _skip=0 228*0696600cSBjoern A. Zeeb if [ -n "$_if" ]; then 229*0696600cSBjoern A. Zeeb case $i in 230*0696600cSBjoern A. Zeeb *:$_if) ;; 231*0696600cSBjoern A. Zeeb *) _skip=1 ;; 232*0696600cSBjoern A. Zeeb esac 233*0696600cSBjoern A. Zeeb fi 234*0696600cSBjoern A. Zeeb if [ $_skip = 0 ]; then 235*0696600cSBjoern A. Zeeb ipv6_route_args=`get_if_var ${i%:*} ipv6_route_IF` 236*0696600cSBjoern A. Zeeb if [ -n "$ipv6_route_args" ]; then 237*0696600cSBjoern A. Zeeb ${ROUTE_CMD} ${_action} \ 238*0696600cSBjoern A. Zeeb -inet6 ${ipv6_route_args} 239*0696600cSBjoern A. Zeeb else 240*0696600cSBjoern A. Zeeb warn "route_${i%:*} not found" 241*0696600cSBjoern A. Zeeb fi 242*0696600cSBjoern A. Zeeb fi 243*0696600cSBjoern A. Zeeb done 244*0696600cSBjoern A. Zeeb fi 245*0696600cSBjoern A. Zeeb 246*0696600cSBjoern A. Zeeb # Install the "default interface" to kernel, which will be used 247*0696600cSBjoern A. Zeeb # as the default route when there's no router. 248*0696600cSBjoern A. Zeeb 249*0696600cSBjoern A. Zeeb # Disable installing the default interface when we act 250*0696600cSBjoern A. Zeeb # as router to avoid conflict between the default 251*0696600cSBjoern A. Zeeb # router list and the manual configured default route. 252*0696600cSBjoern A. Zeeb if checkyesno ipv6_gateway_enable; then 253*0696600cSBjoern A. Zeeb return 254*0696600cSBjoern A. Zeeb fi 255*0696600cSBjoern A. Zeeb 256*0696600cSBjoern A. Zeeb case "${ipv6_default_interface}" in 257*0696600cSBjoern A. Zeeb [Nn][Oo] | [Nn][Oo][Nn][Ee]) 258*0696600cSBjoern A. Zeeb return 259*0696600cSBjoern A. Zeeb ;; 260*0696600cSBjoern A. Zeeb [Aa][Uu][Tt][Oo] | "") 261*0696600cSBjoern A. Zeeb for i in ${ipv6_network_interfaces}; do 262*0696600cSBjoern A. Zeeb case $i in 263*0696600cSBjoern A. Zeeb [Nn][Oo][Nn][Ee]) 264*0696600cSBjoern A. Zeeb return 265*0696600cSBjoern A. Zeeb ;; 266*0696600cSBjoern A. Zeeb lo0) 267*0696600cSBjoern A. Zeeb continue 268*0696600cSBjoern A. Zeeb ;; 269*0696600cSBjoern A. Zeeb esac 270*0696600cSBjoern A. Zeeb laddr=`network6_getladdr $i exclude_tentative` 271*0696600cSBjoern A. Zeeb case ${laddr} in 272*0696600cSBjoern A. Zeeb '') 273*0696600cSBjoern A. Zeeb ;; 274*0696600cSBjoern A. Zeeb *) 275*0696600cSBjoern A. Zeeb ipv6_default_interface=$i 276*0696600cSBjoern A. Zeeb break 277*0696600cSBjoern A. Zeeb ;; 278*0696600cSBjoern A. Zeeb esac 279*0696600cSBjoern A. Zeeb done 280*0696600cSBjoern A. Zeeb ;; 281*0696600cSBjoern A. Zeeb esac 282*0696600cSBjoern A. Zeeb 283*0696600cSBjoern A. Zeeb ifconfig ${ipv6_default_interface} inet6 defaultif 284*0696600cSBjoern A. Zeeb ${SYSCTL} net.inet6.ip6.use_defaultzone=1 > /dev/null 285*0696600cSBjoern A. Zeeb} 286*0696600cSBjoern A. Zeeb 287*0696600cSBjoern A. Zeebropts_init() 288*0696600cSBjoern A. Zeeb{ 289*0696600cSBjoern A. Zeeb if [ -z "${_ropts_initdone}" ]; then 290*0696600cSBjoern A. Zeeb echo -n "Additional $1 routing options:" 291*0696600cSBjoern A. Zeeb _ropts_initdone=yes 292*0696600cSBjoern A. Zeeb fi 293*0696600cSBjoern A. Zeeb} 294*0696600cSBjoern A. Zeeb 295*0696600cSBjoern A. Zeeboptions_inet() 296*0696600cSBjoern A. Zeeb{ 297*0696600cSBjoern A. Zeeb _ropts_initdone= 298*0696600cSBjoern A. Zeeb if checkyesno icmp_bmcastecho; then 299*0696600cSBjoern A. Zeeb ropts_init inet 300*0696600cSBjoern A. Zeeb echo -n ' broadcast ping responses=YES' 301*0696600cSBjoern A. Zeeb ${SYSCTL} net.inet.icmp.bmcastecho=1 > /dev/null 302*0696600cSBjoern A. Zeeb else 303*0696600cSBjoern A. Zeeb ${SYSCTL} net.inet.icmp.bmcastecho=0 > /dev/null 304*0696600cSBjoern A. Zeeb fi 305*0696600cSBjoern A. Zeeb 306*0696600cSBjoern A. Zeeb if checkyesno icmp_drop_redirect; then 307*0696600cSBjoern A. Zeeb ropts_init inet 308*0696600cSBjoern A. Zeeb echo -n ' ignore ICMP redirect=YES' 309*0696600cSBjoern A. Zeeb ${SYSCTL} net.inet.icmp.drop_redirect=1 > /dev/null 310*0696600cSBjoern A. Zeeb else 311*0696600cSBjoern A. Zeeb ${SYSCTL} net.inet.icmp.drop_redirect=0 > /dev/null 312*0696600cSBjoern A. Zeeb fi 313*0696600cSBjoern A. Zeeb 314*0696600cSBjoern A. Zeeb if checkyesno icmp_log_redirect; then 315*0696600cSBjoern A. Zeeb ropts_init inet 316*0696600cSBjoern A. Zeeb echo -n ' log ICMP redirect=YES' 317*0696600cSBjoern A. Zeeb ${SYSCTL} net.inet.icmp.log_redirect=1 > /dev/null 318*0696600cSBjoern A. Zeeb else 319*0696600cSBjoern A. Zeeb ${SYSCTL} net.inet.icmp.log_redirect=0 > /dev/null 320*0696600cSBjoern A. Zeeb fi 321*0696600cSBjoern A. Zeeb 322*0696600cSBjoern A. Zeeb if checkyesno gateway_enable; then 323*0696600cSBjoern A. Zeeb ropts_init inet 324*0696600cSBjoern A. Zeeb echo -n ' gateway=YES' 325*0696600cSBjoern A. Zeeb ${SYSCTL} net.inet.ip.forwarding=1 > /dev/null 326*0696600cSBjoern A. Zeeb else 327*0696600cSBjoern A. Zeeb ${SYSCTL} net.inet.ip.forwarding=0 > /dev/null 328*0696600cSBjoern A. Zeeb fi 329*0696600cSBjoern A. Zeeb 330*0696600cSBjoern A. Zeeb if checkyesno forward_sourceroute; then 331*0696600cSBjoern A. Zeeb ropts_init inet 332*0696600cSBjoern A. Zeeb echo -n ' do source routing=YES' 333*0696600cSBjoern A. Zeeb ${SYSCTL} net.inet.ip.sourceroute=1 > /dev/null 334*0696600cSBjoern A. Zeeb else 335*0696600cSBjoern A. Zeeb ${SYSCTL} net.inet.ip.sourceroute=0 > /dev/null 336*0696600cSBjoern A. Zeeb fi 337*0696600cSBjoern A. Zeeb 338*0696600cSBjoern A. Zeeb if checkyesno accept_sourceroute; then 339*0696600cSBjoern A. Zeeb ropts_init inet 340*0696600cSBjoern A. Zeeb echo -n ' accept source routing=YES' 341*0696600cSBjoern A. Zeeb ${SYSCTL} net.inet.ip.accept_sourceroute=1 > /dev/null 342*0696600cSBjoern A. Zeeb else 343*0696600cSBjoern A. Zeeb ${SYSCTL} net.inet.ip.accept_sourceroute=0 > /dev/null 344*0696600cSBjoern A. Zeeb fi 345*0696600cSBjoern A. Zeeb 346*0696600cSBjoern A. Zeeb if checkyesno arpproxy_all; then 347*0696600cSBjoern A. Zeeb ropts_init inet 348*0696600cSBjoern A. Zeeb echo -n ' ARP proxyall=YES' 349*0696600cSBjoern A. Zeeb ${SYSCTL} net.link.ether.inet.proxyall=1 > /dev/null 350*0696600cSBjoern A. Zeeb else 351*0696600cSBjoern A. Zeeb ${SYSCTL} net.link.ether.inet.proxyall=0 > /dev/null 352*0696600cSBjoern A. Zeeb fi 353*0696600cSBjoern A. Zeeb 354*0696600cSBjoern A. Zeeb [ -n "${_ropts_initdone}" ] && echo '.' 355*0696600cSBjoern A. Zeeb} 356*0696600cSBjoern A. Zeeb 357*0696600cSBjoern A. Zeeboptions_inet6() 358*0696600cSBjoern A. Zeeb{ 359*0696600cSBjoern A. Zeeb _ropts_initdone= 360*0696600cSBjoern A. Zeeb 361*0696600cSBjoern A. Zeeb if checkyesno ipv6_gateway_enable; then 362*0696600cSBjoern A. Zeeb ropts_init inet6 363*0696600cSBjoern A. Zeeb echo -n ' gateway=YES' 364*0696600cSBjoern A. Zeeb ${SYSCTL} net.inet6.ip6.forwarding=1 > /dev/null 365*0696600cSBjoern A. Zeeb else 366*0696600cSBjoern A. Zeeb ${SYSCTL} net.inet6.ip6.forwarding=0 > /dev/null 367*0696600cSBjoern A. Zeeb fi 368*0696600cSBjoern A. Zeeb 369*0696600cSBjoern A. Zeeb [ -n "${_ropts_initdone}" ] && echo '.' 370*0696600cSBjoern A. Zeeb} 371*0696600cSBjoern A. Zeeb 372*0696600cSBjoern A. Zeebload_rc_config $name 373*0696600cSBjoern A. Zeebrun_rc_command "$@" 374