[PATCH v4 03/10] lib: public headers and API implementations for userspace programs
userspace programs which uses libos access via a public API, lib_init(), with passed arguments struct SimImported and struct SimExported. Signed-off-by: Hajime Tazaki Signed-off-by: Ryo Nakamura --- arch/lib/include/sim-assert.h | 23 +++ arch/lib/include/sim-init.h | 134 ++ arch/lib/include/sim-printf.h | 13 ++ arch/lib/include/sim-types.h | 53 ++ arch/lib/include/sim.h| 51 ++ arch/lib/lib-device.c | 187 +++ arch/lib/lib-socket.c | 410 ++ arch/lib/lib.c| 294 ++ arch/lib/lib.h| 21 +++ 9 files changed, 1186 insertions(+) create mode 100644 arch/lib/include/sim-assert.h create mode 100644 arch/lib/include/sim-init.h create mode 100644 arch/lib/include/sim-printf.h create mode 100644 arch/lib/include/sim-types.h create mode 100644 arch/lib/include/sim.h create mode 100644 arch/lib/lib-device.c create mode 100644 arch/lib/lib-socket.c create mode 100644 arch/lib/lib.c create mode 100644 arch/lib/lib.h diff --git a/arch/lib/include/sim-assert.h b/arch/lib/include/sim-assert.h new file mode 100644 index 000..974122c --- /dev/null +++ b/arch/lib/include/sim-assert.h @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2015 INRIA, Hajime Tazaki + * + * Author: Mathieu Lacage + * Hajime Tazaki + */ + +#ifndef SIM_ASSERT_H +#define SIM_ASSERT_H + +#include "sim-printf.h" + +#define lib_assert(v) { \ + while (!(v)) { \ + lib_printf("Assert failed %s:%u \"" #v "\"\n", \ + __FILE__, __LINE__);\ + char *p = 0;\ + *p = 1; \ + } \ + } + + +#endif /* SIM_ASSERT_H */ diff --git a/arch/lib/include/sim-init.h b/arch/lib/include/sim-init.h new file mode 100644 index 000..e871a59 --- /dev/null +++ b/arch/lib/include/sim-init.h @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2015 INRIA, Hajime Tazaki + * + * Author: Mathieu Lacage + * Hajime Tazaki + */ + +#ifndef SIM_INIT_H +#define SIM_INIT_H + +#include +#include "sim-types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct _IO_FILE; +typedef struct _IO_FILE FILE; + +struct SimExported { + struct SimTask *(*task_create)(void *priv, unsigned long pid); + void (*task_destroy)(struct SimTask *task); + void *(*task_get_private)(struct SimTask *task); + + int (*sock_socket)(int domain, int type, int protocol, + struct SimSocket **socket); + int (*sock_close)(struct SimSocket *socket); + ssize_t (*sock_recvmsg)(struct SimSocket *socket, struct msghdr *msg, + int flags); + ssize_t (*sock_sendmsg)(struct SimSocket *socket, + const struct msghdr *msg, int flags); + int (*sock_getsockname)(struct SimSocket *socket, + struct sockaddr *name, int *namelen); + int (*sock_getpeername)(struct SimSocket *socket, + struct sockaddr *name, int *namelen); + int (*sock_bind)(struct SimSocket *socket, const struct sockaddr *name, + int namelen); + int (*sock_connect)(struct SimSocket *socket, + const struct sockaddr *name, int namelen, + int flags); + int (*sock_listen)(struct SimSocket *socket, int backlog); + int (*sock_shutdown)(struct SimSocket *socket, int how); + int (*sock_accept)(struct SimSocket *socket, + struct SimSocket **newSocket, int flags); + int (*sock_ioctl)(struct SimSocket *socket, int request, char *argp); + int (*sock_setsockopt)(struct SimSocket *socket, int level, + int optname, + const void *optval, int optlen); + int (*sock_getsockopt)(struct SimSocket *socket, int level, + int optname, + void *optval, int *optlen); + + void (*sock_poll)(struct SimSocket *socket, void *ret); + void (*sock_pollfreewait)(void *polltable); + + struct SimDevice *(*dev_create)(const char *ifname, void *priv, + enum SimDevFlags flags); + void (*dev_destroy)(struct SimDevice *dev); + void *(*dev_get_private)(struct SimDevice *task); + void (*dev_set_address)(struct SimDevice *dev, + unsigned char buffer[6]); + void (*dev_set_mtu)(struct SimDevice *dev, int mtu); + struct SimDevicePacket (*dev_create_packet)(struct SimDevice *dev, + int size); + void
[PATCH v4 03/10] lib: public headers and API implementations for userspace programs
userspace programs which uses libos access via a public API, lib_init(), with passed arguments struct SimImported and struct SimExported. Signed-off-by: Hajime Tazaki taz...@sfc.wide.ad.jp Signed-off-by: Ryo Nakamura u...@haeena.net --- arch/lib/include/sim-assert.h | 23 +++ arch/lib/include/sim-init.h | 134 ++ arch/lib/include/sim-printf.h | 13 ++ arch/lib/include/sim-types.h | 53 ++ arch/lib/include/sim.h| 51 ++ arch/lib/lib-device.c | 187 +++ arch/lib/lib-socket.c | 410 ++ arch/lib/lib.c| 294 ++ arch/lib/lib.h| 21 +++ 9 files changed, 1186 insertions(+) create mode 100644 arch/lib/include/sim-assert.h create mode 100644 arch/lib/include/sim-init.h create mode 100644 arch/lib/include/sim-printf.h create mode 100644 arch/lib/include/sim-types.h create mode 100644 arch/lib/include/sim.h create mode 100644 arch/lib/lib-device.c create mode 100644 arch/lib/lib-socket.c create mode 100644 arch/lib/lib.c create mode 100644 arch/lib/lib.h diff --git a/arch/lib/include/sim-assert.h b/arch/lib/include/sim-assert.h new file mode 100644 index 000..974122c --- /dev/null +++ b/arch/lib/include/sim-assert.h @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2015 INRIA, Hajime Tazaki + * + * Author: Mathieu Lacage mathieu.lac...@gmail.com + * Hajime Tazaki taz...@sfc.wide.ad.jp + */ + +#ifndef SIM_ASSERT_H +#define SIM_ASSERT_H + +#include sim-printf.h + +#define lib_assert(v) { \ + while (!(v)) { \ + lib_printf(Assert failed %s:%u \ #v \\n, \ + __FILE__, __LINE__);\ + char *p = 0;\ + *p = 1; \ + } \ + } + + +#endif /* SIM_ASSERT_H */ diff --git a/arch/lib/include/sim-init.h b/arch/lib/include/sim-init.h new file mode 100644 index 000..e871a59 --- /dev/null +++ b/arch/lib/include/sim-init.h @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2015 INRIA, Hajime Tazaki + * + * Author: Mathieu Lacage mathieu.lac...@gmail.com + * Hajime Tazaki taz...@sfc.wide.ad.jp + */ + +#ifndef SIM_INIT_H +#define SIM_INIT_H + +#include linux/socket.h +#include sim-types.h + +#ifdef __cplusplus +extern C { +#endif + +struct _IO_FILE; +typedef struct _IO_FILE FILE; + +struct SimExported { + struct SimTask *(*task_create)(void *priv, unsigned long pid); + void (*task_destroy)(struct SimTask *task); + void *(*task_get_private)(struct SimTask *task); + + int (*sock_socket)(int domain, int type, int protocol, + struct SimSocket **socket); + int (*sock_close)(struct SimSocket *socket); + ssize_t (*sock_recvmsg)(struct SimSocket *socket, struct msghdr *msg, + int flags); + ssize_t (*sock_sendmsg)(struct SimSocket *socket, + const struct msghdr *msg, int flags); + int (*sock_getsockname)(struct SimSocket *socket, + struct sockaddr *name, int *namelen); + int (*sock_getpeername)(struct SimSocket *socket, + struct sockaddr *name, int *namelen); + int (*sock_bind)(struct SimSocket *socket, const struct sockaddr *name, + int namelen); + int (*sock_connect)(struct SimSocket *socket, + const struct sockaddr *name, int namelen, + int flags); + int (*sock_listen)(struct SimSocket *socket, int backlog); + int (*sock_shutdown)(struct SimSocket *socket, int how); + int (*sock_accept)(struct SimSocket *socket, + struct SimSocket **newSocket, int flags); + int (*sock_ioctl)(struct SimSocket *socket, int request, char *argp); + int (*sock_setsockopt)(struct SimSocket *socket, int level, + int optname, + const void *optval, int optlen); + int (*sock_getsockopt)(struct SimSocket *socket, int level, + int optname, + void *optval, int *optlen); + + void (*sock_poll)(struct SimSocket *socket, void *ret); + void (*sock_pollfreewait)(void *polltable); + + struct SimDevice *(*dev_create)(const char *ifname, void *priv, + enum SimDevFlags flags); + void (*dev_destroy)(struct SimDevice *dev); + void *(*dev_get_private)(struct SimDevice *task); + void (*dev_set_address)(struct SimDevice *dev, + unsigned char buffer[6]); + void (*dev_set_mtu)(struct SimDevice *dev, int mtu); + struct