genode/repos/libports/run/lwip.run
Josef Söntgen 88c1ca8e9c lwip: adapt run script to new DHCP behavior
We will always get an IP after the server was started. Therefore, we
have to wait until we see the "got IP" message.

Issue #1327.
2015-03-27 11:53:14 +01:00

207 lines
5.5 KiB
Tcl

#
# \brief Test for using the lwIP TCP/IP stack
# \author Norman Feske
# \date 2011-05-22
#
# This test case executes a small HTTP server on Genode running on qemu. When
# the HTTP server is up, a HTTP request to the server is performed using
# 'lynx'. The response is validated against a known pattern.
#
# The test uses qemu's "-net user" option, redirecting Genode's port 80 to the
# host's port 5555. Consequently, it cannot be executed on non-qemu test
# environments (i.e., the test won't work with the Linux version of Genode).
#
# Please make sure to include a nic driver in your build configuration. E.g.,
# on the x86 platform, you may enable the 'linux_drivers' repository.
#
#
# TODO: Add support for Linux via user-level networking (using the
# tun/tap proxy driver at os/src/drivers/nic/linux)
#
set use_usb_driver [expr [have_spec omap4] || [have_spec platform_arndale] || [have_spec platform_rpi]]
set use_nic_driver [expr !$use_usb_driver && ![have_spec platform_imx53] && ![have_spec hw_odroid_xu] && ![have_spec linux]]
if {[expr !$use_usb_driver && !$use_nic_driver]} {
puts "\n Run script is not supported on this platform. \n"; exit 0 }
requires_installation_of lynx
#
# Build
#
set build_components {
core init
drivers/pci drivers/timer drivers/nic
test/lwip/http_srv
}
lappend_if $use_usb_driver build_components drivers/usb
lappend_if [have_spec acpi] build_components drivers/acpi
lappend_if [have_spec pci] build_components drivers/pci/device_pd
lappend_if [have_spec platform_arndale] build_components drivers/platform
lappend_if [have_spec platform_rpi] build_components drivers/platform
lappend_if [have_spec gpio] build_components drivers/gpio
build $build_components
create_boot_directory
#
# Generate config
#
set config {
<config verbose="yes">
<parent-provides>
<service name="ROM"/>
<service name="RAM"/>
<service name="IRQ"/>
<service name="IO_MEM"/>
<service name="IO_PORT"/>
<service name="CAP"/>
<service name="PD"/>
<service name="RM"/>
<service name="CPU"/>
<service name="LOG"/>
<service name="SIGNAL"/>
</parent-provides>
<default-route>
<any-service> <parent/> <any-child/> </any-service>
</default-route>
<start name="timer">
<resource name="RAM" quantum="1M"/>
<provides> <service name="Timer"/> </provides>
</start>
<start name="test-lwip_httpsrv">
<resource name="RAM" quantum="5M"/>
<config>
<libc stdout="/dev/log" stderr="/dev/log">
<vfs> <dir name="dev"> <log/> </dir> </vfs>
</libc>
</config>
</start>}
append_if [have_spec platform_arndale] config {
<start name="platform_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Regulator"/></provides>
</start>}
append_if [have_spec platform_rpi] config {
<start name="platform_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Platform"/></provides>
<config/>
</start>}
append_if [have_spec gpio] config {
<start name="gpio_drv">
<resource name="RAM" quantum="4M"/>
<provides><service name="Gpio"/></provides>
<config/>
</start>}
append_if $use_usb_driver config {
<start name="usb_drv">
<resource name="RAM" quantum="12M"/>
<provides>
<service name="Nic"/>
</provides>
<config ehci="yes">
<nic mac="02:00:00:00:01:01" />
</config>
</start>}
append_if $use_nic_driver config {
<start name="nic_drv">
<resource name="RAM" quantum="4M"/>
<provides><service name="Nic"/></provides>
</start>}
append_if [have_spec acpi] config {
<start name="acpi">
<resource name="RAM" quantum="6M" constrain_phys="yes"/>
<binary name="acpi_drv"/>
<provides>
<service name="PCI"/>
<service name="IRQ" />
</provides>
<route>
<service name="PCI"> <any-child /> </service>
<any-service> <parent/> <any-child /> </any-service>
</route>
</start>}
append_if [expr ![have_spec acpi] && [have_spec pci]] config {
<start name="pci_drv">
<resource name="RAM" quantum="3M" constrain_phys="yes"/>
<provides> <service name="PCI"/> </provides>
</start>}
append config {
</config>
}
install_config $config
#
# Boot modules
#
# generic modules
set boot_modules {
core init timer
ld.lib.so libc.lib.so lwip.lib.so test-lwip_httpsrv
}
# platform-specific modules
lappend_if [have_spec acpi] boot_modules acpi_drv
lappend_if [have_spec pci] boot_modules pci_drv
lappend_if $use_usb_driver boot_modules usb_drv
lappend_if $use_nic_driver boot_modules nic_drv
lappend_if [have_spec nova] boot_modules pci_device_pd
lappend_if [have_spec platform_arndale] boot_modules platform_drv
lappend_if [have_spec platform_rpi] boot_modules platform_drv
lappend_if [have_spec gpio] boot_modules gpio_drv
build_boot_image $boot_modules
#
# Execute test case
#
# qemu config
append qemu_args " -m 128 -nographic "
append_if [have_spec x86] qemu_args " -net nic,model=e1000 "
append_if [have_spec lan9118] qemu_args " -net nic,model=lan9118 "
append qemu_args " -net user -redir tcp:5555::80 "
run_genode_until {.*got IP address .*\n} 30
if {[have_include "power_on/qemu"]} {
set uri "http://localhost:5555/"
} else {
set match_string "got IP address (.*)\033.*\n"
regexp $match_string $output ip_addr
regexp {[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+} $ip_addr ip_addr
set uri "http://$ip_addr:80/"
}
puts "http server is up, try to query website $uri"
set website [exec lynx -dump $uri]
puts "response:\n$website"
if {![regexp {Welcome to our lwIP HTTP server!} $website dummy]} {
puts stderr "Query returned unexpected website"
exit 2;
}
# vi: set ft=tcl :