10696600cSBjoern A. Zeeb#!/bin/sh 20696600cSBjoern A. Zeeb# 30696600cSBjoern A. Zeeb 40696600cSBjoern A. Zeeb# PROVIDE: stf 50696600cSBjoern A. Zeeb# REQUIRE: netif 60696600cSBjoern A. Zeeb# KEYWORD: nojail 70696600cSBjoern A. Zeeb 80696600cSBjoern A. Zeeb. /etc/rc.subr 90696600cSBjoern A. Zeeb. /etc/network.subr 100696600cSBjoern A. Zeeb 110696600cSBjoern A. Zeebname="stf" 120696600cSBjoern A. Zeebdesc="6to4 tunnel interface" 130696600cSBjoern A. Zeebstart_cmd="stf_up" 140696600cSBjoern A. Zeebstop_cmd="stf_down" 150696600cSBjoern A. Zeeb 160696600cSBjoern A. Zeebstf_up() 170696600cSBjoern A. Zeeb{ 180696600cSBjoern A. Zeeb case ${stf_interface_ipv4addr} in 190696600cSBjoern A. Zeeb [Nn][Oo] | '') 200696600cSBjoern A. Zeeb ;; 210696600cSBjoern A. Zeeb *) 220696600cSBjoern A. Zeeb # assign IPv6 addr and interface route for 6to4 interface 230696600cSBjoern A. Zeeb stf_prefixlen=$((16+${stf_interface_ipv4plen:-0})) 240696600cSBjoern A. Zeeb OIFS="$IFS" 250696600cSBjoern A. Zeeb IFS=".$IFS" 260696600cSBjoern A. Zeeb set ${stf_interface_ipv4addr} 270696600cSBjoern A. Zeeb IFS="$OIFS" 280696600cSBjoern A. Zeeb hexfrag1=`hexprint $(($1*256 + $2))` 290696600cSBjoern A. Zeeb hexfrag2=`hexprint $(($3*256 + $4))` 300696600cSBjoern A. Zeeb ipv4_in_hexformat="${hexfrag1}:${hexfrag2}" 310696600cSBjoern A. Zeeb case ${stf_interface_ipv6_ifid} in 320696600cSBjoern A. Zeeb [Aa][Uu][Tt][Oo] | '') 330696600cSBjoern A. Zeeb for i in ${ipv6_network_interfaces}; do 340696600cSBjoern A. Zeeb laddr=`network6_getladdr ${i}` 350696600cSBjoern A. Zeeb case ${laddr} in 360696600cSBjoern A. Zeeb '') 370696600cSBjoern A. Zeeb ;; 380696600cSBjoern A. Zeeb *) 390696600cSBjoern A. Zeeb break 400696600cSBjoern A. Zeeb ;; 410696600cSBjoern A. Zeeb esac 420696600cSBjoern A. Zeeb done 430696600cSBjoern A. Zeeb stf_interface_ipv6_ifid=`expr "${laddr}" : \ 440696600cSBjoern A. Zeeb 'fe80::\(.*\)%\(.*\)'` 450696600cSBjoern A. Zeeb case ${stf_interface_ipv6_ifid} in 460696600cSBjoern A. Zeeb '') 470696600cSBjoern A. Zeeb stf_interface_ipv6_ifid=0:0:0:1 480696600cSBjoern A. Zeeb ;; 490696600cSBjoern A. Zeeb esac 500696600cSBjoern A. Zeeb ;; 510696600cSBjoern A. Zeeb esac 520696600cSBjoern A. Zeeb echo "Configuring 6to4 tunnel interface: stf0." 530696600cSBjoern A. Zeeb ifconfig stf0 create >/dev/null 2>&1 540696600cSBjoern A. Zeeb ifconfig stf0 inet6 2002:${ipv4_in_hexformat}:${stf_interface_ipv6_slaid:-0}:${stf_interface_ipv6_ifid} \ 550696600cSBjoern A. Zeeb prefixlen ${stf_prefixlen} 560696600cSBjoern A. Zeeb check_startmsgs && /sbin/ifconfig stf0 570696600cSBjoern A. Zeeb 580696600cSBjoern A. Zeeb # disallow packets to malicious 6to4 prefix 590696600cSBjoern A. Zeeb route add -inet6 2002:e000:: -prefixlen 20 ::1 -reject 600696600cSBjoern A. Zeeb route add -inet6 2002:7f00:: -prefixlen 24 ::1 -reject 610696600cSBjoern A. Zeeb route add -inet6 2002:0000:: -prefixlen 24 ::1 -reject 620696600cSBjoern A. Zeeb route add -inet6 2002:ff00:: -prefixlen 24 ::1 -reject 630696600cSBjoern A. Zeeb ;; 640696600cSBjoern A. Zeeb esac 650696600cSBjoern A. Zeeb} 660696600cSBjoern A. Zeeb 670696600cSBjoern A. Zeebstf_down() 680696600cSBjoern A. Zeeb{ 690696600cSBjoern A. Zeeb echo "Removing 6to4 tunnel interface: stf0." 700696600cSBjoern A. Zeeb ifconfig stf0 destroy 710696600cSBjoern A. Zeeb route delete -inet6 2002:e000:: -prefixlen 20 ::1 720696600cSBjoern A. Zeeb route delete -inet6 2002:7f00:: -prefixlen 24 ::1 730696600cSBjoern A. Zeeb route delete -inet6 2002:0000:: -prefixlen 24 ::1 740696600cSBjoern A. Zeeb route delete -inet6 2002:ff00:: -prefixlen 24 ::1 750696600cSBjoern A. Zeeb} 760696600cSBjoern A. Zeeb 770696600cSBjoern A. Zeebload_rc_config $name 78*f99f0ee1SAlexander Leidinger 79*f99f0ee1SAlexander Leidinger# doesn't make sense to run in a svcj: config setting 80*f99f0ee1SAlexander Leidingerstf_svcj="NO" 81*f99f0ee1SAlexander Leidinger 820696600cSBjoern A. Zeebrun_rc_command "$1" 83