From 56d0c30e4edce08448a5156a00c191342bf62209 Mon Sep 17 00:00:00 2001 From: Xmader Date: Sat, 12 Oct 2019 18:34:20 -0400 Subject: [PATCH 1/4] Create package.json --- package.json | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 package.json diff --git a/package.json b/package.json new file mode 100644 index 0000000..05aa3ac --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "name": "cordova-plugin-tun2socks", + "version": "1.0.0", + "private": true +} From 89eb73ceae67c3c22902606bf52018a3f8041e85 Mon Sep 17 00:00:00 2001 From: Xmader Date: Sun, 13 Oct 2019 01:57:12 -0400 Subject: [PATCH 2/4] arm64 binary file --- android/jni/Application.mk | 2 +- android/libs/arm64-v8a/libtun2socks.so | Bin 0 -> 192632 bytes android/libs/armeabi-v7a/libtun2socks.so | Bin 121432 -> 141996 bytes plugin.xml | 4 ++++ 4 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 android/libs/arm64-v8a/libtun2socks.so diff --git a/android/jni/Application.mk b/android/jni/Application.mk index 61d0ded..5599466 100644 --- a/android/jni/Application.mk +++ b/android/jni/Application.mk @@ -1,2 +1,2 @@ -APP_ABI := armeabi-v7a +APP_ABI := armeabi-v7a arm64-v8a APP_PLATFORM := android-23 diff --git a/android/libs/arm64-v8a/libtun2socks.so b/android/libs/arm64-v8a/libtun2socks.so new file mode 100644 index 0000000000000000000000000000000000000000..9822b880a6f9247d4f93ff0c9f61cf65a2ed39ab GIT binary patch literal 192632 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�M{#D4H!5?SHnznI1;xMvE znz4I0)^jtG2hqF8Ea_Ks{?sZD(Z9%1&G`?J;}mHs{Ub~Dn{O#us>f0e$niS$_j2Wc zU8u@IbTJw|wJBRRUheY`EQ#!KJZICr$m)K3sj*fQqw^!3hR#>V=v>lxc$?XV%=Z7| z&XIMm?Mzbn7yZZSegwV$nYb^f_jRIonP*gu!w$UMTqF8?s?}C8D2~dSowU<`!ba@v zUc&t9h6K;0-fcdYdK1s3{xYU-hHR8D$?p7i14W=A5dnnQQsqWxf}pj!Hk$NO|6Z{$+d=cRu&D z2kvFuy0N>AylBi3RG&b9V9gP&ci^gc*;9~x;O)d4+kWSnb?J5Du-dQGrPw$ssYfb~ ztOC^!d^si#ks*sXM6Um2{7Lkk0_kfd&sBwmk765S*QRR+#XgXJ*Ugw*Pa7Uc88@4C zmxIhdI+lNbUgvt&YUEzt-En$d>-EcDUevj$OuNfdtR3_?TCZO}2R`rg@G#z<=3O3D zyw@X}cX)ijeH!oiz#g8?Gu6MsmVC5uRN+TyNiTgyp3fN1a~J(7S9OQpOzV7nIsN#J zoIQW|n(XS$DSMZa4@0l=Jni`D^C>^2|Kiln+t7J!dQq3W*G1Nywv3bhXuNtaV7bcw z`0l2fL1_{o}}?DshM z$@@3%Bwszm&%EQ&0n*eyU$|oDh44M2@z+*E7=Bi~@~r1=Ma$yiF8m8|Gl%!^v&&u0 zx?HTRZ_u{dIIH8~XT@okwTI{I@2WuB3!eM;L5QFo=D-9))G6&DUY&-wWe zlgA!AfNlGySFSoH=X#_+OM8|*!j$Ar?MdwP%{-eS?!rQDl5y-1d67E(L);?EJA6yQy|m#XT#2@YX zS?H36y^WmgFxSd_V|ga`TH4LE0z*&Eh)mN;p2;ogB2oV~fdb-~HeDSMl8(L4K*?&8*ip3S_& z4jsS8xFt4^YAcK#0~21ld0aHDgOygN?jc2yq-!kuc2FCrqao@(7)n48!e= zv~^SdQ4eHo&3dMAkiC-Eg!UeJk~LdHhKb$xlIG)2-a7a3a6wmd%A~=w$P*+VB2&_n zg?p1pR}1jWGd3kU+WQ_h%daR`86O{>z@8+w;K?V8p!Y2JRkAkpFUd*se$9B&%h|7< z&6^9}*!)Dno10q;`q&F_KUa8A`X)=ZHgubbZbN*7OV-I)Q$OgzkJNLXKiV*G%~LnK zpQFC>{CsF(q577syGF`uY1heG*7nTu;=OqH{GK*1@%MIXn`DmESCiDa_p9OOlg%-t z_?(=HlX=38-LuU4xeWfVYtndD$2i~CNj+_5KXVgjilx53GbOpR9ltWh81G(9>)uWn z#uw}XHNIfW+%)}t-q(5uVfAZePi8{*S7~EC#q4cS$KFXE)7g8ie6uU5(<-kI&GLGM zGL!NuB%Gy_E_4!GUcFPsbjny7EjKk@s&f1FD@m+Dv@UqJX3V@VP;PE?*hC){uF>X& zdFL2)b?7hbb$*6D=d8DihO+;W_wS;&baT(JEyZ{bO&0WQ`0L4UZ2#e2%G!U**v>`& zm^5UC$$Bek$O`9KN;_O!ICL*M*~!?NbtmtAVs19$Rr+4ubt&UQR?>?%m-0UC71wFa z!jBy*US_Pwo?(Q^`kTT{ck{gFvb(ec%Wl=wdy!Os+#~%l&j_-q z7H;}`-cO+4)mo6fQtPDcY@)0)|0sLD_}R>!q^v1uNjGf0n=%wR9m$!a_fbyj{Q%fW zw9zv~oE7@`v8YWsh)wxX9p`p@tD?508W+ZP%2^X7Q@J72YGjgn^1A9%GrK+LLE2R< z>HP-3_OftOhu_&erqj)ub7(X5fx5h&x@@lx{pfPU`tZsn>cbDr`taVEc^@I0tkpFw zjIR$;rt9geewIA8^WC2&MfQ|?-%J`RWnY;+;~~|DQMR)c<{4(=x}%hB6kuDyBi zqq-#e>16Dj6zm<|lkga4_ZG8`K%0K_qRJ{;{O)>-_-pcah;-n-bnrm(YwmS z!oq_a8SlPH81ZkUYdjBHfFh0|i#F_kCEwrzzQ>_uKFwKcY_aC9 zvD$-gYZLEX#B(3CCBqNzZ1@a*7A?^pZL?_k3p*cz#u?`WPX`K{x80$2zIKQ9ApPU) zkM10u{lQzDp@#nvea=&3wayo27d3zMHyZC6>RGVuVf;R>=LVe#E#D@Uzv+KXA;NYA2N=mrHH+HvwFU? z^ctSojkT$HUUlF-{BYLdbXB~q>R_HYuzAd}({EvCewugpV{gm3xq(`q4JAxc(ieUp zw(5hFf2>{2^TaFA(>?MongMJp;@*@!n(qt{-fpLI_HG3>XTFlTY?12Y$osZlHQzPf z!}PK`lT=2Tub}LgQwNq&H%hyx6KcO_U@Ye|Xv@}~)Ca6L+U>#*unRZPuN!+*<9V)A z`@NfYjmdho^aWPGKES!@EY3tvfZjygANYaT8rU2+vvzkq>%8xcIVS68QjW4_roAO= z8GL69`#{#pG{&)G^b>{X#I~l@QM}X0pY##5!EM!77gL9g^;ccH?VtY2bqwA|AG40} z;(y&b#x&Z}m8@gvf5ke+Ins#LpXyiXYl@$tJ<}(hMZaQ$&k>}3A5ruPoo@@$fA)fp z(+^qtm3c^ZD*HIRUpb5YjW$sBX=J^g=Op>|DPuhA;_`j9Ks}jIGPDA+o6FXNXJaqmrI@F$X_cTHA}$;f=wryDcf>%o+Bz zmVbJ~;7rcguf$I7qJE9R-^@`__e|m+BXsQXT<(7Xe^JudGruFPy(@FK?j^ot(i&4O z=btjp?8a{fH2KcRQ=gtWn1%c4O*015gsM_$p>^i*wVIsR2xWM0O-;uAg_{c!*w$|nyN|1{^{(;bELX7HQt(B_Ti zC-Jc+@_Tu1Kf5e@tL&TcPN1P)@|kYRBl;YTK0T!6A*~tsnSne~9?It945U1dBx?_{ zza)Mn9+64P)-C5*ZqV}AbCxBIyvUq%Mm6vJn4|^Du6p`24Sf5uJ}G0xk*mJ)8TqEl ztG8;`f93Og(wBdqZ->(#^1YcAGpn_Et@Ocr@cYsz?XEXiZxEimpFOv1*4Cdhf5^G& zsn7TwJ@dwWA>)?Yc)z)hpMAW4ocl+M=r7MEX{)^}bGAN%-~WMZQr0hnPw>k@-rtf3 zFZXAm&&195pNC#2k5Y#1D`#$fhVpn7{tW8eBIJ1-{Vo4EO#5BE6Yx-B{B%sJxv#mc;`M~UlN{LUh8-$jR#uU~vVbd_dbdgQk(!1!{YD?cmmY>7VAH^=sRdw*0 z--hpzx+d?)`txYn|1qAQww@QWp4pJT>Llyehp~?bttz zckVlQwyL{u)7cc+JCtwS^9>2gur%qZo70jeOm9ol=51xJApV5jPd_AUU@})=-G}p4 zg+uPo6mGiLHdmm3I9F`W6}+6oQF8_SR&Rc@z#S;u^rHlGg+I$&0Y5TNkTq#7X~Nbl z=~t2cBy)vt)0fJ4e406w%oR@3Mq;0v`7?6}>s?fv@jD9pa=0?*OJRO^g ze5diQBIBFegZM$F*|Fs~nL0I6Im$ZYhlCkRUgV5HFY?63r=vG1PyBTYji#liEze|x)b|!{?7knj#m&=r%dD>Fj7A@j@5?V zWzFJU)+|_8Q#|HWack<4Z}YHz_91;x?DwH!_Zy`xP^X3((a+aqeGlDu%sMUgP3l@~ zo!-rQ%XsR_uUQ|HGL<^LlRDiN)9&9;?cP}5|4`a|im~_kMfx=PR@IftBeK}rgV3Zs zh>Ta#9^^e^Bee&Ox*02XlB(y!<(7Q@i8}re^4o1qsaFH^5%e>eR@>rUwXNN@wjgaQ z*3OKNE2(=uak;6ZZ)0<^)<5(VC}(BF7UMlzugzdw6Z=!_N9roy=^1tAEd5nA_oJyV zKgagWfzS8Whh7pMeaHrEj17!oS;%*mxP(5P`OHfEj7oay#TD>!(dVM1F=x(V7i{>n zcW@Q9)hc9vn>cgvw+g$>a<3x(TW8I6@C-yS+ z`~QZ$tZ_LSLvDY-vr(%J_!_izA;0GJ)jGU+2Ha)9Yy<8#Am4y{447lUy_(k_(CQr? zuh!sd3TnYkL9ee)YYe&qT4Q6aUz--3uTKkVt6h%TkT0Nn8ayG7!|VB+r=d=B`F&n* zRc*lK2)Xoi#Nl#AJQ_|tT;NNOREufdEXU0dJanS~@FSN*JF zGv%rphjXL9A-7gr(hzb52(7y|x*9^d*XQ$VC7z()5vp|yIpnEF_y(WB59&@=$Wy2FbCoSX3N z_XJ!{BmJPZ*x~i62$hnW9G;LFh1{YPG7)I>BUdar;0iSc8i)k7*dz?b`jb35bzfsh zvr>;x^d`4tEfm-!sXOW%o`yJmRuDATtrf5F)HOJ~(bB;A^O%qHYk;%nAcJ2*u|QWvzLj zYW0$b)+{M1DOsIu@oPK{=)$O6k;+iybS@>AC6V&8eAIeXj9@qqf%NkGP_lviMFS*@SmKj$;qSXSyr~v+eueRP1+@Pxxwo;L{VczRm)129w zl6JoCcPI^qd_LXl2-Lag)6$;27(TN3V)y`9Y2J(5`kjSVZ0f`ph^vbhSyUBUM?DQ2 z>8zZ3Lt}l7E1>(<>C$o1ZFp)ODqr=kklW`BYUs-4*+`pmyHJ$YM6X(>Z*&EMQc84B z-0Dt`v*AwKyHV1PhE0hhlddN|70vGm2Ag~Vr=4zzC*5s>quwYS67Z9@^x0MPrI2p<;=OW~LAm-pYP_ z2;D>bcGaQ2jWMwrp=tafse&O>jp{bwdbH7`J1KTU6Ph$-sghPbndNkCoYmk8%?dR( z7>DAf>tAt&k*E^c48t&>p$*G~3Pm%O@-$$~)Kh<}>K%0qb&U-D1q)2=$vCDfRYWtk4nxL}Lhk14N`!be z^3GfsaIMo9>Uo;KcIHAu2~`rHYF%T4(Z8D2!ibB$Ny~Cu5@zdn+@WVhYEHJEh5qXT zj(W@-eWSqOiq__B@Q`5 zr_jv^6Z$a4_4zkN@2Kk1pUZd>(rY}JX$`){I=5JYZlBkw2YrnJTC;E6Ixz^Kih@B^ zLoM>UfUn+Q$eqCwPnJ%i$z^3nYqeAss{-_sKj2xbIQHp2Xl>|0YuWIsy+)OWOH^|IKq%i0-+}fImb#Gc; zbavvS(NE#Hssgnes~Bpknvk05Q>ciqw=T_C6-tCRbN&X_(?nuJSJ})$%QQuJJWuMbg@$T4h$)6sixXq|E#I zSVCe1h?-_DG!md2GYZEL@X|i1a1~2dU5QVrVKb#t+C0~LoKBhR)T$vt3dRtrDpH{$ z60GwCqzfc>^o*DE8A&WQV+4xO15J(mG^{2VMGN z`g}XX$1Ls9;be(c&ETqn?#7T4BUV$DYn|6o7u4_2E0$KRUTe1gq~w&;tFFGrxKggp zn3z}HEaAnXb15yUJ8Eg5PRd-Yu1gG^4E?@_pz4m8SS!=_b1r>jFjrcjnZc?Ez1|b7 zm-PlBl*(`BALC6@$<`wNNS8rB;M&OSw=ObxMZ}D4eGK}p2I<|Jn4cI`FB+|36UKxy zMk_VOiGVU!5U#61k*bu!hEwL#qA3m+9Uitr#bU8NSLswSxuxUR>0%9Ck8EQMONLA+ zgEQoIF#k20nHZzed8-khslDhB4PZ^w`rXce8s{wIF+qfpreM^Y5px(FL5FDqTicHf zZtHLj>aY%X^_mJLQe+B%dR&v0{^&KTJoSFBX;qJyNmd#fSq+fPkU>B|C%w#rz%(<4@D9o>C{mh&GM!G+cn6?i~+%||BonNrQS*2=E zH#!Z&EmJSUq@S#eW2^_C9&}^#8E&(3S+o5ZahWuktz68IP{6~y#)&x+K!OmaA7)6L z(GwBuvcZf&MybxQ8zMnT-cV-Zn2mtLJ<)bTRka&}jrCRjpsUg8vt|@nk3koU240q$ z^?H})sjat~K=gLL&R8ky8O+kGnK_wbEx~Abrf$-&w5M^q^ks`zmRpNLu?fi(LQ+yD zoH5Cd#2)KU)@yufDTTjv9$62L5zbf}O=l%rEO{B|)xcvDMzAy8B>=wRi~6X}OA;myf11Ls|ri^S}52`)WuBo?hVBOERmbLpS>vHva?=1Tcj zl76DN+OI(FMBx(AG~!D1OXT;zf|e+4p&cF_4)5nz$!|Nq5I>pIhPga`S+T5ggqS@x zHn^Ea%7zlNXEE*LZxR%(5W*|bL0_sU|4 zvckjy^RV9~7TL^&YE+=2DT<8ADyS@%Np~1Cfr~^fePu0^qmaIEf$|hhRSm65QpP?e zq|)b0y37xqRjLogw$tb*J)upyvI#Vc8u2^d3dEX;bMk_S3u&SWIb}JuF(zZNaWbK9 z5QAH0umlms8Tv4Kd2{)#HV`pIJ^neC5kTX+j3F0kaC6KSXNA=?J)3fz9u9kFgv00f zOD^UGfq4wv$C@@sI;F*5%s?|)ht9j*eg z4(W;JV4eT(c3yL=-YZrN<6d;Cs-me+DFtI*WLTpzJMcREl#l6e#F1f+)z?~GaU_V5 zvEj8m-ouqgT=6;d_ET{?2cN!-x2t;^*FB{IWn_pl((pCRy_)*?gES^Y7rS3hvg(-SP$x zTjg~Tx0Y45-m%d!%j;;Uo3#derJ?S=E1_gRtTmQPB6=hdCfU*5biLT&e7Jm7l&jyB zJ8#~++`DGa)rwcSLhK)HsJh?lt8sW^ces|SolzO-O`}rgyN#;4sXZ3iwU65pGdF(Y zX>5il!XwNKmzG#on(UFp`CCI~y{>Y#z*^k6Zk;PWYIE0w9T?fih-~et>DEIf<(ksx zLr(wwO^dxAS!IvSh_ORyB@K7jCckXQBLI^b*7|f~w3x3KFDoySVPmx`=<{Ntm^-@h zp6coO^ct7Wlyq77#(ZmQ%!~@ZvT=EtxFWtT9T_c9hB29%nntXqY7}O!+C?;&#Y*OK zMotrwbL9~vN85ejpbie*^DHn1@)N=+2PEU3Z!I#sfJCNzhMwr>B^~@=ss$+N@JP% zYCW>P`=FZFszFaFKlYfCaV#b-j!Q(Mq|wy6yCi9@P^p;pCTWOj)m+L^m4{ho zMjAr3RzMB2L7m8<)ib|079&OG9I_zC+Ke4Yy@?|s(%X6hvM@85FWuTwHxv|2+{mY) zF(YAdT?vq>Eh6j!K-idhCDHD=O&Iwd1^Vb5b=W6<*bCn#OzgoDJl~>bsKQixtcl1 z!8VO@W5jdni*v5x&FgX*zBok7UYgLBg3*R&7!pOTx*HWMUfz|o3JN*9+KgU@10 zKh~|ST3oVh9r1D8E%pqqq-pFPl&?0jz^rV87I7HIYs%FeO(jpls?C*@uNLE8E3R;h zN&5)%Nlj?Rra|#C*|D*rChdpN-AW&QsxP3XDFG2EhG;n#%RY+bSZUVnVzJh>;w7A? z+T<5QTw7BfCrlY@>BbBac~}b(`$Zx#@>}8Cz|p_Yp{)ohD#ODLujyzA1~<4iY310K za=Nli?cN%JmRWVi%z{L;T2*O_po-z4=wvi9$<|^HlTuo1%3{j2*s3R*RFuW+cxuH( z0Y6!z){?|ZpR>{HS|+w?)ET2xWWV3lAUy_0&ZXjt)hC^nn%ClH2J2fUlqzTD5zCn7G)MInRaU1d{d0^@qsplmt>c+iGqPeg#%$$9Cf@3XV_mE+ z7|oE`RLIToSr5C52(E?!b*F@mGUOP$qSJTCEL+{njw+Q>-HTy2TisEPoT*f|0auOB zXWTNMP<~NwxtCr*_LN87(Bg&vxk={&JRffk9%XIoU zqQoY!scp;Y2!*7H8Ko#EKF#tZw^ed*RYfWXFqn#SYC~z)FgoPc7{jW9Y}6P^2sYMG z?uIw|H}>lSA?Xa&HX#`;mZR%bB(;<+G00gZ6RYZj#=T)xDKaJHYS?JCb>sBDR$PVz ztBof)%)kz3RlTaS+O#0H7lxOdVqLO&^#iN5M~YUjl7n8%$(Jo&qAgpslzwta@k94( zrafn!jWtwbn#eIts>*CRYmAi-!)BnlitR;SLO!!=idzTTz{t#?$v$R`$E6%Uit|OG zig9D+nBy2hv4&0S#&SxHuq+cTh8SJ{ku|FNM$U1F70RZAad5hpZV#(o?VOtHE~b6M zTt{`LW?nTd>6VoHD#mD9R}v47C0z{rx!;|_nLMx`+zp-rd%*MHaWFOYV)z`G38szJ zv@B2u=Yn&=UT`gV{HlxLR1@kk>57==d@$ka6;}eJn9GHkaVCGHe1uO+Sz)Em8*mDbVfJY}?3=e{X z;6xspZtScz;ocldnnHvH7#cj>4SM-Iamg| zK_}P>wt(BgZQwp|KiCT%0{g+E;2?Mw95;dd-HTp8KUfOx0^Q(ounp`7cY($b2f(zOkbfcJ!EInE zxE-tpa~6>=&y-m|Ao(+zh6H9bhZC4|Er! zU+@%o4m=B{-Gcr>9ZX$}p1~tvHMnI7a)48pA_sWlex5}E`@y5&d60KVY0gsOnS{Kc z4u-(F;L+uj7wBApUcg;o2Y3S92d0)0510WCfIGmnThS}1gZsd_-~q54>;>K6z)H#q zys(ORz|;rOFE|nG2m3*d2ZU2sqhEPYcn#sfEubH42iw4HAm7f_dcXtV+D8Zv9$rg$ zUK(-e)5rn#gLA?CmFNXL{I`S$cYc=k16Ed%KG;@`Ucn3CIGywzqz|qIOTlWe8mz2A zuV8*H>4S5flrN~SBYp5Js7)r{b)*k&abFA;X#yga?~Jjh7UZ2T30+X+(aobR*%x-A%MN zu(g?R;C}EpShe2rLB4I?+40?Q7@_Jp3H_ z22X)Kp!0e14Hj%C-**!K3xo%EfrVf{SPc$<&0xWc_P;bCA@F zZ{Pv&9GLZe(w$DeKpm|3d(s69UZdQ=La+_&`yuTHJOTEC$A3h4u;T#rh8NZB0kgnf zun=5(ka`DtK|k06wt>gNonYFJksr(gkAkJ(09XlXIrInMM6m3?Q6IrRuoP_n1^EHf zP7n`x80-am!G3V?|3?qt)PF;+nUv?d$OTUAM=r1&TnkpbM?As@JHY<;(GTeUcgh#+ z89*NJD5&MqZ=EI{F!clC0lnZ_u=Ka&3k>}y`2qEF=vUm}Iq(peHj94#_k;%v|42T- za zTb7Xys4XWQFsF>OCZL=N=mGuUad2%pXBO^8Zg3*l4CaBYU@2I!n)E>@*bJstus<$z za347E5b=O}{sy`8k-w7sf;pcJhs#0DPx@dUxE(Bil=Q(}V88GKq<;_fHHiG6&K`L= z=x+{({ouq+qzAUMH-7-^ZwZG7z|_siI|tl?yn?*UeJxnfhMZvQQ-lM(Pa`MT10Dr4 zw{kWET+4?GC*DiBfpftQa4neEiM-(1XE{p&PW?J(q`mUPfN91>6m`f<0g# z*bipDLOFwOaN>OWaWD^T2TQ?iU^TcMYzB9O9bgZ*8|(#pz&`LenDH(20A_+|_fhVk z4(y zSxEc%9{B(>_K`m51^r+MYy-D{ANj$OAE96Hzyai5gunkrdf*PQ8r*XT|KJ61H+cLf z$P1RdfxMveP2?@4yugXzZg4J`f0*##TCf@H{qM*t?w=AKocNEV3pzoq2)TYne!;Z2 zNgtFe(*P~$bE~zamQN+!l5v}&OyaNncKq?K0%(aHT0xv}|| zJe=Y;_~FOl4&j%@_;Zz*e!{XUK?uF}L%>2fUJ0`*wd0X(Gb>ZW12KUw_@@#`X33@9SuXp4z zJ&HVs;DNWKhtgnt755%`nr@xYVxFF^0T_;Gl@@Xbr;nUuFvyBH^z&~u=# zg>Emu66obNx};wTy%c&P`BeVl?}TqiYzQFXq`q}PuNIQ6-U)v{{G;&O?0nq9?}I-# z30rCe{(1QO;O`fHMQk}4^*S?!wwIhB|Ip_`FO+cRCHW|UUJZS%MFfRj34JH@*!)TP zhM;#q?-T!V>8tuCQ-2kH2mT6Dct#(2txM$}dh1o#2notn;_rjM`)bNb_?M{97etP0 zcz#hLFE#Zb_gs?BBjs#7w|X0nv$v~3EJ7DtI6;9k=t(p{Jb0E>$k*P0bPgQ!o5A8!Vkf3fxpYn zH^&uushl<;zFvu5_dvfuIEpiJNqmQ)4?tJ#&!!IvcM85ve6j6N!d-wq4*E!POu7a= zCy*l_dIxm79A(g3ppPVn7yf?ub~&~{-v#}Ummu9O(0iblj}Y%J_~+mkB;ZSa4#Us5BVNx^&L^PDUd2uc7uWwp?JUW6 z>KMi(!jGh{sqnYJx9h6_x*vM8#P1(&KUKo-g+CztNd1WFs|9|?oe9QCa~#|O|15kX zghXQWL;InhfKK)zm+0XL^rJSq=;0Lf!_a%h_a*9k##rqBEY_$-sP8%OFJvdKw~~Gt z{Fdovcu9*(=uYU9a^m$T^cLu8(BPGyNdo#Q==sp? zcJu}4&AAE27xXW3Ou82R!!P7MQTY|X&zQv;{s{a^_*3C$CE%<4!_R>qn-7(L=#!v# zNVvH2GUg}y;kUydCw%jg_>Mr|0zI~#3jGvxzbzf1Uw~e1i$~JWB;vKu^#t`m>Qlb( z^DaN`R^qSZuK4^(x*_QK(B4ZxX&8{@f+JYl!d!q1o%*hbrxHG z391#q?^`u|{!jt^ICSx2T@s(y^uI@lw)lkK4!`<=#CC}A_rUkVPgMV;9FM@yD!&*$ zFZqe<9bcZ+Rqs92EVWh31`1J+56w)87xjeEsnBk3cVkUO^m*^mrD2 z2!4m~lbyr*gN&O<7rt6oO(1^`{0uMcGnMco)E_D53jAgIhnKS#`XuPB_=(CFonN)X zZ-IYY_zA|BJ@E4%rG1aUKLS53ka)Zly`F_%3BN$X+sa+!&bZk)qhT-CsnFeoi`Q#Z z?h^Pr;2)OqvdJy+I^h?FhL=|h^gQTNH|+IA!tH>cpCH_R=u@GWN;s>&%RQImvk!jR zCHUvzheqH_x|z3-c7k+sptnOWlZ32wHo51LaAoihz&CmlMKO-8#6A7F8d_CFEB1$qMeDq3;5ghIP2oW$}QS& zOZrn$YJV&Jv($S_-y@_i{wwgm_KW7a$%y`Gj9j9(E%@K@C9_^CszKiYy$8DAqzQ=s z{m>_V*|aZBp5*5U^h417m&lL!JCDEAr%XF+nBI+XP12ckD}C$J!^e?)==-2=lXOO~ zmn3{8{wB4@*Lz7n1U&=#1@4EJyOBO3YCG`PkG})rFG0IH1i$&2;r2%#^p*tlv(Q_i ztNu^oz}}eZ{n2OrFr4&`Y7~CQU%- zEzrvo(6>Qf3tjwJm)!4xUIE>xIR;1QhfTWbH_ZS-KLI`StL8qTNtgP09{LvO2bc$3 zu0Bh7O=U|w;}zCvSVtMDyv1J`{;I!c*2}o^inb?_D}=xE_)F#9x`f^iy&t+-moynd z-vxbeU;MmM=!c+Ze4lxx)I;+UdLQ)mA8;njB7#Cc3;hIi(SdbIJxkS@uR%|heke|E zW4&Q2{J#Ce<12tZ^)>o$Tly8y^L~ilW9XtEFZ7*1Vt?ck^I(y48~%=Rwkx*YN%%d` zd!eiJ616-0sQlyaFlWJH!>jy5KLkBiFQSXo$>{NrX}4UazY_oX_&@Ly^eFlo$v-T) zM88h_@9*LLutG>~jk7yMt}XBj-!R8l@xvwb9nf2#t8q?IjrjIM-(&fYlvkSaA?fwO z?}wi!@>%1&8D8Q&5C7a-@%oW)8B^FtgMK(cIN|5OZ~v*e-($rq;{ZHW|KT5jKbQnz zSifqNhUhPZza72wA6H;Ei~n8t@BIbsDjA10?v612sQlx<;+WY#MdXa?=REul_^DD4 zBmAg+nRz=h_F<DJRD7%gG_}p2C0G1@xD&T%z;13_SOLOg$7kV_5ka{v==d_{+G8 zcf5!mE>j+ozLP)O(>c>6=_hKptS?BtY{y?3@2-knrb8|y5I%6}U9o4`AGh{n1^z8vVy&{exP8Io=Z^!A%L zlO^RmOunc+;lPRjp2&Kz=YU8?+{cR*L`<%!B~hp~R<#a~+i?|hQLw)v&xs~!F! z_?5!9=~MW7;19wt7*@YCRKIWpe&#~nyL1Kpjl_2W|Gk{;Egx2I&Haxo(ktdnqR3;D zSMpr|zjZP1tP*)f$hVZQ6Msia$hV}E$lnXsqaouG|J(3?ZYl4!lKNmx(?{s&Q%?IGR$ol} z2mYZ4dAFAE%}c@+Kp)`D@>!uJ7sie2!motCe~nq*3CgoY!dv|0lDP09{|@+*I0Idh zDv_D&SUs5a>M;K1uBAQT&0bDII|V;~1iqw`I-ULizG~lz`e*!zza0GS{xtpmNabkC zBOjhFs5JE%$#-xgula|rM+CD{;B-qZ?GzC ztjkB_Nt4u-eU>_dx>8O5BZRnq%4i2u;kP=d=faPKkJ>#Y@cZDe9aev$cE8Bs#b0Wz zJ)Wo>?eN#aSM!)iI#K=}_~V?^CrQU9r|9hn{1O*uez~{xdpk0O#wGsFq>d->KNb2!=w_Fp0*L^z{grsOKtE5u=i2Bypi92(@$dm|Efu=c=KlzE$!~#;ehPXBx?TPY z(7n*@@?_>R943e-2l^K1_H;|2ABA3MOScmGAoSRDr{X6B{T%c`@jt@&Eakofe?1;E z-bj0h_9KVj_rv!}JQ04hy_|rbv)&#)%D(`=>=OJ*v(OKGrB7S@s{G-%!MB%B1@z_w zbT4!_bO~!+qK_@mozPXg9@gJQ+v6Vmb!$R;^IM$7&~43 z?ZDp&{HbwiSUriZlO4uig`f9kO1crbjeLo&Pr={Evp|vu>yrBm(Dy^H7Gi>MlkTEj z!jCOqkt-kiDd=h)Vg$M9Vzf&9_4Dk}o-43x#eX~gE1NH2PpNfYqqh!E_?Id_i60+Xn(hHgd*BZeW<{fZUg|0Qf~H4^#+Khc9|;FEgrNj>XcKIsSk-|h$6er4EEh88~g`-ukrIt?_)grNs}yOBK%20Z?(B!vAN%{xsTi2 z@7vt}X>)5&#pm~Wn|qqgeXq^E%I2=KxgWE+pRu{WVRQez&D~>j|I&0@z3y?FyWi&j z&o+MY)A9M;vNhg)gN=Wy%{|@bzSriy-{xLpb645i8*J{7&HaSU-C=Wo%jSO7=Khh* z{f5o`OPl+Y&HYE4TeIowTAO>k%{|%X&a=7iv$+dx?j<(&TASN#b2r-DV{G-I#m0Ze z=6>1c{&j17{rHiM{{x%*Et~s@&3)YF{*BH3dz)2VUY;9l?x{9+zRg`?bFa3! zD{XG4&Hb3o{Uw|G+cx(PZSFU1?tiwq-?O=YXLEmSb6;Z{A8)j|Z?m~)*xdKp+(kBb zna%x(&0TAAhivZ0Z0=`l?wvOGKiJ&=VsoFixj(YGQ_Xcu%U-zN=GJZQ88&x;&3(Vk z{kJxEz0KWdb3b8ox7*y$+uYx_xqo1D-@kbAd_C*_RS#wB`ML9QoAudwcioeB*X+CH z)7*S?Sw4fz$A8Qvf4x?|vZkxAar3?8dvfz~@6OB1o13Te8DBi|rS1m3tnA^HF)R+1 zBKpz;K?UI zB!GG6_lC6G5Fg9M?Ncv~&ULwYlRGc@SKmd9xXk4FzJu&vuM~4*5~fDI zsynM*T4au_t2J#ae3p4*;U05A+Zyk!^=2y`iC<)}!dvU$7UpplOfK;+aaiH4b!pje z6uK4OT35HwT1Ur=x~z3;%Pq_BvSw|Cx7MjGly_*!Wyx>(v#^87 z{F1gMztH3==O;WXytOWGp|vh=rEi6|^8Xn#d@(4Owa#y$wJ#vyZ{TMSUjCbXM%}s3kDL-b0H*ve=(L{Ut ze+OOmoUHP-_L+MBrxA}mJxiMwy_>Mt#)P-_p^lp2?fSC9S@=W3N}N{u{pLPazZrfv zyx7YMXVKo`M(U0g-day-`;{TTRj^jRt?-syM+h66zO}E__G=@2v)O-G=~>||JZ1~e zOZN@0{YLmKYeUP7zzS!@_YOBgv*gb^ZQNy@Ho~vvY(ng1$!*b2a3k{PSp*ZU@J<`u YD!*8?(vJ1oZl?e5u|)2za2EN00s0m-fB*mh literal 0 HcmV?d00001 diff --git a/android/libs/armeabi-v7a/libtun2socks.so b/android/libs/armeabi-v7a/libtun2socks.so index d7152e632692b8def83e8a70c975aa99a8adfe58..248a20536cecf0fffcabd2cec78c8b400bf444f8 100755 GIT binary patch literal 141996 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

}O{lIwxg8Q#zD~rD#f1=NVUnw3v0rGAYi^FJ1J+ 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 OKL_4*!H0+pdjCH-=XkXM literal 121432 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 %mLbF8Xv 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 diff --git a/plugin.xml b/plugin.xml index 3b94257..eff6c7b 100644 --- a/plugin.xml +++ b/plugin.xml @@ -43,6 +43,10 @@ src="android/libs/armeabi-v7a/libtun2socks.so" target-dir="libs/armeabi-v7a" /> + + From d0f9d647489759944f63ce2ee3ebef5e3ebe88b3 Mon Sep 17 00:00:00 2001 From: Xmader Date: Sun, 13 Oct 2019 17:15:38 -0400 Subject: [PATCH 3/4] fully support UDP (code from Outline) --- .../org/uproxy/tun2socks/Tun2SocksJni.java | 4 +- android/java/org/uproxy/tun2socks/Tunnel.java | 13 +- android/jni/Android.mk | 9 + android/jni/CMakeLists.txt | 2 + android/jni/{COPYING => LICENSE} | 0 android/jni/blog_channels.txt | 1 + .../generated/blog_channel_SocksUdpClient.h | 4 + android/jni/generated/blog_channels_defines.h | 3 +- android/jni/generated/blog_channels_list.h | 1 + android/jni/lwip/src/core/dhcp.c | 3542 ++++++++--------- android/jni/lwip/src/core/tcp_out.c | 8 +- android/jni/misc/dns_proto.h | 13 +- android/jni/misc/socks_proto.h | 1 - android/jni/socks_udp_client/CMakeLists.txt | 2 + android/jni/socks_udp_client/SocksUdpClient.c | 527 +++ android/jni/socks_udp_client/SocksUdpClient.h | 132 + android/jni/socksclient/BSocksClient.c | 27 +- android/jni/socksclient/BSocksClient.h | 5 +- android/jni/system/BDatagram.h | 10 + android/jni/system/BDatagram_unix.c | 24 + android/jni/system/BDatagram_win.c | 25 + android/jni/tun2socks/CMakeLists.txt | 2 +- android/jni/tun2socks/SocksUdpGwClient.c | 2 +- .../tun2socks/jni/ca/psiphon/Tun2Socks.java | 7 +- android/jni/tun2socks/tun2socks.c | 209 +- android/jni/tuntap/BTap.c | 19 +- 26 files changed, 2744 insertions(+), 1848 deletions(-) rename android/jni/{COPYING => LICENSE} (100%) create mode 100644 android/jni/generated/blog_channel_SocksUdpClient.h create mode 100644 android/jni/socks_udp_client/CMakeLists.txt create mode 100644 android/jni/socks_udp_client/SocksUdpClient.c create mode 100644 android/jni/socks_udp_client/SocksUdpClient.h diff --git a/android/java/org/uproxy/tun2socks/Tun2SocksJni.java b/android/java/org/uproxy/tun2socks/Tun2SocksJni.java index 5001b3a..5cf7d43 100644 --- a/android/java/org/uproxy/tun2socks/Tun2SocksJni.java +++ b/android/java/org/uproxy/tun2socks/Tun2SocksJni.java @@ -28,10 +28,12 @@ public static native int runTun2Socks( int vpnInterfaceMTU, String vpnIpAddress, String vpnNetMask, + String vpnIpV6Address, String socksServerAddress, String udpRelayAddress, String dnsResolverAddress, - int transparentDNS); + int transparentDNS, + int socks5UDP); public static native int terminateTun2Socks(); diff --git a/android/java/org/uproxy/tun2socks/Tunnel.java b/android/java/org/uproxy/tun2socks/Tunnel.java index 99557bb..8094977 100644 --- a/android/java/org/uproxy/tun2socks/Tunnel.java +++ b/android/java/org/uproxy/tun2socks/Tunnel.java @@ -125,6 +125,7 @@ public synchronized void stop() { //---------------------------------------------------------------------------- private static final String VPN_INTERFACE_NETMASK = "255.255.255.0"; + private static final String VPN_IPV6_NULL = null; // No IPv6 support. private static final int VPN_INTERFACE_MTU = 1500; private static final String DNS_RESOLVER_IP = "8.8.8.8"; private static final int DNS_RESOLVER_PORT = 53; @@ -199,10 +200,12 @@ private boolean routeThroughTunnel(String socksServerAddress) { VPN_INTERFACE_MTU, mPrivateAddress.mRouter, VPN_INTERFACE_NETMASK, + VPN_IPV6_NULL, socksServerAddress, socksServerAddress, // The UDP relay has the same address and port as the SOCKS server. String.format("%s:%d", DNS_RESOLVER_IP, DNS_RESOLVER_PORT), - true /* transparent DNS */); + true /* transparent DNS */, + true /* socks5 UDP Enabled */); mHostService.onTunnelConnected(); mHostService.onDiagnosticMessage("routing through tunnel"); @@ -245,10 +248,12 @@ private void startTun2Socks( final int vpnInterfaceMTU, final String vpnIpAddress, final String vpnNetMask, + final String vpnIpV6Address, final String socksServerAddress, final String udpRelayAddress, final String dnsResolverAddress, - final boolean transparentDns) { + final boolean transparentDns, + final boolean socks5UdpEnabled) { if (mTun2SocksThread != null) { return; } @@ -262,10 +267,12 @@ public void run() { vpnInterfaceMTU, vpnIpAddress, vpnNetMask, + vpnIpV6Address, socksServerAddress, udpRelayAddress, dnsResolverAddress, - transparentDns ? 1 : 0); + transparentDns ? 1 : 0, + socks5UdpEnabled ? 1 : 0); } }); mTun2SocksThread.start(); diff --git a/android/jni/Android.mk b/android/jni/Android.mk index 1207915..ce52adc 100644 --- a/android/jni/Android.mk +++ b/android/jni/Android.mk @@ -10,6 +10,13 @@ LOCAL_CFLAGS += -DBADVPN_USE_SELFPIPE -DBADVPN_USE_EPOLL LOCAL_CFLAGS += -DBADVPN_LITTLE_ENDIAN LOCAL_CFLAGS += -DPSIPHON +ifeq ($(NDK_DEBUG),1) + LOCAL_CFLAGS += -g -O0 -fno-omit-frame-pointer + LOCAL_SANITIZE := address + LOCAL_MODULE_RELATIVE_PATH := asan + cmd-strip := +endif + LOCAL_C_INCLUDES:= \ $(LOCAL_PATH) \ $(LOCAL_PATH)/lwip/src/include/ipv4 \ @@ -19,6 +26,7 @@ LOCAL_C_INCLUDES:= \ LOCAL_SRC_FILES := \ base/BLog_syslog.c \ + system/BDatagram_unix.c \ system/BReactor_badvpn.c \ system/BSignal.c \ system/BConnection_unix.c \ @@ -70,6 +78,7 @@ LOCAL_SRC_FILES := \ flowextra/PacketPassInactivityMonitor.c \ tun2socks/SocksUdpGwClient.c \ udpgw_client/UdpGwClient.c \ + socks_udp_client/SocksUdpClient.c \ stringmap/BStringMap.c include $(BUILD_SHARED_LIBRARY) diff --git a/android/jni/CMakeLists.txt b/android/jni/CMakeLists.txt index d761e19..175706c 100644 --- a/android/jni/CMakeLists.txt +++ b/android/jni/CMakeLists.txt @@ -312,8 +312,10 @@ if (BUILD_NCD AND NOT EMSCRIPTEN) endif () if (BUILD_TUN2SOCKS) add_subdirectory(socksclient) + add_subdirectory(socks_udp_client) add_subdirectory(udpgw_client) add_subdirectory(lwip) + add_subdirectory(stringmap) endif () if (BUILD_TUNCTL) add_subdirectory(tunctl) diff --git a/android/jni/COPYING b/android/jni/LICENSE similarity index 100% rename from android/jni/COPYING rename to android/jni/LICENSE diff --git a/android/jni/blog_channels.txt b/android/jni/blog_channels.txt index 96313b5..d4e1d1f 100644 --- a/android/jni/blog_channels.txt +++ b/android/jni/blog_channels.txt @@ -89,6 +89,7 @@ NCDRfkillMonitor 4 udpgw 4 UdpGwClient 4 SocksUdpGwClient 4 +SocksUdpClient 4 BNetwork 4 BConnection 4 BSSLConnection 4 diff --git a/android/jni/generated/blog_channel_SocksUdpClient.h b/android/jni/generated/blog_channel_SocksUdpClient.h new file mode 100644 index 0000000..25779f4 --- /dev/null +++ b/android/jni/generated/blog_channel_SocksUdpClient.h @@ -0,0 +1,4 @@ +#ifdef BLOG_CURRENT_CHANNEL +#undef BLOG_CURRENT_CHANNEL +#endif +#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_SocksUdpClient diff --git a/android/jni/generated/blog_channels_defines.h b/android/jni/generated/blog_channels_defines.h index d89dc86..de7dc22 100644 --- a/android/jni/generated/blog_channels_defines.h +++ b/android/jni/generated/blog_channels_defines.h @@ -143,4 +143,5 @@ #define BLOG_CHANNEL_BThreadSignal 142 #define BLOG_CHANNEL_BLockReactor 143 #define BLOG_CHANNEL_ncd_load_module 144 -#define BLOG_NUM_CHANNELS 145 +#define BLOG_CHANNEL_SocksUdpClient 145 +#define BLOG_NUM_CHANNELS 146 diff --git a/android/jni/generated/blog_channels_list.h b/android/jni/generated/blog_channels_list.h index c903c0f..dff5bed 100644 --- a/android/jni/generated/blog_channels_list.h +++ b/android/jni/generated/blog_channels_list.h @@ -143,3 +143,4 @@ {"BThreadSignal", 4}, {"BLockReactor", 4}, {"ncd_load_module", 4}, +{"SocksUdpClient", 4}, diff --git a/android/jni/lwip/src/core/dhcp.c b/android/jni/lwip/src/core/dhcp.c index 86b9cfe..21fd784 100644 --- a/android/jni/lwip/src/core/dhcp.c +++ b/android/jni/lwip/src/core/dhcp.c @@ -1,1771 +1,1771 @@ -/** - * @file - * Dynamic Host Configuration Protocol client - * - */ - -/* - * - * Copyright (c) 2001-2004 Leon Woestenberg - * Copyright (c) 2001-2004 Axon Digital Design B.V., The Netherlands. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is a contribution to the lwIP TCP/IP stack. - * The Swedish Institute of Computer Science and Adam Dunkels - * are specifically granted permission to redistribute this - * source code. - * - * Author: Leon Woestenberg - * - * This is a DHCP client for the lwIP TCP/IP stack. It aims to conform - * with RFC 2131 and RFC 2132. - * - * TODO: - * - Support for interfaces other than Ethernet (SLIP, PPP, ...) - * - * Please coordinate changes and requests with Leon Woestenberg - * - * - * Integration with your code: - * - * In lwip/dhcp.h - * #define DHCP_COARSE_TIMER_SECS (recommended 60 which is a minute) - * #define DHCP_FINE_TIMER_MSECS (recommended 500 which equals TCP coarse timer) - * - * Then have your application call dhcp_coarse_tmr() and - * dhcp_fine_tmr() on the defined intervals. - * - * dhcp_start(struct netif *netif); - * starts a DHCP client instance which configures the interface by - * obtaining an IP address lease and maintaining it. - * - * Use dhcp_release(netif) to end the lease and use dhcp_stop(netif) - * to remove the DHCP client. - * - */ - -#include "lwip/opt.h" - -#if LWIP_DHCP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/stats.h" -#include "lwip/mem.h" -#include "lwip/udp.h" -#include "lwip/ip_addr.h" -#include "lwip/netif.h" -#include "lwip/def.h" -#include "lwip/dhcp.h" -#include "lwip/autoip.h" -#include "lwip/dns.h" -#include "netif/etharp.h" - -#include - -/** DHCP_CREATE_RAND_XID: if this is set to 1, the xid is created using - * LWIP_RAND() (this overrides DHCP_GLOBAL_XID) - */ -#ifndef DHCP_CREATE_RAND_XID -#define DHCP_CREATE_RAND_XID 1 -#endif - -/** Default for DHCP_GLOBAL_XID is 0xABCD0000 - * This can be changed by defining DHCP_GLOBAL_XID and DHCP_GLOBAL_XID_HEADER, e.g. - * #define DHCP_GLOBAL_XID_HEADER "stdlib.h" - * #define DHCP_GLOBAL_XID rand() - */ -#ifdef DHCP_GLOBAL_XID_HEADER -#include DHCP_GLOBAL_XID_HEADER /* include optional starting XID generation prototypes */ -#endif - -/** DHCP_OPTION_MAX_MSG_SIZE is set to the MTU - * MTU is checked to be big enough in dhcp_start */ -#define DHCP_MAX_MSG_LEN(netif) (netif->mtu) -#define DHCP_MAX_MSG_LEN_MIN_REQUIRED 576 -/** Minimum length for reply before packet is parsed */ -#define DHCP_MIN_REPLY_LEN 44 - -#define REBOOT_TRIES 2 - -/** Option handling: options are parsed in dhcp_parse_reply - * and saved in an array where other functions can load them from. - * This might be moved into the struct dhcp (not necessarily since - * lwIP is single-threaded and the array is only used while in recv - * callback). */ -#define DHCP_OPTION_IDX_OVERLOAD 0 -#define DHCP_OPTION_IDX_MSG_TYPE 1 -#define DHCP_OPTION_IDX_SERVER_ID 2 -#define DHCP_OPTION_IDX_LEASE_TIME 3 -#define DHCP_OPTION_IDX_T1 4 -#define DHCP_OPTION_IDX_T2 5 -#define DHCP_OPTION_IDX_SUBNET_MASK 6 -#define DHCP_OPTION_IDX_ROUTER 7 -#define DHCP_OPTION_IDX_DNS_SERVER 8 -#define DHCP_OPTION_IDX_MAX (DHCP_OPTION_IDX_DNS_SERVER + DNS_MAX_SERVERS) - -/** Holds the decoded option values, only valid while in dhcp_recv. - @todo: move this into struct dhcp? */ -u32_t dhcp_rx_options_val[DHCP_OPTION_IDX_MAX]; -/** Holds a flag which option was received and is contained in dhcp_rx_options_val, - only valid while in dhcp_recv. - @todo: move this into struct dhcp? */ -u8_t dhcp_rx_options_given[DHCP_OPTION_IDX_MAX]; - -#ifdef DHCP_GLOBAL_XID -static u32_t xid; -static u8_t xid_initialised; -#endif /* DHCP_GLOBAL_XID */ - -#define dhcp_option_given(dhcp, idx) (dhcp_rx_options_given[idx] != 0) -#define dhcp_got_option(dhcp, idx) (dhcp_rx_options_given[idx] = 1) -#define dhcp_clear_option(dhcp, idx) (dhcp_rx_options_given[idx] = 0) -#define dhcp_clear_all_options(dhcp) (memset(dhcp_rx_options_given, 0, sizeof(dhcp_rx_options_given))) -#define dhcp_get_option_value(dhcp, idx) (dhcp_rx_options_val[idx]) -#define dhcp_set_option_value(dhcp, idx, val) (dhcp_rx_options_val[idx] = (val)) - - -/* DHCP client state machine functions */ -static err_t dhcp_discover(struct netif *netif); -static err_t dhcp_select(struct netif *netif); -static void dhcp_bind(struct netif *netif); -#if DHCP_DOES_ARP_CHECK -static err_t dhcp_decline(struct netif *netif); -#endif /* DHCP_DOES_ARP_CHECK */ -static err_t dhcp_rebind(struct netif *netif); -static err_t dhcp_reboot(struct netif *netif); -static void dhcp_set_state(struct dhcp *dhcp, u8_t new_state); - -/* receive, unfold, parse and free incoming messages */ -static void dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port); - -/* set the DHCP timers */ -static void dhcp_timeout(struct netif *netif); -static void dhcp_t1_timeout(struct netif *netif); -static void dhcp_t2_timeout(struct netif *netif); - -/* build outgoing messages */ -/* create a DHCP message, fill in common headers */ -static err_t dhcp_create_msg(struct netif *netif, struct dhcp *dhcp, u8_t message_type); -/* free a DHCP request */ -static void dhcp_delete_msg(struct dhcp *dhcp); -/* add a DHCP option (type, then length in bytes) */ -static void dhcp_option(struct dhcp *dhcp, u8_t option_type, u8_t option_len); -/* add option values */ -static void dhcp_option_byte(struct dhcp *dhcp, u8_t value); -static void dhcp_option_short(struct dhcp *dhcp, u16_t value); -static void dhcp_option_long(struct dhcp *dhcp, u32_t value); -#if LWIP_NETIF_HOSTNAME -static void dhcp_option_hostname(struct dhcp *dhcp, struct netif *netif); -#endif /* LWIP_NETIF_HOSTNAME */ -/* always add the DHCP options trailer to end and pad */ -static void dhcp_option_trailer(struct dhcp *dhcp); - -/** - * Back-off the DHCP client (because of a received NAK response). - * - * Back-off the DHCP client because of a received NAK. Receiving a - * NAK means the client asked for something non-sensible, for - * example when it tries to renew a lease obtained on another network. - * - * We clear any existing set IP address and restart DHCP negotiation - * afresh (as per RFC2131 3.2.3). - * - * @param netif the netif under DHCP control - */ -static void -dhcp_handle_nak(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_nak(netif=%p) %c%c%"U16_F"\n", - (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); - /* Set the interface down since the address must no longer be used, as per RFC2131 */ - netif_set_down(netif); - /* remove IP address from interface */ - netif_set_ipaddr(netif, IP_ADDR_ANY); - netif_set_gw(netif, IP_ADDR_ANY); - netif_set_netmask(netif, IP_ADDR_ANY); - /* Change to a defined state */ - dhcp_set_state(dhcp, DHCP_BACKING_OFF); - /* We can immediately restart discovery */ - dhcp_discover(netif); -} - -#if DHCP_DOES_ARP_CHECK -/** - * Checks if the offered IP address is already in use. - * - * It does so by sending an ARP request for the offered address and - * entering CHECKING state. If no ARP reply is received within a small - * interval, the address is assumed to be free for use by us. - * - * @param netif the netif under DHCP control - */ -static void -dhcp_check(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - err_t result; - u16_t msecs; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_check(netif=%p) %c%c\n", (void *)netif, (s16_t)netif->name[0], - (s16_t)netif->name[1])); - dhcp_set_state(dhcp, DHCP_CHECKING); - /* create an ARP query for the offered IP address, expecting that no host - responds, as the IP address should not be in use. */ - result = etharp_query(netif, &dhcp->offered_ip_addr, NULL); - if (result != ERR_OK) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("dhcp_check: could not perform ARP query\n")); - } - dhcp->tries++; - msecs = 500; - dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_check(): set request timeout %"U16_F" msecs\n", msecs)); -} -#endif /* DHCP_DOES_ARP_CHECK */ - -/** - * Remember the configuration offered by a DHCP server. - * - * @param netif the netif under DHCP control - */ -static void -dhcp_handle_offer(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_offer(netif=%p) %c%c%"U16_F"\n", - (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); - /* obtain the server address */ - if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_SERVER_ID)) { - ip4_addr_set_u32(&dhcp->server_ip_addr, htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_SERVER_ID))); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_handle_offer(): server 0x%08"X32_F"\n", - ip4_addr_get_u32(&dhcp->server_ip_addr))); - /* remember offered address */ - ip_addr_copy(dhcp->offered_ip_addr, dhcp->msg_in->yiaddr); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_handle_offer(): offer for 0x%08"X32_F"\n", - ip4_addr_get_u32(&dhcp->offered_ip_addr))); - - dhcp_select(netif); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, - ("dhcp_handle_offer(netif=%p) did not get server ID!\n", (void*)netif)); - } -} - -/** - * Select a DHCP server offer out of all offers. - * - * Simply select the first offer received. - * - * @param netif the netif under DHCP control - * @return lwIP specific error (see error.h) - */ -static err_t -dhcp_select(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - err_t result; - u16_t msecs; - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_select(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); - dhcp_set_state(dhcp, DHCP_REQUESTING); - - /* create and initialize the DHCP message header */ - result = dhcp_create_msg(netif, dhcp, DHCP_REQUEST); - if (result == ERR_OK) { - dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); - dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); - - /* MUST request the offered IP address */ - dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); - dhcp_option_long(dhcp, ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr))); - - dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4); - dhcp_option_long(dhcp, ntohl(ip4_addr_get_u32(&dhcp->server_ip_addr))); - - dhcp_option(dhcp, DHCP_OPTION_PARAMETER_REQUEST_LIST, 4/*num options*/); - dhcp_option_byte(dhcp, DHCP_OPTION_SUBNET_MASK); - dhcp_option_byte(dhcp, DHCP_OPTION_ROUTER); - dhcp_option_byte(dhcp, DHCP_OPTION_BROADCAST); - dhcp_option_byte(dhcp, DHCP_OPTION_DNS_SERVER); - -#if LWIP_NETIF_HOSTNAME - dhcp_option_hostname(dhcp, netif); -#endif /* LWIP_NETIF_HOSTNAME */ - - dhcp_option_trailer(dhcp); - /* shrink the pbuf to the actual content length */ - pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); - - /* send broadcast to any DHCP server */ - udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); - dhcp_delete_msg(dhcp); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_select: REQUESTING\n")); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("dhcp_select: could not allocate DHCP request\n")); - } - dhcp->tries++; - msecs = (dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000; - dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_select(): set request timeout %"U16_F" msecs\n", msecs)); - return result; -} - -/** - * The DHCP timer that checks for lease renewal/rebind timeouts. - */ -void -dhcp_coarse_tmr() -{ - struct netif *netif = netif_list; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_coarse_tmr()\n")); - /* iterate through all network interfaces */ - while (netif != NULL) { - /* only act on DHCP configured interfaces */ - if (netif->dhcp != NULL) { - /* timer is active (non zero), and triggers (zeroes) now? */ - if (netif->dhcp->t2_timeout-- == 1) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_coarse_tmr(): t2 timeout\n")); - /* this clients' rebind timeout triggered */ - dhcp_t2_timeout(netif); - /* timer is active (non zero), and triggers (zeroes) now */ - } else if (netif->dhcp->t1_timeout-- == 1) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_coarse_tmr(): t1 timeout\n")); - /* this clients' renewal timeout triggered */ - dhcp_t1_timeout(netif); - } - } - /* proceed to next netif */ - netif = netif->next; - } -} - -/** - * DHCP transaction timeout handling - * - * A DHCP server is expected to respond within a short period of time. - * This timer checks whether an outstanding DHCP request is timed out. - */ -void -dhcp_fine_tmr() -{ - struct netif *netif = netif_list; - /* loop through netif's */ - while (netif != NULL) { - /* only act on DHCP configured interfaces */ - if (netif->dhcp != NULL) { - /* timer is active (non zero), and is about to trigger now */ - if (netif->dhcp->request_timeout > 1) { - netif->dhcp->request_timeout--; - } - else if (netif->dhcp->request_timeout == 1) { - netif->dhcp->request_timeout--; - /* { netif->dhcp->request_timeout == 0 } */ - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_fine_tmr(): request timeout\n")); - /* this client's request timeout triggered */ - dhcp_timeout(netif); - } - } - /* proceed to next network interface */ - netif = netif->next; - } -} - -/** - * A DHCP negotiation transaction, or ARP request, has timed out. - * - * The timer that was started with the DHCP or ARP request has - * timed out, indicating no response was received in time. - * - * @param netif the netif under DHCP control - */ -static void -dhcp_timeout(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_timeout()\n")); - /* back-off period has passed, or server selection timed out */ - if ((dhcp->state == DHCP_BACKING_OFF) || (dhcp->state == DHCP_SELECTING)) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_timeout(): restarting discovery\n")); - dhcp_discover(netif); - /* receiving the requested lease timed out */ - } else if (dhcp->state == DHCP_REQUESTING) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REQUESTING, DHCP request timed out\n")); - if (dhcp->tries <= 5) { - dhcp_select(netif); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REQUESTING, releasing, restarting\n")); - dhcp_release(netif); - dhcp_discover(netif); - } -#if DHCP_DOES_ARP_CHECK - /* received no ARP reply for the offered address (which is good) */ - } else if (dhcp->state == DHCP_CHECKING) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): CHECKING, ARP request timed out\n")); - if (dhcp->tries <= 1) { - dhcp_check(netif); - /* no ARP replies on the offered address, - looks like the IP address is indeed free */ - } else { - /* bind the interface to the offered address */ - dhcp_bind(netif); - } -#endif /* DHCP_DOES_ARP_CHECK */ - } - /* did not get response to renew request? */ - else if (dhcp->state == DHCP_RENEWING) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): RENEWING, DHCP request timed out\n")); - /* just retry renewal */ - /* note that the rebind timer will eventually time-out if renew does not work */ - dhcp_renew(netif); - /* did not get response to rebind request? */ - } else if (dhcp->state == DHCP_REBINDING) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REBINDING, DHCP request timed out\n")); - if (dhcp->tries <= 8) { - dhcp_rebind(netif); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): RELEASING, DISCOVERING\n")); - dhcp_release(netif); - dhcp_discover(netif); - } - } else if (dhcp->state == DHCP_REBOOTING) { - if (dhcp->tries < REBOOT_TRIES) { - dhcp_reboot(netif); - } else { - dhcp_discover(netif); - } - } -} - -/** - * The renewal period has timed out. - * - * @param netif the netif under DHCP control - */ -static void -dhcp_t1_timeout(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_t1_timeout()\n")); - if ((dhcp->state == DHCP_REQUESTING) || (dhcp->state == DHCP_BOUND) || - (dhcp->state == DHCP_RENEWING)) { - /* just retry to renew - note that the rebind timer (t2) will - * eventually time-out if renew tries fail. */ - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, - ("dhcp_t1_timeout(): must renew\n")); - /* This slightly different to RFC2131: DHCPREQUEST will be sent from state - DHCP_RENEWING, not DHCP_BOUND */ - dhcp_renew(netif); - } -} - -/** - * The rebind period has timed out. - * - * @param netif the netif under DHCP control - */ -static void -dhcp_t2_timeout(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_t2_timeout()\n")); - if ((dhcp->state == DHCP_REQUESTING) || (dhcp->state == DHCP_BOUND) || - (dhcp->state == DHCP_RENEWING)) { - /* just retry to rebind */ - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, - ("dhcp_t2_timeout(): must rebind\n")); - /* This slightly different to RFC2131: DHCPREQUEST will be sent from state - DHCP_REBINDING, not DHCP_BOUND */ - dhcp_rebind(netif); - } -} - -/** - * Handle a DHCP ACK packet - * - * @param netif the netif under DHCP control - */ -static void -dhcp_handle_ack(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; -#if LWIP_DNS - u8_t n; -#endif /* LWIP_DNS */ - - /* clear options we might not get from the ACK */ - ip_addr_set_zero(&dhcp->offered_sn_mask); - ip_addr_set_zero(&dhcp->offered_gw_addr); -#if LWIP_DHCP_BOOTP_FILE - ip_addr_set_zero(&dhcp->offered_si_addr); -#endif /* LWIP_DHCP_BOOTP_FILE */ - - /* lease time given? */ - if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_LEASE_TIME)) { - /* remember offered lease time */ - dhcp->offered_t0_lease = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_LEASE_TIME); - } - /* renewal period given? */ - if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_T1)) { - /* remember given renewal period */ - dhcp->offered_t1_renew = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_T1); - } else { - /* calculate safe periods for renewal */ - dhcp->offered_t1_renew = dhcp->offered_t0_lease / 2; - } - - /* renewal period given? */ - if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_T2)) { - /* remember given rebind period */ - dhcp->offered_t2_rebind = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_T2); - } else { - /* calculate safe periods for rebinding */ - dhcp->offered_t2_rebind = dhcp->offered_t0_lease; - } - - /* (y)our internet address */ - ip_addr_copy(dhcp->offered_ip_addr, dhcp->msg_in->yiaddr); - -#if LWIP_DHCP_BOOTP_FILE - /* copy boot server address, - boot file name copied in dhcp_parse_reply if not overloaded */ - ip_addr_copy(dhcp->offered_si_addr, dhcp->msg_in->siaddr); -#endif /* LWIP_DHCP_BOOTP_FILE */ - - /* subnet mask given? */ - if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_SUBNET_MASK)) { - /* remember given subnet mask */ - ip4_addr_set_u32(&dhcp->offered_sn_mask, htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_SUBNET_MASK))); - dhcp->subnet_mask_given = 1; - } else { - dhcp->subnet_mask_given = 0; - } - - /* gateway router */ - if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_ROUTER)) { - ip4_addr_set_u32(&dhcp->offered_gw_addr, htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_ROUTER))); - } - -#if LWIP_DNS - /* DNS servers */ - for(n = 0; (n < DNS_MAX_SERVERS) && dhcp_option_given(dhcp, DHCP_OPTION_IDX_DNS_SERVER + n); n++) { - ip_addr_t dns_addr; - ip4_addr_set_u32(&dns_addr, htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_DNS_SERVER + n))); - dns_setserver(n, &dns_addr); - } -#endif /* LWIP_DNS */ -} - -/** Set a statically allocated struct dhcp to work with. - * Using this prevents dhcp_start to allocate it using mem_malloc. - * - * @param netif the netif for which to set the struct dhcp - * @param dhcp (uninitialised) dhcp struct allocated by the application - */ -void -dhcp_set_struct(struct netif *netif, struct dhcp *dhcp) -{ - LWIP_ASSERT("netif != NULL", netif != NULL); - LWIP_ASSERT("dhcp != NULL", dhcp != NULL); - LWIP_ASSERT("netif already has a struct dhcp set", netif->dhcp == NULL); - - /* clear data structure */ - memset(dhcp, 0, sizeof(struct dhcp)); - /* dhcp_set_state(&dhcp, DHCP_OFF); */ - netif->dhcp = dhcp; -} - -/** Removes a struct dhcp from a netif. - * - * ATTENTION: Only use this when not using dhcp_set_struct() to allocate the - * struct dhcp since the memory is passed back to the heap. - * - * @param netif the netif from which to remove the struct dhcp - */ -void dhcp_cleanup(struct netif *netif) -{ - LWIP_ASSERT("netif != NULL", netif != NULL); - - if (netif->dhcp != NULL) { - mem_free(netif->dhcp); - netif->dhcp = NULL; - } -} - -/** - * Start DHCP negotiation for a network interface. - * - * If no DHCP client instance was attached to this interface, - * a new client is created first. If a DHCP client instance - * was already present, it restarts negotiation. - * - * @param netif The lwIP network interface - * @return lwIP error code - * - ERR_OK - No error - * - ERR_MEM - Out of memory - */ -err_t -dhcp_start(struct netif *netif) -{ - struct dhcp *dhcp; - err_t result = ERR_OK; - - LWIP_ERROR("netif != NULL", (netif != NULL), return ERR_ARG;); - dhcp = netif->dhcp; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); - /* Remove the flag that says this netif is handled by DHCP, - it is set when we succeeded starting. */ - netif->flags &= ~NETIF_FLAG_DHCP; - - /* check hwtype of the netif */ - if ((netif->flags & NETIF_FLAG_ETHARP) == 0) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): No ETHARP netif\n")); - return ERR_ARG; - } - - /* check MTU of the netif */ - if (netif->mtu < DHCP_MAX_MSG_LEN_MIN_REQUIRED) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): Cannot use this netif with DHCP: MTU is too small\n")); - return ERR_MEM; - } - - /* no DHCP client attached yet? */ - if (dhcp == NULL) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): starting new DHCP client\n")); - dhcp = (struct dhcp *)mem_malloc(sizeof(struct dhcp)); - if (dhcp == NULL) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): could not allocate dhcp\n")); - return ERR_MEM; - } - /* store this dhcp client in the netif */ - netif->dhcp = dhcp; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): allocated dhcp")); - /* already has DHCP client attached */ - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(): restarting DHCP configuration\n")); - if (dhcp->pcb != NULL) { - udp_remove(dhcp->pcb); - } - LWIP_ASSERT("pbuf p_out wasn't freed", dhcp->p_out == NULL); - LWIP_ASSERT("reply wasn't freed", dhcp->msg_in == NULL ); - } - - /* clear data structure */ - memset(dhcp, 0, sizeof(struct dhcp)); - /* dhcp_set_state(&dhcp, DHCP_OFF); */ - /* allocate UDP PCB */ - dhcp->pcb = udp_new(); - if (dhcp->pcb == NULL) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): could not obtain pcb\n")); - return ERR_MEM; - } - ip_set_option(dhcp->pcb, SOF_BROADCAST); - /* set up local and remote port for the pcb */ - udp_bind(dhcp->pcb, IP_ADDR_ANY, DHCP_CLIENT_PORT); - udp_connect(dhcp->pcb, IP_ADDR_ANY, DHCP_SERVER_PORT); - /* set up the recv callback and argument */ - udp_recv(dhcp->pcb, dhcp_recv, netif); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): starting DHCP configuration\n")); - /* (re)start the DHCP negotiation */ - result = dhcp_discover(netif); - if (result != ERR_OK) { - /* free resources allocated above */ - dhcp_stop(netif); - return ERR_MEM; - } - /* Set the flag that says this netif is handled by DHCP. */ - netif->flags |= NETIF_FLAG_DHCP; - return result; -} - -/** - * Inform a DHCP server of our manual configuration. - * - * This informs DHCP servers of our fixed IP address configuration - * by sending an INFORM message. It does not involve DHCP address - * configuration, it is just here to be nice to the network. - * - * @param netif The lwIP network interface - */ -void -dhcp_inform(struct netif *netif) -{ - struct dhcp dhcp; - err_t result = ERR_OK; - struct udp_pcb *pcb; - - LWIP_ERROR("netif != NULL", (netif != NULL), return;); - - memset(&dhcp, 0, sizeof(struct dhcp)); - dhcp_set_state(&dhcp, DHCP_INFORM); - - if ((netif->dhcp != NULL) && (netif->dhcp->pcb != NULL)) { - /* re-use existing pcb */ - pcb = netif->dhcp->pcb; - } else { - pcb = udp_new(); - if (pcb == NULL) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_inform(): could not obtain pcb")); - return; - } - dhcp.pcb = pcb; - ip_set_option(dhcp.pcb, SOF_BROADCAST); - udp_bind(dhcp.pcb, IP_ADDR_ANY, DHCP_CLIENT_PORT); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_inform(): created new udp pcb\n")); - } - /* create and initialize the DHCP message header */ - result = dhcp_create_msg(netif, &dhcp, DHCP_INFORM); - if (result == ERR_OK) { - dhcp_option(&dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); - dhcp_option_short(&dhcp, DHCP_MAX_MSG_LEN(netif)); - - dhcp_option_trailer(&dhcp); - - pbuf_realloc(dhcp.p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp.options_out_len); - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_inform: INFORMING\n")); - udp_sendto_if(pcb, dhcp.p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); - dhcp_delete_msg(&dhcp); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_inform: could not allocate DHCP request\n")); - } - - if (dhcp.pcb != NULL) { - /* otherwise, the existing pcb was used */ - udp_remove(dhcp.pcb); - } -} - -/** Handle a possible change in the network configuration. - * - * This enters the REBOOTING state to verify that the currently bound - * address is still valid. - */ -void -dhcp_network_changed(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - if (!dhcp) - return; - switch (dhcp->state) { - case DHCP_REBINDING: - case DHCP_RENEWING: - case DHCP_BOUND: - case DHCP_REBOOTING: - netif_set_down(netif); - dhcp->tries = 0; - dhcp_reboot(netif); - break; - case DHCP_OFF: - /* stay off */ - break; - default: - dhcp->tries = 0; -#if LWIP_DHCP_AUTOIP_COOP - if(dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_ON) { - autoip_stop(netif); - dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_OFF; - } -#endif /* LWIP_DHCP_AUTOIP_COOP */ - dhcp_discover(netif); - break; - } -} - -#if DHCP_DOES_ARP_CHECK -/** - * Match an ARP reply with the offered IP address. - * - * @param netif the network interface on which the reply was received - * @param addr The IP address we received a reply from - */ -void dhcp_arp_reply(struct netif *netif, ip_addr_t *addr) -{ - LWIP_ERROR("netif != NULL", (netif != NULL), return;); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_arp_reply()\n")); - /* is a DHCP client doing an ARP check? */ - if ((netif->dhcp != NULL) && (netif->dhcp->state == DHCP_CHECKING)) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_arp_reply(): CHECKING, arp reply for 0x%08"X32_F"\n", - ip4_addr_get_u32(addr))); - /* did a host respond with the address we - were offered by the DHCP server? */ - if (ip_addr_cmp(addr, &netif->dhcp->offered_ip_addr)) { - /* we will not accept the offered address */ - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE | LWIP_DBG_LEVEL_WARNING, - ("dhcp_arp_reply(): arp reply matched with offered address, declining\n")); - dhcp_decline(netif); - } - } -} - -/** - * Decline an offered lease. - * - * Tell the DHCP server we do not accept the offered address. - * One reason to decline the lease is when we find out the address - * is already in use by another host (through ARP). - * - * @param netif the netif under DHCP control - */ -static err_t -dhcp_decline(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - err_t result = ERR_OK; - u16_t msecs; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_decline()\n")); - dhcp_set_state(dhcp, DHCP_BACKING_OFF); - /* create and initialize the DHCP message header */ - result = dhcp_create_msg(netif, dhcp, DHCP_DECLINE); - if (result == ERR_OK) { - dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); - dhcp_option_long(dhcp, ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr))); - - dhcp_option_trailer(dhcp); - /* resize pbuf to reflect true size of options */ - pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); - - /* per section 4.4.4, broadcast DECLINE messages */ - udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); - dhcp_delete_msg(dhcp); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_decline: BACKING OFF\n")); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, - ("dhcp_decline: could not allocate DHCP request\n")); - } - dhcp->tries++; - msecs = 10*1000; - dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_decline(): set request timeout %"U16_F" msecs\n", msecs)); - return result; -} -#endif /* DHCP_DOES_ARP_CHECK */ - - -/** - * Start the DHCP process, discover a DHCP server. - * - * @param netif the netif under DHCP control - */ -static err_t -dhcp_discover(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - err_t result = ERR_OK; - u16_t msecs; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover()\n")); - ip_addr_set_any(&dhcp->offered_ip_addr); - dhcp_set_state(dhcp, DHCP_SELECTING); - /* create and initialize the DHCP message header */ - result = dhcp_create_msg(netif, dhcp, DHCP_DISCOVER); - if (result == ERR_OK) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: making request\n")); - - dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); - dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); - - dhcp_option(dhcp, DHCP_OPTION_PARAMETER_REQUEST_LIST, 4/*num options*/); - dhcp_option_byte(dhcp, DHCP_OPTION_SUBNET_MASK); - dhcp_option_byte(dhcp, DHCP_OPTION_ROUTER); - dhcp_option_byte(dhcp, DHCP_OPTION_BROADCAST); - dhcp_option_byte(dhcp, DHCP_OPTION_DNS_SERVER); - - dhcp_option_trailer(dhcp); - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: realloc()ing\n")); - pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: sendto(DISCOVER, IP_ADDR_BROADCAST, DHCP_SERVER_PORT)\n")); - udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: deleting()ing\n")); - dhcp_delete_msg(dhcp); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover: SELECTING\n")); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_discover: could not allocate DHCP request\n")); - } - dhcp->tries++; -#if LWIP_DHCP_AUTOIP_COOP - if(dhcp->tries >= LWIP_DHCP_AUTOIP_COOP_TRIES && dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_OFF) { - dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_ON; - autoip_start(netif); - } -#endif /* LWIP_DHCP_AUTOIP_COOP */ - msecs = (dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000; - dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover(): set request timeout %"U16_F" msecs\n", msecs)); - return result; -} - - -/** - * Bind the interface to the offered IP address. - * - * @param netif network interface to bind to the offered address - */ -static void -dhcp_bind(struct netif *netif) -{ - u32_t timeout; - struct dhcp *dhcp; - ip_addr_t sn_mask, gw_addr; - LWIP_ERROR("dhcp_bind: netif != NULL", (netif != NULL), return;); - dhcp = netif->dhcp; - LWIP_ERROR("dhcp_bind: dhcp != NULL", (dhcp != NULL), return;); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); - - /* temporary DHCP lease? */ - if (dhcp->offered_t1_renew != 0xffffffffUL) { - /* set renewal period timer */ - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t1 renewal timer %"U32_F" secs\n", dhcp->offered_t1_renew)); - timeout = (dhcp->offered_t1_renew + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; - if(timeout > 0xffff) { - timeout = 0xffff; - } - dhcp->t1_timeout = (u16_t)timeout; - if (dhcp->t1_timeout == 0) { - dhcp->t1_timeout = 1; - } - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t1_renew*1000)); - } - /* set renewal period timer */ - if (dhcp->offered_t2_rebind != 0xffffffffUL) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t2 rebind timer %"U32_F" secs\n", dhcp->offered_t2_rebind)); - timeout = (dhcp->offered_t2_rebind + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; - if(timeout > 0xffff) { - timeout = 0xffff; - } - dhcp->t2_timeout = (u16_t)timeout; - if (dhcp->t2_timeout == 0) { - dhcp->t2_timeout = 1; - } - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t2_rebind*1000)); - } - - /* If we have sub 1 minute lease, t2 and t1 will kick in at the same time. */ - if ((dhcp->t1_timeout >= dhcp->t2_timeout) && (dhcp->t2_timeout > 0)) { - dhcp->t1_timeout = 0; - } - - if (dhcp->subnet_mask_given) { - /* copy offered network mask */ - ip_addr_copy(sn_mask, dhcp->offered_sn_mask); - } else { - /* subnet mask not given, choose a safe subnet mask given the network class */ - u8_t first_octet = ip4_addr1(&dhcp->offered_ip_addr); - if (first_octet <= 127) { - ip4_addr_set_u32(&sn_mask, PP_HTONL(0xff000000UL)); - } else if (first_octet >= 192) { - ip4_addr_set_u32(&sn_mask, PP_HTONL(0xffffff00UL)); - } else { - ip4_addr_set_u32(&sn_mask, PP_HTONL(0xffff0000UL)); - } - } - - ip_addr_copy(gw_addr, dhcp->offered_gw_addr); - /* gateway address not given? */ - if (ip_addr_isany(&gw_addr)) { - /* copy network address */ - ip_addr_get_network(&gw_addr, &dhcp->offered_ip_addr, &sn_mask); - /* use first host address on network as gateway */ - ip4_addr_set_u32(&gw_addr, ip4_addr_get_u32(&gw_addr) | PP_HTONL(0x00000001UL)); - } - -#if LWIP_DHCP_AUTOIP_COOP - if(dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_ON) { - autoip_stop(netif); - dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_OFF; - } -#endif /* LWIP_DHCP_AUTOIP_COOP */ - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_bind(): IP: 0x%08"X32_F"\n", - ip4_addr_get_u32(&dhcp->offered_ip_addr))); - netif_set_ipaddr(netif, &dhcp->offered_ip_addr); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_bind(): SN: 0x%08"X32_F"\n", - ip4_addr_get_u32(&sn_mask))); - netif_set_netmask(netif, &sn_mask); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_bind(): GW: 0x%08"X32_F"\n", - ip4_addr_get_u32(&gw_addr))); - netif_set_gw(netif, &gw_addr); - /* bring the interface up */ - netif_set_up(netif); - /* netif is now bound to DHCP leased address */ - dhcp_set_state(dhcp, DHCP_BOUND); -} - -/** - * Renew an existing DHCP lease at the involved DHCP server. - * - * @param netif network interface which must renew its lease - */ -err_t -dhcp_renew(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - err_t result; - u16_t msecs; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_renew()\n")); - dhcp_set_state(dhcp, DHCP_RENEWING); - - /* create and initialize the DHCP message header */ - result = dhcp_create_msg(netif, dhcp, DHCP_REQUEST); - if (result == ERR_OK) { - dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); - dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); - -#if 0 - dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); - dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); -#endif - -#if 0 - dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4); - dhcp_option_long(dhcp, ntohl(dhcp->server_ip_addr.addr)); -#endif - -#if LWIP_NETIF_HOSTNAME - dhcp_option_hostname(dhcp, netif); -#endif /* LWIP_NETIF_HOSTNAME */ - - /* append DHCP message trailer */ - dhcp_option_trailer(dhcp); - - pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); - - udp_sendto_if(dhcp->pcb, dhcp->p_out, &dhcp->server_ip_addr, DHCP_SERVER_PORT, netif); - dhcp_delete_msg(dhcp); - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_renew: RENEWING\n")); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_renew: could not allocate DHCP request\n")); - } - dhcp->tries++; - /* back-off on retries, but to a maximum of 20 seconds */ - msecs = dhcp->tries < 10 ? dhcp->tries * 2000 : 20 * 1000; - dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_renew(): set request timeout %"U16_F" msecs\n", msecs)); - return result; -} - -/** - * Rebind with a DHCP server for an existing DHCP lease. - * - * @param netif network interface which must rebind with a DHCP server - */ -static err_t -dhcp_rebind(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - err_t result; - u16_t msecs; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind()\n")); - dhcp_set_state(dhcp, DHCP_REBINDING); - - /* create and initialize the DHCP message header */ - result = dhcp_create_msg(netif, dhcp, DHCP_REQUEST); - if (result == ERR_OK) { - dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); - dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); - -#if LWIP_NETIF_HOSTNAME - dhcp_option_hostname(dhcp, netif); -#endif /* LWIP_NETIF_HOSTNAME */ - -#if 0 - dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); - dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); - - dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4); - dhcp_option_long(dhcp, ntohl(dhcp->server_ip_addr.addr)); -#endif - - dhcp_option_trailer(dhcp); - - pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); - - /* broadcast to server */ - udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); - dhcp_delete_msg(dhcp); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind: REBINDING\n")); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_rebind: could not allocate DHCP request\n")); - } - dhcp->tries++; - msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000; - dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind(): set request timeout %"U16_F" msecs\n", msecs)); - return result; -} - -/** - * Enter REBOOTING state to verify an existing lease - * - * @param netif network interface which must reboot - */ -static err_t -dhcp_reboot(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - err_t result; - u16_t msecs; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot()\n")); - dhcp_set_state(dhcp, DHCP_REBOOTING); - - /* create and initialize the DHCP message header */ - result = dhcp_create_msg(netif, dhcp, DHCP_REQUEST); - if (result == ERR_OK) { - dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); - dhcp_option_short(dhcp, 576); - - dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); - dhcp_option_long(dhcp, ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr))); - - dhcp_option_trailer(dhcp); - - pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); - - /* broadcast to server */ - udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); - dhcp_delete_msg(dhcp); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot: REBOOTING\n")); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_reboot: could not allocate DHCP request\n")); - } - dhcp->tries++; - msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000; - dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot(): set request timeout %"U16_F" msecs\n", msecs)); - return result; -} - - -/** - * Release a DHCP lease. - * - * @param netif network interface which must release its lease - */ -err_t -dhcp_release(struct netif *netif) -{ - struct dhcp *dhcp = netif->dhcp; - err_t result; - u16_t msecs; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_release()\n")); - if (dhcp == NULL) { - return ERR_ARG; - } - - /* idle DHCP client */ - dhcp_set_state(dhcp, DHCP_OFF); - /* clean old DHCP offer */ - ip_addr_set_zero(&dhcp->server_ip_addr); - ip_addr_set_zero(&dhcp->offered_ip_addr); - ip_addr_set_zero(&dhcp->offered_sn_mask); - ip_addr_set_zero(&dhcp->offered_gw_addr); -#if LWIP_DHCP_BOOTP_FILE - ip_addr_set_zero(&dhcp->offered_si_addr); -#endif /* LWIP_DHCP_BOOTP_FILE */ - dhcp->offered_t0_lease = dhcp->offered_t1_renew = dhcp->offered_t2_rebind = 0; - - /* create and initialize the DHCP message header */ - result = dhcp_create_msg(netif, dhcp, DHCP_RELEASE); - if (result == ERR_OK) { - dhcp_option_trailer(dhcp); - - pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); - - udp_sendto_if(dhcp->pcb, dhcp->p_out, &dhcp->server_ip_addr, DHCP_SERVER_PORT, netif); - dhcp_delete_msg(dhcp); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_release: RELEASED, DHCP_OFF\n")); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_release: could not allocate DHCP request\n")); - } - dhcp->tries++; - msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000; - dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_release(): set request timeout %"U16_F" msecs\n", msecs)); - /* bring the interface down */ - netif_set_down(netif); - /* remove IP address from interface */ - netif_set_ipaddr(netif, IP_ADDR_ANY); - netif_set_gw(netif, IP_ADDR_ANY); - netif_set_netmask(netif, IP_ADDR_ANY); - - return result; -} - -/** - * Remove the DHCP client from the interface. - * - * @param netif The network interface to stop DHCP on - */ -void -dhcp_stop(struct netif *netif) -{ - struct dhcp *dhcp; - LWIP_ERROR("dhcp_stop: netif != NULL", (netif != NULL), return;); - dhcp = netif->dhcp; - /* Remove the flag that says this netif is handled by DHCP. */ - netif->flags &= ~NETIF_FLAG_DHCP; - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_stop()\n")); - /* netif is DHCP configured? */ - if (dhcp != NULL) { -#if LWIP_DHCP_AUTOIP_COOP - if(dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_ON) { - autoip_stop(netif); - dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_OFF; - } -#endif /* LWIP_DHCP_AUTOIP_COOP */ - - if (dhcp->pcb != NULL) { - udp_remove(dhcp->pcb); - dhcp->pcb = NULL; - } - LWIP_ASSERT("reply wasn't freed", dhcp->msg_in == NULL); - dhcp_set_state(dhcp, DHCP_OFF); - } -} - -/* - * Set the DHCP state of a DHCP client. - * - * If the state changed, reset the number of tries. - */ -static void -dhcp_set_state(struct dhcp *dhcp, u8_t new_state) -{ - if (new_state != dhcp->state) { - dhcp->state = new_state; - dhcp->tries = 0; - dhcp->request_timeout = 0; - } -} - -/* - * Concatenate an option type and length field to the outgoing - * DHCP message. - * - */ -static void -dhcp_option(struct dhcp *dhcp, u8_t option_type, u8_t option_len) -{ - LWIP_ASSERT("dhcp_option: dhcp->options_out_len + 2 + option_len <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 2U + option_len <= DHCP_OPTIONS_LEN); - dhcp->msg_out->options[dhcp->options_out_len++] = option_type; - dhcp->msg_out->options[dhcp->options_out_len++] = option_len; -} -/* - * Concatenate a single byte to the outgoing DHCP message. - * - */ -static void -dhcp_option_byte(struct dhcp *dhcp, u8_t value) -{ - LWIP_ASSERT("dhcp_option_byte: dhcp->options_out_len < DHCP_OPTIONS_LEN", dhcp->options_out_len < DHCP_OPTIONS_LEN); - dhcp->msg_out->options[dhcp->options_out_len++] = value; -} - -static void -dhcp_option_short(struct dhcp *dhcp, u16_t value) -{ - LWIP_ASSERT("dhcp_option_short: dhcp->options_out_len + 2 <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 2U <= DHCP_OPTIONS_LEN); - dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0xff00U) >> 8); - dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t) (value & 0x00ffU); -} - -static void -dhcp_option_long(struct dhcp *dhcp, u32_t value) -{ - LWIP_ASSERT("dhcp_option_long: dhcp->options_out_len + 4 <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 4U <= DHCP_OPTIONS_LEN); - dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0xff000000UL) >> 24); - dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0x00ff0000UL) >> 16); - dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0x0000ff00UL) >> 8); - dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0x000000ffUL)); -} - -#if LWIP_NETIF_HOSTNAME -static void -dhcp_option_hostname(struct dhcp *dhcp, struct netif *netif) -{ - if (netif->hostname != NULL) { - size_t namelen = strlen(netif->hostname); - if (namelen > 0) { - u8_t len; - const char *p = netif->hostname; - /* Shrink len to available bytes (need 2 bytes for OPTION_HOSTNAME - and 1 byte for trailer) */ - size_t available = DHCP_OPTIONS_LEN - dhcp->options_out_len - 3; - LWIP_ASSERT("DHCP: hostname is too long!", namelen <= available); - len = LWIP_MIN(namelen, available); - dhcp_option(dhcp, DHCP_OPTION_HOSTNAME, len); - while (len--) { - dhcp_option_byte(dhcp, *p++); - } - } - } -} -#endif /* LWIP_NETIF_HOSTNAME */ - -/** - * Extract the DHCP message and the DHCP options. - * - * Extract the DHCP message and the DHCP options, each into a contiguous - * piece of memory. As a DHCP message is variable sized by its options, - * and also allows overriding some fields for options, the easy approach - * is to first unfold the options into a conitguous piece of memory, and - * use that further on. - * - */ -static err_t -dhcp_parse_reply(struct dhcp *dhcp, struct pbuf *p) -{ - u8_t *options; - u16_t offset; - u16_t offset_max; - u16_t options_idx; - u16_t options_idx_max; - struct pbuf *q; - int parse_file_as_options = 0; - int parse_sname_as_options = 0; - - /* clear received options */ - dhcp_clear_all_options(dhcp); - /* check that beginning of dhcp_msg (up to and including chaddr) is in first pbuf */ - if (p->len < DHCP_SNAME_OFS) { - return ERR_BUF; - } - dhcp->msg_in = (struct dhcp_msg *)p->payload; -#if LWIP_DHCP_BOOTP_FILE - /* clear boot file name */ - dhcp->boot_file_name[0] = 0; -#endif /* LWIP_DHCP_BOOTP_FILE */ - - /* parse options */ - - /* start with options field */ - options_idx = DHCP_OPTIONS_OFS; - /* parse options to the end of the received packet */ - options_idx_max = p->tot_len; -again: - q = p; - while((q != NULL) && (options_idx >= q->len)) { - options_idx -= q->len; - options_idx_max -= q->len; - q = q->next; - } - if (q == NULL) { - return ERR_BUF; - } - offset = options_idx; - offset_max = options_idx_max; - options = (u8_t*)q->payload; - /* at least 1 byte to read and no end marker, then at least 3 bytes to read? */ - while((q != NULL) && (options[offset] != DHCP_OPTION_END) && (offset < offset_max)) { - u8_t op = options[offset]; - u8_t len; - u8_t decode_len = 0; - int decode_idx = -1; - u16_t val_offset = offset + 2; - /* len byte might be in the next pbuf */ - if (offset + 1 < q->len) { - len = options[offset + 1]; - } else { - len = (q->next != NULL ? ((u8_t*)q->next->payload)[0] : 0); - } - /* LWIP_DEBUGF(DHCP_DEBUG, ("msg_offset=%"U16_F", q->len=%"U16_F, msg_offset, q->len)); */ - decode_len = len; - switch(op) { - /* case(DHCP_OPTION_END): handled above */ - case(DHCP_OPTION_PAD): - /* special option: no len encoded */ - decode_len = len = 0; - /* will be increased below */ - offset--; - break; - case(DHCP_OPTION_SUBNET_MASK): - LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); - decode_idx = DHCP_OPTION_IDX_SUBNET_MASK; - break; - case(DHCP_OPTION_ROUTER): - decode_len = 4; /* only copy the first given router */ - LWIP_ERROR("len >= decode_len", len >= decode_len, return ERR_VAL;); - decode_idx = DHCP_OPTION_IDX_ROUTER; - break; - case(DHCP_OPTION_DNS_SERVER): - /* special case: there might be more than one server */ - LWIP_ERROR("len % 4 == 0", len % 4 == 0, return ERR_VAL;); - /* limit number of DNS servers */ - decode_len = LWIP_MIN(len, 4 * DNS_MAX_SERVERS); - LWIP_ERROR("len >= decode_len", len >= decode_len, return ERR_VAL;); - decode_idx = DHCP_OPTION_IDX_DNS_SERVER; - break; - case(DHCP_OPTION_LEASE_TIME): - LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); - decode_idx = DHCP_OPTION_IDX_LEASE_TIME; - break; - case(DHCP_OPTION_OVERLOAD): - LWIP_ERROR("len == 1", len == 1, return ERR_VAL;); - decode_idx = DHCP_OPTION_IDX_OVERLOAD; - break; - case(DHCP_OPTION_MESSAGE_TYPE): - LWIP_ERROR("len == 1", len == 1, return ERR_VAL;); - decode_idx = DHCP_OPTION_IDX_MSG_TYPE; - break; - case(DHCP_OPTION_SERVER_ID): - LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); - decode_idx = DHCP_OPTION_IDX_SERVER_ID; - break; - case(DHCP_OPTION_T1): - LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); - decode_idx = DHCP_OPTION_IDX_T1; - break; - case(DHCP_OPTION_T2): - LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); - decode_idx = DHCP_OPTION_IDX_T2; - break; - default: - decode_len = 0; - LWIP_DEBUGF(DHCP_DEBUG, ("skipping option %"U16_F" in options\n", op)); - break; - } - offset += len + 2; - if (decode_len > 0) { - u32_t value = 0; - u16_t copy_len; -decode_next: - LWIP_ASSERT("check decode_idx", decode_idx >= 0 && decode_idx < DHCP_OPTION_IDX_MAX); - if (!dhcp_option_given(dhcp, decode_idx)) { - copy_len = LWIP_MIN(decode_len, 4); - pbuf_copy_partial(q, &value, copy_len, val_offset); - if (decode_len > 4) { - /* decode more than one u32_t */ - LWIP_ERROR("decode_len % 4 == 0", decode_len % 4 == 0, return ERR_VAL;); - dhcp_got_option(dhcp, decode_idx); - dhcp_set_option_value(dhcp, decode_idx, htonl(value)); - decode_len -= 4; - val_offset += 4; - decode_idx++; - goto decode_next; - } else if (decode_len == 4) { - value = ntohl(value); - } else { - LWIP_ERROR("invalid decode_len", decode_len == 1, return ERR_VAL;); - value = ((u8_t*)&value)[0]; - } - dhcp_got_option(dhcp, decode_idx); - dhcp_set_option_value(dhcp, decode_idx, value); - } - } - if (offset >= q->len) { - offset -= q->len; - offset_max -= q->len; - if ((offset < offset_max) && offset_max) { - q = q->next; - LWIP_ASSERT("next pbuf was null", q); - options = (u8_t*)q->payload; - } else { - /* We've run out of bytes, probably no end marker. Don't proceed. */ - break; - } - } - } - /* is this an overloaded message? */ - if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_OVERLOAD)) { - u32_t overload = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_OVERLOAD); - dhcp_clear_option(dhcp, DHCP_OPTION_IDX_OVERLOAD); - if (overload == DHCP_OVERLOAD_FILE) { - parse_file_as_options = 1; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded file field\n")); - } else if (overload == DHCP_OVERLOAD_SNAME) { - parse_sname_as_options = 1; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded sname field\n")); - } else if (overload == DHCP_OVERLOAD_SNAME_FILE) { - parse_sname_as_options = 1; - parse_file_as_options = 1; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded sname and file field\n")); - } else { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("invalid overload option: %d\n", (int)overload)); - } -#if LWIP_DHCP_BOOTP_FILE - if (!parse_file_as_options) { - /* only do this for ACK messages */ - if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_MSG_TYPE) && - (dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_MSG_TYPE) == DHCP_ACK)) - /* copy bootp file name, don't care for sname (server hostname) */ - pbuf_copy_partial(p, dhcp->boot_file_name, DHCP_FILE_LEN-1, DHCP_FILE_OFS); - /* make sure the string is really NULL-terminated */ - dhcp->boot_file_name[DHCP_FILE_LEN-1] = 0; - } -#endif /* LWIP_DHCP_BOOTP_FILE */ - } - if (parse_file_as_options) { - /* if both are overloaded, parse file first and then sname (RFC 2131 ch. 4.1) */ - parse_file_as_options = 0; - options_idx = DHCP_FILE_OFS; - options_idx_max = DHCP_FILE_OFS + DHCP_FILE_LEN; - goto again; - } else if (parse_sname_as_options) { - parse_sname_as_options = 0; - options_idx = DHCP_SNAME_OFS; - options_idx_max = DHCP_SNAME_OFS + DHCP_SNAME_LEN; - goto again; - } - return ERR_OK; -} - -/** - * If an incoming DHCP message is in response to us, then trigger the state machine - */ -static void -dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port) -{ - struct netif *netif = (struct netif *)arg; - struct dhcp *dhcp = netif->dhcp; - struct dhcp_msg *reply_msg = (struct dhcp_msg *)p->payload; - u8_t msg_type; - u8_t i; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_recv(pbuf = %p) from DHCP server %"U16_F".%"U16_F".%"U16_F".%"U16_F" port %"U16_F"\n", (void*)p, - ip4_addr1_16(addr), ip4_addr2_16(addr), ip4_addr3_16(addr), ip4_addr4_16(addr), port)); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("pbuf->len = %"U16_F"\n", p->len)); - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("pbuf->tot_len = %"U16_F"\n", p->tot_len)); - /* prevent warnings about unused arguments */ - LWIP_UNUSED_ARG(pcb); - LWIP_UNUSED_ARG(addr); - LWIP_UNUSED_ARG(port); - - LWIP_ASSERT("reply wasn't freed", dhcp->msg_in == NULL); - - if (p->len < DHCP_MIN_REPLY_LEN) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("DHCP reply message or pbuf too short\n")); - goto free_pbuf_and_return; - } - - if (reply_msg->op != DHCP_BOOTREPLY) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("not a DHCP reply message, but type %"U16_F"\n", (u16_t)reply_msg->op)); - goto free_pbuf_and_return; - } - /* iterate through hardware address and match against DHCP message */ - for (i = 0; i < netif->hwaddr_len; i++) { - if (netif->hwaddr[i] != reply_msg->chaddr[i]) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, - ("netif->hwaddr[%"U16_F"]==%02"X16_F" != reply_msg->chaddr[%"U16_F"]==%02"X16_F"\n", - (u16_t)i, (u16_t)netif->hwaddr[i], (u16_t)i, (u16_t)reply_msg->chaddr[i])); - goto free_pbuf_and_return; - } - } - /* match transaction ID against what we expected */ - if (ntohl(reply_msg->xid) != dhcp->xid) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, - ("transaction id mismatch reply_msg->xid(%"X32_F")!=dhcp->xid(%"X32_F")\n",ntohl(reply_msg->xid),dhcp->xid)); - goto free_pbuf_and_return; - } - /* option fields could be unfold? */ - if (dhcp_parse_reply(dhcp, p) != ERR_OK) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, - ("problem unfolding DHCP message - too short on memory?\n")); - goto free_pbuf_and_return; - } - - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("searching DHCP_OPTION_MESSAGE_TYPE\n")); - /* obtain pointer to DHCP message type */ - if (!dhcp_option_given(dhcp, DHCP_OPTION_IDX_MSG_TYPE)) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("DHCP_OPTION_MESSAGE_TYPE option not found\n")); - goto free_pbuf_and_return; - } - - /* read DHCP message type */ - msg_type = (u8_t)dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_MSG_TYPE); - /* message type is DHCP ACK? */ - if (msg_type == DHCP_ACK) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_ACK received\n")); - /* in requesting state? */ - if (dhcp->state == DHCP_REQUESTING) { - dhcp_handle_ack(netif); -#if DHCP_DOES_ARP_CHECK - /* check if the acknowledged lease address is already in use */ - dhcp_check(netif); -#else - /* bind interface to the acknowledged lease address */ - dhcp_bind(netif); -#endif - } - /* already bound to the given lease address? */ - else if ((dhcp->state == DHCP_REBOOTING) || (dhcp->state == DHCP_REBINDING) || (dhcp->state == DHCP_RENEWING)) { - dhcp_bind(netif); - } - } - /* received a DHCP_NAK in appropriate state? */ - else if ((msg_type == DHCP_NAK) && - ((dhcp->state == DHCP_REBOOTING) || (dhcp->state == DHCP_REQUESTING) || - (dhcp->state == DHCP_REBINDING) || (dhcp->state == DHCP_RENEWING ))) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_NAK received\n")); - dhcp_handle_nak(netif); - } - /* received a DHCP_OFFER in DHCP_SELECTING state? */ - else if ((msg_type == DHCP_OFFER) && (dhcp->state == DHCP_SELECTING)) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_OFFER received in DHCP_SELECTING state\n")); - dhcp->request_timeout = 0; - /* remember offered lease */ - dhcp_handle_offer(netif); - } -free_pbuf_and_return: - dhcp->msg_in = NULL; - pbuf_free(p); -} - -/** - * Create a DHCP request, fill in common headers - * - * @param netif the netif under DHCP control - * @param dhcp dhcp control struct - * @param message_type message type of the request - */ -static err_t -dhcp_create_msg(struct netif *netif, struct dhcp *dhcp, u8_t message_type) -{ - u16_t i; -#ifndef DHCP_GLOBAL_XID - /** default global transaction identifier starting value (easy to match - * with a packet analyser). We simply increment for each new request. - * Predefine DHCP_GLOBAL_XID to a better value or a function call to generate one - * at runtime, any supporting function prototypes can be defined in DHCP_GLOBAL_XID_HEADER */ -#if DHCP_CREATE_RAND_XID && defined(LWIP_RAND) - static u32_t xid; -#else /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */ - static u32_t xid = 0xABCD0000; -#endif /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */ -#else - if (!xid_initialised) { - xid = DHCP_GLOBAL_XID; - xid_initialised = !xid_initialised; - } -#endif - LWIP_ERROR("dhcp_create_msg: netif != NULL", (netif != NULL), return ERR_ARG;); - LWIP_ERROR("dhcp_create_msg: dhcp != NULL", (dhcp != NULL), return ERR_VAL;); - LWIP_ASSERT("dhcp_create_msg: dhcp->p_out == NULL", dhcp->p_out == NULL); - LWIP_ASSERT("dhcp_create_msg: dhcp->msg_out == NULL", dhcp->msg_out == NULL); - dhcp->p_out = pbuf_alloc(PBUF_TRANSPORT, sizeof(struct dhcp_msg), PBUF_RAM); - if (dhcp->p_out == NULL) { - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, - ("dhcp_create_msg(): could not allocate pbuf\n")); - return ERR_MEM; - } - LWIP_ASSERT("dhcp_create_msg: check that first pbuf can hold struct dhcp_msg", - (dhcp->p_out->len >= sizeof(struct dhcp_msg))); - - /* reuse transaction identifier in retransmissions */ - if (dhcp->tries == 0) { -#if DHCP_CREATE_RAND_XID && defined(LWIP_RAND) - xid = LWIP_RAND(); -#else /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */ - xid++; -#endif /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */ - } - dhcp->xid = xid; - LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, - ("transaction id xid(%"X32_F")\n", xid)); - - dhcp->msg_out = (struct dhcp_msg *)dhcp->p_out->payload; - - dhcp->msg_out->op = DHCP_BOOTREQUEST; - /* TODO: make link layer independent */ - dhcp->msg_out->htype = DHCP_HTYPE_ETH; - dhcp->msg_out->hlen = netif->hwaddr_len; - dhcp->msg_out->hops = 0; - dhcp->msg_out->xid = htonl(dhcp->xid); - dhcp->msg_out->secs = 0; - /* we don't need the broadcast flag since we can receive unicast traffic - before being fully configured! */ - dhcp->msg_out->flags = 0; - ip_addr_set_zero(&dhcp->msg_out->ciaddr); - /* set ciaddr to netif->ip_addr based on message_type and state */ - if ((message_type == DHCP_INFORM) || (message_type == DHCP_DECLINE) || - ((message_type == DHCP_REQUEST) && /* DHCP_BOUND not used for sending! */ - ((dhcp->state==DHCP_RENEWING) || dhcp->state==DHCP_REBINDING))) { - ip_addr_copy(dhcp->msg_out->ciaddr, netif->ip_addr); - } - ip_addr_set_zero(&dhcp->msg_out->yiaddr); - ip_addr_set_zero(&dhcp->msg_out->siaddr); - ip_addr_set_zero(&dhcp->msg_out->giaddr); - for (i = 0; i < DHCP_CHADDR_LEN; i++) { - /* copy netif hardware address, pad with zeroes */ - dhcp->msg_out->chaddr[i] = (i < netif->hwaddr_len && i < NETIF_MAX_HWADDR_LEN) ? netif->hwaddr[i] : 0/* pad byte*/; - } - for (i = 0; i < DHCP_SNAME_LEN; i++) { - dhcp->msg_out->sname[i] = 0; - } - for (i = 0; i < DHCP_FILE_LEN; i++) { - dhcp->msg_out->file[i] = 0; - } - dhcp->msg_out->cookie = PP_HTONL(DHCP_MAGIC_COOKIE); - dhcp->options_out_len = 0; - /* fill options field with an incrementing array (for debugging purposes) */ - for (i = 0; i < DHCP_OPTIONS_LEN; i++) { - dhcp->msg_out->options[i] = (u8_t)i; /* for debugging only, no matter if truncated */ - } - /* Add option MESSAGE_TYPE */ - dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); - dhcp_option_byte(dhcp, message_type); - return ERR_OK; -} - -/** - * Free previously allocated memory used to send a DHCP request. - * - * @param dhcp the dhcp struct to free the request from - */ -static void -dhcp_delete_msg(struct dhcp *dhcp) -{ - LWIP_ERROR("dhcp_delete_msg: dhcp != NULL", (dhcp != NULL), return;); - LWIP_ASSERT("dhcp_delete_msg: dhcp->p_out != NULL", dhcp->p_out != NULL); - LWIP_ASSERT("dhcp_delete_msg: dhcp->msg_out != NULL", dhcp->msg_out != NULL); - if (dhcp->p_out != NULL) { - pbuf_free(dhcp->p_out); - } - dhcp->p_out = NULL; - dhcp->msg_out = NULL; -} - -/** - * Add a DHCP message trailer - * - * Adds the END option to the DHCP message, and if - * necessary, up to three padding bytes. - * - * @param dhcp DHCP state structure - */ -static void -dhcp_option_trailer(struct dhcp *dhcp) -{ - LWIP_ERROR("dhcp_option_trailer: dhcp != NULL", (dhcp != NULL), return;); - LWIP_ASSERT("dhcp_option_trailer: dhcp->msg_out != NULL\n", dhcp->msg_out != NULL); - LWIP_ASSERT("dhcp_option_trailer: dhcp->options_out_len < DHCP_OPTIONS_LEN\n", dhcp->options_out_len < DHCP_OPTIONS_LEN); - dhcp->msg_out->options[dhcp->options_out_len++] = DHCP_OPTION_END; - /* packet is too small, or not 4 byte aligned? */ - while (((dhcp->options_out_len < DHCP_MIN_OPTIONS_LEN) || (dhcp->options_out_len & 3)) && - (dhcp->options_out_len < DHCP_OPTIONS_LEN)) { - /* add a fill/padding byte */ - dhcp->msg_out->options[dhcp->options_out_len++] = 0; - } -} - -#endif /* LWIP_DHCP */ +/** + * @file + * Dynamic Host Configuration Protocol client + * + */ + +/* + * + * Copyright (c) 2001-2004 Leon Woestenberg + * Copyright (c) 2001-2004 Axon Digital Design B.V., The Netherlands. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is a contribution to the lwIP TCP/IP stack. + * The Swedish Institute of Computer Science and Adam Dunkels + * are specifically granted permission to redistribute this + * source code. + * + * Author: Leon Woestenberg + * + * This is a DHCP client for the lwIP TCP/IP stack. It aims to conform + * with RFC 2131 and RFC 2132. + * + * TODO: + * - Support for interfaces other than Ethernet (SLIP, PPP, ...) + * + * Please coordinate changes and requests with Leon Woestenberg + * + * + * Integration with your code: + * + * In lwip/dhcp.h + * #define DHCP_COARSE_TIMER_SECS (recommended 60 which is a minute) + * #define DHCP_FINE_TIMER_MSECS (recommended 500 which equals TCP coarse timer) + * + * Then have your application call dhcp_coarse_tmr() and + * dhcp_fine_tmr() on the defined intervals. + * + * dhcp_start(struct netif *netif); + * starts a DHCP client instance which configures the interface by + * obtaining an IP address lease and maintaining it. + * + * Use dhcp_release(netif) to end the lease and use dhcp_stop(netif) + * to remove the DHCP client. + * + */ + +#include "lwip/opt.h" + +#if LWIP_DHCP /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/stats.h" +#include "lwip/mem.h" +#include "lwip/udp.h" +#include "lwip/ip_addr.h" +#include "lwip/netif.h" +#include "lwip/def.h" +#include "lwip/dhcp.h" +#include "lwip/autoip.h" +#include "lwip/dns.h" +#include "netif/etharp.h" + +#include + +/** DHCP_CREATE_RAND_XID: if this is set to 1, the xid is created using + * LWIP_RAND() (this overrides DHCP_GLOBAL_XID) + */ +#ifndef DHCP_CREATE_RAND_XID +#define DHCP_CREATE_RAND_XID 1 +#endif + +/** Default for DHCP_GLOBAL_XID is 0xABCD0000 + * This can be changed by defining DHCP_GLOBAL_XID and DHCP_GLOBAL_XID_HEADER, e.g. + * #define DHCP_GLOBAL_XID_HEADER "stdlib.h" + * #define DHCP_GLOBAL_XID rand() + */ +#ifdef DHCP_GLOBAL_XID_HEADER +#include DHCP_GLOBAL_XID_HEADER /* include optional starting XID generation prototypes */ +#endif + +/** DHCP_OPTION_MAX_MSG_SIZE is set to the MTU + * MTU is checked to be big enough in dhcp_start */ +#define DHCP_MAX_MSG_LEN(netif) (netif->mtu) +#define DHCP_MAX_MSG_LEN_MIN_REQUIRED 576 +/** Minimum length for reply before packet is parsed */ +#define DHCP_MIN_REPLY_LEN 44 + +#define REBOOT_TRIES 2 + +/** Option handling: options are parsed in dhcp_parse_reply + * and saved in an array where other functions can load them from. + * This might be moved into the struct dhcp (not necessarily since + * lwIP is single-threaded and the array is only used while in recv + * callback). */ +#define DHCP_OPTION_IDX_OVERLOAD 0 +#define DHCP_OPTION_IDX_MSG_TYPE 1 +#define DHCP_OPTION_IDX_SERVER_ID 2 +#define DHCP_OPTION_IDX_LEASE_TIME 3 +#define DHCP_OPTION_IDX_T1 4 +#define DHCP_OPTION_IDX_T2 5 +#define DHCP_OPTION_IDX_SUBNET_MASK 6 +#define DHCP_OPTION_IDX_ROUTER 7 +#define DHCP_OPTION_IDX_DNS_SERVER 8 +#define DHCP_OPTION_IDX_MAX (DHCP_OPTION_IDX_DNS_SERVER + DNS_MAX_SERVERS) + +/** Holds the decoded option values, only valid while in dhcp_recv. + @todo: move this into struct dhcp? */ +u32_t dhcp_rx_options_val[DHCP_OPTION_IDX_MAX]; +/** Holds a flag which option was received and is contained in dhcp_rx_options_val, + only valid while in dhcp_recv. + @todo: move this into struct dhcp? */ +u8_t dhcp_rx_options_given[DHCP_OPTION_IDX_MAX]; + +#ifdef DHCP_GLOBAL_XID +static u32_t xid; +static u8_t xid_initialised; +#endif /* DHCP_GLOBAL_XID */ + +#define dhcp_option_given(dhcp, idx) (dhcp_rx_options_given[idx] != 0) +#define dhcp_got_option(dhcp, idx) (dhcp_rx_options_given[idx] = 1) +#define dhcp_clear_option(dhcp, idx) (dhcp_rx_options_given[idx] = 0) +#define dhcp_clear_all_options(dhcp) (memset(dhcp_rx_options_given, 0, sizeof(dhcp_rx_options_given))) +#define dhcp_get_option_value(dhcp, idx) (dhcp_rx_options_val[idx]) +#define dhcp_set_option_value(dhcp, idx, val) (dhcp_rx_options_val[idx] = (val)) + + +/* DHCP client state machine functions */ +static err_t dhcp_discover(struct netif *netif); +static err_t dhcp_select(struct netif *netif); +static void dhcp_bind(struct netif *netif); +#if DHCP_DOES_ARP_CHECK +static err_t dhcp_decline(struct netif *netif); +#endif /* DHCP_DOES_ARP_CHECK */ +static err_t dhcp_rebind(struct netif *netif); +static err_t dhcp_reboot(struct netif *netif); +static void dhcp_set_state(struct dhcp *dhcp, u8_t new_state); + +/* receive, unfold, parse and free incoming messages */ +static void dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port); + +/* set the DHCP timers */ +static void dhcp_timeout(struct netif *netif); +static void dhcp_t1_timeout(struct netif *netif); +static void dhcp_t2_timeout(struct netif *netif); + +/* build outgoing messages */ +/* create a DHCP message, fill in common headers */ +static err_t dhcp_create_msg(struct netif *netif, struct dhcp *dhcp, u8_t message_type); +/* free a DHCP request */ +static void dhcp_delete_msg(struct dhcp *dhcp); +/* add a DHCP option (type, then length in bytes) */ +static void dhcp_option(struct dhcp *dhcp, u8_t option_type, u8_t option_len); +/* add option values */ +static void dhcp_option_byte(struct dhcp *dhcp, u8_t value); +static void dhcp_option_short(struct dhcp *dhcp, u16_t value); +static void dhcp_option_long(struct dhcp *dhcp, u32_t value); +#if LWIP_NETIF_HOSTNAME +static void dhcp_option_hostname(struct dhcp *dhcp, struct netif *netif); +#endif /* LWIP_NETIF_HOSTNAME */ +/* always add the DHCP options trailer to end and pad */ +static void dhcp_option_trailer(struct dhcp *dhcp); + +/** + * Back-off the DHCP client (because of a received NAK response). + * + * Back-off the DHCP client because of a received NAK. Receiving a + * NAK means the client asked for something non-sensible, for + * example when it tries to renew a lease obtained on another network. + * + * We clear any existing set IP address and restart DHCP negotiation + * afresh (as per RFC2131 3.2.3). + * + * @param netif the netif under DHCP control + */ +static void +dhcp_handle_nak(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_nak(netif=%p) %c%c%"U16_F"\n", + (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + /* Set the interface down since the address must no longer be used, as per RFC2131 */ + netif_set_down(netif); + /* remove IP address from interface */ + netif_set_ipaddr(netif, IP_ADDR_ANY); + netif_set_gw(netif, IP_ADDR_ANY); + netif_set_netmask(netif, IP_ADDR_ANY); + /* Change to a defined state */ + dhcp_set_state(dhcp, DHCP_BACKING_OFF); + /* We can immediately restart discovery */ + dhcp_discover(netif); +} + +#if DHCP_DOES_ARP_CHECK +/** + * Checks if the offered IP address is already in use. + * + * It does so by sending an ARP request for the offered address and + * entering CHECKING state. If no ARP reply is received within a small + * interval, the address is assumed to be free for use by us. + * + * @param netif the netif under DHCP control + */ +static void +dhcp_check(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result; + u16_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_check(netif=%p) %c%c\n", (void *)netif, (s16_t)netif->name[0], + (s16_t)netif->name[1])); + dhcp_set_state(dhcp, DHCP_CHECKING); + /* create an ARP query for the offered IP address, expecting that no host + responds, as the IP address should not be in use. */ + result = etharp_query(netif, &dhcp->offered_ip_addr, NULL); + if (result != ERR_OK) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("dhcp_check: could not perform ARP query\n")); + } + dhcp->tries++; + msecs = 500; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_check(): set request timeout %"U16_F" msecs\n", msecs)); +} +#endif /* DHCP_DOES_ARP_CHECK */ + +/** + * Remember the configuration offered by a DHCP server. + * + * @param netif the netif under DHCP control + */ +static void +dhcp_handle_offer(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_offer(netif=%p) %c%c%"U16_F"\n", + (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + /* obtain the server address */ + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_SERVER_ID)) { + ip4_addr_set_u32(&dhcp->server_ip_addr, htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_SERVER_ID))); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_handle_offer(): server 0x%08"X32_F"\n", + ip4_addr_get_u32(&dhcp->server_ip_addr))); + /* remember offered address */ + ip_addr_copy(dhcp->offered_ip_addr, dhcp->msg_in->yiaddr); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_handle_offer(): offer for 0x%08"X32_F"\n", + ip4_addr_get_u32(&dhcp->offered_ip_addr))); + + dhcp_select(netif); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("dhcp_handle_offer(netif=%p) did not get server ID!\n", (void*)netif)); + } +} + +/** + * Select a DHCP server offer out of all offers. + * + * Simply select the first offer received. + * + * @param netif the netif under DHCP control + * @return lwIP specific error (see error.h) + */ +static err_t +dhcp_select(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result; + u16_t msecs; + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_select(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + dhcp_set_state(dhcp, DHCP_REQUESTING); + + /* create and initialize the DHCP message header */ + result = dhcp_create_msg(netif, dhcp, DHCP_REQUEST); + if (result == ERR_OK) { + dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); + + /* MUST request the offered IP address */ + dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); + dhcp_option_long(dhcp, ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr))); + + dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4); + dhcp_option_long(dhcp, ntohl(ip4_addr_get_u32(&dhcp->server_ip_addr))); + + dhcp_option(dhcp, DHCP_OPTION_PARAMETER_REQUEST_LIST, 4/*num options*/); + dhcp_option_byte(dhcp, DHCP_OPTION_SUBNET_MASK); + dhcp_option_byte(dhcp, DHCP_OPTION_ROUTER); + dhcp_option_byte(dhcp, DHCP_OPTION_BROADCAST); + dhcp_option_byte(dhcp, DHCP_OPTION_DNS_SERVER); + +#if LWIP_NETIF_HOSTNAME + dhcp_option_hostname(dhcp, netif); +#endif /* LWIP_NETIF_HOSTNAME */ + + dhcp_option_trailer(dhcp); + /* shrink the pbuf to the actual content length */ + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + /* send broadcast to any DHCP server */ + udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); + dhcp_delete_msg(dhcp); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_select: REQUESTING\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("dhcp_select: could not allocate DHCP request\n")); + } + dhcp->tries++; + msecs = (dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_select(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} + +/** + * The DHCP timer that checks for lease renewal/rebind timeouts. + */ +void +dhcp_coarse_tmr() +{ + struct netif *netif = netif_list; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_coarse_tmr()\n")); + /* iterate through all network interfaces */ + while (netif != NULL) { + /* only act on DHCP configured interfaces */ + if (netif->dhcp != NULL) { + /* timer is active (non zero), and triggers (zeroes) now? */ + if (netif->dhcp->t2_timeout-- == 1) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_coarse_tmr(): t2 timeout\n")); + /* this clients' rebind timeout triggered */ + dhcp_t2_timeout(netif); + /* timer is active (non zero), and triggers (zeroes) now */ + } else if (netif->dhcp->t1_timeout-- == 1) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_coarse_tmr(): t1 timeout\n")); + /* this clients' renewal timeout triggered */ + dhcp_t1_timeout(netif); + } + } + /* proceed to next netif */ + netif = netif->next; + } +} + +/** + * DHCP transaction timeout handling + * + * A DHCP server is expected to respond within a short period of time. + * This timer checks whether an outstanding DHCP request is timed out. + */ +void +dhcp_fine_tmr() +{ + struct netif *netif = netif_list; + /* loop through netif's */ + while (netif != NULL) { + /* only act on DHCP configured interfaces */ + if (netif->dhcp != NULL) { + /* timer is active (non zero), and is about to trigger now */ + if (netif->dhcp->request_timeout > 1) { + netif->dhcp->request_timeout--; + } + else if (netif->dhcp->request_timeout == 1) { + netif->dhcp->request_timeout--; + /* { netif->dhcp->request_timeout == 0 } */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_fine_tmr(): request timeout\n")); + /* this client's request timeout triggered */ + dhcp_timeout(netif); + } + } + /* proceed to next network interface */ + netif = netif->next; + } +} + +/** + * A DHCP negotiation transaction, or ARP request, has timed out. + * + * The timer that was started with the DHCP or ARP request has + * timed out, indicating no response was received in time. + * + * @param netif the netif under DHCP control + */ +static void +dhcp_timeout(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_timeout()\n")); + /* back-off period has passed, or server selection timed out */ + if ((dhcp->state == DHCP_BACKING_OFF) || (dhcp->state == DHCP_SELECTING)) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_timeout(): restarting discovery\n")); + dhcp_discover(netif); + /* receiving the requested lease timed out */ + } else if (dhcp->state == DHCP_REQUESTING) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REQUESTING, DHCP request timed out\n")); + if (dhcp->tries <= 5) { + dhcp_select(netif); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REQUESTING, releasing, restarting\n")); + dhcp_release(netif); + dhcp_discover(netif); + } +#if DHCP_DOES_ARP_CHECK + /* received no ARP reply for the offered address (which is good) */ + } else if (dhcp->state == DHCP_CHECKING) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): CHECKING, ARP request timed out\n")); + if (dhcp->tries <= 1) { + dhcp_check(netif); + /* no ARP replies on the offered address, + looks like the IP address is indeed free */ + } else { + /* bind the interface to the offered address */ + dhcp_bind(netif); + } +#endif /* DHCP_DOES_ARP_CHECK */ + } + /* did not get response to renew request? */ + else if (dhcp->state == DHCP_RENEWING) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): RENEWING, DHCP request timed out\n")); + /* just retry renewal */ + /* note that the rebind timer will eventually time-out if renew does not work */ + dhcp_renew(netif); + /* did not get response to rebind request? */ + } else if (dhcp->state == DHCP_REBINDING) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REBINDING, DHCP request timed out\n")); + if (dhcp->tries <= 8) { + dhcp_rebind(netif); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): RELEASING, DISCOVERING\n")); + dhcp_release(netif); + dhcp_discover(netif); + } + } else if (dhcp->state == DHCP_REBOOTING) { + if (dhcp->tries < REBOOT_TRIES) { + dhcp_reboot(netif); + } else { + dhcp_discover(netif); + } + } +} + +/** + * The renewal period has timed out. + * + * @param netif the netif under DHCP control + */ +static void +dhcp_t1_timeout(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_t1_timeout()\n")); + if ((dhcp->state == DHCP_REQUESTING) || (dhcp->state == DHCP_BOUND) || + (dhcp->state == DHCP_RENEWING)) { + /* just retry to renew - note that the rebind timer (t2) will + * eventually time-out if renew tries fail. */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("dhcp_t1_timeout(): must renew\n")); + /* This slightly different to RFC2131: DHCPREQUEST will be sent from state + DHCP_RENEWING, not DHCP_BOUND */ + dhcp_renew(netif); + } +} + +/** + * The rebind period has timed out. + * + * @param netif the netif under DHCP control + */ +static void +dhcp_t2_timeout(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_t2_timeout()\n")); + if ((dhcp->state == DHCP_REQUESTING) || (dhcp->state == DHCP_BOUND) || + (dhcp->state == DHCP_RENEWING)) { + /* just retry to rebind */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, + ("dhcp_t2_timeout(): must rebind\n")); + /* This slightly different to RFC2131: DHCPREQUEST will be sent from state + DHCP_REBINDING, not DHCP_BOUND */ + dhcp_rebind(netif); + } +} + +/** + * Handle a DHCP ACK packet + * + * @param netif the netif under DHCP control + */ +static void +dhcp_handle_ack(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; +#if LWIP_DNS + u8_t n; +#endif /* LWIP_DNS */ + + /* clear options we might not get from the ACK */ + ip_addr_set_zero(&dhcp->offered_sn_mask); + ip_addr_set_zero(&dhcp->offered_gw_addr); +#if LWIP_DHCP_BOOTP_FILE + ip_addr_set_zero(&dhcp->offered_si_addr); +#endif /* LWIP_DHCP_BOOTP_FILE */ + + /* lease time given? */ + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_LEASE_TIME)) { + /* remember offered lease time */ + dhcp->offered_t0_lease = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_LEASE_TIME); + } + /* renewal period given? */ + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_T1)) { + /* remember given renewal period */ + dhcp->offered_t1_renew = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_T1); + } else { + /* calculate safe periods for renewal */ + dhcp->offered_t1_renew = dhcp->offered_t0_lease / 2; + } + + /* renewal period given? */ + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_T2)) { + /* remember given rebind period */ + dhcp->offered_t2_rebind = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_T2); + } else { + /* calculate safe periods for rebinding */ + dhcp->offered_t2_rebind = dhcp->offered_t0_lease; + } + + /* (y)our internet address */ + ip_addr_copy(dhcp->offered_ip_addr, dhcp->msg_in->yiaddr); + +#if LWIP_DHCP_BOOTP_FILE + /* copy boot server address, + boot file name copied in dhcp_parse_reply if not overloaded */ + ip_addr_copy(dhcp->offered_si_addr, dhcp->msg_in->siaddr); +#endif /* LWIP_DHCP_BOOTP_FILE */ + + /* subnet mask given? */ + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_SUBNET_MASK)) { + /* remember given subnet mask */ + ip4_addr_set_u32(&dhcp->offered_sn_mask, htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_SUBNET_MASK))); + dhcp->subnet_mask_given = 1; + } else { + dhcp->subnet_mask_given = 0; + } + + /* gateway router */ + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_ROUTER)) { + ip4_addr_set_u32(&dhcp->offered_gw_addr, htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_ROUTER))); + } + +#if LWIP_DNS + /* DNS servers */ + for(n = 0; (n < DNS_MAX_SERVERS) && dhcp_option_given(dhcp, DHCP_OPTION_IDX_DNS_SERVER + n); n++) { + ip_addr_t dns_addr; + ip4_addr_set_u32(&dns_addr, htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_DNS_SERVER + n))); + dns_setserver(n, &dns_addr); + } +#endif /* LWIP_DNS */ +} + +/** Set a statically allocated struct dhcp to work with. + * Using this prevents dhcp_start to allocate it using mem_malloc. + * + * @param netif the netif for which to set the struct dhcp + * @param dhcp (uninitialised) dhcp struct allocated by the application + */ +void +dhcp_set_struct(struct netif *netif, struct dhcp *dhcp) +{ + LWIP_ASSERT("netif != NULL", netif != NULL); + LWIP_ASSERT("dhcp != NULL", dhcp != NULL); + LWIP_ASSERT("netif already has a struct dhcp set", netif->dhcp == NULL); + + /* clear data structure */ + memset(dhcp, 0, sizeof(struct dhcp)); + /* dhcp_set_state(&dhcp, DHCP_OFF); */ + netif->dhcp = dhcp; +} + +/** Removes a struct dhcp from a netif. + * + * ATTENTION: Only use this when not using dhcp_set_struct() to allocate the + * struct dhcp since the memory is passed back to the heap. + * + * @param netif the netif from which to remove the struct dhcp + */ +void dhcp_cleanup(struct netif *netif) +{ + LWIP_ASSERT("netif != NULL", netif != NULL); + + if (netif->dhcp != NULL) { + mem_free(netif->dhcp); + netif->dhcp = NULL; + } +} + +/** + * Start DHCP negotiation for a network interface. + * + * If no DHCP client instance was attached to this interface, + * a new client is created first. If a DHCP client instance + * was already present, it restarts negotiation. + * + * @param netif The lwIP network interface + * @return lwIP error code + * - ERR_OK - No error + * - ERR_MEM - Out of memory + */ +err_t +dhcp_start(struct netif *netif) +{ + struct dhcp *dhcp; + err_t result = ERR_OK; + + LWIP_ERROR("netif != NULL", (netif != NULL), return ERR_ARG;); + dhcp = netif->dhcp; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + /* Remove the flag that says this netif is handled by DHCP, + it is set when we succeeded starting. */ + netif->flags &= ~NETIF_FLAG_DHCP; + + /* check hwtype of the netif */ + if ((netif->flags & NETIF_FLAG_ETHARP) == 0) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): No ETHARP netif\n")); + return ERR_ARG; + } + + /* check MTU of the netif */ + if (netif->mtu < DHCP_MAX_MSG_LEN_MIN_REQUIRED) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): Cannot use this netif with DHCP: MTU is too small\n")); + return ERR_MEM; + } + + /* no DHCP client attached yet? */ + if (dhcp == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): starting new DHCP client\n")); + dhcp = (struct dhcp *)mem_malloc(sizeof(struct dhcp)); + if (dhcp == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): could not allocate dhcp\n")); + return ERR_MEM; + } + /* store this dhcp client in the netif */ + netif->dhcp = dhcp; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): allocated dhcp")); + /* already has DHCP client attached */ + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(): restarting DHCP configuration\n")); + if (dhcp->pcb != NULL) { + udp_remove(dhcp->pcb); + } + LWIP_ASSERT("pbuf p_out wasn't freed", dhcp->p_out == NULL); + LWIP_ASSERT("reply wasn't freed", dhcp->msg_in == NULL ); + } + + /* clear data structure */ + memset(dhcp, 0, sizeof(struct dhcp)); + /* dhcp_set_state(&dhcp, DHCP_OFF); */ + /* allocate UDP PCB */ + dhcp->pcb = udp_new(); + if (dhcp->pcb == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): could not obtain pcb\n")); + return ERR_MEM; + } + ip_set_option(dhcp->pcb, SOF_BROADCAST); + /* set up local and remote port for the pcb */ + udp_bind(dhcp->pcb, IP_ADDR_ANY, DHCP_CLIENT_PORT); + udp_connect(dhcp->pcb, IP_ADDR_ANY, DHCP_SERVER_PORT); + /* set up the recv callback and argument */ + udp_recv(dhcp->pcb, dhcp_recv, netif); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): starting DHCP configuration\n")); + /* (re)start the DHCP negotiation */ + result = dhcp_discover(netif); + if (result != ERR_OK) { + /* free resources allocated above */ + dhcp_stop(netif); + return ERR_MEM; + } + /* Set the flag that says this netif is handled by DHCP. */ + netif->flags |= NETIF_FLAG_DHCP; + return result; +} + +/** + * Inform a DHCP server of our manual configuration. + * + * This informs DHCP servers of our fixed IP address configuration + * by sending an INFORM message. It does not involve DHCP address + * configuration, it is just here to be nice to the network. + * + * @param netif The lwIP network interface + */ +void +dhcp_inform(struct netif *netif) +{ + struct dhcp dhcp; + err_t result = ERR_OK; + struct udp_pcb *pcb; + + LWIP_ERROR("netif != NULL", (netif != NULL), return;); + + memset(&dhcp, 0, sizeof(struct dhcp)); + dhcp_set_state(&dhcp, DHCP_INFORM); + + if ((netif->dhcp != NULL) && (netif->dhcp->pcb != NULL)) { + /* re-use existing pcb */ + pcb = netif->dhcp->pcb; + } else { + pcb = udp_new(); + if (pcb == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_inform(): could not obtain pcb")); + return; + } + dhcp.pcb = pcb; + ip_set_option(dhcp.pcb, SOF_BROADCAST); + udp_bind(dhcp.pcb, IP_ADDR_ANY, DHCP_CLIENT_PORT); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_inform(): created new udp pcb\n")); + } + /* create and initialize the DHCP message header */ + result = dhcp_create_msg(netif, &dhcp, DHCP_INFORM); + if (result == ERR_OK) { + dhcp_option(&dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + dhcp_option_short(&dhcp, DHCP_MAX_MSG_LEN(netif)); + + dhcp_option_trailer(&dhcp); + + pbuf_realloc(dhcp.p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp.options_out_len); + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_inform: INFORMING\n")); + udp_sendto_if(pcb, dhcp.p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); + dhcp_delete_msg(&dhcp); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_inform: could not allocate DHCP request\n")); + } + + if (dhcp.pcb != NULL) { + /* otherwise, the existing pcb was used */ + udp_remove(dhcp.pcb); + } +} + +/** Handle a possible change in the network configuration. + * + * This enters the REBOOTING state to verify that the currently bound + * address is still valid. + */ +void +dhcp_network_changed(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + if (!dhcp) + return; + switch (dhcp->state) { + case DHCP_REBINDING: + case DHCP_RENEWING: + case DHCP_BOUND: + case DHCP_REBOOTING: + netif_set_down(netif); + dhcp->tries = 0; + dhcp_reboot(netif); + break; + case DHCP_OFF: + /* stay off */ + break; + default: + dhcp->tries = 0; +#if LWIP_DHCP_AUTOIP_COOP + if(dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_ON) { + autoip_stop(netif); + dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_OFF; + } +#endif /* LWIP_DHCP_AUTOIP_COOP */ + dhcp_discover(netif); + break; + } +} + +#if DHCP_DOES_ARP_CHECK +/** + * Match an ARP reply with the offered IP address. + * + * @param netif the network interface on which the reply was received + * @param addr The IP address we received a reply from + */ +void dhcp_arp_reply(struct netif *netif, ip_addr_t *addr) +{ + LWIP_ERROR("netif != NULL", (netif != NULL), return;); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_arp_reply()\n")); + /* is a DHCP client doing an ARP check? */ + if ((netif->dhcp != NULL) && (netif->dhcp->state == DHCP_CHECKING)) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_arp_reply(): CHECKING, arp reply for 0x%08"X32_F"\n", + ip4_addr_get_u32(addr))); + /* did a host respond with the address we + were offered by the DHCP server? */ + if (ip_addr_cmp(addr, &netif->dhcp->offered_ip_addr)) { + /* we will not accept the offered address */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE | LWIP_DBG_LEVEL_WARNING, + ("dhcp_arp_reply(): arp reply matched with offered address, declining\n")); + dhcp_decline(netif); + } + } +} + +/** + * Decline an offered lease. + * + * Tell the DHCP server we do not accept the offered address. + * One reason to decline the lease is when we find out the address + * is already in use by another host (through ARP). + * + * @param netif the netif under DHCP control + */ +static err_t +dhcp_decline(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result = ERR_OK; + u16_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_decline()\n")); + dhcp_set_state(dhcp, DHCP_BACKING_OFF); + /* create and initialize the DHCP message header */ + result = dhcp_create_msg(netif, dhcp, DHCP_DECLINE); + if (result == ERR_OK) { + dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); + dhcp_option_long(dhcp, ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr))); + + dhcp_option_trailer(dhcp); + /* resize pbuf to reflect true size of options */ + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + /* per section 4.4.4, broadcast DECLINE messages */ + udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); + dhcp_delete_msg(dhcp); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_decline: BACKING OFF\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("dhcp_decline: could not allocate DHCP request\n")); + } + dhcp->tries++; + msecs = 10*1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_decline(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} +#endif /* DHCP_DOES_ARP_CHECK */ + + +/** + * Start the DHCP process, discover a DHCP server. + * + * @param netif the netif under DHCP control + */ +static err_t +dhcp_discover(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result = ERR_OK; + u16_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover()\n")); + ip_addr_set_any(&dhcp->offered_ip_addr); + dhcp_set_state(dhcp, DHCP_SELECTING); + /* create and initialize the DHCP message header */ + result = dhcp_create_msg(netif, dhcp, DHCP_DISCOVER); + if (result == ERR_OK) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: making request\n")); + + dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); + + dhcp_option(dhcp, DHCP_OPTION_PARAMETER_REQUEST_LIST, 4/*num options*/); + dhcp_option_byte(dhcp, DHCP_OPTION_SUBNET_MASK); + dhcp_option_byte(dhcp, DHCP_OPTION_ROUTER); + dhcp_option_byte(dhcp, DHCP_OPTION_BROADCAST); + dhcp_option_byte(dhcp, DHCP_OPTION_DNS_SERVER); + + dhcp_option_trailer(dhcp); + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: realloc()ing\n")); + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: sendto(DISCOVER, IP_ADDR_BROADCAST, DHCP_SERVER_PORT)\n")); + udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: deleting()ing\n")); + dhcp_delete_msg(dhcp); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover: SELECTING\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_discover: could not allocate DHCP request\n")); + } + dhcp->tries++; +#if LWIP_DHCP_AUTOIP_COOP + if(dhcp->tries >= LWIP_DHCP_AUTOIP_COOP_TRIES && dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_OFF) { + dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_ON; + autoip_start(netif); + } +#endif /* LWIP_DHCP_AUTOIP_COOP */ + msecs = (dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} + + +/** + * Bind the interface to the offered IP address. + * + * @param netif network interface to bind to the offered address + */ +static void +dhcp_bind(struct netif *netif) +{ + u32_t timeout; + struct dhcp *dhcp; + ip_addr_t sn_mask, gw_addr; + LWIP_ERROR("dhcp_bind: netif != NULL", (netif != NULL), return;); + dhcp = netif->dhcp; + LWIP_ERROR("dhcp_bind: dhcp != NULL", (dhcp != NULL), return;); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); + + /* temporary DHCP lease? */ + if (dhcp->offered_t1_renew != 0xffffffffUL) { + /* set renewal period timer */ + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t1 renewal timer %"U32_F" secs\n", dhcp->offered_t1_renew)); + timeout = (dhcp->offered_t1_renew + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; + if(timeout > 0xffff) { + timeout = 0xffff; + } + dhcp->t1_timeout = (u16_t)timeout; + if (dhcp->t1_timeout == 0) { + dhcp->t1_timeout = 1; + } + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t1_renew*1000)); + } + /* set renewal period timer */ + if (dhcp->offered_t2_rebind != 0xffffffffUL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t2 rebind timer %"U32_F" secs\n", dhcp->offered_t2_rebind)); + timeout = (dhcp->offered_t2_rebind + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; + if(timeout > 0xffff) { + timeout = 0xffff; + } + dhcp->t2_timeout = (u16_t)timeout; + if (dhcp->t2_timeout == 0) { + dhcp->t2_timeout = 1; + } + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t2_rebind*1000)); + } + + /* If we have sub 1 minute lease, t2 and t1 will kick in at the same time. */ + if ((dhcp->t1_timeout >= dhcp->t2_timeout) && (dhcp->t2_timeout > 0)) { + dhcp->t1_timeout = 0; + } + + if (dhcp->subnet_mask_given) { + /* copy offered network mask */ + ip_addr_copy(sn_mask, dhcp->offered_sn_mask); + } else { + /* subnet mask not given, choose a safe subnet mask given the network class */ + u8_t first_octet = ip4_addr1(&dhcp->offered_ip_addr); + if (first_octet <= 127) { + ip4_addr_set_u32(&sn_mask, PP_HTONL(0xff000000UL)); + } else if (first_octet >= 192) { + ip4_addr_set_u32(&sn_mask, PP_HTONL(0xffffff00UL)); + } else { + ip4_addr_set_u32(&sn_mask, PP_HTONL(0xffff0000UL)); + } + } + + ip_addr_copy(gw_addr, dhcp->offered_gw_addr); + /* gateway address not given? */ + if (ip_addr_isany(&gw_addr)) { + /* copy network address */ + ip_addr_get_network(&gw_addr, &dhcp->offered_ip_addr, &sn_mask); + /* use first host address on network as gateway */ + ip4_addr_set_u32(&gw_addr, ip4_addr_get_u32(&gw_addr) | PP_HTONL(0x00000001UL)); + } + +#if LWIP_DHCP_AUTOIP_COOP + if(dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_ON) { + autoip_stop(netif); + dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_OFF; + } +#endif /* LWIP_DHCP_AUTOIP_COOP */ + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_bind(): IP: 0x%08"X32_F"\n", + ip4_addr_get_u32(&dhcp->offered_ip_addr))); + netif_set_ipaddr(netif, &dhcp->offered_ip_addr); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_bind(): SN: 0x%08"X32_F"\n", + ip4_addr_get_u32(&sn_mask))); + netif_set_netmask(netif, &sn_mask); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_bind(): GW: 0x%08"X32_F"\n", + ip4_addr_get_u32(&gw_addr))); + netif_set_gw(netif, &gw_addr); + /* bring the interface up */ + netif_set_up(netif); + /* netif is now bound to DHCP leased address */ + dhcp_set_state(dhcp, DHCP_BOUND); +} + +/** + * Renew an existing DHCP lease at the involved DHCP server. + * + * @param netif network interface which must renew its lease + */ +err_t +dhcp_renew(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result; + u16_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_renew()\n")); + dhcp_set_state(dhcp, DHCP_RENEWING); + + /* create and initialize the DHCP message header */ + result = dhcp_create_msg(netif, dhcp, DHCP_REQUEST); + if (result == ERR_OK) { + dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); + +#if 0 + dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); + dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); +#endif + +#if 0 + dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4); + dhcp_option_long(dhcp, ntohl(dhcp->server_ip_addr.addr)); +#endif + +#if LWIP_NETIF_HOSTNAME + dhcp_option_hostname(dhcp, netif); +#endif /* LWIP_NETIF_HOSTNAME */ + + /* append DHCP message trailer */ + dhcp_option_trailer(dhcp); + + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + udp_sendto_if(dhcp->pcb, dhcp->p_out, &dhcp->server_ip_addr, DHCP_SERVER_PORT, netif); + dhcp_delete_msg(dhcp); + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_renew: RENEWING\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_renew: could not allocate DHCP request\n")); + } + dhcp->tries++; + /* back-off on retries, but to a maximum of 20 seconds */ + msecs = dhcp->tries < 10 ? dhcp->tries * 2000 : 20 * 1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_renew(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} + +/** + * Rebind with a DHCP server for an existing DHCP lease. + * + * @param netif network interface which must rebind with a DHCP server + */ +static err_t +dhcp_rebind(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result; + u16_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind()\n")); + dhcp_set_state(dhcp, DHCP_REBINDING); + + /* create and initialize the DHCP message header */ + result = dhcp_create_msg(netif, dhcp, DHCP_REQUEST); + if (result == ERR_OK) { + dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); + +#if LWIP_NETIF_HOSTNAME + dhcp_option_hostname(dhcp, netif); +#endif /* LWIP_NETIF_HOSTNAME */ + +#if 0 + dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); + dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); + + dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4); + dhcp_option_long(dhcp, ntohl(dhcp->server_ip_addr.addr)); +#endif + + dhcp_option_trailer(dhcp); + + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + /* broadcast to server */ + udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); + dhcp_delete_msg(dhcp); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind: REBINDING\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_rebind: could not allocate DHCP request\n")); + } + dhcp->tries++; + msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} + +/** + * Enter REBOOTING state to verify an existing lease + * + * @param netif network interface which must reboot + */ +static err_t +dhcp_reboot(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result; + u16_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot()\n")); + dhcp_set_state(dhcp, DHCP_REBOOTING); + + /* create and initialize the DHCP message header */ + result = dhcp_create_msg(netif, dhcp, DHCP_REQUEST); + if (result == ERR_OK) { + dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); + dhcp_option_short(dhcp, 576); + + dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); + dhcp_option_long(dhcp, ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr))); + + dhcp_option_trailer(dhcp); + + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + /* broadcast to server */ + udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); + dhcp_delete_msg(dhcp); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot: REBOOTING\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_reboot: could not allocate DHCP request\n")); + } + dhcp->tries++; + msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot(): set request timeout %"U16_F" msecs\n", msecs)); + return result; +} + + +/** + * Release a DHCP lease. + * + * @param netif network interface which must release its lease + */ +err_t +dhcp_release(struct netif *netif) +{ + struct dhcp *dhcp = netif->dhcp; + err_t result; + u16_t msecs; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_release()\n")); + if (dhcp == NULL) { + return ERR_ARG; + } + + /* idle DHCP client */ + dhcp_set_state(dhcp, DHCP_OFF); + /* clean old DHCP offer */ + ip_addr_set_zero(&dhcp->server_ip_addr); + ip_addr_set_zero(&dhcp->offered_ip_addr); + ip_addr_set_zero(&dhcp->offered_sn_mask); + ip_addr_set_zero(&dhcp->offered_gw_addr); +#if LWIP_DHCP_BOOTP_FILE + ip_addr_set_zero(&dhcp->offered_si_addr); +#endif /* LWIP_DHCP_BOOTP_FILE */ + dhcp->offered_t0_lease = dhcp->offered_t1_renew = dhcp->offered_t2_rebind = 0; + + /* create and initialize the DHCP message header */ + result = dhcp_create_msg(netif, dhcp, DHCP_RELEASE); + if (result == ERR_OK) { + dhcp_option_trailer(dhcp); + + pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); + + udp_sendto_if(dhcp->pcb, dhcp->p_out, &dhcp->server_ip_addr, DHCP_SERVER_PORT, netif); + dhcp_delete_msg(dhcp); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_release: RELEASED, DHCP_OFF\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_release: could not allocate DHCP request\n")); + } + dhcp->tries++; + msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000; + dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_release(): set request timeout %"U16_F" msecs\n", msecs)); + /* bring the interface down */ + netif_set_down(netif); + /* remove IP address from interface */ + netif_set_ipaddr(netif, IP_ADDR_ANY); + netif_set_gw(netif, IP_ADDR_ANY); + netif_set_netmask(netif, IP_ADDR_ANY); + + return result; +} + +/** + * Remove the DHCP client from the interface. + * + * @param netif The network interface to stop DHCP on + */ +void +dhcp_stop(struct netif *netif) +{ + struct dhcp *dhcp; + LWIP_ERROR("dhcp_stop: netif != NULL", (netif != NULL), return;); + dhcp = netif->dhcp; + /* Remove the flag that says this netif is handled by DHCP. */ + netif->flags &= ~NETIF_FLAG_DHCP; + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_stop()\n")); + /* netif is DHCP configured? */ + if (dhcp != NULL) { +#if LWIP_DHCP_AUTOIP_COOP + if(dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_ON) { + autoip_stop(netif); + dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_OFF; + } +#endif /* LWIP_DHCP_AUTOIP_COOP */ + + if (dhcp->pcb != NULL) { + udp_remove(dhcp->pcb); + dhcp->pcb = NULL; + } + LWIP_ASSERT("reply wasn't freed", dhcp->msg_in == NULL); + dhcp_set_state(dhcp, DHCP_OFF); + } +} + +/* + * Set the DHCP state of a DHCP client. + * + * If the state changed, reset the number of tries. + */ +static void +dhcp_set_state(struct dhcp *dhcp, u8_t new_state) +{ + if (new_state != dhcp->state) { + dhcp->state = new_state; + dhcp->tries = 0; + dhcp->request_timeout = 0; + } +} + +/* + * Concatenate an option type and length field to the outgoing + * DHCP message. + * + */ +static void +dhcp_option(struct dhcp *dhcp, u8_t option_type, u8_t option_len) +{ + LWIP_ASSERT("dhcp_option: dhcp->options_out_len + 2 + option_len <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 2U + option_len <= DHCP_OPTIONS_LEN); + dhcp->msg_out->options[dhcp->options_out_len++] = option_type; + dhcp->msg_out->options[dhcp->options_out_len++] = option_len; +} +/* + * Concatenate a single byte to the outgoing DHCP message. + * + */ +static void +dhcp_option_byte(struct dhcp *dhcp, u8_t value) +{ + LWIP_ASSERT("dhcp_option_byte: dhcp->options_out_len < DHCP_OPTIONS_LEN", dhcp->options_out_len < DHCP_OPTIONS_LEN); + dhcp->msg_out->options[dhcp->options_out_len++] = value; +} + +static void +dhcp_option_short(struct dhcp *dhcp, u16_t value) +{ + LWIP_ASSERT("dhcp_option_short: dhcp->options_out_len + 2 <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 2U <= DHCP_OPTIONS_LEN); + dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0xff00U) >> 8); + dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t) (value & 0x00ffU); +} + +static void +dhcp_option_long(struct dhcp *dhcp, u32_t value) +{ + LWIP_ASSERT("dhcp_option_long: dhcp->options_out_len + 4 <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 4U <= DHCP_OPTIONS_LEN); + dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0xff000000UL) >> 24); + dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0x00ff0000UL) >> 16); + dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0x0000ff00UL) >> 8); + dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0x000000ffUL)); +} + +#if LWIP_NETIF_HOSTNAME +static void +dhcp_option_hostname(struct dhcp *dhcp, struct netif *netif) +{ + if (netif->hostname != NULL) { + size_t namelen = strlen(netif->hostname); + if (namelen > 0) { + u8_t len; + const char *p = netif->hostname; + /* Shrink len to available bytes (need 2 bytes for OPTION_HOSTNAME + and 1 byte for trailer) */ + size_t available = DHCP_OPTIONS_LEN - dhcp->options_out_len - 3; + LWIP_ASSERT("DHCP: hostname is too long!", namelen <= available); + len = LWIP_MIN(namelen, available); + dhcp_option(dhcp, DHCP_OPTION_HOSTNAME, len); + while (len--) { + dhcp_option_byte(dhcp, *p++); + } + } + } +} +#endif /* LWIP_NETIF_HOSTNAME */ + +/** + * Extract the DHCP message and the DHCP options. + * + * Extract the DHCP message and the DHCP options, each into a contiguous + * piece of memory. As a DHCP message is variable sized by its options, + * and also allows overriding some fields for options, the easy approach + * is to first unfold the options into a conitguous piece of memory, and + * use that further on. + * + */ +static err_t +dhcp_parse_reply(struct dhcp *dhcp, struct pbuf *p) +{ + u8_t *options; + u16_t offset; + u16_t offset_max; + u16_t options_idx; + u16_t options_idx_max; + struct pbuf *q; + int parse_file_as_options = 0; + int parse_sname_as_options = 0; + + /* clear received options */ + dhcp_clear_all_options(dhcp); + /* check that beginning of dhcp_msg (up to and including chaddr) is in first pbuf */ + if (p->len < DHCP_SNAME_OFS) { + return ERR_BUF; + } + dhcp->msg_in = (struct dhcp_msg *)p->payload; +#if LWIP_DHCP_BOOTP_FILE + /* clear boot file name */ + dhcp->boot_file_name[0] = 0; +#endif /* LWIP_DHCP_BOOTP_FILE */ + + /* parse options */ + + /* start with options field */ + options_idx = DHCP_OPTIONS_OFS; + /* parse options to the end of the received packet */ + options_idx_max = p->tot_len; +again: + q = p; + while((q != NULL) && (options_idx >= q->len)) { + options_idx -= q->len; + options_idx_max -= q->len; + q = q->next; + } + if (q == NULL) { + return ERR_BUF; + } + offset = options_idx; + offset_max = options_idx_max; + options = (u8_t*)q->payload; + /* at least 1 byte to read and no end marker, then at least 3 bytes to read? */ + while((q != NULL) && (options[offset] != DHCP_OPTION_END) && (offset < offset_max)) { + u8_t op = options[offset]; + u8_t len; + u8_t decode_len = 0; + int decode_idx = -1; + u16_t val_offset = offset + 2; + /* len byte might be in the next pbuf */ + if (offset + 1 < q->len) { + len = options[offset + 1]; + } else { + len = (q->next != NULL ? ((u8_t*)q->next->payload)[0] : 0); + } + /* LWIP_DEBUGF(DHCP_DEBUG, ("msg_offset=%"U16_F", q->len=%"U16_F, msg_offset, q->len)); */ + decode_len = len; + switch(op) { + /* case(DHCP_OPTION_END): handled above */ + case(DHCP_OPTION_PAD): + /* special option: no len encoded */ + decode_len = len = 0; + /* will be increased below */ + offset--; + break; + case(DHCP_OPTION_SUBNET_MASK): + LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); + decode_idx = DHCP_OPTION_IDX_SUBNET_MASK; + break; + case(DHCP_OPTION_ROUTER): + decode_len = 4; /* only copy the first given router */ + LWIP_ERROR("len >= decode_len", len >= decode_len, return ERR_VAL;); + decode_idx = DHCP_OPTION_IDX_ROUTER; + break; + case(DHCP_OPTION_DNS_SERVER): + /* special case: there might be more than one server */ + LWIP_ERROR("len % 4 == 0", len % 4 == 0, return ERR_VAL;); + /* limit number of DNS servers */ + decode_len = LWIP_MIN(len, 4 * DNS_MAX_SERVERS); + LWIP_ERROR("len >= decode_len", len >= decode_len, return ERR_VAL;); + decode_idx = DHCP_OPTION_IDX_DNS_SERVER; + break; + case(DHCP_OPTION_LEASE_TIME): + LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); + decode_idx = DHCP_OPTION_IDX_LEASE_TIME; + break; + case(DHCP_OPTION_OVERLOAD): + LWIP_ERROR("len == 1", len == 1, return ERR_VAL;); + decode_idx = DHCP_OPTION_IDX_OVERLOAD; + break; + case(DHCP_OPTION_MESSAGE_TYPE): + LWIP_ERROR("len == 1", len == 1, return ERR_VAL;); + decode_idx = DHCP_OPTION_IDX_MSG_TYPE; + break; + case(DHCP_OPTION_SERVER_ID): + LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); + decode_idx = DHCP_OPTION_IDX_SERVER_ID; + break; + case(DHCP_OPTION_T1): + LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); + decode_idx = DHCP_OPTION_IDX_T1; + break; + case(DHCP_OPTION_T2): + LWIP_ERROR("len == 4", len == 4, return ERR_VAL;); + decode_idx = DHCP_OPTION_IDX_T2; + break; + default: + decode_len = 0; + LWIP_DEBUGF(DHCP_DEBUG, ("skipping option %"U16_F" in options\n", op)); + break; + } + offset += len + 2; + if (decode_len > 0) { + u32_t value = 0; + u16_t copy_len; +decode_next: + LWIP_ASSERT("check decode_idx", decode_idx >= 0 && decode_idx < DHCP_OPTION_IDX_MAX); + if (!dhcp_option_given(dhcp, decode_idx)) { + copy_len = LWIP_MIN(decode_len, 4); + pbuf_copy_partial(q, &value, copy_len, val_offset); + if (decode_len > 4) { + /* decode more than one u32_t */ + LWIP_ERROR("decode_len % 4 == 0", decode_len % 4 == 0, return ERR_VAL;); + dhcp_got_option(dhcp, decode_idx); + dhcp_set_option_value(dhcp, decode_idx, htonl(value)); + decode_len -= 4; + val_offset += 4; + decode_idx++; + goto decode_next; + } else if (decode_len == 4) { + value = ntohl(value); + } else { + LWIP_ERROR("invalid decode_len", decode_len == 1, return ERR_VAL;); + value = ((u8_t*)&value)[0]; + } + dhcp_got_option(dhcp, decode_idx); + dhcp_set_option_value(dhcp, decode_idx, value); + } + } + if (offset >= q->len) { + offset -= q->len; + offset_max -= q->len; + if ((offset < offset_max) && offset_max) { + q = q->next; + LWIP_ASSERT("next pbuf was null", q); + options = (u8_t*)q->payload; + } else { + /* We've run out of bytes, probably no end marker. Don't proceed. */ + break; + } + } + } + /* is this an overloaded message? */ + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_OVERLOAD)) { + u32_t overload = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_OVERLOAD); + dhcp_clear_option(dhcp, DHCP_OPTION_IDX_OVERLOAD); + if (overload == DHCP_OVERLOAD_FILE) { + parse_file_as_options = 1; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded file field\n")); + } else if (overload == DHCP_OVERLOAD_SNAME) { + parse_sname_as_options = 1; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded sname field\n")); + } else if (overload == DHCP_OVERLOAD_SNAME_FILE) { + parse_sname_as_options = 1; + parse_file_as_options = 1; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded sname and file field\n")); + } else { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("invalid overload option: %d\n", (int)overload)); + } +#if LWIP_DHCP_BOOTP_FILE + if (!parse_file_as_options) { + /* only do this for ACK messages */ + if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_MSG_TYPE) && + (dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_MSG_TYPE) == DHCP_ACK)) + /* copy bootp file name, don't care for sname (server hostname) */ + pbuf_copy_partial(p, dhcp->boot_file_name, DHCP_FILE_LEN-1, DHCP_FILE_OFS); + /* make sure the string is really NULL-terminated */ + dhcp->boot_file_name[DHCP_FILE_LEN-1] = 0; + } +#endif /* LWIP_DHCP_BOOTP_FILE */ + } + if (parse_file_as_options) { + /* if both are overloaded, parse file first and then sname (RFC 2131 ch. 4.1) */ + parse_file_as_options = 0; + options_idx = DHCP_FILE_OFS; + options_idx_max = DHCP_FILE_OFS + DHCP_FILE_LEN; + goto again; + } else if (parse_sname_as_options) { + parse_sname_as_options = 0; + options_idx = DHCP_SNAME_OFS; + options_idx_max = DHCP_SNAME_OFS + DHCP_SNAME_LEN; + goto again; + } + return ERR_OK; +} + +/** + * If an incoming DHCP message is in response to us, then trigger the state machine + */ +static void +dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port) +{ + struct netif *netif = (struct netif *)arg; + struct dhcp *dhcp = netif->dhcp; + struct dhcp_msg *reply_msg = (struct dhcp_msg *)p->payload; + u8_t msg_type; + u8_t i; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_recv(pbuf = %p) from DHCP server %"U16_F".%"U16_F".%"U16_F".%"U16_F" port %"U16_F"\n", (void*)p, + ip4_addr1_16(addr), ip4_addr2_16(addr), ip4_addr3_16(addr), ip4_addr4_16(addr), port)); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("pbuf->len = %"U16_F"\n", p->len)); + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("pbuf->tot_len = %"U16_F"\n", p->tot_len)); + /* prevent warnings about unused arguments */ + LWIP_UNUSED_ARG(pcb); + LWIP_UNUSED_ARG(addr); + LWIP_UNUSED_ARG(port); + + LWIP_ASSERT("reply wasn't freed", dhcp->msg_in == NULL); + + if (p->len < DHCP_MIN_REPLY_LEN) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("DHCP reply message or pbuf too short\n")); + goto free_pbuf_and_return; + } + + if (reply_msg->op != DHCP_BOOTREPLY) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("not a DHCP reply message, but type %"U16_F"\n", (u16_t)reply_msg->op)); + goto free_pbuf_and_return; + } + /* iterate through hardware address and match against DHCP message */ + for (i = 0; i < netif->hwaddr_len; i++) { + if (netif->hwaddr[i] != reply_msg->chaddr[i]) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, + ("netif->hwaddr[%"U16_F"]==%02"X16_F" != reply_msg->chaddr[%"U16_F"]==%02"X16_F"\n", + (u16_t)i, (u16_t)netif->hwaddr[i], (u16_t)i, (u16_t)reply_msg->chaddr[i])); + goto free_pbuf_and_return; + } + } + /* match transaction ID against what we expected */ + if (ntohl(reply_msg->xid) != dhcp->xid) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, + ("transaction id mismatch reply_msg->xid(%"X32_F")!=dhcp->xid(%"X32_F")\n",ntohl(reply_msg->xid),dhcp->xid)); + goto free_pbuf_and_return; + } + /* option fields could be unfold? */ + if (dhcp_parse_reply(dhcp, p) != ERR_OK) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("problem unfolding DHCP message - too short on memory?\n")); + goto free_pbuf_and_return; + } + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("searching DHCP_OPTION_MESSAGE_TYPE\n")); + /* obtain pointer to DHCP message type */ + if (!dhcp_option_given(dhcp, DHCP_OPTION_IDX_MSG_TYPE)) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("DHCP_OPTION_MESSAGE_TYPE option not found\n")); + goto free_pbuf_and_return; + } + + /* read DHCP message type */ + msg_type = (u8_t)dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_MSG_TYPE); + /* message type is DHCP ACK? */ + if (msg_type == DHCP_ACK) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_ACK received\n")); + /* in requesting state? */ + if (dhcp->state == DHCP_REQUESTING) { + dhcp_handle_ack(netif); +#if DHCP_DOES_ARP_CHECK + /* check if the acknowledged lease address is already in use */ + dhcp_check(netif); +#else + /* bind interface to the acknowledged lease address */ + dhcp_bind(netif); +#endif + } + /* already bound to the given lease address? */ + else if ((dhcp->state == DHCP_REBOOTING) || (dhcp->state == DHCP_REBINDING) || (dhcp->state == DHCP_RENEWING)) { + dhcp_bind(netif); + } + } + /* received a DHCP_NAK in appropriate state? */ + else if ((msg_type == DHCP_NAK) && + ((dhcp->state == DHCP_REBOOTING) || (dhcp->state == DHCP_REQUESTING) || + (dhcp->state == DHCP_REBINDING) || (dhcp->state == DHCP_RENEWING ))) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_NAK received\n")); + dhcp_handle_nak(netif); + } + /* received a DHCP_OFFER in DHCP_SELECTING state? */ + else if ((msg_type == DHCP_OFFER) && (dhcp->state == DHCP_SELECTING)) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_OFFER received in DHCP_SELECTING state\n")); + dhcp->request_timeout = 0; + /* remember offered lease */ + dhcp_handle_offer(netif); + } +free_pbuf_and_return: + dhcp->msg_in = NULL; + pbuf_free(p); +} + +/** + * Create a DHCP request, fill in common headers + * + * @param netif the netif under DHCP control + * @param dhcp dhcp control struct + * @param message_type message type of the request + */ +static err_t +dhcp_create_msg(struct netif *netif, struct dhcp *dhcp, u8_t message_type) +{ + u16_t i; +#ifndef DHCP_GLOBAL_XID + /** default global transaction identifier starting value (easy to match + * with a packet analyser). We simply increment for each new request. + * Predefine DHCP_GLOBAL_XID to a better value or a function call to generate one + * at runtime, any supporting function prototypes can be defined in DHCP_GLOBAL_XID_HEADER */ +#if DHCP_CREATE_RAND_XID && defined(LWIP_RAND) + static u32_t xid; +#else /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */ + static u32_t xid = 0xABCD0000; +#endif /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */ +#else + if (!xid_initialised) { + xid = DHCP_GLOBAL_XID; + xid_initialised = !xid_initialised; + } +#endif + LWIP_ERROR("dhcp_create_msg: netif != NULL", (netif != NULL), return ERR_ARG;); + LWIP_ERROR("dhcp_create_msg: dhcp != NULL", (dhcp != NULL), return ERR_VAL;); + LWIP_ASSERT("dhcp_create_msg: dhcp->p_out == NULL", dhcp->p_out == NULL); + LWIP_ASSERT("dhcp_create_msg: dhcp->msg_out == NULL", dhcp->msg_out == NULL); + dhcp->p_out = pbuf_alloc(PBUF_TRANSPORT, sizeof(struct dhcp_msg), PBUF_RAM); + if (dhcp->p_out == NULL) { + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, + ("dhcp_create_msg(): could not allocate pbuf\n")); + return ERR_MEM; + } + LWIP_ASSERT("dhcp_create_msg: check that first pbuf can hold struct dhcp_msg", + (dhcp->p_out->len >= sizeof(struct dhcp_msg))); + + /* reuse transaction identifier in retransmissions */ + if (dhcp->tries == 0) { +#if DHCP_CREATE_RAND_XID && defined(LWIP_RAND) + xid = LWIP_RAND(); +#else /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */ + xid++; +#endif /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */ + } + dhcp->xid = xid; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, + ("transaction id xid(%"X32_F")\n", xid)); + + dhcp->msg_out = (struct dhcp_msg *)dhcp->p_out->payload; + + dhcp->msg_out->op = DHCP_BOOTREQUEST; + /* TODO: make link layer independent */ + dhcp->msg_out->htype = DHCP_HTYPE_ETH; + dhcp->msg_out->hlen = netif->hwaddr_len; + dhcp->msg_out->hops = 0; + dhcp->msg_out->xid = htonl(dhcp->xid); + dhcp->msg_out->secs = 0; + /* we don't need the broadcast flag since we can receive unicast traffic + before being fully configured! */ + dhcp->msg_out->flags = 0; + ip_addr_set_zero(&dhcp->msg_out->ciaddr); + /* set ciaddr to netif->ip_addr based on message_type and state */ + if ((message_type == DHCP_INFORM) || (message_type == DHCP_DECLINE) || + ((message_type == DHCP_REQUEST) && /* DHCP_BOUND not used for sending! */ + ((dhcp->state==DHCP_RENEWING) || dhcp->state==DHCP_REBINDING))) { + ip_addr_copy(dhcp->msg_out->ciaddr, netif->ip_addr); + } + ip_addr_set_zero(&dhcp->msg_out->yiaddr); + ip_addr_set_zero(&dhcp->msg_out->siaddr); + ip_addr_set_zero(&dhcp->msg_out->giaddr); + for (i = 0; i < DHCP_CHADDR_LEN; i++) { + /* copy netif hardware address, pad with zeroes */ + dhcp->msg_out->chaddr[i] = (i < netif->hwaddr_len && i < NETIF_MAX_HWADDR_LEN) ? netif->hwaddr[i] : 0/* pad byte*/; + } + for (i = 0; i < DHCP_SNAME_LEN; i++) { + dhcp->msg_out->sname[i] = 0; + } + for (i = 0; i < DHCP_FILE_LEN; i++) { + dhcp->msg_out->file[i] = 0; + } + dhcp->msg_out->cookie = PP_HTONL(DHCP_MAGIC_COOKIE); + dhcp->options_out_len = 0; + /* fill options field with an incrementing array (for debugging purposes) */ + for (i = 0; i < DHCP_OPTIONS_LEN; i++) { + dhcp->msg_out->options[i] = (u8_t)i; /* for debugging only, no matter if truncated */ + } + /* Add option MESSAGE_TYPE */ + dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); + dhcp_option_byte(dhcp, message_type); + return ERR_OK; +} + +/** + * Free previously allocated memory used to send a DHCP request. + * + * @param dhcp the dhcp struct to free the request from + */ +static void +dhcp_delete_msg(struct dhcp *dhcp) +{ + LWIP_ERROR("dhcp_delete_msg: dhcp != NULL", (dhcp != NULL), return;); + LWIP_ASSERT("dhcp_delete_msg: dhcp->p_out != NULL", dhcp->p_out != NULL); + LWIP_ASSERT("dhcp_delete_msg: dhcp->msg_out != NULL", dhcp->msg_out != NULL); + if (dhcp->p_out != NULL) { + pbuf_free(dhcp->p_out); + } + dhcp->p_out = NULL; + dhcp->msg_out = NULL; +} + +/** + * Add a DHCP message trailer + * + * Adds the END option to the DHCP message, and if + * necessary, up to three padding bytes. + * + * @param dhcp DHCP state structure + */ +static void +dhcp_option_trailer(struct dhcp *dhcp) +{ + LWIP_ERROR("dhcp_option_trailer: dhcp != NULL", (dhcp != NULL), return;); + LWIP_ASSERT("dhcp_option_trailer: dhcp->msg_out != NULL\n", dhcp->msg_out != NULL); + LWIP_ASSERT("dhcp_option_trailer: dhcp->options_out_len < DHCP_OPTIONS_LEN\n", dhcp->options_out_len < DHCP_OPTIONS_LEN); + dhcp->msg_out->options[dhcp->options_out_len++] = DHCP_OPTION_END; + /* packet is too small, or not 4 byte aligned? */ + while (((dhcp->options_out_len < DHCP_MIN_OPTIONS_LEN) || (dhcp->options_out_len & 3)) && + (dhcp->options_out_len < DHCP_OPTIONS_LEN)) { + /* add a fill/padding byte */ + dhcp->msg_out->options[dhcp->options_out_len++] = 0; + } +} + +#endif /* LWIP_DHCP */ diff --git a/android/jni/lwip/src/core/tcp_out.c b/android/jni/lwip/src/core/tcp_out.c index d662217..b9fc339 100644 --- a/android/jni/lwip/src/core/tcp_out.c +++ b/android/jni/lwip/src/core/tcp_out.c @@ -1377,9 +1377,9 @@ void tcp_keepalive(struct tcp_pcb *pcb) { struct pbuf *p; -#if CHECKSUM_GEN_TCP +#if CHECKSUM_GEN_TCP struct tcp_hdr *tcphdr; -#endif /* CHECKSUM_GEN_TCP */ +#endif /* CHECKSUM_GEN_TCP */ LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: sending KEEPALIVE probe to ")); ipX_addr_debug_print(PCB_ISIPV6(pcb), TCP_DEBUG, &pcb->remote_ip); @@ -1394,12 +1394,12 @@ tcp_keepalive(struct tcp_pcb *pcb) ("tcp_keepalive: could not allocate memory for pbuf\n")); return; } -#if CHECKSUM_GEN_TCP +#if CHECKSUM_GEN_TCP tcphdr = (struct tcp_hdr *)p->payload; tcphdr->chksum = ipX_chksum_pseudo(PCB_ISIPV6(pcb), p, IP_PROTO_TCP, p->tot_len, &pcb->local_ip, &pcb->remote_ip); -#endif /* CHECKSUM_GEN_TCP */ +#endif /* CHECKSUM_GEN_TCP */ TCP_STATS_INC(tcp.xmit); /* Send output to IP */ diff --git a/android/jni/misc/dns_proto.h b/android/jni/misc/dns_proto.h index 2aadb9b..c86cac1 100644 --- a/android/jni/misc/dns_proto.h +++ b/android/jni/misc/dns_proto.h @@ -1,5 +1,5 @@ /* - * Copyright (C) uProxy + * Copyright 2018 The Outline Authors * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -48,6 +48,7 @@ B_END_PACKED #define DNS_QR 0x80 #define DNS_TC 0x02 #define DNS_Z 0x70 +#define DNS_RCODE 0x0F #define DNS_ID_STRLEN 6 @@ -75,4 +76,14 @@ static int dns_check(const uint8_t *data, int data_len, && !out_header->nscount && !out_header->ancount /* no answers */; } +// Synthesizes a truncated DNS response by modifying |query|. +static void dns_synthesize_truncated_response(struct dns_header *query) { + query->qr_opcode_aa_tc_rd |= DNS_QR; + query->qr_opcode_aa_tc_rd |= DNS_TC; + query->ra_z_rcode &= ~DNS_RCODE; + query->ancount = query->qdcount; + query->nscount = 0; + query->arcount = 0; +} + #endif // BADVPN_MISC_DNS_PROTO_H diff --git a/android/jni/misc/socks_proto.h b/android/jni/misc/socks_proto.h index ec2c353..989182a 100644 --- a/android/jni/misc/socks_proto.h +++ b/android/jni/misc/socks_proto.h @@ -120,7 +120,6 @@ struct socks_udp_header { uint16_t rsv; uint8_t frag; uint8_t atyp; - struct socks_addr_ipv4 address; } B_PACKED; B_END_PACKED diff --git a/android/jni/socks_udp_client/CMakeLists.txt b/android/jni/socks_udp_client/CMakeLists.txt new file mode 100644 index 0000000..d07f4fc --- /dev/null +++ b/android/jni/socks_udp_client/CMakeLists.txt @@ -0,0 +1,2 @@ +add_library(socks_udp_client SocksUdpClient.c) +target_link_libraries(socks_udp_client system flow flowextra) diff --git a/android/jni/socks_udp_client/SocksUdpClient.c b/android/jni/socks_udp_client/SocksUdpClient.c new file mode 100644 index 0000000..79afad6 --- /dev/null +++ b/android/jni/socks_udp_client/SocksUdpClient.c @@ -0,0 +1,527 @@ +/* + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include + +#include +#include +#include +#include +#include + +#include + +#include + +#define DNS_PORT 53 + +static int addr_comparator (void *unused, BAddr *v1, BAddr *v2); +static struct SocksUdpClient_connection * find_connection_by_addr (SocksUdpClient *o, BAddr addr); +static void init_localhost4(uint32_t *ip4); +static void init_localhost6(uint8_t ip6[static 16]); +static void socks_state_handler(struct SocksUdpClient_connection *con, int event); +static void datagram_state_handler(struct SocksUdpClient_connection *con, int event); +static void send_monitor_handler (struct SocksUdpClient_connection *con); +static void recv_if_handler_send (struct SocksUdpClient_connection *con, uint8_t *data, int data_len); +static struct SocksUdpClient_connection * connection_init(SocksUdpClient *o, BAddr local_addr, + BAddr first_remote_addr, + const uint8_t *first_data, + int first_data_len); +static void connection_free (struct SocksUdpClient_connection *con); +static void connection_send (struct SocksUdpClient_connection *con, BAddr remote_addr, const uint8_t *data, int data_len); +static void first_job_handler(struct SocksUdpClient_connection *con); +static int compute_mtu(int udp_mtu); +static int get_dns_id(BAddr *remote_addr, const uint8_t *data, int data_len); + +static int addr_comparator (void *unused, BAddr *v1, BAddr *v2) +{ + return BAddr_CompareOrder(v1, v2); +} + +static struct SocksUdpClient_connection * find_connection_by_addr (SocksUdpClient *o, BAddr addr) +{ + BAVLNode *tree_node = BAVL_LookupExact(&o->connections_tree, &addr); + if (!tree_node) { + return NULL; + } + + return UPPER_OBJECT(tree_node, struct SocksUdpClient_connection, connections_tree_node); +} + +static void init_localhost4(uint32_t *ip4) +{ + *ip4 = 1<<24 | 127; +} + +static void init_localhost6(uint8_t ip6[static 16]) +{ + memset(ip6, 0, 16); + ip6[15] = 1; +} + +static void socks_state_handler(struct SocksUdpClient_connection *con, int event) +{ + switch (event) { + case BSOCKSCLIENT_EVENT_UP: { + BIPAddr localhost; + localhost.type = con->client->server_addr.type; + if (localhost.type == BADDR_TYPE_IPV4) { + init_localhost4(&localhost.ipv4); + } else if (localhost.type == BADDR_TYPE_IPV6) { + init_localhost6(localhost.ipv6); + } else { + BLog(BLOG_ERROR, "Bad address type"); + } + // This will unblock the queue of pending packets. + BDatagram_SetSendAddrs(&con->socket, con->socks.bind_addr, localhost); + } break; + case BSOCKSCLIENT_EVENT_ERROR: { + BLog(BLOG_ERROR, "Socks error event"); + } // Fallthrough + case BSOCKSCLIENT_EVENT_ERROR_CLOSED: { + connection_free(con); + } break; + default: { + BLog(BLOG_ERROR, "Unknown event"); + } + } +} + +static void datagram_state_handler(struct SocksUdpClient_connection *con, int event) +{ + if (event == BDATAGRAM_EVENT_ERROR) { + char local_buffer[BADDR_MAX_PRINT_LEN]; + BAddr_Print(&con->local_addr, local_buffer); + BLog(BLOG_ERROR, "Failing connection for %s due to a datagram send error", local_buffer); + connection_free(con); + } +} + +static void send_monitor_handler (struct SocksUdpClient_connection *con) +{ + // The connection has passed its idle timeout. Remove it. + connection_free(con); +} + +static void recv_if_handler_send(struct SocksUdpClient_connection *con, uint8_t *data, int data_len) +{ + SocksUdpClient *o = con->client; + DebugObject_Access(&con->client->d_obj); + ASSERT(data_len >= 0) + ASSERT(data_len <= compute_mtu(o->udp_mtu)) + + // accept packet + PacketPassInterface_Done(&con->recv_if); + + // check header + if (data_len < sizeof(struct socks_udp_header)) { + BLog(BLOG_ERROR, "missing header"); + return; + } + struct socks_udp_header *header = (struct socks_udp_header *)data; + uint8_t *addr_data = data + sizeof(struct socks_udp_header); + + // parse address + BAddr remote_addr; + size_t addr_size; + switch (header->atyp) { + case SOCKS_ATYP_IPV4: { + remote_addr.type = BADDR_TYPE_IPV4; + struct socks_addr_ipv4 *addr_ipv4 = (struct socks_addr_ipv4 *)addr_data; + remote_addr.ipv4.ip = addr_ipv4->addr; + remote_addr.ipv4.port = addr_ipv4->port; + addr_size = sizeof(*addr_ipv4); + } break; + case SOCKS_ATYP_IPV6: { + remote_addr.type = BADDR_TYPE_IPV6; + struct socks_addr_ipv6 *addr_ipv6 = (struct socks_addr_ipv6 *)addr_data; + memcpy(remote_addr.ipv6.ip, addr_ipv6->addr, sizeof(remote_addr.ipv6.ip)); + remote_addr.ipv6.port = addr_ipv6->port; + addr_size = sizeof(*addr_ipv6); + } break; + default: { + BLog(BLOG_ERROR, "Bad address type"); + return; + } + } + + uint8_t *body_data = addr_data + addr_size; + size_t body_len = data_len - (body_data - data); + + // check remaining data + if (body_len > o->udp_mtu) { + BLog(BLOG_ERROR, "too much data"); + return; + } + + // pass packet to user + SocksUdpClient *client = con->client; + client->handler_received(client->user, con->local_addr, remote_addr, body_data, body_len); + + if (con->dns_id >= 0) { + // This connection has only been used for a single DNS query. + int recv_dns_id = get_dns_id(&remote_addr, body_data, body_len); + if (recv_dns_id == con->dns_id) { + // We have now forwarded the response, so this connection is no longer needed. + connection_free(con); + } else { + BLog(BLOG_INFO, + "DNS client port received an unexpected non-DNS packet. " + "Disabling DNS optimization."); + con->dns_id = -1; + } + } +} + +static struct SocksUdpClient_connection *connection_init(SocksUdpClient *o, BAddr local_addr, + BAddr first_remote_addr, + const uint8_t *first_data, + int first_data_len) +{ + DebugObject_Access(&o->d_obj); + ASSERT(o->num_connections <= o->max_connections) + ASSERT(!find_connection_by_addr(o, local_addr)) + + char buffer[BADDR_MAX_PRINT_LEN]; + BAddr_Print(&local_addr, buffer); + BLog(BLOG_DEBUG, "Creating new connection for %s", buffer); + + // allocate structure + struct SocksUdpClient_connection *con = (struct SocksUdpClient_connection *)malloc(sizeof(*con)); + if (!con) { + BLog(BLOG_ERROR, "malloc failed"); + goto fail0; + } + + // init arguments + con->client = o; + con->local_addr = local_addr; + con->first_data = BAlloc(first_data_len); + con->first_data_len = first_data_len; + con->first_remote_addr = first_remote_addr; + memcpy(con->first_data, first_data, first_data_len); + + con->dns_id = get_dns_id(&first_remote_addr, first_data, first_data_len); + + BPendingGroup *pg = BReactor_PendingGroup(o->reactor); + + // init first job, to send the first packet asynchronously. This has to happen asynchronously + // because con->send_writer (a BufferWriter) cannot accept writes until after it is linked with + // its PacketBuffer (con->send_buffer), which happens asynchronously. + BPending_Init(&con->first_job, pg, (BPending_handler)first_job_handler, con); + // Add the first job to the pending set. BPending acts as a LIFO stack, and first_job_handler + // needs to run after async actions that occur in PacketBuffer_Init, so we need to put first_job + // on the stack first. + BPending_Set(&con->first_job); + + // Create a datagram socket + if (!BDatagram_Init(&con->socket, con->local_addr.type, o->reactor, con, + (BDatagram_handler)datagram_state_handler)) { + BLog(BLOG_ERROR, "Failed to create a UDP socket"); + goto fail1; + } + + // Bind to 127.0.0.1:0 (or [::1]:0). Port 0 signals the kernel to choose an open port. + BAddr socket_addr; + socket_addr.type = local_addr.type; + if (local_addr.type == BADDR_TYPE_IPV4) { + init_localhost4(&socket_addr.ipv4.ip); + socket_addr.ipv4.port = 0; + } else if (local_addr.type == BADDR_TYPE_IPV6) { + init_localhost6(socket_addr.ipv6.ip); + socket_addr.ipv6.port = 0; + } else { + BLog(BLOG_ERROR, "Unknown local address type"); + goto fail2; + } + if (!BDatagram_Bind(&con->socket, socket_addr)) { + BLog(BLOG_ERROR, "Bind to localhost failed"); + goto fail2; + } + + // Bind succeeded, so the kernel has found an open port. + // Update socket_addr to the actual port that was bound. + uint16_t port; + if (!BDatagram_GetLocalPort(&con->socket, &port)) { + BLog(BLOG_ERROR, "Failed to get bound port"); + goto fail2; + } + if (socket_addr.type == BADDR_TYPE_IPV4) { + socket_addr.ipv4.port = port; + } else { + socket_addr.ipv6.port = port; + } + + // Initiate connection to socks server + if (!BSocksClient_Init(&con->socks, o->server_addr, o->auth_info, o->num_auth_info, socket_addr, + true, (BSocksClient_handler)socks_state_handler, con, o->reactor)) { + BLog(BLOG_ERROR, "Failed to initialize SOCKS client"); + goto fail2; + } + + // Ensure that the UDP handling pipeline can handle queries big enough to include + // all data plus the SOCKS-UDP header. + int socks_mtu = compute_mtu(o->udp_mtu); + + // Send pipeline: send_writer -> send_buffer -> send_monitor -> send_if -> socket. + BDatagram_SendAsync_Init(&con->socket, socks_mtu); + PacketPassInterface *send_if = BDatagram_SendAsync_GetIf(&con->socket); + PacketPassInactivityMonitor_Init(&con->send_monitor, send_if, o->reactor, o->keepalive_time, + (PacketPassInactivityMonitor_handler)send_monitor_handler, con); + BufferWriter_Init(&con->send_writer, compute_mtu(o->udp_mtu), pg); + if (!PacketBuffer_Init(&con->send_buffer, BufferWriter_GetOutput(&con->send_writer), + PacketPassInactivityMonitor_GetInput(&con->send_monitor), + SOCKS_UDP_SEND_BUFFER_PACKETS, pg)) { + BLog(BLOG_ERROR, "Send buffer init failed"); + goto fail3; + } + + // Receive pipeline: socket -> recv_buffer -> recv_if + BDatagram_RecvAsync_Init(&con->socket, socks_mtu); + PacketPassInterface_Init(&con->recv_if, socks_mtu, + (PacketPassInterface_handler_send)recv_if_handler_send, con, pg); + if (!SinglePacketBuffer_Init(&con->recv_buffer, BDatagram_RecvAsync_GetIf(&con->socket), + &con->recv_if, pg)) { + BLog(BLOG_ERROR, "Receive buffer init failed"); + goto fail4; + } + + // insert to connections tree + ASSERT_EXECUTE(BAVL_Insert(&o->connections_tree, &con->connections_tree_node, NULL)) + + o->num_connections++; + + return con; + +fail4: + PacketPassInterface_Free(&con->recv_if); + BDatagram_RecvAsync_Free(&con->socket); + PacketBuffer_Free(&con->send_buffer); +fail3: + BufferWriter_Free(&con->send_writer); + PacketPassInactivityMonitor_Free(&con->send_monitor); + BDatagram_SendAsync_Free(&con->socket); +fail2: + BDatagram_Free(&con->socket); +fail1: + BPending_Free(&con->first_job); + BFree(con->first_data); + free(con); +fail0: + return NULL; +} + +static void connection_free (struct SocksUdpClient_connection *con) +{ + SocksUdpClient *o = con->client; + DebugObject_Access(&o->d_obj); + + // decrement number of connections + o->num_connections--; + + // remove from connections tree + BAVL_Remove(&o->connections_tree, &con->connections_tree_node); + + // Free UDP send pipeline components + PacketBuffer_Free(&con->send_buffer); + BufferWriter_Free(&con->send_writer); + PacketPassInactivityMonitor_Free(&con->send_monitor); + BDatagram_SendAsync_Free(&con->socket); + + // Free UDP receive pipeline components + SinglePacketBuffer_Free(&con->recv_buffer); + PacketPassInterface_Free(&con->recv_if); + BDatagram_RecvAsync_Free(&con->socket); + + // Free UDP socket + BDatagram_Free(&con->socket); + + // Free SOCKS client + BSocksClient_Free(&con->socks); + + BPending_Free(&con->first_job); + if (con->first_data) { + BFree(con->first_data); + } + // free structure + free(con); +} + +static void connection_send (struct SocksUdpClient_connection *con, BAddr remote_addr, + const uint8_t *data, int data_len) +{ + SocksUdpClient *o = con->client; + DebugObject_Access(&o->d_obj); + ASSERT(data_len >= 0) + ASSERT(data_len <= o->udp_mtu) + + if (con->dns_id >= 0) { + // So far, this connection has only sent a single DNS query. + int new_dns_id = get_dns_id(&remote_addr, data, data_len); + if (new_dns_id != con->dns_id) { + BLog(BLOG_DEBUG, "Client reused DNS query port. Disabling DNS optimization."); + con->dns_id = -1; + } + } + + // Check if we're sending to an IPv4 or IPv6 destination. + int atyp; + size_t address_size; + // write address + switch (remote_addr.type) { + case BADDR_TYPE_IPV4: { + atyp = SOCKS_ATYP_IPV4; + address_size = sizeof(struct socks_addr_ipv4); + } break; + case BADDR_TYPE_IPV6: { + atyp = SOCKS_ATYP_IPV6; + address_size = sizeof(struct socks_addr_ipv6); + } break; + default: { + BLog(BLOG_ERROR, "bad address type"); + return; + } + } + + // Wrap the payload in a UDP SOCKS header. + size_t socks_data_len = sizeof(struct socks_udp_header) + address_size + data_len; + if (socks_data_len > compute_mtu(o->udp_mtu)) { + BLog(BLOG_ERROR, "Packet is too big: %d > %d", socks_data_len, compute_mtu(o->udp_mtu)); + return; + } + uint8_t *socks_data; + if (!BufferWriter_StartPacket(&con->send_writer, &socks_data)) { + BLog(BLOG_ERROR, "Send buffer is full"); + return; + } + // Write header + struct socks_udp_header *header = (struct socks_udp_header *)socks_data; + header->rsv = 0; + header->frag = 0; + header->atyp = atyp; + uint8_t *addr_data = socks_data + sizeof(struct socks_udp_header); + switch (atyp) { + case SOCKS_ATYP_IPV4: { + struct socks_addr_ipv4 *addr_ipv4 = (struct socks_addr_ipv4 *)addr_data; + addr_ipv4->addr = remote_addr.ipv4.ip; + addr_ipv4->port = remote_addr.ipv4.port; + } break; + case SOCKS_ATYP_IPV6: { + struct socks_addr_ipv6 *addr_ipv6 = (struct socks_addr_ipv6 *)addr_data; + memcpy(addr_ipv6->addr, remote_addr.ipv6.ip, sizeof(addr_ipv6->addr)); + addr_ipv6->port = remote_addr.ipv6.port; + } break; + } + // write packet to buffer + memcpy(addr_data + address_size, data, data_len); + BufferWriter_EndPacket(&con->send_writer, socks_data_len); +} + +static void first_job_handler(struct SocksUdpClient_connection *con) +{ + connection_send(con, con->first_remote_addr, con->first_data, con->first_data_len); + BFree(con->first_data); + con->first_data = NULL; + con->first_data_len = 0; +} + +static int compute_mtu(int udp_mtu) +{ + return udp_mtu + sizeof(struct socks_udp_header) + sizeof(struct socks_addr_ipv6); +} + +static int get_dns_id(BAddr *remote_addr, const uint8_t *data, int data_len) +{ + if (BAddr_GetPort(remote_addr) == htons(DNS_PORT) && data_len >= 2) { + return (data[0] << 8) + data[1]; + } + return -1; +} + +void SocksUdpClient_Init (SocksUdpClient *o, int udp_mtu, int max_connections, btime_t keepalive_time, + BAddr server_addr, const struct BSocksClient_auth_info *auth_info, size_t num_auth_info, + BReactor *reactor, void *user, + SocksUdpClient_handler_received handler_received) +{ + ASSERT(udp_mtu >= 0) + ASSERT(compute_mtu(udp_mtu) >= 0) + ASSERT(max_connections > 0) + + // init arguments + o->server_addr = server_addr; + o->auth_info = auth_info; + o->num_auth_info = num_auth_info; + o->udp_mtu = udp_mtu; + o->max_connections = max_connections; + o->num_connections = 0; + o->keepalive_time = keepalive_time; + o->reactor = reactor; + o->user = user; + o->handler_received = handler_received; + + // limit max connections to number of conid's + if (o->max_connections > UINT16_MAX + 1) { + o->max_connections = UINT16_MAX + 1; + } + + // init connections tree + BAVL_Init(&o->connections_tree, OFFSET_DIFF(struct SocksUdpClient_connection, local_addr, connections_tree_node), (BAVL_comparator)addr_comparator, NULL); + + DebugObject_Init(&o->d_obj); +} + +void SocksUdpClient_Free (SocksUdpClient *o) +{ + // free connections + while (!BAVL_IsEmpty(&o->connections_tree)) { + struct SocksUdpClient_connection *con = UPPER_OBJECT(BAVL_GetFirst(&o->connections_tree), struct SocksUdpClient_connection, connections_tree_node); + connection_free(con); + } + + DebugObject_Free(&o->d_obj); +} + +void SocksUdpClient_SubmitPacket (SocksUdpClient *o, BAddr local_addr, BAddr remote_addr, const uint8_t *data, int data_len) +{ + DebugObject_Access(&o->d_obj); + ASSERT(local_addr.type == BADDR_TYPE_IPV4 || local_addr.type == BADDR_TYPE_IPV6) + ASSERT(remote_addr.type == BADDR_TYPE_IPV4 || remote_addr.type == BADDR_TYPE_IPV6) + ASSERT(data_len >= 0) + + // lookup connection + struct SocksUdpClient_connection *con = find_connection_by_addr(o, local_addr); + if (!con) { + if (o->num_connections == o->max_connections) { + // Drop the packet. + BLog(BLOG_ERROR, "Dropping UDP packet, reached max number of connections."); + return; + } + // create new connection and enqueue the packet + connection_init(o, local_addr, remote_addr, data, data_len); + } else { + // send packet + connection_send(con, remote_addr, data, data_len); + } +} diff --git a/android/jni/socks_udp_client/SocksUdpClient.h b/android/jni/socks_udp_client/SocksUdpClient.h new file mode 100644 index 0000000..ad5c5c8 --- /dev/null +++ b/android/jni/socks_udp_client/SocksUdpClient.h @@ -0,0 +1,132 @@ +/* + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef BADVPN_SOCKS_UDP_CLIENT_SOCKSUDPCLIENT_H +#define BADVPN_SOCKS_UDP_CLIENT_SOCKSUDPCLIENT_H + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// This sets the number of packets to accept while waiting for SOCKS server to authenticate and +// connect. A slow or far-away SOCKS server could require 300 ms to connect, and a chatty +// client (e.g. STUN) could send a packet every 20 ms, so a limit of 16 seems reasonable. +#define SOCKS_UDP_SEND_BUFFER_PACKETS 16 + +typedef void (*SocksUdpClient_handler_received) (void *user, BAddr local_addr, BAddr remote_addr, const uint8_t *data, int data_len); + +typedef struct { + BAddr server_addr; + const struct BSocksClient_auth_info *auth_info; + size_t num_auth_info; + int num_connections; + int max_connections; + int udp_mtu; + btime_t keepalive_time; + BReactor *reactor; + void *user; + SocksUdpClient_handler_received handler_received; + BAVL connections_tree; // By local_addr + DebugObject d_obj; +} SocksUdpClient; + +struct SocksUdpClient_connection { + SocksUdpClient *client; + BAddr local_addr; + BSocksClient socks; + BufferWriter send_writer; + PacketBuffer send_buffer; + PacketPassInactivityMonitor send_monitor; + PacketPassInterface send_if; + BDatagram socket; + PacketPassInterface recv_if; + SinglePacketBuffer recv_buffer; + // The first_* members represent the initial packet, which has to be stored so it can wait for + // send_writer to become ready. + uint8_t *first_data; + int first_data_len; + BAddr first_remote_addr; + // If all packets sent so far have been sent to the same IP, port 53, with the + // same DNS ID, then this is that ID. Otherwise, it is -1. This is used to + // close ephemeral DNS query connections once a response is received. + int dns_id; + BPending first_job; + BAVLNode connections_tree_node; +}; + +/** + * Initializes the SOCKS5-UDP client object. + * This function does not perform network access, so it will always succeed if the arguments + * are valid. + * + * Currently, this function only supports connection to a SOCKS5 server that is routable from + * localhost (i.e. running on the local machine). It may be possible to add support for remote + * servers, but SOCKS5 does not support UDP if there is a NAT or firewall between the client + * and the proxy. + * + * @param o the object + * @param udp_mtu the maximum size of packets that will be sent through the tunnel + * @param max_connections how many local ports to track before dropping packets + * @param keepalive_time how long to track an idle local port before forgetting it + * @param server_addr SOCKS5 server address. MUST BE ON LOCALHOST. + * @param reactor reactor we live in + * @param user value passed to handler + * @param handler_received handler for incoming UDP packets + */ +void SocksUdpClient_Init (SocksUdpClient *o, int udp_mtu, int max_connections, btime_t keepalive_time, + BAddr server_addr, const struct BSocksClient_auth_info *auth_info, size_t num_auth_info, + BReactor *reactor, void *user, SocksUdpClient_handler_received handler_received); +void SocksUdpClient_Free (SocksUdpClient *o); + +/** + * Submit a packet to be sent through the proxy. + * + * This will reuse an existing connection for packets from local_addr, or create one if + * there is none. If the number of live connections exceeds max_connections, or if the number of + * buffered packets from this port exceeds a limit, packets will be dropped silently. + * + * As a resource optimization, if a connection has only been used to send one DNS query, then + * the connection will be closed and freed once the reply is received. + * + * @param o the object + * @param local_addr the UDP packet's source address, and the expected destination for replies + * @param remote_addr the destination of the packet after it exits the proxy + * @param data the packet contents. Caller retains ownership. + */ +void SocksUdpClient_SubmitPacket (SocksUdpClient *o, BAddr local_addr, BAddr remote_addr, const uint8_t *data, int data_len); + +#endif diff --git a/android/jni/socksclient/BSocksClient.c b/android/jni/socksclient/BSocksClient.c index 6468d66..85502d6 100644 --- a/android/jni/socksclient/BSocksClient.c +++ b/android/jni/socksclient/BSocksClient.c @@ -335,9 +335,11 @@ void recv_handler_done (BSocksClient *o, int data_len) int addr_len; switch (ntoh8(imsg.atyp)) { case SOCKS_ATYP_IPV4: + o->bind_addr.type = BADDR_TYPE_IPV4; addr_len = sizeof(struct socks_addr_ipv4); break; case SOCKS_ATYP_IPV6: + o->bind_addr.type = BADDR_TYPE_IPV6; addr_len = sizeof(struct socks_addr_ipv6); break; default: @@ -371,6 +373,26 @@ void recv_handler_done (BSocksClient *o, int data_len) case STATE_RECEIVED_REPLY_HEADER: { BLog(BLOG_DEBUG, "received reply rest"); + // Record the address of the new socket bound by the server. + // For a CONNECT command, this is the address of the TCP client socket to dest_addr. + // Knowing this address is usually not important. + // For a UDP_ASSOCIATE command, this is the UDP address to which to send SOCKS UDP. + // Recording this address is a prerequisite to send traffic on a SOCKS-UDP association. + void *addr_buffer = o->buffer + sizeof(struct socks_reply_header); + switch (o->bind_addr.type) { + case BADDR_TYPE_IPV4: { + struct socks_addr_ipv4 *ip4 = addr_buffer; + o->bind_addr.ipv4.ip = ip4->addr; + o->bind_addr.ipv4.port = ip4->port; + } break; + case BADDR_TYPE_IPV6: { + struct socks_addr_ipv6 *ip6 = addr_buffer; + memcpy(o->bind_addr.ipv6.ip, ip6->addr, sizeof(ip6->addr)); + o->bind_addr.ipv6.port = ip6->port; + } break; + default: ASSERT(0); + } + // free buffer BFree(o->buffer); o->buffer = NULL; @@ -482,7 +504,7 @@ void auth_finished (BSocksClient *o) // write request struct socks_request_header header; header.ver = hton8(SOCKS_VERSION); - header.cmd = hton8(SOCKS_CMD_CONNECT); + header.cmd = hton8(o->udp ? SOCKS_CMD_UDP_ASSOCIATE : SOCKS_CMD_CONNECT); header.rsv = hton8(0); switch (o->dest_addr.type) { case BADDR_TYPE_IPV4: { @@ -531,7 +553,7 @@ struct BSocksClient_auth_info BSocksClient_auth_password (const char *username, int BSocksClient_Init (BSocksClient *o, BAddr server_addr, const struct BSocksClient_auth_info *auth_info, size_t num_auth_info, - BAddr dest_addr, BSocksClient_handler handler, void *user, BReactor *reactor) + BAddr dest_addr, bool udp, BSocksClient_handler handler, void *user, BReactor *reactor) { ASSERT(!BAddr_IsInvalid(&server_addr)) ASSERT(dest_addr.type == BADDR_TYPE_IPV4 || dest_addr.type == BADDR_TYPE_IPV6) @@ -546,6 +568,7 @@ int BSocksClient_Init (BSocksClient *o, o->auth_info = auth_info; o->num_auth_info = num_auth_info; o->dest_addr = dest_addr; + o->udp = udp; o->handler = handler; o->user = user; o->reactor = reactor; diff --git a/android/jni/socksclient/BSocksClient.h b/android/jni/socksclient/BSocksClient.h index f19b3a8..7bb7754 100644 --- a/android/jni/socksclient/BSocksClient.h +++ b/android/jni/socksclient/BSocksClient.h @@ -35,6 +35,7 @@ #define BADVPN_SOCKS_BSOCKSCLIENT_H #include +#include #include #include @@ -78,6 +79,8 @@ typedef struct { const struct BSocksClient_auth_info *auth_info; size_t num_auth_info; BAddr dest_addr; + bool udp; + BAddr bind_addr; BSocksClient_handler handler; void *user; BReactor *reactor; @@ -117,7 +120,7 @@ struct BSocksClient_auth_info BSocksClient_auth_password (const char *username, */ int BSocksClient_Init (BSocksClient *o, BAddr server_addr, const struct BSocksClient_auth_info *auth_info, size_t num_auth_info, - BAddr dest_addr, BSocksClient_handler handler, void *user, BReactor *reactor) WARN_UNUSED; + BAddr dest_addr, bool udp, BSocksClient_handler handler, void *user, BReactor *reactor) WARN_UNUSED; /** * Frees the object. diff --git a/android/jni/system/BDatagram.h b/android/jni/system/BDatagram.h index 33efb45..63e55ec 100644 --- a/android/jni/system/BDatagram.h +++ b/android/jni/system/BDatagram.h @@ -123,6 +123,16 @@ void BDatagram_SetSendAddrs (BDatagram *o, BAddr remote_addr, BIPAddr local_addr */ int BDatagram_GetLastReceiveAddrs (BDatagram *o, BAddr *remote_addr, BIPAddr *local_addr); +/** + * Returns the bound port. + * Fails if and only if a port is not yet bound. + * + * @param o the object + * @param local_port returns the local bound port. + * @return 1 on success, 0 on failure + */ +int BDatagram_GetLocalPort (BDatagram *o, uint16_t *local_port); + #ifndef BADVPN_USE_WINAPI /** * Returns the underlying socket file descriptor of the datagram object. diff --git a/android/jni/system/BDatagram_unix.c b/android/jni/system/BDatagram_unix.c index 67853db..1182acd 100644 --- a/android/jni/system/BDatagram_unix.c +++ b/android/jni/system/BDatagram_unix.c @@ -735,6 +735,30 @@ int BDatagram_GetLastReceiveAddrs (BDatagram *o, BAddr *remote_addr, BIPAddr *lo return 1; } +int BDatagram_GetLocalPort (BDatagram *o, uint16_t *local_port) +{ + DebugObject_Access(&o->d_obj); + + struct sys_addr sysaddr; + BAddr addr; + sysaddr.len = sizeof(sysaddr.addr); + if (getsockname(o->fd, &sysaddr.addr.generic, &sysaddr.len) != 0) { + BLog(BLOG_ERROR, "getsockname failed"); + return 0; + } + addr_sys_to_socket(&addr, sysaddr); + if (addr.type == BADDR_TYPE_IPV4) { + *local_port = addr.ipv4.port; + return 1; + } + if (addr.type == BADDR_TYPE_IPV6) { + *local_port = addr.ipv6.port; + return 1; + } + BLog(BLOG_ERROR, "Unknown address type from getsockname: %d", addr.type); + return 0; +} + int BDatagram_GetFd (BDatagram *o) { DebugObject_Access(&o->d_obj); diff --git a/android/jni/system/BDatagram_win.c b/android/jni/system/BDatagram_win.c index 0528866..2a8df90 100644 --- a/android/jni/system/BDatagram_win.c +++ b/android/jni/system/BDatagram_win.c @@ -638,6 +638,31 @@ int BDatagram_GetLastReceiveAddrs (BDatagram *o, BAddr *remote_addr, BIPAddr *lo return 1; } +int BDatagram_GetLocalPort (BDatagram *o, uint16_t *local_port) +{ + DebugObject_Access(&o->d_obj); + + struct BDatagram_sys_addr sysaddr; + BAddr addr; + socklen_t addr_size = sizeof(sysaddr.addr.generic); + if (getsockname(o->sock, &sysaddr.addr.generic, &addr_size) != 0) { + BLog(BLOG_ERROR, "getsockname failed"); + return 0; + } + + addr_sys_to_socket(&addr, sysaddr); + if (addr.type == BADDR_TYPE_IPV4) { + *local_port = addr.ipv4.port; + return 1; + } + if (addr.type == BADDR_TYPE_IPV6) { + *local_port = addr.ipv6.port; + return 1; + } + BLog(BLOG_ERROR, "Unknown address type from getsockname: %d", addr.type); + return 0; +} + int BDatagram_SetReuseAddr (BDatagram *o, int reuse) { DebugObject_Access(&o->d_obj); diff --git a/android/jni/tun2socks/CMakeLists.txt b/android/jni/tun2socks/CMakeLists.txt index 8c8597c..9ff5ca5 100644 --- a/android/jni/tun2socks/CMakeLists.txt +++ b/android/jni/tun2socks/CMakeLists.txt @@ -2,7 +2,7 @@ add_executable(badvpn-tun2socks tun2socks.c SocksUdpGwClient.c ) -target_link_libraries(badvpn-tun2socks system flow tuntap lwip socksclient udpgw_client) +target_link_libraries(badvpn-tun2socks system flow tuntap lwip socksclient udpgw_client stringmap socks_udp_client) install( TARGETS badvpn-tun2socks diff --git a/android/jni/tun2socks/SocksUdpGwClient.c b/android/jni/tun2socks/SocksUdpGwClient.c index 949d114..5ce68d9 100644 --- a/android/jni/tun2socks/SocksUdpGwClient.c +++ b/android/jni/tun2socks/SocksUdpGwClient.c @@ -62,7 +62,7 @@ static void try_connect (SocksUdpGwClient *o) ASSERT(!BTimer_IsRunning(&o->reconnect_timer)) // init SOCKS client - if (!BSocksClient_Init(&o->socks_client, o->socks_server_addr, o->auth_info, o->num_auth_info, o->remote_udpgw_addr, (BSocksClient_handler)socks_client_handler, o, o->reactor)) { + if (!BSocksClient_Init(&o->socks_client, o->socks_server_addr, o->auth_info, o->num_auth_info, o->remote_udpgw_addr, false, (BSocksClient_handler)socks_client_handler, o, o->reactor)) { BLog(BLOG_ERROR, "BSocksClient_Init failed"); goto fail0; } diff --git a/android/jni/tun2socks/jni/ca/psiphon/Tun2Socks.java b/android/jni/tun2socks/jni/ca/psiphon/Tun2Socks.java index 0ce4a38..29b3a1b 100644 --- a/android/jni/tun2socks/jni/ca/psiphon/Tun2Socks.java +++ b/android/jni/tun2socks/jni/ca/psiphon/Tun2Socks.java @@ -26,9 +26,12 @@ private native static int runTun2Socks( int vpnInterfaceMTU, String vpnIpAddress, String vpnNetMask, + String vpnIpV6Address, String socksServerAddress, - String udpgwServerAddress, - int udpgwTransparentDNS); + String udpRelayAddress, + String dnsResolverAddress, + int transparentDNS, + int socks5UDP); private native static int terminateTun2Socks(); diff --git a/android/jni/tun2socks/tun2socks.c b/android/jni/tun2socks/tun2socks.c index 86d258b..2d1994c 100644 --- a/android/jni/tun2socks/tun2socks.c +++ b/android/jni/tun2socks/tun2socks.c @@ -70,11 +70,12 @@ #include #include #include -#include +#include #include #ifndef BADVPN_USE_WINAPI #include +#include #endif #include @@ -121,17 +122,20 @@ struct { char *udpgw_remote_server_addr; int udpgw_max_connections; int udpgw_connection_buffer_size; - int transparent_dns; // ==== PSIPHON ==== int tun_fd; int tun_mtu; int set_signal; // ==== PSIPHON ==== - // ==== UPROXY ==== + // ==== OUTLINE ==== +#ifndef BADVPN_USE_WINAPI char *dns_resolver_addr; +#endif + int transparent_dns; + int socks5_udp; char *udp_relay_addr; - // ==== UPROXY ==== + // ==== OUTLINE ==== } options; // TCP client @@ -200,6 +204,9 @@ PacketPassInterface device_read_interface; SocksUdpGwClient udpgw_client; int udp_mtu; +// SOCKS5-UDP client +SocksUdpClient socks_udp_client; + // TCP timer BTimer tcp_timer; @@ -227,13 +234,13 @@ static void run (void); static void init_arguments (const char* program_name); // ==== PSIPHON ==== -//==== UPROXY ==== +//==== OUTLINE ==== // IP address of the DNS server to which all DNS requests will be forwarded BAddr dns_resolver_addr; // IP address the UDP relay to which all SOCKS UDP requests will be sent // NOTE: this implementation does not make UDP ASSOCIATE requests and only supports DNS/UDP. BAddr udp_relay_addr; -//==== UPROXY ==== +//==== OUTLINE ==== static void terminate (void); static void print_help (const char *name); @@ -272,7 +279,13 @@ static int client_socks_recv_send_out (struct tcp_client *client); static err_t client_sent_func (void *arg, struct tcp_pcb *tpcb, u16_t len); static void udp_send_packet_to_device (void *unused, BAddr local_addr, BAddr remote_addr, const uint8_t *data, int data_len); -//==== UPROXY ==== +//==== OUTLINE ==== +#ifndef BADVPN_USE_WINAPI + +// Returns whether DNS resolution over UDP is supported. +static int supports_dns_over_udp() { + return options.udp_relay_addr && options.dns_resolver_addr; +} // UDP process control block, used for UDP communications housekeeping. typedef struct { @@ -292,7 +305,7 @@ static void udp_free(UdpPcb* udp_pcb); // File descriptor handler for UDP socket. static void udp_fd_handler(UdpPcb* udp_pcb, int event) { - size_t socks_udp_header_len = sizeof(struct socks_udp_header); + size_t socks_udp_header_len = sizeof(struct socks_udp_header) + sizeof(struct socks_addr_ipv4); int datagram_len = udp_recv(udp_pcb->sockfd, udp_pcb->buffer, UDP_MAX_DATAGRAM_BYTES); if (datagram_len <= 0) { @@ -304,6 +317,10 @@ static void udp_fd_handler(UdpPcb* udp_pcb, int event) { return; } struct socks_udp_header* header = (struct socks_udp_header*)udp_pcb->buffer; + if (header->atyp != SOCKS_ATYP_IPV4) { + BLog(BLOG_ERROR, "Unexpected DNS server address type: %d", header->atyp); + return; + } size_t udp_data_len = datagram_len - socks_udp_header_len; uint8_t* udp_data = udp_pcb->buffer + socks_udp_header_len; @@ -409,13 +426,15 @@ static int udp_recv(int sockfd, uint8_t* buffer, int buffer_len) { static void udp_free(UdpPcb* udp_pcb) { if (udp_pcb->buffer) free(udp_pcb->buffer); - if (udp_pcb->sockfd) + if (udp_pcb->sockfd) { + BReactor_RemoveFileDescriptor(&ss, &udp_pcb->bfd); close(udp_pcb->sockfd); + } BStringMap_Free(&udp_pcb->map); } - -//==== UPROXY ===== +#endif +//==== OUTLINE ===== //==== PSIPHON ==== @@ -454,27 +473,40 @@ JNIEXPORT jint JNICALL Java_org_uproxy_tun2socks_Tun2SocksJni_runTun2Socks( jint vpnInterfaceMTU, jstring vpnIpAddress, jstring vpnNetMask, + jstring vpnIpV6Address, jstring socksServerAddress, jstring udpRelayAddress, jstring dnsResolverAddress, - jint transparentDNS) + jint transparentDNS, + jint socks5UDP) { g_env = env; const char* vpnIpAddressStr = (*env)->GetStringUTFChars(env, vpnIpAddress, 0); const char* vpnNetMaskStr = (*env)->GetStringUTFChars(env, vpnNetMask, 0); - const char* socksServerAddressStr = (*env)->GetStringUTFChars(env, socksServerAddress, 0); - const char* udpRelayAddressStr = (*env)->GetStringUTFChars(env, udpRelayAddress, 0); - const char* dnsResolverAddressStr = (*env)->GetStringUTFChars(env, dnsResolverAddress, 0); + const char* socksServerAddressStr = socksServerAddress != NULL + ? (*env)->GetStringUTFChars(env, socksServerAddress, 0) + : NULL; + const char* udpRelayAddressStr = udpRelayAddress != NULL + ? (*env)->GetStringUTFChars(env, udpRelayAddress, 0) + : NULL; + const char* vpnIpV6AddressStr = vpnIpV6Address != NULL + ? (*env)->GetStringUTFChars(env, vpnIpV6Address, 0) + : NULL; + const char* dnsResolverAddressStr = dnsResolverAddress != NULL + ? (*env)->GetStringUTFChars(env, dnsResolverAddress, 0) + : NULL; init_arguments("uProxy tun2socks"); options.netif_ipaddr = (char*)vpnIpAddressStr; options.netif_netmask = (char*)vpnNetMaskStr; + options.netif_ip6addr = (char*)vpnIpV6AddressStr; options.socks_server_addr = (char*)socksServerAddressStr; options.udp_relay_addr = (char*)udpRelayAddressStr; options.dns_resolver_addr = (char*)dnsResolverAddressStr; options.transparent_dns = transparentDNS; + options.socks5_udp = socks5UDP; options.tun_fd = vpnInterfaceFileDescriptor; options.tun_mtu = vpnInterfaceMTU; options.set_signal = 0; @@ -488,9 +520,18 @@ JNIEXPORT jint JNICALL Java_org_uproxy_tun2socks_Tun2SocksJni_runTun2Socks( (*env)->ReleaseStringUTFChars(env, vpnIpAddress, vpnIpAddressStr); (*env)->ReleaseStringUTFChars(env, vpnNetMask, vpnNetMaskStr); + if (vpnIpV6Address != NULL) { + (*env)->ReleaseStringUTFChars(env, vpnIpV6Address, vpnIpV6AddressStr); + } + if (socksServerAddressStr != NULL) { (*env)->ReleaseStringUTFChars(env, socksServerAddress, socksServerAddressStr); + } + if (udpRelayAddressStr != NULL) { (*env)->ReleaseStringUTFChars(env, udpRelayAddress, udpRelayAddressStr); + } + if (dnsResolverAddressStr != NULL) { (*env)->ReleaseStringUTFChars(env, dnsResolverAddress, dnsResolverAddressStr); + } g_env = 0; @@ -539,7 +580,7 @@ int main (int argc, char **argv) if (!parse_arguments(argc, argv)) { fprintf(stderr, "Failed to parse arguments\n"); print_help(argv[0]); - goto fail0; + return 1; } // handle --help and --version @@ -562,7 +603,7 @@ int main (int argc, char **argv) case LOGGER_SYSLOG: if (!BLog_InitSyslog(options.logger_syslog_ident, options.logger_syslog_facility)) { fprintf(stderr, "Failed to initialize syslog logger\n"); - goto fail0; + return 1; } break; #endif @@ -683,6 +724,10 @@ void run() BLog(BLOG_ERROR, "SocksUdpGwClient_Init failed"); goto fail4a; } + } else if (options.socks5_udp) { + SocksUdpClient_Init(&socks_udp_client, udp_mtu, DEFAULT_UDPGW_MAX_CONNECTIONS, + UDPGW_KEEPALIVE_TIME, socks_server_addr, socks_auth_info, + socks_num_auth_info, &ss, NULL, udp_send_packet_to_device); } // init lwip init job @@ -713,11 +758,15 @@ void run() // init number of clients num_clients = 0; - // ==== UPROXY ==== + // ==== OUTLINE ==== +#ifndef BADVPN_USE_WINAPI + if (supports_dns_over_udp()) { if (!udp_init(&udp_pcb)) { goto fail5; } - // ==== UPROXY ==== + } +#endif + // ==== OUTLINE ==== // enter event loop BLog(BLOG_NOTICE, "entering event loop"); @@ -760,9 +809,13 @@ void run() tcp_remove(tcp_tw_pcbs); // ==== PSIPHON ==== - // ==== UPROXY ==== + // ==== OUTLINE ==== +#ifndef BADVPN_USE_WINAPI + if (supports_dns_over_udp()) { udp_free(&udp_pcb); - // ==== UPROXY ==== + } +#endif + // ==== OUTLINE ==== BReactor_RemoveTimer(&ss, &tcp_timer); BFree(device_write_buf); @@ -770,6 +823,8 @@ void run() BPending_Free(&lwip_init_job); if (options.udpgw_remote_server_addr) { SocksUdpGwClient_Free(&udpgw_client); + } else if (options.socks5_udp) { + SocksUdpClient_Free(&socks_udp_client); } fail4a: SinglePacketBuffer_Free(&device_read_buffer); @@ -777,7 +832,9 @@ void run() PacketPassInterface_Free(&device_read_interface); BTap_Free(&device); fail3: + if (options.set_signal) { BSignal_Finish(); + } fail2: BReactor_Free(&ss); fail1: @@ -830,6 +887,12 @@ void print_help (const char *name) " [--udpgw-max-connections ]\n" " [--udpgw-connection-buffer-size ]\n" " [--udpgw-transparent-dns]\n" + // ==== OUTLINE ==== + " [--transparent-dns]\n" + " [--dns-resolver-addr ]\n" + " [--socks-udp]\n" + " [--udp-relay-addr ]\n" + // ==== OUTLINE ==== "Address format is a.b.c.d:port (IPv4) or [addr]:port (IPv6).\n", name ); @@ -867,8 +930,14 @@ void init_arguments (const char* program_name) options.udpgw_remote_server_addr = NULL; options.udpgw_max_connections = DEFAULT_UDPGW_MAX_CONNECTIONS; options.udpgw_connection_buffer_size = DEFAULT_UDPGW_CONNECTION_BUFFER_SIZE; + // ==== OUTLINE ==== options.transparent_dns = 0; +#ifndef BADVPN_USE_WINAPI options.dns_resolver_addr = NULL; +#endif + options.socks5_udp = 0; + options.udp_relay_addr = NULL; + // ==== OUTLINE ==== options.tun_fd = 0; options.set_signal = 1; @@ -1057,10 +1126,32 @@ int parse_arguments (int argc, char *argv[]) return 0; } i++; - } - else if (!strcmp(arg, "--transparent-dns")) { + // ==== OUTLINE ==== + } else if (!strcmp(arg, "--transparent-dns")) { options.transparent_dns = 1; } +#ifndef BADVPN_USE_WINAPI + else if (!strcmp(arg, "--dns-resolver-addr")) { + if (1 >= argc - i) { + fprintf(stderr, "%s: requires an argument\n", arg); + return 0; + } + options.dns_resolver_addr = argv[i + 1]; + i++; + } +#endif + else if (!strcmp(arg, "--socks5-udp")) { + options.socks5_udp = 1; + } + else if (!strcmp(arg, "--udp-relay-addr")) { + if (1 >= argc - i) { + fprintf(stderr, "%s: requires an argument\n", arg); + return 0; + } + options.udp_relay_addr = argv[i + 1]; + i++; + } + // ==== OUTLINE ==== else { fprintf(stderr, "unknown option: %s\n", arg); return 0; @@ -1098,6 +1189,11 @@ int parse_arguments (int argc, char *argv[]) } } + if (options.udpgw_remote_server_addr && options.udp_relay_addr) { + fprintf(stderr, "--udpgw-remote-server-addr and --udp-relay cannot both be given\n"); + return 0; + } + return 1; } @@ -1172,24 +1268,26 @@ int process_arguments (void) } } - if (options.transparent_dns) { - if (!options.dns_resolver_addr || !options.udp_relay_addr) { - BLog(BLOG_ERROR, - "transparentDNS requires a DNS resolver address and a UDP relay address"); - return 0; - } + // ==== OUTLINE ==== +#ifndef BADVPN_USE_WINAPI + if (options.dns_resolver_addr) { BLog(BLOG_INFO, "DNS resolver address: %s", options.dns_resolver_addr); // Resolve DNS server address if (!BAddr_Parse2(&dns_resolver_addr, options.dns_resolver_addr, NULL, 0, 0)) { BLog(BLOG_ERROR, "DNS resolver address: BAddr_Parse2 failed"); return 0; } + } +#endif + // Resolve UDP relay address. + if (options.udp_relay_addr) { if (!BAddr_Parse2(&udp_relay_addr, options.udp_relay_addr, NULL, 0, 0)) { BLog(BLOG_ERROR, "UDP relay address: BAddr_Parse2 failed"); return 0; } } + // ==== OUTLINE ==== return 1; } @@ -1395,14 +1493,19 @@ void device_read_handler_send (void *unused, uint8_t *data, int data_len) int process_device_udp_packet (uint8_t *data, int data_len) { ASSERT(data_len >= 0) - // do nothing if we don't have udpgw or dns resolver - if (!options.udpgw_remote_server_addr && !options.dns_resolver_addr) { + // do nothing if we don't have udpgw or dns resolver or UDP relay + if (!options.udpgw_remote_server_addr && +#ifndef BADVPN_USE_WINAPI + !options.dns_resolver_addr && +#endif + !options.transparent_dns && !options.udp_relay_addr) { + BLog(BLOG_WARNING, "cannot process UDP packet"); goto fail; } BAddr local_addr; BAddr remote_addr; - int is_dns; + int is_dns = 0; uint8_t ip_version = 0; if (data_len > 0) { @@ -1443,11 +1546,8 @@ int process_device_udp_packet (uint8_t *data, int data_len) BAddr_InitIPv4(&local_addr, ipv4_header.source_address, udp_header.source_port); BAddr_InitIPv4(&remote_addr, ipv4_header.destination_address, udp_header.dest_port); - // if transparent DNS is enabled, any packet to the DNS resolver on - // port 53 is considered a DNS packet - is_dns = (options.transparent_dns && - remote_addr.ipv4.ip == dns_resolver_addr.ipv4.ip && - udp_header.dest_port == hton16(UDP_DNS_PORT)); + // Assume UDP packets to port 53 are DNS. + is_dns = udp_header.dest_port == hton16(UDP_DNS_PORT); } break; case 6: { @@ -1487,8 +1587,7 @@ int process_device_udp_packet (uint8_t *data, int data_len) BAddr_InitIPv6(&local_addr, ipv6_header.source_address, udp_header.source_port); BAddr_InitIPv6(&remote_addr, ipv6_header.destination_address, udp_header.dest_port); - // TODO dns - is_dns = 0; + // TODO: is_dns } break; default: { @@ -1508,19 +1607,24 @@ int process_device_udp_packet (uint8_t *data, int data_len) BAddr_Print(&remote_addr, remote_addr_str); BLog(BLOG_DEBUG, "UDP: %s -> %s. DNS: %d", local_addr_str, remote_addr_str, is_dns); - if (options.transparent_dns && is_dns) { - // Wrap the payload in a UDP SOCKS header. +#ifndef BADVPN_USE_WINAPI + if (options.transparent_dns && is_dns && supports_dns_over_udp()) { + // The SOCKS server supports UDP forwarding. Wrap the payload in a UDP SOCKS header. static size_t socks_udp_header_len = sizeof(struct socks_udp_header); struct socks_udp_header header; memset(&header, 0, socks_udp_header_len); header.atyp = SOCKS_ATYP_IPV4; - header.address.addr = remote_addr.ipv4.ip; - header.address.port = remote_addr.ipv4.port; - size_t socks_udp_request_len = socks_udp_header_len + data_len; + static size_t socks_address_len = sizeof(struct socks_addr_ipv4); + struct socks_addr_ipv4 address; + address.addr = remote_addr.ipv4.ip; + address.port = remote_addr.ipv4.port; + + size_t socks_udp_request_len = socks_udp_header_len + socks_address_len + data_len; char socks_udp_request[socks_udp_request_len]; memcpy(socks_udp_request, &header, socks_udp_header_len); - memcpy(socks_udp_request + socks_udp_header_len, data, data_len); + memcpy(socks_udp_request + socks_udp_header_len, &address, socks_address_len); + memcpy(socks_udp_request + socks_udp_header_len + socks_address_len, data, data_len); int sent_bytes = udp_send(udp_pcb.sockfd, socks_udp_request, socks_udp_request_len); if (sent_bytes < data_len) { @@ -1536,10 +1640,20 @@ int process_device_udp_packet (uint8_t *data, int data_len) "failed to associate dns request id to local address"); goto fail; } - } else if (options.udpgw_remote_server_addr) { + return 1; + } +#endif + if (options.udpgw_remote_server_addr) { // submit packet to udpgw SocksUdpGwClient_SubmitPacket(&udpgw_client, local_addr, remote_addr, is_dns, data, data_len); + } else if (options.socks5_udp) { + SocksUdpClient_SubmitPacket(&socks_udp_client, local_addr, remote_addr, data, data_len); + } else if (options.transparent_dns && is_dns) { + // The SOCKS server does not support UDP forwarding. Send a DNS response with a + // truncated bit so that the client retries over TCP. + dns_synthesize_truncated_response((struct dns_header *)data); + udp_send_packet_to_device(NULL, local_addr, remote_addr, data, data_len); } return 1; @@ -1699,7 +1813,7 @@ err_t listener_accept_func (void *arg, struct tcp_pcb *newpcb, err_t err) // init SOCKS if (!BSocksClient_Init(&client->socks_client, socks_server_addr, socks_auth_info, socks_num_auth_info, - addr, (BSocksClient_handler)client_socks_handler, client, &ss)) { + addr, false, (BSocksClient_handler)client_socks_handler, client, &ss)) { BLog(BLOG_ERROR, "listener accept: BSocksClient_Init failed"); goto fail1; } @@ -2207,7 +2321,6 @@ err_t client_sent_func (void *arg, struct tcp_pcb *tpcb, u16_t len) void udp_send_packet_to_device (void *unused, BAddr local_addr, BAddr remote_addr, const uint8_t *data, int data_len) { - ASSERT(options.udpgw_remote_server_addr) ASSERT(local_addr.type == BADDR_TYPE_IPV4 || local_addr.type == BADDR_TYPE_IPV6) ASSERT(local_addr.type == remote_addr.type) ASSERT(data_len >= 0) diff --git a/android/jni/tuntap/BTap.c b/android/jni/tuntap/BTap.c index 2942006..a983583 100644 --- a/android/jni/tuntap/BTap.c +++ b/android/jni/tuntap/BTap.c @@ -269,9 +269,9 @@ int BTap_Init2 (BTap *o, BReactor *reactor, struct BTap_init_data init_data, BTa // get MTU - ULONG umtu; - - if (!DeviceIoControl(o->device, TAP_IOCTL_GET_MTU, NULL, 0, &umtu, sizeof(umtu), &len, NULL)) { + ULONG umtu = 0; + + if (!DeviceIoControl(o->device, TAP_IOCTL_GET_MTU, &umtu, sizeof(umtu), &umtu, sizeof(umtu), &len, NULL)) { BLog(BLOG_ERROR, "DeviceIoControl(TAP_IOCTL_GET_MTU) failed"); goto fail2; } @@ -477,21 +477,16 @@ int BTap_InitWithFD (BTap *o, BReactor *reactor, int fd, int mtu, BTap_handler_e { ASSERT(tun == 0 || tun == 1) - #ifndef BADVPN_LINUX - - return 0; - - #endif - + #ifdef BADVPN_LINUX o->reactor = reactor; o->handler_error = handler_error; o->handler_error_user = handler_error_user; o->frame_mtu = mtu; o->fd = fd; - // ===== UPROXY ===== + // ===== OUTLINE ===== // Do not take ownership or close the TUN file descriptor o->close_fd = 0; - // ===== /UPROXY ===== + // ===== /OUTLINE ===== // TODO: use BTap_Init2? Still some different behavior (we don't want the fcntl block; we do want close to be called) @@ -524,6 +519,8 @@ int BTap_InitWithFD (BTap *o, BReactor *reactor, int fd, int mtu, BTap_handler_e DebugError_Init(&o->d_err, BReactor_PendingGroup(o->reactor)); DebugObject_Init(&o->d_obj); return 1; +#endif + return 0; } // ==== PSIPHON ==== From ab12b21ad3140efc08e7cd4d378a614e05704a79 Mon Sep 17 00:00:00 2001 From: Xmader Date: Sun, 13 Oct 2019 17:16:35 -0400 Subject: [PATCH 4/4] update binary file --- android/libs/arm64-v8a/libtun2socks.so | Bin 192632 -> 209032 bytes android/libs/armeabi-v7a/libtun2socks.so | Bin 141996 -> 154292 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/android/libs/arm64-v8a/libtun2socks.so b/android/libs/arm64-v8a/libtun2socks.so index 9822b880a6f9247d4f93ff0c9f61cf65a2ed39ab..0790099e67e5ad154e580e514df2b832bd458349 100644 GIT binary patch literal 209032 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 b4)!I(hxV(DL*BKjlRp2KYe}wyU7-ID#jvlt delta 88350 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�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 delta 59963 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