mirror of
https://github.com/genodelabs/genode.git
synced 2025-01-03 20:44:11 +00:00
8ab0a5c795
It seems that our buildbot has a problem with the TCL command 'string cat'. In most cases it is not necessary anyway as we can use the "" enclosure instead. It unfolds inline procedure calls and variables automatically. We don't want to use "" only in cases where the literal shall contain many " characters itself as it is the case for XML configs. Then we use the 'append' command and a helper variable instead. Ref #2193
281 lines
8.7 KiB
Plaintext
281 lines
8.7 KiB
Plaintext
#
|
|
# Build components
|
|
#
|
|
|
|
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
|
|
|
|
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 "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
|
|
|
|
#
|
|
# Generate config
|
|
#
|
|
|
|
proc gpio_drv_config { } {
|
|
if {[have_spec gpio]} {
|
|
append result {
|
|
<start name="} [gpio_drv] {">
|
|
<resource name="RAM" quantum="4M"/>
|
|
<provides><service name="Gpio"/></provides>
|
|
</start>}
|
|
return $result
|
|
}
|
|
}
|
|
|
|
proc nic_drv_config { } {
|
|
if {[nic_drv] == "nic_drv"} {
|
|
append result {
|
|
<start name="nic_drv">
|
|
<resource name="RAM" quantum="6M"/>
|
|
<provides><service name="Nic"/></provides>
|
|
</start>}
|
|
return $result
|
|
}
|
|
if {[nic_drv] == "usb_drv"} {
|
|
append result {
|
|
<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>}
|
|
return $result
|
|
}
|
|
}
|
|
|
|
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 } {
|
|
append result {
|
|
<start name="} $prot {_client_} $index {">
|
|
<binary name="} [client_bin $prot] {" />
|
|
<resource name="RAM" quantum="2M"/>
|
|
<route>
|
|
<service name="Nic"> <child name="} $nic {"/> </service>
|
|
<any-service> <parent/> <any-child/> </any-service>
|
|
</route>
|
|
<config server_ip="} $srv_ip {" server_port="} $srv_port {">
|
|
<vfs> <dir name="dev"> <log/> </dir> </vfs>
|
|
<libc stdout="/dev/log" stderr="/dev/log" ip_addr="} $ip_addr {"
|
|
gateway="} $gateway {" netmask="} $netmask {"/>
|
|
</config>
|
|
</start>}
|
|
return $result
|
|
}
|
|
|
|
proc server_config { prot index ip_addr gateway netmask nic port } {
|
|
append result {
|
|
<start name="} $prot {_server_} $index {">
|
|
<binary name="} [server_bin $prot] {" />
|
|
<resource name="RAM" quantum="2M"/>
|
|
<route>
|
|
<service name="Nic"> <child name="} $nic {"/> </service>
|
|
<any-service> <parent/> <any-child/> </any-service>
|
|
</route>
|
|
<config port="} $port {">
|
|
<vfs> <dir name="dev"> <log/> </dir> </vfs>
|
|
<libc stdout="/dev/log" stderr="/dev/log" ip_addr="} $ip_addr {"
|
|
gateway="} $gateway {" netmask="} $netmask {"/>
|
|
</config>
|
|
</start>}
|
|
return $result
|
|
}
|
|
|
|
proc test_1_config { } {
|
|
if {[enable_test_1]} { return "
|
|
[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 "
|
|
[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 "
|
|
[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 "
|
|
[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 "
|
|
[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 "
|
|
[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 ]" }
|
|
}
|
|
|
|
append config {
|
|
<config>
|
|
<parent-provides>
|
|
<service name="ROM"/>
|
|
<service name="RAM"/>
|
|
<service name="IRQ"/>
|
|
<service name="IO_MEM"/>
|
|
<service name="IO_PORT"/>
|
|
<service name="PD"/>
|
|
<service name="RM"/>
|
|
<service name="CPU"/>
|
|
<service name="LOG"/>
|
|
</parent-provides>
|
|
|
|
<default-route>
|
|
<any-service> <parent/> <any-child/> </any-service>
|
|
</default-route>
|
|
|
|
} [gpio_drv_config] {
|
|
} [nic_drv_config] {
|
|
} [platform_drv_config] {
|
|
|
|
<start name="timer">
|
|
<resource name="RAM" quantum="1M"/>
|
|
<provides><service name="Timer"/></provides>
|
|
</start>
|
|
|
|
<start name="nic_router">
|
|
<resource name="RAM" quantum="10M"/>
|
|
<provides><service name="Nic"/></provides>
|
|
<config rtt_sec="3" verbose="no">
|
|
|
|
<policy label_prefix="udp_client_1" domain="udp_client_1" />
|
|
<policy label_prefix="http_client_3" domain="http_client_3" />
|
|
<policy label_prefix="udp_client_3" domain="udp_client_3" />
|
|
<policy label_prefix="http_server_1" domain="http_server_1" />
|
|
<policy label_prefix="http_server_2" domain="http_server_2" />
|
|
<policy label_prefix="udp_server_1" domain="udp_server_1" />
|
|
<policy label_prefix="udp_server_2" domain="udp_server_2" />
|
|
|
|
<domain name="uplink" interface="10.0.2.55/24" gateway="10.0.2.1">
|
|
<tcp-forward port="80" domain="http_server_1" to="192.168.1.18" />
|
|
<tcp-forward port="8080" domain="http_server_2" to="192.168.2.72" />
|
|
<udp-forward port="1" domain="udp_server_2" to="18.17.16.15" />
|
|
<nat domain="http_client_3" tcp-ports="6" />
|
|
<ip dst="217.13.192.0/24" domain="udp_client_3" />
|
|
</domain>
|
|
|
|
<domain name="udp_client_1" interface="10.0.98.33/24">
|
|
<udp-forward port="1337" domain="udp_server_1" to="10.0.99.55" />
|
|
</domain>
|
|
|
|
<domain name="http_client_3" interface="100.200.0.1/24">
|
|
<tcp dst="10.0.0.0/16">
|
|
<permit port="2345" domain="uplink" />
|
|
</tcp>
|
|
</domain>
|
|
|
|
<domain name="udp_client_3" interface="217.13.192.1/24">
|
|
<ip dst="10.0.2.0/24" domain="uplink" />
|
|
</domain>
|
|
|
|
<domain name="http_server_1" interface="192.168.1.1/24" />
|
|
<domain name="http_server_2" interface="192.168.2.1/24" />
|
|
<domain name="udp_server_1" interface="10.0.99.33/24" />
|
|
<domain name="udp_server_2" interface="18.17.16.14/24" />
|
|
|
|
</config>
|
|
<route>
|
|
<service name="Nic"> <child name="nic_bridge"/> </service>
|
|
<any-service> <parent/> <any-child/> </any-service>
|
|
</route>
|
|
</start>
|
|
|
|
<start name="nic_bridge">
|
|
<resource name="RAM" quantum="10M"/>
|
|
<provides><service name="Nic"/></provides>
|
|
<config>
|
|
<policy label_prefix="nic_router" ip_addr="10.0.2.55" />
|
|
<policy label_prefix="http_client_1" ip_addr="10.0.2.201" />
|
|
<policy label_prefix="http_client_2" ip_addr="10.0.2.202" />
|
|
<policy label_prefix="http_server_3" ip_addr="10.0.2.203" />
|
|
<policy label_prefix="udp_client_2" ip_addr="10.0.2.212" />
|
|
<policy label_prefix="udp_server_3" ip_addr="10.0.2.213" />
|
|
</config>
|
|
<route>
|
|
<service name="Nic"> <child name="} [nic_drv] {"/> </service>
|
|
<any-service> <parent/> <any-child/> </any-service>
|
|
</route>
|
|
</start>
|
|
|
|
} [test_1_config] {
|
|
} [test_2_config] {
|
|
} [test_3_config] {
|
|
} [test_4_config] {
|
|
} [test_5_config] {
|
|
} [test_6_config] {
|
|
|
|
</config> }
|
|
|
|
install_config $config
|
|
|
|
#
|
|
# Create single image and execute
|
|
#
|
|
|
|
|
|
build_boot_image "
|
|
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]"
|
|
|
|
proc nic_qemu_args { } {
|
|
if {[have_spec x86]} { return "-net nic,model=e1000" }
|
|
if {[have_spec lan9118]} { return "-net nic,model=lan9118" } }
|
|
|
|
append qemu_args "-m 384 -nographic -net user -redir udp:5555::1337 [nic_qemu_args]"
|
|
|
|
run_genode_until {.*Test done.*\n.*Test done.*\n.*Test done.*\n.*Test done.*\n.*Test done.*\n.*Test done.*\n} 60
|