set prompt "% " set stty_init {-onlcr -opost intr \^C kill \^U} set kadmin_local $KADMIN_LOCAL # Backward compatibility until we're using expect 5 everywhere if {[info exists exp_version_4]} { global wait_error_index wait_errno_index wait_status_index set wait_error_index 0 set wait_errno_index 1 set wait_status_index 1 } else { set wait_error_index 2 set wait_errno_index 3 set wait_status_index 3 } # Hack around Solaris 9 kernel race condition that causes last output # from a pty to get dropped. if { $PRIOCNTL_HACK } { catch {exec priocntl -s -c FX -m 30 -p 30 -i pid [getpid]} rename spawn oldspawn proc spawn { args } { upvar 1 spawn_id spawn_id set newargs {} set inflags 1 set eatnext 0 foreach arg $args { if { $arg == "-ignore" \ || $arg == "-open" \ || $arg == "-leaveopen" } { lappend newargs $arg set eatnext 1 continue } if [string match "-*" $arg] { lappend newargs $arg continue } if { $eatnext } { set eatnext 0 lappend newargs $arg continue } if { $inflags } { set inflags 0 set newargs [concat $newargs {priocntl -e -c FX -p 0}] } lappend newargs $arg } set pid [eval oldspawn $newargs] return $pid } } # Variables for keeping track of api process state set api_pid "0" proc api_exit {} { global spawn_id global api_pid # puts stdout "Starting api_exit (spawn_id $spawn_id)." catch {close} errMsg catch {wait} errMsg # puts stdout "Finishing api_exit for $api_pid." set api_pid "0" } proc api_isrunning {pid} { global api_pid # puts stdout "testing $pid, api_pid is $api_pid" if {$pid == $api_pid} { return 1; } else { return 0; } } proc api_version {} { } proc api_start {} { global API global env global spawn_id global prompt global api_pid set pid [spawn $API] expect { -re "$prompt$" {} eof { error "EOF starting API" } timeout { error "Timeout starting API" } } if {! [info exists env(TCLUTIL)]} { error "TCLUTIL environment variable isn't set" } # tcl 8.4 for some reason screws up autodetection of output # EOL translation. Work around it for now. send "if { \[info commands fconfigure\] ne \"\" } { fconfigure stdout -translation lf }\n" expect { -re "$prompt$" {} eof { error "EOF starting API" } timeout { error "Timeout starting API" } } send "source $env(TCLUTIL)\n" expect { -re "$prompt$" {} eof { error "EOF starting API" } timeout { error "Timeout starting API" } } send "set current_struct_version \[expr \$OVSEC_KADM_STRUCT_VERSION &~ \$OVSEC_KADM_STRUCT_VERSION_MASK\]\n" expect { -re "$prompt$" {} eof { error "EOF setting API varibles"} timeout { error "timeout setting API varibles"} } send "set current_api_version \[expr \$OVSEC_KADM_API_VERSION_1 &~ \$OVSEC_KADM_API_VERSION_MASK\]\n" expect { -re "$prompt$" {} eof { error "EOF setting API varibles"} timeout { error "timeout setting API varibles"} } send "set bad_struct_version_mask \[expr 0x65432100 | \$current_struct_version\]\n" expect { -re "$prompt$" {} eof { error "EOF setting API varibles"} timeout { error "timeout setting API varibles"} } send "set bad_api_version_mask \[expr 0x65432100 | \$current_api_version\]\n" expect { -re "$prompt$" {} eof { error "EOF setting API varibles"} timeout { error "timeout setting API varibles"} } send "set no_api_version_mask \$current_api_version\n" expect { -re "$prompt$" {} eof { error "EOF setting API varibles"} timeout { error "timeout setting API varibles"} } send "set no_struct_version_mask \$current_struct_version\n" expect { -re "$prompt$" {} eof { error "EOF setting API varibles"} timeout { error "timeout setting API varibles"} } send "set old_api_version \[expr \$OVSEC_KADM_API_VERSION_MASK | 0x00\]\n" expect { -re "$prompt$" {} eof { error "EOF setting API varibles"} timeout { error "timeout setting API varibles"} } send "set old_struct_version \[expr \$OVSEC_KADM_STRUCT_VERSION_MASK | 0x00\]\n" expect { -re "$prompt$" {} eof { error "EOF setting API varibles"} timeout { error "timeout setting API varibles"} } send "set new_api_version \[expr \$OVSEC_KADM_API_VERSION_MASK | 0xca\]\n" expect { -re "$prompt$" {} eof { error "EOF setting API varibles"} timeout { error "timeout setting API varibles"} } send "set new_struct_version \[expr \$OVSEC_KADM_STRUCT_VERSION_MASK | 0xca\]\n" expect { -re "$prompt$" {} eof { error "EOF setting API varibles"} timeout { error "timeout setting API varibles"} } set api_pid $pid # puts stdout "Finishing api_start (spawn_id $spawn_id, pid $api_pid)." return $pid } api_start