genode/tool/run/log/amt
Christian Helmuth 7f0403c8c1 tool/run: multiple attempt for AMT SOL connection
Some devices do not answer connection attempts timely, which leads
amtterm to time out (after 60s). Using multiple attempts in 500 ms
intervals results in timely connection and complete boot logs.

Issue #4429
2022-04-13 08:08:00 +02:00

114 lines
3.1 KiB
Plaintext

##
# 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 <your-intel-me-amt-password> -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
}