mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-29 18:18:54 +00:00
a2ad5c06ab
With the current implementation resource requests are not automically satisfied with slack quota by init. Therefore, this commit adapts RAM quotas of autopilot scenarios to the actual demands.
288 lines
8.8 KiB
Plaintext
288 lines
8.8 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 {[nic_drv_binary] == "usb_drv"} { return usb_drv }
|
|
if {[nic_drv_binary] == ""} { return "" }
|
|
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">
|
|
<binary name="} [nic_drv_binary] {"/>
|
|
<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="14M"/>
|
|
<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 ram_quota { prot } {
|
|
if {$prot == "udp"} { return 28M }
|
|
if {$prot == "http"} { return 12M }
|
|
}
|
|
|
|
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="} [ram_quota $prot] {"/>
|
|
<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="} [ram_quota $prot] {"/>
|
|
<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_binary] [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
|