diff --git a/repos/os/include/genode_c_api/socket.h b/repos/os/include/genode_c_api/socket.h
index 4f708bbf8c..47e976f42e 100644
--- a/repos/os/include/genode_c_api/socket.h
+++ b/repos/os/include/genode_c_api/socket.h
@@ -14,6 +14,23 @@
#include
#include
+/* define required types in case they are not present */
+#ifndef AF_UNSPEC
+#define AF_UNSPEC 0
+#endif
+
+#ifndef AF_INET
+#define AF_INET 2
+#endif
+
+#ifndef SOCK_STREAM
+#define SOCK_STREAM 1
+#endif
+
+#ifndef SOCK_DGRAM
+#define SOCK_DGRAM 2
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -121,8 +138,8 @@ struct genode_sockaddr
union {
/* AF_INET (or IPv4) */
struct {
- genode_uint16_t port; /* be */
- genode_uint32_t addr; /* be */
+ genode_uint16_t port; /* big endian = network byte order */
+ genode_uint32_t addr; /* big endian = network byte order */
} in;
};
};
@@ -142,7 +159,19 @@ void genode_socket_init(struct genode_env *env,
struct genode_socket_io_progress *);
-/**
+/*
+ * Wakeup remote peers. This can be used as a callback for triggering, for
+ * example, signal submission of the packet stream
+ */
+struct genode_socket_wakeup {
+ void *data;
+ void (*callback)(void *);
+};
+
+void genode_socket_register_wakeup(struct genode_socket_wakeup *);
+void genode_socket_wakeup_remote(void);
+
+/*
* IPv4 address configuration (DHCP or static)
*/
struct genode_socket_config
@@ -155,25 +184,41 @@ struct genode_socket_config
char const *nameserver;
};
-/**
+/*
* Configure/obtain IP address (blocking)
*/
void genode_socket_config_address(struct genode_socket_config *config);
-/**
+/*
+ * Retrieve IPv4 configuration
+ */
+
+struct genode_socket_info
+{
+ /* all big endian */
+ unsigned ip_addr;
+ unsigned netmask;
+ unsigned gateway;
+ unsigned nameserver;
+ bool link_state;
+};
+
+void genode_socket_config_info(struct genode_socket_info *info);
+
+/*
* Configure MTU size (default should be 1500)
*/
void genode_socket_configure_mtu(unsigned mtu);
-/**
+/*
* Wait for I/O progress (synchronous) - used for testing if no
* genode_socket_io_progress has been registered.
*/
void genode_socket_wait_for_progress(void);
-/**
+/*
* The following calls have POSIX semantics and are non-blocking
*/
@@ -214,13 +259,14 @@ enum Errno genode_socket_getsockname(struct genode_socket_handle *,
enum Errno genode_socket_getpeername(struct genode_socket_handle *,
struct genode_sockaddr *);
-/**
+/*
* I/O vector
*/
struct genode_iovec
{
void *base;
unsigned long size;
+ unsigned long used;
};