X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Tools%2FNetTest%2Ftap.c;h=1531619b92bbfe0459e4d38c6e79392eefa3f197;hb=3d67e21210fbcad7cdcbfa9c348019a191ce1798;hp=e69de29bb2d1d6434b8b29ae775ad8c2e48c5391;hpb=c3b821ccc009ec819f2580a53c0ed423aad43bf9;p=tpg%2Facess2.git diff --git a/Tools/NetTest/tap.c b/Tools/NetTest/tap.c index e69de29b..1531619b 100644 --- a/Tools/NetTest/tap.c +++ b/Tools/NetTest/tap.c @@ -0,0 +1,92 @@ +/* + * Acess2 Networking Test Suite (NetTest) + * - By John Hodge (thePowersGang) + * + * tap.c + * - TAP Network driver + */ +#include +#include +#include +//#include +#include +#include +#include +#include +#include +#include +#include + +// === CODE === +void *NetTest_OpenTap(const char *Name) +{ + int rv; + + struct ifreq ifr; + memset(&ifr, 0, sizeof(ifr)); + ifr.ifr_flags = IFF_TAP|IFF_NO_PI; + + if( Name[0] != '\0' ) + { + if( strlen(Name) > IFNAMSIZ ) + return NULL; + strncpy(ifr.ifr_name, Name, IFNAMSIZ); + } + + int fd = open("/dev/net/tun", O_RDWR); + if( fd < 0 ) + { + perror("NetTest_OpenTap - open"); + return NULL; + } + + if( (rv = ioctl(fd, TUNSETIFF, &ifr)) ) + { + perror("NetTest_OpenTap - ioctl(TUNSETIFF)"); + fprintf(stderr, "Opening TUN/TAP device '%s'\n", Name); + close(fd); + return NULL; + } + + 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) +{ + 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) +{ + return read( (intptr_t)Handle, Data, MaxSize); +}