That is a stellar TCL script! I generally use netflow to glean information regarding average packet size.
show ip cache-flow will provide it via the CLI, or a netflow collector will graph it statistically over time. Chris On Thu, May 20, 2010 at 6:05 PM, Thomas Magill <[email protected]>wrote: > I had to come up with a way to monitor average packet size on an > interface so I wrote the following script (cisco devices). I don't know > if anyone finds it useful, but here it is if so. Also, there is one > issue with it where if the total number of packets an interface has seen > is over 7 digits, it will not calculate it. This appears to be a > limitation of the expr command used in cisco TCL and mpexpr is not > supported. If anyone else knows a way to bypass this issue I would be > glad to hear it. For now it just tells you that the value is too high. > I am also considering creating a job that can input the value into an > OID that we can poll but not exactly sure how to do that so if anyone > has any experience or good references (other than the cisco stuff I find > on google) I would be thankful. > > > > I save this to flash: or disk: (depending on default tcl location per > device) and assign the alias: > > > > alias exec psize tclsh psize.tcl > > > > Then use it like: > > > > Router#psize psize tun1 > > > > Packet Size Information for Tunnel1 > > ---------------------------------------------------- > > 5 minute input bits/sec = 43000 > > 5 minute input packets/sec = 30 > > 5 minute average packet size = 179 Bytes > > ---------------------------------------------------- > > 5 minute output bits/sec = 3000 > > 5 minute output packets/sec = 3 > > 5 minute average packet size = 125 Bytes > > ---------------------------------------------------- > > Total input bytes = 1678803 > > Total input packets = 7761 > > Total average packet size = 216 Bytes > > ---------------------------------------------------- > > Total output bytes = 133316 > > Total output packets = 1041 > > Total average packet size = 128 Bytes > > ---------------------------------------------------- > > > > This is my first attempt at a script this complex so if you have any > input/suggestions they are welcome. > > > > ######################################################################## > ##### > > # > # > > # psize.tcl > # > > # By Thomas Magill - 5/7/2010 > # > > # > # > > ######################################################################## > ##### > > # > > # Get input from command line > > set ifname $argv > > # Check interface name for errors > > if {[string equal $ifname ""]} { puts "Usage: psize ifname"; return; } > > if { [ catch { exec "show ip interface $ifname" } errmsg ] } { > > puts "Invalid interface $ifname, command failed"; return} > > set cmdtext [ exec "show interface $ifname" ] > > # Pull interface information and calculate > > foreach line [split $cmdtext "\n"] { > > if {[regexp -nocase {^(\S+) is (.*), line protocol is (\S+)} $line > ignore ifnamefull ifstatus iflinkstatus]} { > > } > > if {[regexp -nocase {5 minute input rate ([0-9]+) bits/sec, ([0-9]+) > packets/sec} $line ignore bpsinfive ppsinfive]} { > > if {$ppsinfive == "0"} {set psizeinfive "0"} else {set psizeinfive > [expr $bpsinfive / $ppsinfive]} > > set psizeinfive [expr $psizeinfive / 8] > > } > > if {[regexp -nocase {5 minute output rate ([0-9]+) bits/sec, ([0-9]+) > packets/sec} $line ignore bpsoutfive ppsoutfive]} { > > if {$ppsoutfive == "0"} {set psizeoutfive "0"} else {set psizeoutfive > [expr $bpsoutfive / $ppsoutfive]} > > set psizeoutfive [expr $psizeoutfive / 8] > > } > > if {[regexp -nocase {([0-9]+) packets input, ([0-9]+) bytes} $line > ignore ppsintotal bpsintotal]} { > > if {$ppsintotal > "9999999"} {set psizeintotal "Too Large to Find"} > elseif {$ppsintotal == "0"} {set psizeintotal "0"} else {set > psizeintotal [expr $bpsintotal / $ppsintotal]} > > } > > if {[regexp -nocase {([0-9]+) packets output, ([0-9]+) bytes} $line > ignore ppsouttotal bpsouttotal]} { > > if {$ppsouttotal > "9999999"} {set psizeouttotal "Too Large to Find"} > elseif {$ppsouttotal == "0"} {set psizeouttotal "0"} else {set > psizeouttotal [expr $bpsouttotal / $ppsouttotal]} > > } > > } > > # Output Data > > puts "\n\nPacket Size Information for $ifnamefull" > > puts "---------------------------------------------------------" > > puts " 5 minute input bits/sec = $bpsinfive " > > puts " 5 minute input packets/sec = $ppsinfive " > > puts " 5 minute average packet size = $psizeinfive Bytes " > > puts "---------------------------------------------------------" > > puts " 5 minute output bits/sec = $bpsoutfive " > > puts " 5 minute output packets/sec = $ppsoutfive " > > puts " 5 minute average packet size = $psizeoutfive Bytes " > > puts "---------------------------------------------------------" > > puts " Total input bytes = $bpsintotal " > > puts " Total input packets = $ppsintotal " > > puts " Total average packet size = $psizeintotal Bytes " > > puts "---------------------------------------------------------" > > puts " Total output bytes = $bpsouttotal " > > puts " Total output packets = $ppsouttotal " > > puts " Total average packet size = $psizeouttotal Bytes " > > puts "---------------------------------------------------------" > > > > > > > > Thomas Magill > Network Engineer > > Office: (858) 909-3777 > > Cell: (858) 869-9685 > mailto:[email protected] <mailto:[email protected]> > > > provide-commerce > 4840 Eastgate Mall > > San Diego, CA 92121 > > > > ProFlowers <http://www.proflowers.com/> | redENVELOPE > <http://www.redenvelope.com/> | Cherry Moon Farms > <http://www.cherrymoonfarms.com/> | Shari's Berries > <http://www.berries.com/> > > > > --

