Во первых спасибо участникам проекта за проделанную работу.
Теперь у меня есть WiMax через WiFi.
Мой скромный вклад в общее дело: "Получение статистики как в Win программе Yota".
В основном всё сделано по инструкциям с этого форума.
Прошивка 1.9.2.7-d-r401.
madwimax версии 1.1.0 находится в /usr/local/sbin/ (внутренний флэш)
Скрипты такие:
Code:
/usr/local/sbin/post-boot----
#!/bin/sh
crond
insmod tun.o
(while true; do /usr/local/sbin/madwimax -vvof -e /usr/local/etc/madwimax/event.sh -l /tmp/madwimax.log 2>&1 >/tmp/madwimaxd.log; sleep 10; done )&
-----------------------------
/usr/local/etc/madwimax/event.sh----
#!/bin/sh
# Usage: event.sh <event> <if-name>
# http://wl500g.info/showthread.php?t=17005&page=7
case "$1" in
start)
;;
end)
;;
if-up)
/sbin/udhcpc -i "$2" -p /var/run/udhcpc1.pid -s /usr/local/etc/udhcpc/udhcpc.script -b
iptables -A INPUT -i "$2" -m state --state NEW -j SECURITY
iptables -A FORWARD -i "$2" -m state --state NEW -j SECURITY
iptables -t nat -A POSTROUTING -o "$2" ! -s `ifconfig "$2" | grep 'inet addr' | tr ':' ' ' | awk '{print $3}'` -j MASQUERADE
iptables -I FORWARD -o "$2" -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
;;
if-down)
cat /var/run/udhcpc1.pid | xargs -i kill -TERM {}
;;
*)
echo "Usage: $0 {start|end|if-up|if-down}" >&2
exit 3
;;
esac
------------------------------------
/usr/local/etc/udhcpc/udhcpc.script----
#!/bin/sh
RESOLV_CONF=/tmp/resolv.conf
case "$1" in
bound|renew)
ifconfig $interface up
ifconfig $interface $ip netmask $subnet
route add default gw $router
for ii in $dns; do
echo nameserver $ii >> $RESOLV_CONF
done
# trigger dnsmasq restart
kill -s SIGHUP `pidof dnsmasq`
;;
deconfig)
ifconfig $interface 0.0.0.0
#ifconfig $interface down
echo deleting $RESOLV_CONF
echo -n > $RESOLV_CONF
kill -s SIGHUP `pidof dnsmasq`
;;
esac
---------------------------------------
то что приведено выше отличается не принципиально.
Далее идёт, собственно, моя система "растяжек и подпорок" реализующая нужный функционал.
- нужно создать каталог /var/spool/cron/crontabs
$ mkdir -p /var/spool/cron/crontabs
- командой 'crontab -e' создать задачу для крона которая будет собирать статистику по интерфейсу wimax0
Code:
/var/spool/cron/crontabs/admin------------------------------------
* * * * * /usr/local/etc/madwimax/stat_wimax0.sh >> /tmp/stat.log
------------------------------------------------------------------
- создать (например в /usr/local/etc/madwimax) два скрипта (и не забыть сделать их исполнимыми :
Code:
/usr/local/etc/madwimax/get_wimax_info.sh-----------------------------------
#!/bin/sh
interface="wimax0"
ip=`ifconfig $interface | grep 'inet addr'|tr ':' ' ' | awk '{ print $3}'`
mac=`ifconfig $interface | grep HWa | awk '{print $5}' | tr -d ':'`
bsid=`tail -3 /tmp/madwimax.log | grep BSID | awk '{print $2}'| tr -d ':'`
rx_p=`tail -3 /tmp/madwimax.log | grep RSSI | awk '{print $2}'`
cinr=`tail -3 /tmp/madwimax.log | grep CINR | awk '{print $4}'`
tx_p=`tail -3 /tmp/madwimax.log | grep 'TX Power' | awk '{print $7}'`
frq=`tail -3 /tmp/madwimax.log | grep Frequency | awk '{print $9}'`
echo "IP address: $ip"
echo "MAC address: $mac"
echo "BSID: $bsid"
echo "Frequency: $frq"
echo "CINR: $cinr"
echo "RX sigal: $rx_p"
echo "TX sigal: $tx_p"
----------------------------------------------------------------------------
/usr/local/etc/madwimax/stat_wimax0.sh--------------------------------------
#!/bin/sh
interface="wimax0"
data_file=/tmp/wimax0.stat
rx_tx=`ifconfig $interface| grep 'RX bytes`
rx=`echo $rx_tx | tr ':' ' ' | awk '{print $3}'`
tx=`echo $rx_tx | tr ':' ' ' | awk '{print $8}'`
echo "current counters is $rx $tx"
if [[ ! -f $data_file ]]; then
echo "$rx $tx 0 0" > $data_file
echo "initialize stat with $rx $tx"
exit 1;
fi
read pi po si_max so_max< $data_file
drx=$(( ( ( ( rx - pi ) / 60 ) * 8 ) / 1024 ))
echo "RX speed is $drx kbit/c"
dtx=$(( ( ( ( tx - po ) / 60 ) * 8 ) / 1024 ))
echo "TX speed is $dtx kbit/c"
if [[ $si_max -lt $drx ]]; then
si_max=$drx
fi
if [[ $so_max -lt $dtx ]]; then
so_max=$dtx
fi
echo "Maximum RX/TX speed is $si_max/$so_max kbit/s"
echo "$rx $tx $si_max $so_max" > $data_file
----------------------------------------------------------------------------
Результат:
----------
Теперь можно зайти в web-морде в 'System Setup/System Command', в поле 'System Command'
помещать следующие команды и лицезреть результаты:
Code:
tail -n 3 /tmp/stat.log---------------
RX speed is 10 kbit/c
TX speed is 2 kbit/c
Maximum RX/TX speed is 13/16 kbit/s
--------------------------------------
/usr/local/etc/madwimax/get_wimax_info.sh--
IP address: 10.128.12.252
MAC address: 00xxxxxxxxxx
BSID: 0000150100d4
Frequency: 2525000
CINR: 6.250000
RX sigal: -85
TX sigal: 23
-------------------------------------------
Всё вышеприведённое следует воспринимать как повод к размышлению.
Если использовать всё так как я привёл - через какоето время /tmp будет полностью забит файлами
stat.log и madwimax.log
Дабы этого избежать нужно, скажем в скрипт прописаный в кроне вставить что то вроде:
Code:
tail -n 10 /tmp/madwimax.log >/tmp/tmp.tmp
cat /tmp/tmp.tmp > /tmp/madwimax.log
tail -n 10 /tmp/stat.log >/tmp/tmp.tmp
cat /tmp/tmp.tmp > /tmp/stat.log
Есть ещё проблема с переполнением счётчиков в ifconfig и превышение ими значений с которыми справится арифметика shell.
!!! Это не готовый рецепт а скорее заготовка но позволяющая получать некоторое время после старта (у меня несколько суток) более или менее адекватную информацию о WiMax !!!
Идеально было бы что бы сам madwimax выдавал всю эту информацию, например, через named pipe...
В данный момент поддержка WiMax к этому проекту пришита белыми нитками.
Нужно создать и интегрировать в web-морду поддержку множественных WAN (wimax, GSM, ...)
Я, к сожаленю, пока далёк от полного понимания как устроена сетевая архитектура и как она взаимодействует с Web интерфейсом.