stf revision 197697
1#!/bin/sh 2# $FreeBSD: head/etc/rc.d/stf 197697 2009-10-02 02:24:25Z hrs $ 3# 4 5# PROVIDE: stf 6# REQUIRE: netif routing 7# KEYWORD: nojail 8 9. /etc/rc.subr 10. /etc/network.subr 11 12name="stf" 13start_cmd="stf_up" 14stop_cmd="stf_down" 15 16stf_up() 17{ 18 afexists inet6 || return 0 19 20 case ${stf_interface_ipv4addr} in 21 [Nn][Oo] | '') 22 ;; 23 *) 24 # assign IPv6 addr and interface route for 6to4 interface 25 stf_prefixlen=$((16+${stf_interface_ipv4plen:-0})) 26 OIFS="$IFS" 27 IFS=".$IFS" 28 set ${stf_interface_ipv4addr} 29 IFS="$OIFS" 30 hexfrag1=`hexprint $(($1*256 + $2))` 31 hexfrag2=`hexprint $(($3*256 + $4))` 32 ipv4_in_hexformat="${hexfrag1}:${hexfrag2}" 33 case ${stf_interface_ipv6_ifid} in 34 [Aa][Uu][Tt][Oo] | '') 35 for i in ${ipv6_network_interfaces}; do 36 laddr=`network6_getladdr ${i}` 37 case ${laddr} in 38 '') 39 ;; 40 *) 41 break 42 ;; 43 esac 44 done 45 stf_interface_ipv6_ifid=`expr "${laddr}" : \ 46 'fe80::\(.*\)%\(.*\)'` 47 case ${stf_interface_ipv6_ifid} in 48 '') 49 stf_interface_ipv6_ifid=0:0:0:1 50 ;; 51 esac 52 ;; 53 esac 54 echo "Configuring 6to4 tunnel interface: stf0." 55 ifconfig stf0 create >/dev/null 2>&1 56 ifconfig stf0 inet6 2002:${ipv4_in_hexformat}:${stf_interface_ipv6_slaid:-0}:${stf_interface_ipv6_ifid} \ 57 prefixlen ${stf_prefixlen} 58 if [ -z "${rc_quiet}" ]; then 59 /sbin/ifconfig stf0 60 fi 61 # disallow packets to malicious 6to4 prefix 62 route add -inet6 2002:e000:: -prefixlen 20 ::1 -reject 63 route add -inet6 2002:7f00:: -prefixlen 24 ::1 -reject 64 route add -inet6 2002:0000:: -prefixlen 24 ::1 -reject 65 route add -inet6 2002:ff00:: -prefixlen 24 ::1 -reject 66 ;; 67 esac 68} 69 70stf_down() 71{ 72 afexists inet6 || return 0 73 74 echo "Removing 6to4 tunnel interface: stf0." 75 ifconfig stf0 destroy 76 route delete -inet6 2002:e000:: -prefixlen 20 ::1 77 route delete -inet6 2002:7f00:: -prefixlen 24 ::1 78 route delete -inet6 2002:0000:: -prefixlen 24 ::1 79 route delete -inet6 2002:ff00:: -prefixlen 24 ::1 80} 81 82load_rc_config $name 83run_rc_command "$1" 84