mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-20 22:23:16 +00:00
7f0403c8c1
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
114 lines
3.1 KiB
Plaintext
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
|
|
}
|