ksocket.h revision caa76e0d
1/*
2 * kernel-level support for sockets, includes userland support as well for testing.
3 * Fran��ois Revol.
4 */
5
6#ifndef _KSOCKET_H
7#define _KSOCKET_H
8
9#include <sys/socket.h>
10
11#ifndef _KERNEL_MODE /* userland wrapper */
12
13#define ksocket socket
14#define kbind bind
15#define kconnect connect
16#define kgetsockname getsockname
17#define kgetpeername getpeername
18#define kaccept accept
19#define ksendmsg sendmsg
20#define krecvmsg recvmsg
21#define krecvfrom recvfrom
22#define ksendto sendto
23#define krecv recv
24#define ksend send
25#define klisten listen
26#define kshutdown shutdown
27#define kclosesocket close
28#define ksocket_init() ({B_OK;})
29#define ksocket_cleanup() ({B_OK;})
30#define kmessage(fmt, ...) printf(fmt "\n", ##__VA_ARGS__)
31#define KSOCKET_MODULE_DECL /* nothing */
32
33#elif defined(__HAIKU__)
34
35/* Haiku socket module */
36#include <os/drivers/socket_interface.h>
37
38extern struct socket_module_info *gSocket;
39#define ksocket (gSocket->socket)
40#define kbind (gSocket->bind)
41#define kconnect (gSocket->connect)
42#define kgetsockname (gSocket->getsockname)
43#define kgetpeername (gSocket->getpeername)
44#define kaccept (gSocket->accept)
45//#define kaccept(_fd, _addr, _sz) ({int thesock; thesock = (gSocket->accept)(_fd, _addr, _sz); dprintf("kaccept(%d, , ) = %d\n", _fd, thesock); thesock; })
46#define ksendmsg (gSocket->sendmsg)
47#define krecvmsg (gSocket->recvmsg)
48#define krecvfrom (gSocket->recvfrom)
49#define ksendto (gSocket->sendto)
50#define krecv (gSocket->recv)
51#define ksend (gSocket->send)
52#define klisten (gSocket->listen)
53#define kshutdown (gSocket->shutdown)
54#define kclosesocket close
55#define kmessage(fmt, ...) dprintf("ksocket: " fmt "\n", ##__VA_ARGS__)
56
57extern status_t ksocket_init (void);
58extern status_t ksocket_cleanup (void);
59
60#define KSOCKET_MODULE_DECL \
61struct socket_module_info *gSocket; \
62status_t ksocket_init (void) { \
63	return get_module(B_SOCKET_MODULE_NAME, (module_info **)&gSocket); \
64} \
65 \
66status_t ksocket_cleanup (void) { \
67	return put_module(B_SOCKET_MODULE_NAME); \
68}
69
70#elif defined(BONE_VERSION)
71
72/* BONE socket module */
73#include <sys/socket_module.h>
74
75extern bone_socket_info_t *gSocket;
76#define ksocket (gSocket->socket)
77//#define ksocket(_fam, _typ, _pro) ({int thesock; thesock = (gSocket->socket)(_fam, _typ, _pro); dprintf("ksocket(%d, %d, %d) = %d\n", _fam, _typ, _pro, thesock); thesock;})
78#define kbind (gSocket->bind)
79#define kconnect (gSocket->connect)
80#define kgetsockname (gSocket->getsockname)
81#define kgetpeername (gSocket->getpeername)
82#define kaccept (gSocket->accept)
83//#define kaccept(_fd, _addr, _sz) ({int thesock; thesock = (gSocket->accept)(_fd, _addr, _sz); dprintf("kaccept(%d, , ) = %d\n", _fd, thesock); thesock; })
84#define ksendmsg _ERROR_no_sendmsg_in_BONE
85#define krecvmsg _ERROR_no_recvmsg_in_BONE
86#define krecvfrom (gSocket->recvfrom)
87#define ksendto (gSocket->sendto)
88#define krecv (gSocket->recv)
89#define ksend (gSocket->send)
90#define klisten (gSocket->listen)
91#define kshutdown (gSocket->shutdown)
92#define kclosesocket close
93#define kmessage(fmt, ...) dprintf("ksocket: " fmt "\n", ##__VA_ARGS__)
94
95extern status_t ksocket_init (void);
96extern status_t ksocket_cleanup (void);
97
98#define KSOCKET_MODULE_DECL \
99bone_socket_info_t *gSocket; \
100status_t ksocket_init (void) { \
101	return get_module(BONE_SOCKET_MODULE, (module_info **)&gSocket); \
102} \
103 \
104status_t ksocket_cleanup (void) { \
105	return put_module(BONE_SOCKET_MODULE); \
106}
107
108#else /* _KERNEL_MODE, !BONE_VERSION */
109
110#error feel free to put back ksocketd support if you dare
111
112#endif /* _KERNEL_MODE, BONE_VERSION */
113
114#endif /* _KSOCKET_H */
115