Make libnet.so live switchable between kernel land stack and debug userland stack:

$ export NET_STACK_DRIVER_PATH=/dev/net/server -> userland debug stack (net_server-like)
$ export -n NET_STACK_DRIVER_PATH -> kernelland stack


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1849 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Philippe Houdoin
2002-11-05 09:32:54 +00:00
parent ed48868f63
commit d2f48fdd85
+24 -5
View File
@@ -9,6 +9,7 @@
#include <kernel/OS.h> #include <kernel/OS.h>
#include <iovec.h> #include <iovec.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h> #include <sys/socket.h>
#include <sys/sockio.h> #include <sys/sockio.h>
@@ -25,9 +26,10 @@ struct beosr5_sockaddr_in {
char sin_zero[4]; char sin_zero[4];
}; };
static void convert_from_beos_r5_sockaddr(struct sockaddr *to, const struct sockaddr *from); static char * get_stack_driver_path();
static void convert_to_beos_r5_sockaddr(struct sockaddr *to, const struct sockaddr *from); static void convert_from_beos_r5_sockaddr(struct sockaddr *to, const struct sockaddr *from);
static void convert_from_beos_r5_sockopt(int *level, int *optnum); static void convert_to_beos_r5_sockaddr(struct sockaddr *to, const struct sockaddr *from);
static void convert_from_beos_r5_sockopt(int *level, int *optnum);
_EXPORT int socket(int family, int type, int protocol) _EXPORT int socket(int family, int type, int protocol)
{ {
@@ -35,7 +37,7 @@ _EXPORT int socket(int family, int type, int protocol)
int rv; int rv;
struct socket_args args; struct socket_args args;
sock = open(NET_STACK_DRIVER_PATH, O_RDWR); sock = open(get_stack_driver_path(), O_RDWR);
if (sock < 0) if (sock < 0)
return sock; return sock;
@@ -151,7 +153,7 @@ _EXPORT int accept(int sock, struct sockaddr *addr, int *addrlen)
int new_sock; int new_sock;
void *cookie; void *cookie;
new_sock = open(NET_STACK_DRIVER_PATH, O_RDWR); new_sock = open(get_stack_driver_path(), O_RDWR);
if (new_sock < 0) if (new_sock < 0)
return new_sock; return new_sock;
@@ -387,6 +389,8 @@ _EXPORT int getsockname(int sock, struct sockaddr *addr, int *addrlen)
return rv; return rv;
} }
// #pragma mark -
_EXPORT int sysctl (int *name, uint namelen, void *oldp, size_t *oldlenp, _EXPORT int sysctl (int *name, uint namelen, void *oldp, size_t *oldlenp,
void *newp, size_t newlen) void *newp, size_t newlen)
@@ -413,11 +417,26 @@ _EXPORT int sysctl (int *name, uint namelen, void *oldp, size_t *oldlenp,
return rv; return rv;
} }
// #pragma mark -
/* /*
* Private routines * Private routines
* ---------------- * ----------------
*/ */
static char * get_stack_driver_path() {
char * path;
// user-defined stack driver path?
path = getenv("NET_STACK_DRIVER_PATH");
if (path)
return path;
// use the default stack driver path
return NET_STACK_DRIVER_PATH;
}
static void convert_from_beos_r5_sockaddr(struct sockaddr *_to, const struct sockaddr *_from) static void convert_from_beos_r5_sockaddr(struct sockaddr *_to, const struct sockaddr *_from)
{ {
const struct beosr5_sockaddr_in *from = (struct beosr5_sockaddr_in *)_from; const struct beosr5_sockaddr_in *from = (struct beosr5_sockaddr_in *)_from;