include packet info in tun but discard it so that tun can work on platforms

that include packet info
pull/18/head
Jeff Becker 6 years ago
parent 138c222a1a
commit f6c812a642
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -120,5 +120,6 @@ llarp_ev_add_tun(struct llarp_ev_loop *loop, struct llarp_tun_io *tun)
bool
llarp_ev_tun_async_write(struct llarp_tun_io *tun, const void *pkt, size_t sz)
{
return static_cast< llarp::ev_io * >(tun->impl)->queue_write(pkt, sz);
// TODO: queue write
return static_cast< llarp::ev_io * >(tun->impl)->do_write(pkt, sz);
}

@ -1,6 +1,8 @@
#ifndef LLARP_EV_HPP
#define LLARP_EV_HPP
#include <llarp/ev.h>
// witev
#include <sys/uio.h>
#ifndef _MSC_VER
#include <unistd.h>
@ -41,9 +43,16 @@ namespace llarp
/// used for tun interface
bool
queue_write(const void* data, size_t sz)
do_write(void* data, size_t sz)
{
return write(fd, data, sz) != -1;
iovec vecs[2];
// TODO: IPV6
uint32_t t = htonl(AF_INET);
vecs[0].iov_base = &t;
vecs[0].iov_len = sizeof(t);
vecs[1].iov_base = data;
vecs[1].iov_len = sz;
return writev(fd, vecs, 2) != -1;
}
/// called in event loop when fd is ready for writing
@ -55,7 +64,7 @@ namespace llarp
m_writeq.Process([&](WriteBuffer& buffer) {
// todo: wtf???
#ifndef _WIN32
write(fd, buffer.buf, buffer.bufsz);
do_write(buffer.buf, buffer.bufsz);
// if we would block we save the entries for later
// discard entry

@ -96,9 +96,10 @@ namespace llarp
read(void* buf, size_t sz)
{
ssize_t ret = tuntap_read(tunif, buf, sz);
if(ret > 0 && t->recvpkt)
if(ret > 4 && t->recvpkt)
{
t->recvpkt(t, buf, ret);
// don't include packet info
t->recvpkt(t, ((byte_t*)buf) + 4, ret - 4);
}
return ret;
}

@ -72,7 +72,7 @@ tuntap_sys_start(struct device *dev, int mode, int tun)
tuntap_log(TUNTAP_LOG_ERR, "Invalid parameter 'mode'");
return -1;
}
ifr.ifr_flags |= IFF_NO_PI;
// ifr.ifr_flags |= IFF_NO_PI;
if(tun < 0)
{

Loading…
Cancel
Save