Ho fatto lo script che mi serviva per far riallineare il router nel caso in cui il SNR Margin sia al di sotto di un certo limite:
Codice:
#!/bin/sh
SNR=`adslctl info --show | grep SNR | sed 's/[^0-9]//g' | sed 's/[0-9][0-9][0-9][0-9]$//'`
if [ ${#SNR} = 0 ]; then
#maybe it's retraining
exit 1
fi
RETRAIN_SNR=`nvram get adsl_retrain_snr | sed 's/name=//'`
if [ $SNR -gt $RETRAIN_SNR ]; then
#no need to retrain line
exit 0
fi
#line will be retrained
uptime >> /tmp/retrain.log
echo "SNR Margin value is $SNR dB and limit is $RETRAIN_SNR...training line" >> /tmp/retrain.log
adslctl configure --snr `nvram get adsl_snr | sed 's/name=//'`
Testato sul router funziona perfettamente.
# nvram set adsl_retrain_snr=10
# /tmp/retrainlimit.sh
# cat /tmp/retrain.log
18:20:10 up 10:30, load average: 0.00, 0.00, 0.00
SNR Margin value is 10 dB and limit is 10...training line
# nvram set adsl_retrain_snr=6
# /tmp/retrainlimit.sh
# cat /tmp/retrain.log
18:20:10 up 10:30, load average: 0.00, 0.00, 0.00
SNR Margin value is 10 dB and limit is 10...training line
Ora devo solo impacchettare il nuovo firmware e trovare il modo di farlo girare una volta ogni paio di minuti (a quanto pare devo fare un loop continuo, visto che crontab č praticamente inutilizzabile).