netjig.tcl

来自「ipsec vpn」· TCL 代码 · 共 609 行 · 第 1/2 页

TCL
609
字号
}proc runXuml {umlname pass} {    global umlid    global env    global theprompt    # upcase host name    set uphost [string toupper $umlname]    set scriptname run${pass}script        set varname $uphost    append varname _RUN${pass}_SCRIPT    set_from_env $umlname $scriptname $varname    if {[info exists umlid($umlname,$scriptname)]} {	if {[info exists env(UML_GETTY)]} {	    send -i $umlid($umlname,spawnid) -- "echo You have 3600 seconds. >/dev/ttys/1\r"	    send -i $umlid($umlname,spawnid) -- "echo I would run $umlid($umlname,$scriptname) now >/dev/ttys/1\r"	    send -i $umlid($umlname,spawnid) -- "rm /etc/nologin\r"	    send -i $umlid($umlname,spawnid) -- "/sbin/getty ttys/1 38400\r"	    set timeout 3600	    expectprompt $umlid($umlname,spawnid) "UML_getty for $umlname"	} 	if {[file exists $umlid($umlname,$scriptname)]} {	    playscript $umlid($umlname,spawnid) $umlid($umlname,$scriptname)	    netjigdebug "$umlname run script($pass) $umlid($umlname,$scriptname) done"	    return 1	} else {	    puts stderr "runXuml($umlname,$pass): $umlid($umlname,$scriptname) does not exist."	    return 0	}    } else {	netjigdebug "$umlname no run script for pass $pass"	return 0    }}proc runuml {umlname} {    global umlid    global env    global theprompt    runXuml $umlname ""}proc run2uml {umlname} {    global umlid    global env    global theprompt    runXuml $umlname 2}proc initdns {umlname} {    global umlid    global env    global theprompt    expectprompt $umlid($umlname,spawnid) "for bash exec ($umlname)"    send -i $umlid($umlname,spawnid) -- "exec bash --noediting\r"    expectprompt $umlid($umlname,spawnid) "before sucking in profile ($umlname)"    send -i $umlid($umlname,spawnid) -- "source \$HOME/.profile\r"    expectprompt $umlid($umlname,spawnid) "before starting bind ($umlname)"    send -i $umlid($umlname,spawnid) -- "named\r"    expectprompt $umlid($umlname,spawnid) "after starting bind ($umlname)"    send -i $umlid($umlname,spawnid) -- "inetd\r"    expectprompt $umlid($umlname,spawnid) "after starting inetd ($umlname)"}proc killdns {umlname} {    global umlid        trace variable expect_out(buffer) w log_by_tracing    #exp_internal 1    netjigdebug "Sending halt to $umlname!"    send   -i $umlid($umlname,spawnid)     "halt -p -f\r"    netjigdebug "Waiting for final message"    expect {	-i $umlid($umlname,spawnid)	timeout	{ puts stderr "timeout in killdns" }	eof	{ puts stderr "EOF in killdns" }	-exact "Power down."     }    expect -i $umlid($umlname,spawnid) -gl "*"}proc killuml {umlname} {    global umlid    trace variable expect_out(buffer) w log_by_tracing    if {[info exists umlid($umlname,finalscript)]} {	playscript $umlid($umlname,spawnid) $umlid($umlname,finalscript)	netjigdebug "Finalscript done"    }     netjigdebug "Sending halt to $umlname!"    # absorb anything there.    expectprompt $umlid($umlname,spawnid) "for ipsec setup stop ($umlname)"    send   -i $umlid($umlname,spawnid)     "ipsec setup stop\r"    expectprompt $umlid($umlname,spawnid) "for klogd dump ($umlname)"    send -i $umlid($umlname,spawnid) "kill `cat /var/run/klogd.pid`; cat /tmp/klog.log\r"    expectprompt $umlid($umlname,spawnid) "for halt ($umlname)"    send   -i $umlid($umlname,spawnid)     "halt -p -f\r"    netjigdebug "Waiting for final message"    expect {	-i $umlid($umlname,spawnid)	timeout	{ puts stderr "timeout in killuml" }	eof	{ puts stderr "EOF in killuml" }	-exact "Power down."     }    expect -i $umlid($umlname,spawnid) -gl "*"}proc process_extra_host {optarg} {   global umlid   # format of arg is host=program[, ]host=program.   set hostlist [split $optarg ", "]   foreach hosttype $hostlist {       set h       [split $hosttype =]       set host    [lindex $h 0]       set program [lindex $h 1]       set umlid($host,program) $program       lappend umlid(extra_hosts) $host   }}proc set_from_env {host param varname} {    global umlid    global env        netjigdebug "Looking for $varname..."    if {[info exists env($varname)]} {	netjigdebug "found it: $env($varname)"	set umlid($host,$param) $env($varname)    }}# For each host, the following variables are examined:# ${HOST}_INIT_SCRIPT     the script to initialize the host with# ${HOST}_RUN_SCRIPT      the script to run the host with# ${HOST}_FINAL_SCRIPT    the script to run the host with# ${HOST}_START   the program to invoke the UML# REF_${HOST}_CONSOLE_OUTPUT      where to redirect the console output toproc process_host {host} {    global umlid    global env    # upcase me    set uphost [string toupper $host]    set kernver ""    if {[info exists env(KERNVER)]} {	set kernver $env(KERNVER)    }    set varname $uphost    append varname _INIT_SCRIPT    set_from_env $host initscript $varname	    set varname $uphost    append varname _RUN_SCRIPT    set_from_env $host runscript $varname    set varname $uphost    append varname _RUN2_SCRIPT    set_from_env $host run2script $varname    set varname $uphost    append varname _FINAL_SCRIPT    set_from_env $host finalscript $varname        set varname $uphost    append varname _START    set_from_env $host program $varname        set varname REF${kernver}    append varname _    append varname $uphost    append varname _CONSOLE_RAW    set_from_env $host consolefile $varname}    # {NORTH,SOUTH,EAST,WEST}_PLAY denotes a pcap file to play on that network# {NORTH,SOUTH,EAST,WEST}_REC  denotes a pcap file to reocrd into from that network## sets umlid(net$net,play) and umlid(net$net,record)#proc calc_net {net} {    global umlid    global env    if {[info exists umlid(net$net,play)]} {	set umlid(someplay) 1    }}proc process_net {net} {    global umlid    global env    # upcase me    set upnet [string toupper $net]    set umlid(net$net,arp) 0    set varname $upnet    append varname _PLAY    set_from_env net$net play $varname	    set varname $upnet    append varname _REC    set_from_env net$net record $varname    set varname $upnet    append varname _ARPREPLY    set_from_env net$net arp $varname    calc_net $net}match_max -d 10000# $Id: netjig.tcl,v 1.53 2005/03/20 23:20:10 mcr Exp $## $Log: netjig.tcl,v $# Revision 1.53  2005/03/20 23:20:10  mcr# 	when looking for an output file for console output,# 	include the kernel version in the variable that we will# 	look for.## Revision 1.52  2005/02/11 01:33:46  mcr# 	added newline to end of file.## Revision 1.51  2005/01/19 00:01:07  ken# Fix location of klogd.pid - broke due to blind find . patch for moving pluto files to /var/run/pluto## Revision 1.50  2005/01/11 17:54:09  ken# Move plutos runtime files from /var/run/pluto.* to /var/run/pluto/pluto.*## This was done with find . -type f -print0 | xargs -0 perl -pi -e 's#/var/run/#/var/run/pluto/#g'## Revision 1.49  2004/10/12 03:51:47  mcr# 	make sure that UMLs run with core dumping enabled.## Revision 1.48  2004/05/05 17:55:20  mcr# 	fixed problem with getty not licking multiuser boot.## Revision 1.47  2004/05/04 20:05:35  mcr# 	use ttys/1 rather than tty1.## Revision 1.46  2004/05/04 19:51:46  mcr# 	make sure to send \r after each command.## Revision 1.45  2004/05/04 19:17:59  mcr# 	don't try getty unless we have a run command.## Revision 1.44  2004/05/04 18:06:04  mcr# 	if UML_GETTY is set, then start a getty before running each# 	runuml command.## Revision 1.43  2004/03/21 04:36:16  mcr# 	1) local switches now reads testparams.sh file.# 	2) $arpreply is totally deprecated.## Revision 1.42  2004/02/15 20:37:08  mcr# 	changed method by which we ask for --arpreply. We can't guess# 	it, as it doesn't work in all cases like that.## Revision 1.41  2004/02/15 00:12:00  mcr# 	--arpreply calculation was failing for situation# 	where the options were specified as arguments.# 	split process_net -> process_net/calc_net.## Revision 1.40  2004/02/15 00:02:06  mcr# 	debugging for ARPreply settings.## Revision 1.39  2004/02/05 02:15:51  mcr# 	added RCS ids.##

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?