diff --git a/repos/base/run/platform_drv.inc b/repos/base/run/platform_drv.inc
index e3ed74d28c..3cf6870860 100644
--- a/repos/base/run/platform_drv.inc
+++ b/repos/base/run/platform_drv.inc
@@ -42,7 +42,7 @@ proc platform_drv_build_components {} {
proc append_platform_drv_build_components {} {
global build_components
- append build_components [platform_drv_build_components]
+ append build_components { } [platform_drv_build_components]
}
proc platform_drv_boot_modules {} {
@@ -57,7 +57,7 @@ proc platform_drv_boot_modules {} {
proc append_platform_drv_boot_modules {} {
global boot_modules
- append boot_modules $platform_drv_boot_modules
+ append boot_modules { } [platform_drv_boot_modules]
}
diff --git a/repos/libports/run/nic_router.run b/repos/libports/run/nic_router.run
index 0e64086646..bcd9fea35a 100644
--- a/repos/libports/run/nic_router.run
+++ b/repos/libports/run/nic_router.run
@@ -1,41 +1,42 @@
#
-# Build
+# Build components
#
-set tcp_up_to_down_1 1
-set tcp_up_to_down_2 1
-set tcp_down_to_up_1 1
-set udp_down_to_down_1 1
-set udp_up_to_down_1 1
-set udp_down_to_up_1 1
-
-set use_usb_driver [expr [have_spec omap4] || [have_spec arndale] || [have_spec rpi]]
-set use_nic_driver [expr !$use_usb_driver && ![have_spec imx53] && ![have_spec riscv] && ![have_spec odroid_xu] && ![have_spec linux] && ![have_spec wand_quad]]
-
-set nic_driver "nic_drv"
-if ($use_usb_driver) {
- set nic_driver "usb_drv" }
-
-if {[expr !$use_usb_driver && !$use_nic_driver]} {
- puts "\n Run script is not supported on this platform. \n"; exit 0 }
-
-set build_components {
- core init drivers/timer drivers/nic server/nic_router server/nic_bridge
- test/lwip/http_srv_static test/lwip/http_clnt test/lxip/udp_echo
- test/lxip/udp_client
-}
-
-proc gpio_drv { } { if {[have_spec rpi] && [have_spec hw]} { return hw_gpio_drv }
- if {[have_spec rpi] && [have_spec foc]} { return foc_gpio_drv }
- return gpio_drv }
-
-lappend_if $use_usb_driver build_components drivers/usb
-lappend_if [have_spec gpio] build_components drivers/gpio
+proc enable_test_1 { } { return 1 }
+proc enable_test_2 { } { return 1 }
+proc enable_test_3 { } { return 1 }
+proc enable_test_4 { } { return 1 }
+proc enable_test_5 { } { return 1 }
+proc enable_test_6 { } { return 1 }
source ${genode_dir}/repos/base/run/platform_drv.inc
-append_platform_drv_build_components
-build $build_components
+proc nic_drv { } {
+ if {[have_spec omap4] || [have_spec arndale] || [have_spec rpi]} { return usb_drv }
+ if {!([have_spec imx53] || [have_spec riscv] || [have_spec odroid_xu] || [have_spec linux] || [have_spec wand_quad])} { return nic_drv }
+}
+
+proc gpio_drv { } {
+ if {[have_spec rpi] && [have_spec hw]} { return hw_gpio_drv }
+ if {[have_spec rpi] && [have_spec foc]} { return foc_gpio_drv }
+ if {[have_spec gpio]} { return gpio_drv }
+}
+
+if {[nic_drv] == ""} {
+ puts "\n Run script is not supported on this platform. \n"; exit 0 }
+
+proc nic_drv_build { } {
+ if {[nic_drv] == "nic_drv"} { return drivers/nic }
+ if {[nic_drv] == "usb_drv"} { return drivers/usb }
+}
+
+proc gpio_drv_build { } { if {[gpio_drv] != ""} { return " drivers/gpio" } }
+
+build [string cat {
+ core init drivers/timer server/nic_router server/nic_bridge
+ test/lwip/http_srv_static test/lwip/http_clnt test/lxip/udp_echo
+ test/lxip/udp_client } [nic_drv_build] { } [gpio_drv_build] {
+ } [platform_drv_build_components]]
create_boot_directory
@@ -43,7 +44,119 @@ create_boot_directory
# Generate config
#
-append config {
+proc gpio_drv_config { } {
+
+ if {[have_spec gpio]} { return [string cat {
+
+
+
+
+ }] }
+}
+
+proc nic_drv_config { } {
+
+ if {[nic_drv] == "nic_drv"} { return [string cat {
+
+
+
+
+ }] }
+
+ if {[nic_drv] == "usb_drv"} { return [string cat {
+
+
+
+
+
+
+
+
+
+ }] }
+}
+
+proc client_bin { prot } {
+ if {$prot == "udp"} { return "test-lxip_udp_client" }
+ if {$prot == "http"} { return "test-http_clnt" } }
+
+proc server_bin { prot } {
+ if {$prot == "udp"} { return "test-lxip_udp_echo" }
+ if {$prot == "http"} { return "test-lwip_httpsrv_static" } }
+
+proc client_config { prot index ip_addr gateway netmask nic srv_port srv_ip } {
+ return [string cat {
+
+
+
+
+
+
+
+
+
+
+
+
+ }]
+}
+
+proc server_config { prot index ip_addr gateway netmask nic port } {
+ return [string cat {
+
+
+
+
+
+
+
+
+
+
+
+
+ }]
+}
+
+proc test_1_config { } {
+ if {[enable_test_1]} { return [string cat {
+ } [client_config udp 1 10.0.98.55 10.0.98.33 255.255.255.0 nic_router 1337 10.0.98.33] {
+ } [server_config udp 1 10.0.99.55 10.0.99.33 255.255.255.0 nic_router 1337 ]] }
+}
+
+proc test_2_config { } {
+ if {[enable_test_2]} { return [string cat {
+ } [client_config udp 2 10.0.2.212 10.0.2.1 255.255.255.0 nic_bridge 1 10.0.2.55] {
+ } [server_config udp 2 18.17.16.15 18.17.16.14 255.255.0.0 nic_router 1 ]] }
+}
+
+proc test_3_config { } {
+ if {[enable_test_3]} { return [string cat {
+ } [client_config udp 3 217.13.192.2 217.13.192.1 255.255.192.0 nic_router 65535 10.0.2.213] {
+ } [server_config udp 3 10.0.2.213 10.0.2.55 255.255.255.0 nic_bridge 65535 ]] }
+}
+
+proc test_4_config { } {
+ if {[enable_test_4]} { return [string cat {
+ } [client_config http 1 10.0.2.201 10.0.2.1 255.255.255.0 nic_bridge 80 10.0.2.55] {
+ } [server_config http 1 192.168.1.18 192.168.1.1 255.255.255.0 nic_router 80 ]] }
+}
+
+proc test_5_config { } {
+ if {[enable_test_5]} { return [string cat {
+ } [client_config http 2 10.0.2.202 10.0.2.1 255.255.255.0 nic_bridge 8080 10.0.2.55] {
+ } [server_config http 2 192.168.2.72 192.168.2.1 255.255.255.0 nic_router 8080 ]] }
+}
+
+proc test_6_config { } {
+ if {[enable_test_6]} { return [string cat {
+ } [client_config http 3 100.200.0.128 100.200.0.1 255.255.0.0 nic_router 2345 10.0.2.203] {
+ } [server_config http 3 10.0.2.203 10.0.2.1 255.255.255.0 nic_bridge 2345 ]] }
+}
+
+install_config [string cat {
@@ -56,37 +169,15 @@ append config {
+
- }
+
-append_if [have_spec gpio] config "
-
-
-
-
- "
+ } [gpio_drv_config] {
+ } [nic_drv_config] {
+ } [platform_drv_config] {
-append_if $use_usb_driver config {
-
-
-
-
-
-
-
-
- }
-
-append_platform_drv_config
-
-append_if $use_nic_driver config {
-
-
-
- }
-
-append config {
@@ -144,230 +235,41 @@ append config {
-
-
-
+
+
+
-
+
- }
-append config "
- "
-append config {
-
-
- }
-
-append_if $udp_down_to_down_1 config {
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
+ } [test_1_config] {
+ } [test_2_config] {
+ } [test_3_config] {
+ } [test_4_config] {
+ } [test_5_config] {
+ } [test_6_config] {
-append_if $udp_up_to_down_1 config {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
-
-append_if $udp_down_to_up_1 config {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
-
-append_if $tcp_up_to_down_1 config {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
-
-append_if $tcp_up_to_down_2 config {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
-
-append_if $tcp_down_to_up_1 config {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
-
-append config { }
-
-install_config $config
+ }]
#
-# Boot modules
+# Create single image and execute
#
-# generic modules
-set boot_modules {
-
+build_boot_image [string cat {
core init timer nic_router nic_bridge ld.lib.so libc.lib.so libm.lib.so
libc_resolv.lib.so lwip.lib.so lxip.lib.so test-http_clnt
test-lwip_httpsrv_static test-lxip_udp_echo test-lxip_udp_client
-}
+ } [nic_drv] { } [gpio_drv] { } [platform_drv_boot_modules]]
-# platform-specific modules
-lappend_if $use_usb_driver boot_modules usb_drv
-lappend_if $use_nic_driver boot_modules nic_drv
-lappend_if [have_spec gpio] boot_modules [gpio_drv]
+proc nic_qemu_args { } {
+ if {[have_spec x86]} { return "-net nic,model=e1000" }
+ if {[have_spec lan9118]} { return "-net nic,model=lan9118" } }
-append_platform_drv_boot_modules
+append qemu_args { -m 256 -nographic -net user -redir udp:5555::1337 } [nic_qemu_args]
-build_boot_image $boot_modules
-
-# qemu config
-append qemu_args " -m 256 -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 udp:5555::1337 "
-
-run_genode_until ".*Test done.*\n.*Test done.*\n.*Test done.*\n.*Test done.*\n.*Test done.*\n.*Test done.*\n" 60
+run_genode_until {.*Test done.*\n.*Test done.*\n.*Test done.*\n.*Test done.*\n.*Test done.*\n.*Test done.*\n} 60