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|b7YTTGGq4!QAw~>tU~52X z4H--soWZgN3?PRafF0oscDxaT!NzMTj3S>SynN4ant2uI^L!RPoDjg&vqfREFv|2Kg{{%^c<|mB|g8*WY&E96I&o7T?EW){l>WJuPtc>!Sasa+p*cUWBY$`}%&P z&txU_EA>XkMg|6^Q3lHJ0ODjZ6k`$DtRDV*-JbcJcGr?GoDse|HA%g?5=$s*USOQ) z`|>rD^&h<}Ym444x;<@8=TGL{H=jvw(pVXHvvjF;X7{x_SN1b7ZHaPBN@10)i?N>( z=InhTQq8@fYl>ujW5%7b?B(VBg^!+oI>+6*(O)C_%U%hKT4%YIIg_G~h@9_V!>$;s z;qvyiz=u2Ces)E(YTjmCO`p;FMCJXr7^b%EF}qUydW^XgV{c|Z_x%!sJ+V0$GVgEpLWi(7RZQhQc8)JAcJ{suGw56O zkpJWp)2sKhLLE=-dF{RS-=!BZU4m+*U-ek(8$=p%)rFRWMYm)&`FjcGX@g| zGX?_&a|TNWCk8hLQwBo@GX`@8M+OrH3kGKfBL*i17X||cR|ZE0HwG65HwGgH7Y0WL zCk7J+O9pcWCkAH*7X}LkO9mGPQwHPBvzbyD>r)ac_Xnmg>CwLM>hGspTc+>1F*n$t ziSZyy5XcG>26Hg9V6b2?U~pk@WpD=5E(|6NCJY7)#tcRbW?%!I8B7@57@Qakz)o}p z>vChTWN>3JV=!iLVz6LfU@&ZA%rvlJ@5 zqwPB{BO@a#14|PlL-$Jo=C0`YHCn&>i*5jrM0!Kl6U?_$M4Sjv*qoVeh#g#fAnpw zK-bYc)eCzPB?YZtmU!osOtQ6AejjJry-ej6FK1-h@t1a-FMrm|Xue@`VAYE+4(hY- zwoR(Ge=5f8rGH^_R?Vubzwex%6mOjQ#-`!e4cSYanoHYKSIx3q@?yW_`@{!2PPui@ z3{!p|<4*X`y2VtY`m%(N@O_2$t*2JAPF7OCQV&Wrre;wF%J2Z~v*O>c?b%555t)Q>8DTeste zapb{S+r{k*Qn$rU3}`-A^Ig@n^NDY_?AHak=Qlknst;TK=7fanvuSRLjS7digq*x( z|6Fd5W@Yi)CyU~q=E@d7SpGJT`;bYefWPIB+TICwL+&n^koHH(<&l$B39Iq0lg?8f zs8vpXA{yva;f*qRpos>ROc>FA!h&dV-^S<;wR~|EEXi26S!pFM9Bwr}j+U zA-}jl$#-9r47T?;ChZbP{$#0Xo^QB4Y3{efc0CiAeZ>7V=04B)ckS%Lt-9WxHayHH hU3W6BOE`B?Ph9Q6wRW{nrTIK!hc2!b`koNJ2LR{OY&ZY_ diff --git a/ext/bin/tap-windows/x64/zttap200.inf b/ext/bin/tap-windows/x64/zttap200.inf index 9dd9c406e..dc1a74227 100644 --- a/ext/bin/tap-windows/x64/zttap200.inf +++ b/ext/bin/tap-windows/x64/zttap200.inf @@ -4,7 +4,7 @@ Class=Net ClassGuid={4d36e972-e325-11ce-bfc1-08002be10318} Provider=%Provider% CatalogFile=zttap200.cat -DriverVer=01/22/2014,22.4.22.918 +DriverVer=01/23/2014,15.19.17.816 [Strings] DeviceDescription = "ZeroTier One Virtual Network Port" diff --git a/ext/bin/tap-windows/x64/zttap200.sys b/ext/bin/tap-windows/x64/zttap200.sys index b17cbce7bbbdab28916b1c75503fdd01699991b5..339351fb3342c883f90b6b67af0677990f14aa4c 100644 GIT binary patch delta 5069 zcmbR7m2t*T#tAlz0uybW>mRP)zG3OPn~z~Qa%bA(W#?`_j@+5>c=@@TkDE9af$7Md zNspI+#Z$rZYqrIK`D?btLitgTSDw51c+EB+F#mG!A~3!5+>OVLU~{&B)gM+6hti@T zy8dxcW^x9|at0^}aAjafX=7t3Tl_ExD#Y-CL5YEziJO7Jg@J)V0V4Xsje&td0L*q^ z1W_P169WSq0}~X31Q{3@HZU+SurM(E+|0nh$dJGY(*)5wxs1`8F=Fy2#x%1;E2x1s z5Dif6U`m03Aw#byC9x!tfq{dafq@}_fq{X8fq}tcvLBN=qsQbjCUr)y$@7@h8T}?7 zV^U`f+x(76h;cFp%NxN63kC+CUf%~EovuGTdRa3qCbP1>W149``73J(Q?U7DZ#Fk3 zZS%>K*;a~9Fk@iw=stIxH93xfL5PWg!K0HkWpW^Ufhe~b1H*CFhp`L{svzO+n;xC4 z_cvc-U&1KZq|CtJ(d(Ds(|y#l`}zxIh0WcZoQzBvN|UE?Suw>JZ@$EJg;9V_mVu%B zxJS3Ifrsc+D=Z{u0d7?Q3Jw!G#MCNjZeB7AMofzQpt>@^10?@agk(3tT(HWv55bhY_80r}281B*hCcvZn)(e)O|Nnb*fAHvRQJKKNz+n8}rTc$pjf#U$ z_v#%C3=Eys1|FT&79On!_**uzF)%n->{!6ez`)mUKR(RULH5cU2F^t z431rl9gLpL=X{yZ`D$M){orYRqFCIK`I>cDOwn-=hs#I%pz)>p7o5Bd436Ed93Gv{ z7M;}wzO7IATOwIOUh?zk3JdrzxPIqjs<=`n&1(|!Cfr$Z>Go2+mD_B4RofRA&$DJ*B7#J8{9tCS;cV%F(VPjx; ztq;=2RwM^8U7(YZf4iGVTBjomNCPMYUQPjPxaPvZpbUwk_cGupy5PdVutOOXML8_> zAnUw2Al~q3Jz1*c(aU-QqHd)N$feU=7#PIZp)vB(nUR6vn7ruM>7rub(dnb2aoj~kfscWK!MFQ_NB1?)?yd=p3=EF{CpCb}Ha7{6?)nap(EkZD zm>3wKS*x?!;I)%SFY6I$aA+-c28F_8X9fm$b_NE={UDdPfU=-R_Z*cD1_lNfP$q0n zwqSq;V)qtsR(-AR(aYKZF(VOdhQBidLm~+7#Oy}@(idrcnR_i z#5It(@&Lt^6t=jk|1Ww?5#ìItTrScxVtmmXaeAe|&Ab-zwVqiD~GJ6&S!-3a} z9YC?ff1I_=iGkq^D3wbvfnxf-Pw%o0W(Ee&?lb>I_bD6l|9_Y6A1}`_LM;kIwa5`>k%dS1WsmMYkohm9zW@L4VSTt%#iN&X z*4zL8J=&c!9QQLbf|7mn4hDvL1{aP3W|xjF;Gjlwz$OKd`ynyF-x|#b3XDmP3=Ayn z3=A(-K*kGXsMQzrq0L@A4E3a(-&l9I;%AKqd^o? zrP5?y!{baV6gP_*{bk|5DFbq_NApQW4@=%0*~v=gxlFDylP8+%GVRlue84=I>8A8# zQ41~etuSxSo6f=dzBb0E21)_9O{ovay(lj|(4nbf@|@3u5xvecOT z)>2RAp(F#tiy7diA1fOt5bdUA`C4M_hXr!)|y<*Wpv{G9JiHgL&dsxaL=&n293Gpidv6K_Q*1H%qs z28Msa3=BIaD|+bH?+ImKI3mNqkSoi;@F#?Up+uH}VUa8Y!;TOJh84053>)Ma7>1C&OVk(`K;BSMXJC-kU|_f~Ssgsz+e!@z))ezz%bPmqJD!Z1H%&w1_p;P1_lO828LIb3=AG&3=AJE85pKnF);Xq zF)+-rVyI`>WW~S`5yrr9!HR+5g%txs0!Wb+1H(rv28I-nW@`opMr#I!j4%cU32O$1 zcx#Ad8P*I8JFOWQa>5uG4p=iV*xEoG=VHUaVB^BTFeQwEp}>WKLEM#rVM`bTgMupq zgNZA|t_oKMhWV}x412sgT&@muW5{oos(sJ zrZ9bZFnN=Y8snMCH+|$e*F5W>IQzL1vy$esXqDVrFq_ zNWM!!GQ)Q!?^I~6fypwIF#G2ECKiBHrltfWrl%G&Fq9&TO>PYo7O!XW%ujR9&n?JF zElCYZEi6qfE@5EMoxDC!Qu7eV9ie&UnRzL$6%2bJJg`ec@_kElN-~`)OH%z980Jm> z7%0nhm1VO)P$`SZ=Lj#~Gn{5#1^PUnMGq$gF!gLv*gP}rutNO{IsK9C2yq(G^O{W^-bC-TjPT ze3;lZ%jQdz$cs8JwxtneyQ>ebo*24fQCx$tL?i2@zv&%&*bjFlKW@~#xbwv)yE$3k zll8clJoUW9Z2Q)sH|X@wda=i`8&w15^UKL79Cys|wh5LIGFI9(uRr*qrkMMy&Q-lr zWsmqQk~!AXB>4T%!9zhj&(g0h=1K8;65n!oh5v(`d#8)*?xjWjDZVgAi9@7N`)t?F z>NOwaZyw6w3H4iBw;{9U>XX9otGTx3(+{O&j@$Z$>oVBqxw>wRpz{RNfbD7W8 z(505<8=k9OI(d;*G@qZlI@3T`g}s?;;@5?~rzD*hR0?{2J*_&qx#CK_k+G41fmxJ+ zGCY7dSq#NkL}a_F18*%{eqDV1&zMs-=e{+3)=$S0ieVEC?j@+ z)7efhkKJ-xVP|zM(IAs4CSS;<^xfI6;P=wc%s7`#TmxMwRm delta 4633 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 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",