Freifunk

WDSL Drossel

Zum Hintergrund: Ein lokaler Internetprovider bietet Vertragsbedingt 75GB monatliches Inklusivvolumen. Dieses harte Limit gilt es nicht zu überschreitem. Es wird in kurzen Abständen der Zählerstand des Providers als Berechnungsgrundlage herangezogen.

Mit u.g. Parametern passiert folgendes: Verbrauchtes Volumen bis 20 GB, der FF Router justiert sich auf 3,5Mbit Down 0,6 Mbit up =4,1 Mbit kummuliert.

Die Droßel setzt bei einem verbrauchten Volumen von 20,72 langsam an.

Sind 40/75 GB verbraucht werden nur noch 2,315 MBit 3/4 davon Downlink freigegeben.

Sind 64/75 GB verbraucht werden nur noch 0,093 3/4 davon Downlink freigegeben.

Das untere Limit liegt bei 56/16 Kbit/s was unter härtesten bedingen zu maximal 0,778 GB traffic am Tag führen kann.

"Das sollte so passen"....was soll denn da schon schief gehen?

I puked all over my shell…

#!/bin/sh

kluid='root'
klpwd='admin'
monthly_gb=65
max_ingress=3500
max_egress=600
interface='mesh-vpn'

cookiejar=$(mktemp -t swmr.XXXXXX)
curl -c $cookiejar -m 10 'http://kundenlogin.wdsl-mr.de/?go=login' -F "kluid=$kluid" -F "klpwd=$klpwd" -s -o /dev/null
current_gb=$(curl -b $cookiejar -m 10 'http://kundenlogin.wdsl-mr.de/?go=volumen' -s | sed -n 's/.*= <strong>\(.*\),\(.*\) GB<\/strong>.*/\1.\2/p;T;q')
rm $cookiejar

if [ "$current_gb" == "" ]; then
	current_gb=$monthly_gb
fi

limit_bandwidth=$(awk -v current_gb="$current_gb" -v monthly_gb="$monthly_gb" 'BEGIN {print int(((monthly_gb - current_gb) * 1024 * 1024 * 8) / 86400)}')  # kbit/s over 24h
limit_ingress=$(($limit_bandwidth * 3 / 4))
limit_egress=$(($limit_bandwidth * 1 / 4))

if [ $limit_ingress -le 0 ]; then
	limit_ingress=56
elif [ $limit_ingress -ge $max_ingress ]; then
	limit_ingress=$max_ingress
fi

if [ $limit_egress -le 0 ]; then
	limit_egress=32
elif [ $limit_egress -ge $max_egress ]; then
	limit_egress=$max_egress
fi

simple-tc "$interface" "$limit_ingress" "$limit_egress"
logger -p 5 -t swmr_shape "Current traffic: $current_gb GB -> Limit ingress: $limit_ingress kbit/s, egress: $limit_egress kbit/s on $interface"