aboutsummaryrefslogtreecommitdiff
path: root/net/ip6rd.sh
diff options
context:
space:
mode:
Diffstat (limited to 'net/ip6rd.sh')
-rw-r--r--net/ip6rd.sh175
1 files changed, 0 insertions, 175 deletions
diff --git a/net/ip6rd.sh b/net/ip6rd.sh
deleted file mode 100644
index a35e2b76..00000000
--- a/net/ip6rd.sh
+++ /dev/null
@@ -1,175 +0,0 @@
-# Copyright (c) 2011 by Gentoo Foundation
-# Released under the 2-clause BSD license.
-
-_config_vars="$_config_vars link prefix suffix ipv4mask relay"
-
-ip6rd_depend()
-{
- program ip
- after interface
-}
-
-ip6rd_pre_start()
-{
- # ALL interfaces run pre_start blocks, not just those with something
- # assigned, so we must check if we need to run on this interface before we
- # do so.
- local config
- eval config=\$config_${IFVAR}
- [ "$config" = "ip6rd" ] || return 0
-
- case "${MODULES}" in
- *" ifconfig "*)
- eerror "ifconfig is not supported for 6rd"
- eerror "Please emerge sys-apps/iproute2"
- return 1
- ;;
- esac
-
- local host= suffix= relay= addr= iface=${IFACE} config_ip6rd= localip= ipv4mask=
- eval host=\$link_${IFVAR}
- if [ -z "${host}" ]; then
- eerror "link_${IFVAR} not set"
- return 1
- fi
-
- eval host=\${link_${IFVAR}}
- eval ipv4mask=\${ipv4mask_${IFVAR}:-0}
- eval suffix=\${suffix_${IFVAR}:-1}
- eval relay=\${relay_${IFVAR}}
- eval prefix=\${prefix_${IFVAR}}
-
- IFACE=${host}
- addrs=$(_get_inet_addresses)
- IFACE=${iface}
- if [ -z "${addrs}" ]; then
- eerror "${host} is not configured with an IPv4 address"
- return 1
- fi
- # TODO: Get this settings from DHCP (Option 212)
- if [ -z "${prefix}" ]; then
- eerror "prefix_${IFVAR} not set"
- return 1
- fi
- if [ -z "${relay}" ]; then
- eerror "relay_${IFVAR} not set"
- return 1
- fi
- for addr in ${addrs}; do
- # Strip the subnet
- local ip="${addr%/*}" subnet="${addr#*/}"
- # We don't work on private IPv4 addresses
- if _ip6rd_inet_is_private_network "${ip}"
- then
- continue
- fi
-
- local ip6= ip6_prefix="${prefix%::/*}" ip6_subnet="${prefix#*/}"
- ip6_subnet=$((ip6_subnet + (32-ipv4mask)))
- eval ip6="$(printf "${ip6_prefix}:%s::%s" \
- $(_ip6rd_prefix_shave_bits ${ip} ${ipv4mask}) ${suffix})"
- veinfo "Derived IPv6 address: ${ip6}"
-
- # Now apply our IPv6 address to our config
- config_ip6rd="${config_ip6rd}${config_ip6rd:+ }${ip6}/${ip6_subnet}"
-
- if [ -n "${localip}" ]; then
- localip="any"
- else
- localip="${ip}"
- fi
- done
-
- if [ -z "${config_ip6rd}" ]; then
- eerror "No global IPv4 addresses found on interface ${host}"
- return 1
- fi
-
- ebegin "Creating 6rd tunnel ${IFACE}"
- if [ "${IFACE}" != "sit0" ]; then
- _tunnel add "${IFACE}" mode sit ttl 255 remote any local "${localip}"
- fi
- _tunnel 6rd dev "${IFACE}" 6rd-prefix "${prefix}"
- eend $? || return 1
- _up
-
- routes_ip6rd="2003::/3 via ::${relay} metric 2147483647"
- service_set_value "config_ip6rd_$IFVAR" "$config_ip6rd"
- service_set_value "routes_ip6rd_$IFVAR" "$routes_ip6rd"
-}
-
-ip6rd_start()
-{
- local config_ip6rd=$(service_get_value "config_ip6rd_$IFVAR")
- local routes_ip6rd=$(service_get_value "routes_ip6rd_$IFVAR")
-
- # Now apply our config
- eval config_${config_index}=\'"${config_ip6rd}"\'
- : $(( config_index -= 1 ))
-
- # Add a route for us, ensuring we don't delete anything else
- local routes="$(_get_array "routes_${IFVAR}")
-$routes_ip6rd"
- eval routes_${IFVAR}=\$routes
-}
-
-_ip6rd_inet_atoi()
-{
- local IFS="${IFS}." ipi=0 j=3
- for i in $1 ; do
- # post-decrement isn't valid
- ipi=$(( ipi | (i << (8*j)) ))
- j=$(( j - 1 ))
- done
- echo ${ipi}
-}
-
-_ip6rd_inet_itoa()
-{
- local ipi=$1 bitmask v
- bitmask=$(( (1 << 24)-1 ))
- for i in 0 1 2 3; do
- v=$(( (ipi & ~bitmask) >> 24 ))
- ipi=$(( (ipi & bitmask) << 8 ))
- if [ $i != 3 ] ; then
- printf "%d." $v
- else
- printf "%d\n" $v
- fi
- done
-}
-
-_ip6rd_inet_get_network()
-{
- local a=$(_ip6rd_inet_atoi $1)
- local net=$(( a & ( (1<<$2)-1 ) ))
- local cidr=$(( 32 - $2 ))
- echo $(_ip6rd_inet_itoa $(( (net << cidr ) )) )
-}
-
-_ip6rd_inet_is_private_network()
-{
- if [ "$(_ip6rd_inet_get_network $1 16)" = "192.168.0.0" ]\
- || [ "$(_ip6rd_inet_get_network $1 8)" = "10.0.0.0" ]\
- || [ "$(_ip6rd_inet_get_network $1 12)" = "172.16.0.0" ]\
- || [ "$(_ip6rd_inet_get_network $1 16)" = "169.254.0.0" ]
- then
- return 0;
- fi
- return 1;
-}
-
-_ip6rd_prefix_shave_bits()
-{
- local ipi=
- ipi=$(( ($(_ip6rd_inet_atoi $1) & (1<<(32-$2))-1) << $2))
- if [ $2 -le 16 ]
- then
- printf "%04x:%0$(( (16-$2>>2)+(($2%4)?1:0) ))x" \
- $((ipi >> 16)) $((ipi & (1<<(16-$2))-1))
- elif [ $2 -lt 32 ]
- then
- printf "%0$(( (32-$2>>2)+(($2%4)?1:0) ))x" \
- $((ipi >> 16))
- fi
-}