137 lines
3.4 KiB
Tcl
137 lines
3.4 KiB
Tcl
#!/usr/bin/wish -f
|
|
#
|
|
# Linux dialer. Shows on/off line, time on-line, and
|
|
# pppd process identifier.
|
|
#
|
|
# (c) 1998 (GPL) Martin Vermeer
|
|
#
|
|
# User configurable:
|
|
#----------------------------------------
|
|
set path(pidof) /sbin/pidof
|
|
set path(pppd) /usr/sbin/pppd
|
|
set path(whoami) /usr/bin/whoami)
|
|
#----------------------------------------
|
|
# End user config
|
|
|
|
set seconds 0
|
|
set minutes 0
|
|
label .counter -text "0:00" -relief sunken
|
|
|
|
## Test for root.
|
|
#
|
|
## Not needed if pppd suid root and /etc/ppp files
|
|
## "options" and connect/disconnect scripts
|
|
## (but NOT the "secrets" file!!! world readable
|
|
## (or readable to a group you belong to)
|
|
#
|
|
# catch "exec $path(whoami)" result
|
|
# if {$result != "root"} {
|
|
# set labeltext "Run me as ROOT!"
|
|
# after 10000 exit
|
|
#}
|
|
|
|
# showpid -- routine to get and show process id, keep track
|
|
# of pppd link up/down status, and reset time
|
|
# counter if down
|
|
#
|
|
proc showpid {} {
|
|
global pid labeltext status seconds minutes path
|
|
|
|
if [catch "exec $path(pidof) pppd" pid] {set pid -1}
|
|
if {$pid != -1} {
|
|
set labeltext "Link pid: ${pid}"
|
|
set status 1
|
|
} else {
|
|
set labeltext "Link Down"
|
|
set status 0; set seconds 0; set minutes 0
|
|
}
|
|
}
|
|
|
|
# tick -- routine to increment clock by 5 seconds every
|
|
# 5 seconds, and minutes every minute.
|
|
# Don't be on-line over an hour :-)
|
|
#
|
|
proc tick {} {
|
|
global minutes seconds status pid labeltext
|
|
if $status {
|
|
after 5000 tick
|
|
incr seconds 5
|
|
if {$seconds >= 60} { set seconds 0; incr minutes }
|
|
}
|
|
after 5000 showpid
|
|
.counter config -text [format "%d:%02d" $minutes $seconds]
|
|
}
|
|
|
|
#
|
|
# Find out if there was an old pppd process running:
|
|
#
|
|
if [catch "exec $path(pidof) pppd" pid] {set pid -1}
|
|
if {$pid != -1} {
|
|
set labeltext "Old Link ${pid}"
|
|
set status 1
|
|
tick
|
|
} else {
|
|
set labeltext "Link Down"
|
|
set status 0
|
|
}
|
|
|
|
#
|
|
# Downcmd -- command to bring down the pppd link
|
|
#
|
|
proc Downcmd {} {
|
|
global status path
|
|
# Get the pids of pppd processes into res:
|
|
if [catch "exec $path(pidof) pppd" res] {set res -1}
|
|
if {$res != -1} {
|
|
# Some pppd process running; go get'em
|
|
catch "exec kill -9 $res" result
|
|
# Debug code:
|
|
# puts "pid=$res result=$result"
|
|
}
|
|
# Necessary to update $status to realistic value:
|
|
showpid
|
|
# await kill command to take effect:
|
|
while {$status == 1} showpid
|
|
# don't come out until really down
|
|
}
|
|
|
|
# Upcmd -- Command to bring up the pppd link
|
|
# and start the clock ticking
|
|
#
|
|
proc Upcmd {} {
|
|
global status path seconds minutes
|
|
# start up pppd:
|
|
if [catch "exec $path(pidof) pppd" res] {set res -1}
|
|
if {$res == -1} {
|
|
# no pppd process running yet; start one
|
|
catch "exec /usr/sbin/pppd"
|
|
set status 1
|
|
# start clock running
|
|
set seconds 0
|
|
set minutes 0
|
|
tick
|
|
}
|
|
if {$res > 0} {
|
|
set labeltext "Old Link: ${res}"
|
|
set status 1
|
|
}
|
|
}
|
|
|
|
#
|
|
# Define the widgets:
|
|
#
|
|
label .name -textvariable labeltext
|
|
radiobutton .up -text "Up" -variable status -value 1 -command Upcmd
|
|
radiobutton .down -text "Down" -variable status -value 0 -command Downcmd
|
|
button .quit -text "Quit" -command exit
|
|
|
|
#
|
|
# Lay out grid geometry:
|
|
#
|
|
grid .name -row 0 -column 0 -columnspan 2 -sticky "ew"
|
|
grid .up -row 1 -column 1 -sticky "w"
|
|
grid .down -row 2 -column 1 -sticky "w"
|
|
grid .quit -row 2 -column 0
|
|
grid .counter -row 1 -column 0 -sticky "ns"
|
|
|