mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-21 22:47:50 +00:00
parent
401ba6e7fd
commit
e4328de251
89
repos/libports/run/libc_getaddrinfo.run
Normal file
89
repos/libports/run/libc_getaddrinfo.run
Normal file
@ -0,0 +1,89 @@
|
||||
source ${genode_dir}/repos/base/run/platform_drv.inc
|
||||
|
||||
if {[have_spec linux]} {
|
||||
puts "The [run_name] scenario requires QEMU networking."
|
||||
exit 1
|
||||
}
|
||||
|
||||
set build_components {
|
||||
core init
|
||||
drivers/timer
|
||||
lib/vfs/lxip
|
||||
test/libc_getaddrinfo
|
||||
}
|
||||
|
||||
append_platform_drv_build_components
|
||||
|
||||
build $build_components
|
||||
|
||||
create_boot_directory
|
||||
|
||||
append config {
|
||||
<config>
|
||||
<parent-provides>
|
||||
<service name="CPU"/>
|
||||
<service name="IO_MEM"/>
|
||||
<service name="IO_PORT"/>
|
||||
<service name="IRQ"/>
|
||||
<service name="LOG"/>
|
||||
<service name="PD"/>
|
||||
<service name="RM"/>
|
||||
<service name="ROM"/>
|
||||
</parent-provides>
|
||||
<default-route>
|
||||
<any-service> <parent/> <any-child/> </any-service>
|
||||
</default-route>
|
||||
<default caps="128"/>}
|
||||
|
||||
append_platform_drv_config
|
||||
|
||||
append config {
|
||||
<start name="timer">
|
||||
<resource name="RAM" quantum="1M"/>
|
||||
<provides> <service name="Timer"/> </provides>
|
||||
</start>
|
||||
<start name="nic_drv">
|
||||
<binary name="} [nic_drv_binary] {"/>
|
||||
<resource name="RAM" quantum="4M"/>
|
||||
<provides> <service name="Nic"/> </provides>
|
||||
</start>
|
||||
|
||||
<start name="test-libc_getaddrinfo" caps="256">
|
||||
<resource name="RAM" quantum="32M"/>
|
||||
<config>
|
||||
<vfs>
|
||||
<dir name="etc">
|
||||
<inline name="resolv.conf">nameserver 10.0.2.3</inline>
|
||||
</dir>
|
||||
<dir name="dev"> <log/> </dir>
|
||||
<dir name="socket"> <lxip dhcp="yes"/> </dir>
|
||||
</vfs>
|
||||
<libc stdout="/dev/log" socket="/socket"/>
|
||||
<arg value="test-libc_getenv"/>
|
||||
<arg value="genode.org"/>
|
||||
<arg value="hypervisor.org"/>
|
||||
<arg value="example.com"/>
|
||||
</config>
|
||||
</start>
|
||||
</config>
|
||||
}
|
||||
|
||||
install_config $config
|
||||
|
||||
set boot_modules {
|
||||
core init ld.lib.so
|
||||
libc.lib.so libm.lib.so posix.lib.so
|
||||
lxip.lib.so vfs_lxip.lib.so
|
||||
test-libc_getaddrinfo
|
||||
timer
|
||||
}
|
||||
|
||||
# platform-specific modules
|
||||
append_platform_drv_boot_modules
|
||||
lappend boot_modules [nic_drv_binary]
|
||||
|
||||
build_boot_image $boot_modules
|
||||
|
||||
append qemu_args " -nographic -net nic,model=e1000 -net user -net dump,file=[run_dir]/dump.pcap"
|
||||
|
||||
run_genode_until "child .* exited with exit value 0.*\n" 20
|
63
repos/libports/src/test/libc_getaddrinfo/main.c
Normal file
63
repos/libports/src/test/libc_getaddrinfo/main.c
Normal file
@ -0,0 +1,63 @@
|
||||
/*
|
||||
* \brief Libc getaddrinfo(...) test
|
||||
* \author Emery Hemingway
|
||||
* \date 2018-02-18
|
||||
*/
|
||||
|
||||
/*
|
||||
* This code lifted from Beej's Guide to Network Programming.
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netdb.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <netinet/in.h>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
struct addrinfo hints;
|
||||
char ipstr[INET6_ADDRSTRLEN];
|
||||
|
||||
int i;
|
||||
for (i = 1; i < argc; ++i) {
|
||||
int res;
|
||||
char const *arg = argv[i];
|
||||
|
||||
struct addrinfo *info, *p;
|
||||
|
||||
memset(&hints, 0x00, sizeof(hints));
|
||||
hints.ai_family = AF_UNSPEC;
|
||||
|
||||
res = getaddrinfo(arg, NULL, &hints, &info);
|
||||
if (res != 0) {
|
||||
printf("getaddrinfo error: %d\n", res);
|
||||
continue;
|
||||
}
|
||||
|
||||
for (p = info; p != NULL; p = p->ai_next) {
|
||||
void *addr;
|
||||
|
||||
// get the pointer to the address itself,
|
||||
// different fields in IPv4 and IPv6:
|
||||
if (p->ai_family == AF_INET) { // IPv4
|
||||
struct sockaddr_in *ipv4 = (struct sockaddr_in *)p->ai_addr;
|
||||
addr = &(ipv4->sin_addr);
|
||||
} else { // IPv6
|
||||
struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)p->ai_addr;
|
||||
addr = &(ipv6->sin6_addr);
|
||||
}
|
||||
|
||||
inet_ntop(p->ai_family, addr, ipstr, sizeof ipstr);
|
||||
printf("%s: %s\n", arg, ipstr);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
freeaddrinfo(info);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
3
repos/libports/src/test/libc_getaddrinfo/target.mk
Normal file
3
repos/libports/src/test/libc_getaddrinfo/target.mk
Normal file
@ -0,0 +1,3 @@
|
||||
TARGET = test-libc_getaddrinfo
|
||||
SRC_C = main.c
|
||||
LIBS = posix
|
Loading…
Reference in New Issue
Block a user