From 87714181701fa92016c37937f786bbf5434ef182 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Thu, 23 Jan 2014 16:10:24 -0800 Subject: [PATCH] Fix bug in tap driver introduced during unused code purge (deleted the part that acknowledges writes!), and fix bug in EthernetTap causing 0000 for etherType. Windows works now! Yay! --- ext/bin/tap-windows/x64/zttap200.cat | Bin 10549 -> 10549 bytes ext/bin/tap-windows/x64/zttap200.inf | 2 +- ext/bin/tap-windows/x64/zttap200.sys | Bin 31384 -> 31896 bytes node/EthernetTap.cpp | 4 ++-- windows/TapDriver/tapdrvr.c | 32 +++++++++++++++++++++++++++ 5 files changed, 35 insertions(+), 3 deletions(-) diff --git a/ext/bin/tap-windows/x64/zttap200.cat b/ext/bin/tap-windows/x64/zttap200.cat index 211ffff37e368db3ba7cac0698215ae43d5975db..a3769e40596cac063f3564c212aac0c14478c761 100644 GIT binary patch delta 902 zcmdlQv^8jgpB&Q@r~F9v0H5iXI$uY;`FK>E*U-ek(8$=x*wE6@a$=4|OeXj8O(sH zU4dc@42DgNnG^4tO@6=>E)wuy%f5<&v-Ue@x2{lf4Qe>;mHcS3H}i>5gC@q4EJ1ES zO{PF&Kn9oqEp!G#1E6)rK;uASAcq(M9RYF<`CWVdp1u%ayK}#yCNJ0W+BKIJy6tdYIC1|= zDIev42lKV+cXV*{YP_y?Vdg!zGs6y@1p9UscU!z%(QkJ$ugd~-XI^wu9?G}r82o;^ZMKFn?t9* z+~WIK%=+>1ucrmBeqHqcR1TAh!;6r0YhT}Q^qH)rex)9mP7Dl8qYRYc0mR8-D8?eP zSv~ysx;^tb?XD$XI3s*_YLa?&C6-Xsyudio_vLFQ>pyx|))u{8bbH#G&Y#S?Z$6XW zq_HyYX6aJx%(_&F&)%NWzypP4^H7vT2@NdSmls{6g*A@SN zdt!4iWZvKGg$`kFs+h`q>>OWK?CgCRX3)3lA^*uIrdRK0g*u+v^V)muze_J-x&+ly n(>_e@WnT87dGgHMfPty6fBXl>Ezm&b?a!!^32< delta 917 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 MhBAjDT7Dzs-|8=RN&o-= delta 4633 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 T>WfLDz}7c?I$9g2?L+8a%&Y%S diff --git a/node/EthernetTap.cpp b/node/EthernetTap.cpp index 47355cbcb..81cf5c4fb 100644 --- a/node/EthernetTap.cpp +++ b/node/EthernetTap.cpp @@ -1385,7 +1385,8 @@ void EthernetTap::put(const MAC &from,const MAC &to,unsigned int etherType,const char *d = _injectPending.back().first.data; memcpy(d,to.data,6); memcpy(d + 6,from.data,6); - *((uint16_t *)(d + 12)) = Utils::hton(etherType); + d[12] = (char)((etherType >> 8) & 0xff); + d[13] = (char)(etherType & 0xff); memcpy(d + 14,data,len); } @@ -1475,7 +1476,6 @@ void EthernetTap::threadMain() MAC from(_tapReadBuf + 6); unsigned int etherType = Utils::ntoh(*((const uint16_t *)(_tapReadBuf + 12))); Buffer<4096> tmp(_tapReadBuf + 14,bytesRead - 14); - //printf("GOT FRAME: %u bytes: %s\r\n",(unsigned int)bytesRead,Utils::hex(_tapReadBuf,bytesRead).c_str()); _handler(_arg,from,to,etherType,tmp); } } diff --git a/windows/TapDriver/tapdrvr.c b/windows/TapDriver/tapdrvr.c index f541ebd77..d638cdf6e 100644 --- a/windows/TapDriver/tapdrvr.c +++ b/windows/TapDriver/tapdrvr.c @@ -1833,6 +1833,38 @@ NTSTATUS p_IRP->IoStatus.Status = l_Status = STATUS_UNSUCCESSFUL; p_IRP->IoStatus.Information = 0; } + else if ((l_IrpSp->Parameters.Write.Length) >= ETHERNET_HEADER_SIZE) + { + __try + { + p_IRP->IoStatus.Information = l_IrpSp->Parameters.Write.Length; + + DUMP_PACKET ("IRP_MJ_WRITE ETH", + (unsigned char *) p_IRP->AssociatedIrp.SystemBuffer, + l_IrpSp->Parameters.Write.Length); + + NdisMEthIndicateReceive + (l_Adapter->m_MiniportAdapterHandle, + (NDIS_HANDLE) l_Adapter, + (PCHAR)p_IRP->AssociatedIrp.SystemBuffer, + ETHERNET_HEADER_SIZE, + (unsigned char *)p_IRP->AssociatedIrp.SystemBuffer + ETHERNET_HEADER_SIZE, + l_IrpSp->Parameters.Write.Length - ETHERNET_HEADER_SIZE, + l_IrpSp->Parameters.Write.Length - ETHERNET_HEADER_SIZE); + + NdisMEthIndicateReceiveComplete (l_Adapter->m_MiniportAdapterHandle); + + p_IRP->IoStatus.Status = l_Status = STATUS_SUCCESS; + } + __except (EXCEPTION_EXECUTE_HANDLER) + { + DEBUGP (("[%s] NdisMEthIndicateReceive failed in IRP_MJ_WRITE\n", + NAME (l_Adapter))); + NOTE_ERROR (); + p_IRP->IoStatus.Status = l_Status = STATUS_UNSUCCESSFUL; + p_IRP->IoStatus.Information = 0; + } + } else { DEBUGP (("[%s] Bad buffer size in IRP_MJ_WRITE, len=%d\n",