X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Tools%2FNetTest%2Ftap.c;h=1531619b92bbfe0459e4d38c6e79392eefa3f197;hb=eb42cce3c834d711e888d7866db98c563710993d;hp=ebacf163102493b874c5403b88580d756d390cb3;hpb=7ba570fe3cc5418f42decf5b72ac2295cce9e60f;p=tpg%2Facess2.git diff --git a/Tools/NetTest/tap.c b/Tools/NetTest/tap.c index ebacf163..1531619b 100644 --- a/Tools/NetTest/tap.c +++ b/Tools/NetTest/tap.c @@ -14,6 +14,8 @@ #include #include #include +#include +#include // === CODE === void *NetTest_OpenTap(const char *Name) @@ -49,9 +51,39 @@ void *NetTest_OpenTap(const char *Name) return (void*)(intptr_t)fd; } +void *NetTest_OpenUnix(const char *Path) +{ + int fd = socket(AF_UNIX, SOCK_DGRAM, 0); + struct sockaddr_un sa = {AF_UNIX, ""}; + struct sockaddr_un sa_local = {AF_UNIX, ""}; + strcpy(sa.sun_path, Path); + if( connect(fd, (struct sockaddr*)&sa, sizeof(sa)) ) { + perror("NetTest_OpenUnix - connect"); + close(fd); + return NULL; + } + if( bind(fd, (struct sockaddr*)&sa_local, sizeof(sa)) ) { + perror("NetTest_OpenUnix - bind"); + close(fd); + return NULL; + } + + { + char somenulls[] = { 0,0,0,0,0,0, 0,0,0,0,0, 0,0}; + write(fd, somenulls, sizeof(somenulls)); + } + + return (void*)(intptr_t)fd; +} + size_t NetTest_WritePacket(void *Handle, size_t Size, const void *Data) { - return write( (intptr_t)Handle, Data, Size); + int ret = write( (intptr_t)Handle, Data, Size); + if( ret < 0 ) { + perror("NetTest_WritePacket - write"); + return 0; + } + return ret; } size_t NetTest_ReadPacket(void *Handle, size_t MaxSize, void *Data)