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 now has kernel calls for those, no need for a socket module anymore. */ 36 37#define ksocket socket 38#define kbind bind 39#define kconnect connect 40#define kgetsockname getsockname 41#define kgetpeername getpeername 42#define kaccept accept 43#define ksendmsg sendmsg 44#define krecvmsg recvmsg 45#define krecvfrom recvfrom 46#define ksendto sendto 47#define krecv recv 48#define ksend send 49#define klisten listen 50#define kshutdown shutdown 51#define kclosesocket close 52#define ksocket_init() ({B_OK;}) 53#define ksocket_cleanup() ({B_OK;}) 54#define kmessage(fmt, ...) dprintf(fmt "\n", ##__VA_ARGS__) 55#define KSOCKET_MODULE_DECL /* nothing */ 56 57#elif defined(BONE_VERSION) 58 59/* BONE socket module */ 60#include <sys/socket_module.h> 61 62extern bone_socket_info_t *gSocket; 63#define ksocket (gSocket->socket) 64//#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;}) 65#define kbind (gSocket->bind) 66#define kconnect (gSocket->connect) 67#define kgetsockname (gSocket->getsockname) 68#define kgetpeername (gSocket->getpeername) 69#define kaccept (gSocket->accept) 70//#define kaccept(_fd, _addr, _sz) ({int thesock; thesock = (gSocket->accept)(_fd, _addr, _sz); dprintf("kaccept(%d, , ) = %d\n", _fd, thesock); thesock; }) 71#define ksendmsg _ERROR_no_sendmsg_in_BONE 72#define krecvmsg _ERROR_no_recvmsg_in_BONE 73#define krecvfrom (gSocket->recvfrom) 74#define ksendto (gSocket->sendto) 75#define krecv (gSocket->recv) 76#define ksend (gSocket->send) 77#define klisten (gSocket->listen) 78#define kshutdown (gSocket->shutdown) 79#define kclosesocket close 80#define kmessage(fmt, ...) dprintf("ksocket: " fmt "\n", ##__VA_ARGS__) 81 82extern status_t ksocket_init (void); 83extern status_t ksocket_cleanup (void); 84 85#define KSOCKET_MODULE_DECL \ 86bone_socket_info_t *gSocket; \ 87status_t ksocket_init (void) { \ 88 return get_module(BONE_SOCKET_MODULE, (module_info **)&gSocket); \ 89} \ 90 \ 91status_t ksocket_cleanup (void) { \ 92 return put_module(BONE_SOCKET_MODULE); \ 93} 94 95#else /* _KERNEL_MODE, !BONE_VERSION */ 96 97#error feel free to put back ksocketd support if you dare 98 99#endif /* _KERNEL_MODE, BONE_VERSION */ 100 101#endif /* _KSOCKET_H */ 102