Date: Tue, 26 Aug 1997 18:52:58 +1000 (EST) From: "Daniel O'Callaghan" <danny@hilink.com.au> To: freebsd-hackers@freebsd.org Subject: Re: Grabbing throughput stats within pppd. Message-ID: <Pine.BSF.3.95.970826184541.6297j-100000@skylark.hilink.com.au>
next in thread | raw e-mail | index | archive | help
On Tue, 26 Aug 1997, Adrian Chadd wrote: > For the pppd-clued people, is there a way I can grab the IP bytecount in and > out on the ppp interface? I'd much prefer a bytecount in and out on the > IP packets, if thats possible.. but if I have to resort to just bytecounts > on the interface, that will have to do. Use ipfw accounting. I'll attach some scripts which do ip-up/ip-down stuff on a per-user basis to help. The scripts below were whipped up for a friend, so they are not as polished at you might want :-) Danny #!/usr/bin/perl # # This is /etc/ppp/ip-up # # Argument format is: # iface dev speed localip remoteip unshift(@INC, "/usr/share/perl"); require "utmp.ph"; $iface = $ARGV[0]; $device = $ARGV[1]; $device =~ s#/dev/##; $recordsize = &UT_NAMESIZE + &UT_LINESIZE + &UT_HOSTSIZE + 4; $TEMPLATE = "A".&UT_NAMESIZE." A".&UT_LINESIZE." A".&UT_HOSTSIZE."L"; # calculate the rule number and destroy the rule in case it already # exists - we don't want duplicates. # The rule startpoint is unique for the interface, and there are # 10 available rules per interface. Could make it 100 per interface. $rule = $iface; $rule =~ s/sl|ppp//; if ($iface =~ /sl/ ){ $rule = ($rule+100)*10; } else { $rule = ($rule+200)*10; } system("/sbin/ipfw -q del $rule"); open(U, &_PATH_UTMP); while(read(U, $record, $recordsize) ) { ($ut_line, $ut_name, $ut_host, $ut_time) = unpack($TEMPLATE, $record); if( $ut_line eq $device ) { # # $iface.rules is run by /etc/ppp/ip-down to do the userstats # open(U, ">/var/run/$iface.rules"); ($uname, $passwd, $uid, $gid)=getpwnam($ut_name); print U "#!/bin/sh\n"; print U "/sbin/ipfw show | grep $iface\$ >> /var/account/$uname\n"; system("/sbin/ipfw -q add $rule accept tcp from any to any 80 in via $iface"); print U "/sbin/ipfw -q del $rule\n"; $rule++; system("/sbin/ipfw -q add $rule accept tcp from any to any 80 out via $iface"); print U "/sbin/ipfw -q del $rule\n"; $rule++; system("/sbin/ipfw -q add $rule accept ip from any to any in via $iface"); print U "/sbin/ipfw -q del $rule\n"; $rule++; system("/sbin/ipfw -q add $rule accept ip from any to any out via $iface"); print U "/sbin/ipfw -q del $rule\n"; exit(0); } } ------------------------------------- #!/bin/sh # # This is /etc/ppp/ip-down - very complex! # f=/var/run/$1.rules if [ -f $f ]; then sh $f rm $f fi
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.3.95.970826184541.6297j-100000>