try fixing all that tun shit, YOLO

pull/18/head
Jeff Becker 6 years ago
parent 8aa0d0d4a8
commit 23cff0bee3
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -60,6 +60,7 @@ namespace llarp
IntroSet&
operator=(const IntroSet& other)
{
I.clear();
A = other.A;
I = other.I;
K = other.K;

@ -42,7 +42,7 @@ namespace llarp
sendto(const sockaddr* dst, const void* data, size_t sz) = 0;
/// used for tun interface
bool
virtual bool
do_write(void* data, size_t sz)
{
return write(fd, data, sz) != -1;

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

@ -93,6 +93,19 @@ namespace llarp
return -1;
}
bool
do_write(void* buf, size_t sz)
{
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;
}
void
flush_write()
{
@ -108,7 +121,7 @@ namespace llarp
{
ssize_t ret = tuntap_read(tunif, buf, sz);
if(ret > 4 && t->recvpkt)
t->recvpkt(t, ((byte_t *)buf) + 4, ret - 4);
t->recvpkt(t, ((byte_t*)buf) + 4, ret - 4);
return ret;
}

@ -922,10 +922,18 @@ namespace llarp
{
if(markedBad)
return true;
if(i && currentIntroSet.T < i->T)
if(i)
{
if(currentIntroSet.T >= i->T)
{
llarp::LogInfo("introset is old, dropping");
return true;
}
currentIntroSet = *i;
ShiftIntroduction();
if(!ShiftIntroduction())
{
llarp::LogWarn("failed to pick new intro during introset update");
}
if(GetPathByRouter(remoteIntro.router) == nullptr)
BuildOneAlignedTo(remoteIntro.router);
}

@ -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