Uma opção é usar um trabalho root cron
que é executado a cada minuto com o seguinte script (com saída anexada a um arquivo de log):
#!/bin/bash
USAGE=$(awk '/wlan0/ {print $2+$10}' /proc/net/dev)
USAGEMIB=$(echo "$USAGE" | awk '{printf "%0.1f", $1 / 1024 / 1024}')
LIMIT=500
ABOVELIMIT=$(echo "$USAGEMIB" "$LIMIT"| awk '$1 > $2 {print "1"}')
echo -e $(date)"\t"$USAGE"\t"$USAGEMIB" MiB"
if [ "$ABOVELIMIT" == "1" ]
then
echo "Limit reached."
/sbin/ifdown wlan0
fi
Isso soma os bytes recebidos e transferidos na entrada relevante em /proc/net/dev
, imprime como bytes e MiB para stdout (redirecionado para um log) e se o uso exceder o limite que é codificado no arquivo próximo ao top traz a conexão. Não é particularmente robusto (em particular, não tem nenhum tratamento de erros), mas deve servir ao propósito pretendido.