#!/usr/bin/tcl set usage "Usage: $argv0 \[-q quota\] \[-c cmd\] \[-d dscp\] \[-u\] \[-v\]\n" set dscp "001010" set user "manager" set password "procurve" set controlsfile "controls.txt" set quota "/home/pp/quotas/usage.txt" set cmd "./cmdProCurve" set undo 0 set verbose 0 set test 0 # Process command line for {set i 0} {$i < $argc} {incr i} { set arg [ lindex $argv $i] switch -glob -- $arg { -q* { incr i; set quota [ lindex $argv $i ] } -c* { incr i; set cmd [ lindex $argv $i ] } -d* { incr i; set dscp [ lindex $argv $i ] } -u* { set undo 1 } -v* { set verbose 1 } -t* { set test 1 } -* { puts "\nError: Unknown argument $arg\n" puts $usage exit 1 } default { break } } } # Load currently active controls set controls [ list ] array set hosts { } if { [ file exists $controlsfile ] } { set fp [ open $controlsfile r ] while { -1 != [ gets $fp line ] } { lappend controls $line set parts [ split $line "," ] set host [ lindex $parts 0 ] set hosts($host) 1 } close $fp } if { $undo == 0 } { # Query for latest usage data set rows [split [exec /usr/local/inmsf/bin/query $quota] "\n"] foreach row $rows { set parts [ split $row "," ] set host [ lindex $parts 1 ] set mac [ lindex $parts 2 ] set switch [ lindex $parts 3 ] if { ![ info exists hosts($host) ] } { # Apply new control lappend controls "$host,$mac,$switch" set control "qos device-priority $host dscp $dscp" if { $verbose == 1 } { puts "$switch -> $control" } if { $test == 0 } { exec $cmd -c $control $switch } } } # Write out controls file set fp [ open $controlsfile w ] foreach row $controls { puts $fp $row } close $fp } else { # Remove existing controls foreach row $controls { set parts [ split $row "," ] set host [ lindex $parts 0 ] set mac [ lindex $parts 1 ] set switch [ lindex $parts 2 ] set control "no qos device-priority $host" if { $verbose == 1 } { puts "$switch -> $control" } if { $test == 0 } { exec $cmd -c $control $switch } } # Remove controls file file delete $controlsfile }