## # Get output of the target machine via Intel AMT's SoL feature # # \param --log-amt-host network address of target machine # \param --log-amt-password AMT password for target machine # \param --log-amt-filter Sanitize output by piping it through a filter # \param --log-amt-skip-test Skip AMT SOL availability test # source [genode_dir]/tool/run/log.inc source [genode_dir]/tool/run/amt.inc proc log_amt_host { } { return [get_cmd_arg_first --log-amt-host ""] } proc log_amt_password { } { return [get_cmd_arg_first --log-amt-password ""] } proc log_amt_filter { } { return [get_cmd_arg_first --log-amt-filter ""] } proc log_amt_timeout { } { return [get_cmd_arg_first --log-amt-timeout "30"] } proc log_amt_skip_test { } { return [get_cmd_switch --log-amt-skip-test] } ## # Log output of the test machine using Intel's AMT # proc run_log { wait_for_re timeout_value } { global output_spawn_id if {![is_amt_available [log_amt_host] [log_amt_password]]} { set exit_result 1 return false } set amt_tool [get_cmd_arg --amt-tool "wsman"] # Check that SOL is correctly configured if wsman is available if {![log_amt_skip_test]} { if {[have_installed wsman] && $amt_tool=="wsman" } { puts "Test for working AMT SOL redirection service ..." set redir_state [exec wsman get http://intel.com/wbem/wscim/1/amt-schema/1/AMT_RedirectionService -h [log_amt_host] -P 16992 -u admin -p [log_amt_password]] set redir_state [regexp -inline {ListenerEnabled.*ListenerEnabled} $redir_state] if {![regexp {ListenerEnabled>true} $redir_state]} { puts " Warning: AMT_RedirectionService listener is disabled - serial output will not be available" puts " Use wsman to enable the listener service, e.g.:" puts " wsman put http://intel.com/wbem/wscim/1/amt-schema/1/AMT_RedirectionService -h [log_amt_host] -P 16992 -u admin -p -k ListenerEnabled=true" puts "" } } else { puts " Warning: could not check AMT SOL redirection service because of missing wsman tool, --amt-tool==$amt_tool" } } else { puts "Skipping test for working AMT SOL redirection service" } # # password via environment variable for amtterm will not show up in logs # set ::env(AMT_PASSWORD) [log_amt_password] # # grab output # set amt_cmd "amtterm -u admin -v [log_amt_host]" if {[get_cmd_switch --log-amt-filter]} { set amt_cmd "$amt_cmd | [log_amt_filter]" } if {$wait_for_re == "forever"} { set timeout -1 } else { set timeout [expr $timeout_value + [log_amt_timeout]] } set exit_result 1 lassign [retry 30 "/bin/sh -c \"$amt_cmd\"" ".*session authentication" 0.5] retry_output output_spawn_id if {$retry_output == ""} { puts stderr "Aborting, AMT SOL not accessible" return false } set kernel_msg [run_boot_string] expect { -i $output_spawn_id $kernel_msg { } eof { puts stderr "Aborting, received EOF" return false } timeout { puts stderr "Boot process timed out" close -i $output_spawn_id; wait return false } } wait_for_output $wait_for_re $timeout_value $output_spawn_id return true }