/usr/bin/pgprs-setup
and
/usr/bin/pgprs-connect
This suite resides in /lib/modules/all-firmware/
as extracted folder or tarball ( pgprs/ or pgprs.tar.gz ) .
I try to implement some code from rc.shutdown to collect transmission and write it to a file in /var .
The code to collect is from Barry or rerwin .
Code: Select all
#!/bin/sh
mkdir -p /var/local/sns
mkdir -p /var/local/sns/ppp0
fun_touch_files(){
for ONECOUNT in \
sns/r sns/t pupdial/isp1/r pupdial/isp1/t pupdial/isp2/r pupdial/isp2/t ppp0/r ppp0/t sns/ppp0/r sns/ppp0/t
do mkdir -p /var/local/${ONECOUNT%/*}
touch /var/local/${ONECOUNT}x_bytes_month
done
}
fun_reset_month(){
LANG=C UPDATE_MONTH=`date +%b`
read CURRENT_MONTH</var/local/sns/current_month
[ "$CURRENT_MONTH" ] || CURRENT_MONTH=0
if [ "$UPDATE_MONTH" != "$CURRENT_MONTH" ];then
echo "$UPDATE_MONTH" > /var/local/sns/current_month
for ONECOUNT in sns pupdial/isp1 pupdial/isp2 ppp0 sns/ppp0;do
[ -d /var/local/"$ONECOUNT" ] || mkdir -p /var/local/"$ONECOUNT"
cp --backup=numbered /var/local/${ONECOUNT}/rx_bytes_month /var/local/${ONECOUNT}/rx_bytes_month-`date +%Y`-$CURRENT_MONTH
echo -n 0 > /var/local/${ONECOUNT}/rx_bytes_month
cp --backup=numbered /var/local/${ONECOUNT}/tx_bytes_month /var/local/${ONECOUNT}/tx_bytes_month-`date +%Y`-$CURRENT_MONTH
echo -n 0 > /var/local/${ONECOUNT}/tx_bytes_month
done
fi
}
fun_read_month(){
ACTIVE_INTERFACE="ppp0"
read RX_BYTES_MONTH </var/local/$ACTIVE_INTERFACE/rx_bytes_month
[ "$RX_BYTES_MONTH" ] || RX_BYTES_MONTH=0
read TX_BYTES_MONTH </var/local/$ACTIVE_INTERFACE/tx_bytes_month
[ "$TX_BYTES_MONTH" ] || TX_BYTES_MONTH=0
}
fun_read_session(){
read RX_BYTES </var/local/$ACTIVE_INTERFACE/rx_bytes_session
read TX_BYTES </var/local/$ACTIVE_INTERFACE/tx_bytes_session
}
fun_present_last_session(){
if [ "$RX_BYTES" -o "$TX_BYTES" ] ; then
echo ""
echo "Last Session :"
echo "'$RX_BYTES' Bytes down"
echo "'$TX_BYTES' Bytes up"
else
echo "No download andor upload count available for last session."
fi
}
fun_present_last_month(){
if [ "$UPDATE_MONTH" != "$CURRENT_MONTH" ];then
echo ""
echo "Last Month :"
if
[ -f /var/local/$ACTIVE_INTERFACE/rx_bytes_month-`date +%Y`-$CURRENT_MONTH ]
then
read LM_RX_BYTES </var/local/$ACTIVE_INTERFACE/rx_bytes_month-`date +%Y`-$CURRENT_MONTH
echo "'$LM_RX_BYTES' Bytes down"
else
echo "No download count available for '$CURRENT_MONTH' ."
fi
if
[ -f /var/local/$ACTIVE_INTERFACE/tx_bytes_month-`date +%Y`-$CURRENT_MONTH ]
then
read LM_TX_BYTES </var/local/$ACTIVE_INTERFACE/tx_bytes_month-`date +%Y`-$CURRENT_MONTH
echo "'$LM_TX_BYTES' Bytes up"
else
echo "No upload count available for '$CURRENT_MONTH' ."
fi
fi
}
fun_present_rxtx_bytes(){
if [ "$RX_BYTES" -a "$TX_BYTES" ] ; then
SESS_END=`date +%s`
echo -n "$RX_BYTES" > /var/local/$ACTIVE_INTERFACE/rx_bytes_session
echo -n "$RX_BYTES" > /var/local/$ACTIVE_INTERFACE/rx_bytes_session-$SESS_END
echo -n "$TX_BYTES" > /var/local/$ACTIVE_INTERFACE/tx_bytes_session
echo -n "$TX_BYTES" > /var/local/$ACTIVE_INTERFACE/tx_bytes_session-$SESS_END
read RX_BYTES_MONTH_la </var/local/$ACTIVE_INTERFACE/rx_bytes_month
[ "$RX_BYTES_MONTH_la" ] || RX_BYTES_MONTH_la=0
read RX_BYTES_MONTH_ls </var/local/sns/rx_bytes_month
[ "$RX_BYTES_MONTH_ls" ] || RX_BYTES_MONTH_ls=0
read RX_BYTES_MONTH_lsa </var/local/sns/$ACTIVE_INTERFACE/rx_bytes_month
[ "$RX_BYTES_MONTH_lsa" ] || RX_BYTES_MONTH_lsa=0
RX_BYTES_MONTH=$(((RX_BYTES_MONTH_la+RX_BYTES_MONTH_ls+RX_BYTES_MONTH_lsa)/3))
[ "$RX_BYTES_MONTH" ] || RX_BYTES_MONTH=0
RX_BYTES_MONTH=`expr $RX_BYTES_MONTH + $RX_BYTES`
echo -n "$RX_BYTES_MONTH" > /var/local/$ACTIVE_INTERFACE/rx_bytes_month
echo -n "$RX_BYTES_MONTH" > /var/local/sns/$ACTIVE_INTERFACE/rx_bytes_month
echo -n "$RX_BYTES_MONTH" > /var/local/sns/rx_bytes_month
read TX_BYTES_MONTH_la </var/local/$ACTIVE_INTERFACE/tx_bytes_month
[ "$TX_BYTES_MONTH_la" ] || TX_BYTES_MONTH_la=0
read TX_BYTES_MONTH_ls </var/local/sns/tx_bytes_month
[ "$TX_BYTES_MONTH_ls" ] || TX_BYTES_MONTH_ls=0
read TX_BYTES_MONTH_lsa </var/local/sns/$ACTIVE_INTERFACE/tx_bytes_month
[ "$TX_BYTES_MONTH_lsa" ] || TX_BYTES_MONTH_lsa=0
TX_BYTES_MONTH=$(((TX_BYTES_MONTH_la+TX_BYTES_MONTH_ls+TX_BYTES_MONTH_lsa)/3))
[ "$TX_BYTES_MONTH" ] || TX_BYTES_MONTH=0
TX_BYTES_MONTH=`expr $TX_BYTES_MONTH + $TX_BYTES`
echo -n "$TX_BYTES_MONTH" > /var/local/$ACTIVE_INTERFACE/tx_bytes_month
echo -n "$TX_BYTES_MONTH" > /var/local/sns/$ACTIVE_INTERFACE/tx_bytes_month
echo -n "$TX_BYTES_MONTH" > /var/local/sns/tx_bytes_month
echo ""
TOTALSESSION=$( LC_ALL=C dc $(($RX_BYTES+$TX_BYTES)) 1024 \/ p ); echo -e "SESSION: $TOTALSESSION\tKiB"
TOTALMONTH=$( LC_ALL=C dc $(($RX_BYTES_MONTH+$TX_BYTES_MONTH)) 1024 \/ p );echo -e " MONTH: $TOTALMONTH\tKiB"
TOTALSESSION=$( LC_ALL=C dc $TOTALSESSION 1024 \/ p ); echo -e "SESSION: $TOTALSESSION\tMiB"
TOTALMONTH=$( LC_ALL=C dc $TOTALMONTH 1024 \/ p ); echo -e " MONTH: $TOTALMONTH\tMiB"
TOTALSESSION=$( LC_ALL=C dc $TOTALSESSION 1024 \/ p ); echo -e "SESSION: $TOTALSESSION\tGiB"
TOTALMONTH=$( LC_ALL=C dc $TOTALMONTH 1024 \/ p ); echo -e " MONTH: $TOTALMONTH\tGiB"
echo ""
else
echo -e "\e[1;31m""Err .. could not read /sys/class/net/${ACTIVE_INTERFACE}/statistics/""\e[0;39m"
fi
}
fun_read_rxtx_bytes(){
ACTIVE_INTERFACE="ppp0"
mkdir -p /var/local/$ACTIVE_INTERFACE
while test "`pidof pppd`"; do
until [ -d /sys/class/net/${ACTIVE_INTERFACE}/statistics ];do sleep 1s;done
break
done
while test -d /sys/class/net/${ACTIVE_INTERFACE}; do
read RX_BYTES </sys/class/net/${ACTIVE_INTERFACE}/statistics/rx_bytes
read TX_BYTES </sys/class/net/${ACTIVE_INTERFACE}/statistics/tx_bytes
#echo -n "$RX_BYTES" > /var/local/$ACTIVE_INTERFACE/rx_bytes_session
#echo -n "$TX_BYTES" > /var/local/$ACTIVE_INTERFACE/tx_bytes_session
#RX_BYTES_MONTH=`cat /var/local/$ACTIVE_INTERFACE/rx_bytes_month`
#[ ! "$RX_BYTES_MONTH" ] && RX_BYTES_MONTH=0
#RX_BYTES_MONTH=`expr $RX_BYTES_MONTH + $RX_BYTES`
#echo -n "$RX_BYTES_MONTH" > /var/local/$ACTIVE_INTERFACE/rx_bytes_month
#TX_BYTES_MONTH=`cat /var/local/$ACTIVE_INTERFACE/tx_bytes_month`
#[ ! "$TX_BYTES_MONTH" ] && TX_BYTES_MONTH=0
#TX_BYTES_MONTH=`expr $TX_BYTES_MONTH + $TX_BYTES`
#echo -n "$TX_BYTES_MONTH" > /var/local/$ACTIVE_INTERFACE/tx_bytes_month
sleep 1s
done
fun_present_rxtx_bytes
}
fun_kill_pppd(){
pidof pppd && kill -s HUP `pidof pppd`
}
fun_kill_jobs(){
jobs -rp && {
for Job in `jobs -pr`; do
/bin/ps -p $Job && kill $Job
done
}
}
trap "fun_kill_pppd;sleep 4s;fun_kill_jobs;exit" HUP INT QUIT TRAP KILL TERM
fun_touch_files
fun_reset_month
fun_read_month
fun_read_session
fun_present_last_session
fun_present_last_month
echo ""
TOTALMONTHK=$( LC_ALL=C dc $(($RX_BYTES_MONTH+$TX_BYTES_MONTH)) 1024 \/ p );echo -e " MONTH: '$TOTALMONTHK'\tKiB"
TOTALMONTHM=$( LC_ALL=C dc $TOTALMONTHK 1024 \/ p ); echo -e " MONTH: '$TOTALMONTHM'\tMiB"
TOTALMONTHG=$( LC_ALL=C dc $TOTALMONTHM 1024 \/ p ); echo -e " MONTH: '$TOTALMONTHG'\tGiB"
echo ""
n="c"
while [ "$n" ]
do
/usr/sbin/pppd call gprsmm &
jobs -l
PPPD_PID=`jobs -p /usr/sbin/pppd | tail -n 1`;
echo -e '\e[0;36mPPPD_PID='$PPPD_PID'\e[0;39m'
sleep 5s
until
[ -f /sys/class/net/${ACTIVE_INTERFACE}/carrier ]
do sleep 1s
pidof pppd || break
done
echo ""
pidof pppd &&
{
while
[ 1 ]
do sleep 1s
read CARRIER </sys/class/net/${ACTIVE_INTERFACE}/carrier
[ "$CARRIER" = 1 ] && break
pidof pppd || break
done
}
pidof pppd &&
{
unset RX_BYTES TX_BYTES
fun_read_rxtx_bytes &
echo -e '\033[1;35m'"Press ENTER to disconnect and quit"'\033[0;39m'
} || {
echo -e '\033[1;36m'"Press R+ENTER to reconnect/try again"'\033[0;39m'
}
jobs -l
jobs -p fun_read_rxtx_bytes
n="n"
read n
done
fun_kill_pppd
sleep 4s
fun_kill_jobs
read -p "Press any key to quit .. " Q
exit 0
It also has commented the writes to disk, which would result in lost counts if the machine gets powered off hard or the modem unplugged while connected.
Reads transmission every 1 second .
Uses jobs, which would probably not work in a shell that has no job control ( ie & forked or exec 'd ) .