From a412fa24d541cc07dc70d76f0cd917d2f1ef00a7 Mon Sep 17 00:00:00 2001 From: bolvan Date: Sun, 7 Apr 2019 10:00:56 +0300 Subject: [PATCH] ip2net internal unique + ipv4/bitcount passthrough --- binaries/armhf/ip2net | Bin 38108 -> 38108 bytes binaries/mips32r1-lsb/ip2net | Bin 73608 -> 73640 bytes binaries/mips32r1-msb/ip2net | Bin 65224 -> 66392 bytes binaries/x86/ip2net | Bin 38088 -> 38088 bytes binaries/x86_64/ip2net | Bin 34616 -> 34616 bytes ip2net/ip2net.c | 107 ++++++++++++++++++++++------------- ipset/create_ipset.sh | 4 +- 7 files changed, 70 insertions(+), 41 deletions(-) diff --git a/binaries/armhf/ip2net b/binaries/armhf/ip2net index 7550f3534d0a2c3e51872974bb4eb7290570dd79..9d7b9e08b6f666cfd7f16308c98d46cef3a82fdb 100755 GIT binary patch delta 4414 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 delta 3741 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 delta 12400 zcmb_i3tW^{+CS$E5|HSiTm@uCMnFNCyy7K&x#ayaUQ%nlOo)niGBfKl85EN(WY9+) z+qJ?=hOPlMhE}NKH8U%0tu@!$!EO88mUY>(iQTW2?|i{W$G(g_~br8dEF1wIyWapCe*xBTKc0O6n4pwKf zfRXx!Vx3lRWZDdcT?tWlmUFey3JYLDw~*zAyJ*juS&Pu=)VXXvQ=DVqCC3V#gO9ie z^IU_@v6=3%e6O*o?ygT)ry&-%YJ6o**Kb?Cl zRb80N(%nowgG|ZNp$!kX7=VFo2( zk&7{B**aKP?NSi##ZT+B+SO((`>2$Y0Xa?_6pZ=Gy=EmXE-Tfn0+ydQYpAGORN-B> zxC~}H5CZXoATF&{T$U~e{Uh!Ev8JJ7;!#y9Y}JvrxBC&qSxX^sjDFp{eR@_TO%wx)k;>mzW@T3~=}~gPlF# zp_l%wZuO^2cuPx`)9>)TQyIas(kyPype4DK_q+KGa_(B!JU`bJVw!8+rNccQ5s?C0 z+pCXV)WWi`p}oeiljK;Q*O=^MXH|QY>h5*~(u7%VZOk?2vy1T7eNg^96o>po%~wp# z4poP{bH^mF+!4^p6*+%*Tkp$AGGL%}<(#=cLkG_}=O8)}p{>j0T&3(5n*50ac!;(3R8+mCZeHk%J6s)ukiR{mXvVs;z zRf+QD6d66ghkp6qWUc*0)g;r4<{+j4adD|6ie64-(Qxf@IuxBN_AaB4m>$Bk%$gLl ziVO8p+TCM^*pN?sV;771Xxb6GOjIth-itlOMQMZeR6O1V4YV;~l*o&*o=OPhVts@4 zqGk-2v%B=_D@+a6;k_OOD!&cAj`-`dI0`J#MOTUQ}`H zjp}i1d#Re$RY$WLl$q1WU2meTiPV}*Y{YHVhM8?IdrQsFi|FVB;Hkwb=w`lrVoe!kCv9{14yIK;5wRiDXK5no3(01KrF)WO*2Gd zjqIuvEVNXyGRPW4NDLhiT5l>hZ)ACC_aj}^Q|8bGBKj8XAG$x(IN3#53BqeMEn{G) z#ywJlk?XWQV<5jt7c%~)Z654W=JrGv#U9`_Y=5#Hwtr>XV!lnE4$JOz+f;1+isFY) z<&Cs*coc7I2~FXxo@n-kIJW zvk>k0v9W;xkO`tuV+Y77W20c_FUL*{tAEh7=Ji-}xi1>&Ph)4mx?$s95m!dijd4{G zcfFP{h}|juvE^*UU3zJJHl#O6~cxrrQCEmjk9v><&W~P2B3IP6^ZzP=`<2+(#~b8p}N@ zaL!0g+0S~z-O_A^J&VGn?}R$xj7fTZQfe28X+$n5fJ}7`eLbmvL^y`>REv+wfKJrp zAm`Va1E|mB)CfaH+h#H#ZRD7CU^6V8oXDeT+vL$Oz_p?#o`dkNGsl6G98zlu?Q|SFE=}DS9IMtRYPU*d&vev|qFv*-& zw8MPNv>OgOmYjBndQN>_=xseOYB?o3Zo?!1+hMqf-#$xsaD4$ zt9Yo=*ELxdjk)yrF9yaKp>58$#X4ugO3{b_W>Cx3xl1R1@r&TnKCbzBq@5e9&Bt7( zRypU&!>gRPqG*#j0M3cSUS2`-=0*v9A6hqeR(t^vj6G7?iD|m8MOzAx6+;rOr9aOd z7+R9zR_5NxUk1|$X8j9+)7ySx~Sr8k4uxPVcmMtN5 z!WLny;HZpY8CL}~ZNb*yO3alTq>>sIr1PT`W*iE&#v2QH4ZUxS6*e7xZJZx$)Vb_9 zMw1_l3Rc{`6SVTNsPP(iPphv`X)|o9I_T^P4sDQK#aUQ@)L#b5-9*Xf6_vJG!(?eg zZEzmV;M(d+`tY%#q9Tz3b5{v{BCX4P6p?W?cLbiH3&&!aA6}R)G`;A#g`_hq|JLGSnVFkqnGlcf}1ohd?RJ%rqb=aI8mXYz(q28rY(BH&9Wwe9E+v| z8xve}|HnD^#KKUudq74~9P*ltb}dc_JrDD`IQ=Qg&eNI2Gemh$id^!gsEH@Xl8r(i zPwVohcapiyP9Nq+J?KdiT8+_}*%<3yCbN*dZ^`=Uikfa!a_v1OqB9F9bM{HQbYT}w zT$`0h<~x=?Do+bbV`c7NHaj#Y)`cDiJ+IKpWdr$K+P7?puq~pHs9)bk~OQ9T>Jt<@bd)1i^G5_rH>0#wDE_O0SInM&rd&SVOHY+qvE3VPX6-&aT z9avnoR-*`Q31b2Drxl}xDVma2_8e@Cb}`D4t^l*^m<)N2T(5h{W(UvvoqNy9zt~n+2-Duqt`%zOQ#;CHd1QM+d1ly$A)3jMVAjsGkq48yKu~b+HSlmFuE}rmOY2b)&ejhtkET)=Aw* zt&ikJdU$;*7!|EQjg`%O`m{udXQuay-h}+4S*TCJsWc94Z1eqTXlu|`7^~8wtwVbd z-YM3iXAW>-3Z|qDH+UNHXD6a$On&w$VZVmzfe`ipx@bBQngLbeN?irp ze;|XNEgFdW@kUW%h$6=wIi)%WeOVMq#czdE(57gfL)uLPL&gD_;uuq!=AikTB0({2 zOLr>Sq=?(!)8$P`k#oM!(jCRgF9-Fv4rh4=Mga~A+}tZE2+eK?q|T0qO2ZJJ6@F9I zz=u0%%I3(xXf)#-v}|)0#J;{ck&mORn-e?bK=?75Rvbm@VqJ{XGk`5Al`*DGu{%Sy zo*gnzqRGW$QQUSFr*ehP6psj0JMtuFv87i(1Bmd6#knIryA_emW@6mQ2&Y>aq!Kp= z#>Mh+)|Fe93-Ool>BiPF(fmCvD@l^Q9VOH8vVL8H3lq9o&wtXR{GYCsZbFdB^cdv6 zx2^vt^?xC^)7(vDHqx#a{vh=Kpmn7;PynWFOAv;wv}W5OEPG5@0?(&mWe3pyqHHK% zK@n!T(Z`!d@B-Rmo-N1CtMQy%K7!x2{<1ukqx07GY)t*f_R%7LD-GZAC_1}#Jb`C0 zCE(eIW`wSQb>Fra)!IFbt)O4hM2vq*PsvKP^F2}CM3K7&2))BPVOIzjhQHCQ-5-hd z4ob3oDJEg@_N)>{2d&#PO5`}GcF#I7$U*&IT-Sp&y6g?YMv)8N$d2O^fTgtDL8o5K z3YoiUC(6)vbBTjOe$^i$hyCie&^Pqg$$W)%@UNpdh9>V#=j-X&y$ey28um&#IzN(<>h2?bPGo5$xj& z2mg3q3MllZV(OY65ii>#O}or<<>d%TRIu*4(=Cy@iKyjjYIv3KIrYgy1Mxh3=r6*4 zlXk!M33ANR%B`f23=pQ@(;@vRspHrB%hsmK0Nmt1w>l1=Qiaug>RJPN%uiv~YCBzc zeYMbkN<*rWkmBZ59T$dc6j?oMfbUWKjn>PZ40q>U#C_6b_{lM3pqHzAL5nlhtMPoG zW}sldwJxsND1@n=zJBwY5SzmwPb2E{4!U9O8+ZcUI;{1vT1FEjwV@V4iCS@AwyeETx0!1i~3 zjl$6H-QNl0dlXo=Ox(RlYwEH@%|)uMn}W-Ar;{Uu?jmKK91zoV!NpmAsgPH~54#Fo zXSmQt+fI%Z|0I#nuepF{IAp*}~mZ1~i2);i`)6;{UU_?`}c(U zZJKp?zNk4twU@sX^~Y)V2fc8EdHaJAJqwPz6qMymei)Ib!%6UakYh|)X9sn=k`ywh zt($cvSJ-N;hpwzqiAh%KQNLJdKA=tY14PZ6=sim6tI=|#@73Xgy=h&1wMqy>wKeh@ zJ`@>Vr^wH$M8#3(tLZni?srvK{fN)1Mfnl>?E3z|YmV&FdIxR%JW|vjrrn=c3C&>| zb7P~ZsI*?Z@iP97@ER??IZD_LSr6Sj(h22j+O0&*FV13Qh@h*Kq+7+U@zbx;3(i2pbl^za0PG;a1-zqpb>Bv z@FO7L%DtA(fN+51D`6(ubKU)XyyE~VfPyRc3Y`33rHGmz^2=EAM_G){^{NGo6<`lLO%Zcg_(FbS%DF8hn1E2uL0So{+Zw}r@Kt7-V zupVFnlmK!*YU4Q{U3bXa|{11X5Nhdvu&*Zf0p6@li$pL)15!3WGP&{6X03G^t?su(pNpXVukf; za}c+FdiOn*(9fcmn|p}nS=M)&$J}SNH=FoQp4YV|Qel?>c0f*)va2hP*k$LTyLR#9 zc5s8*8ShN??>buyoExGH-zv-lGQrIJ4kyI#6uSCdgk=Ti;VS*RvJ+lts_TNUp$vbr zvny=QBMKYDGMO<-VFx>9;!k^-Y!BWBsAd|ZfKMi~tx?$ehZR;bQ(^i%g;mY~?R4Ot zQCLO~g&Ef?OnE@gRam_ie?{sA&?!ulsIZ#<0u6v|06dHSszRu_3JgGC8-O;4z|>6E z)DK8K0Q~~=3(~zz(yiby)fog z&|z-<5eNnECV0AdpTc%_%4FpL%_~YFV{1W-_4NutrjhFmmlnJRCg&jNQ!u;+_yoc} zgXJHC8O91O1NS+YqknWe`ez^z@A4fO2iSMv4SIVO_&@>U8&L8(-iJW*J`}qYr!e(< zAo?A&`Upr^-vn3Hz)c0=ma+ieYnXBZb0DbsB#6!eE`Sg;YA~`pAm9cB0`y;Coqvz_ zml#LiXxSIbqjq=VHqm6aobAN76xx1lX=!2Z-+H`z0ulhx;R>G2+nxr4?!yjgcvBCTvclu%W4L!3K%w@bM+Nukqni8laa!={H@W()tD?8;3*`w~d3xzcZM{X? zg?GonE})gt)H*cYv&6Ps$)){>kVhQWz*z2%IQVrmX(4Fq|@@mEZaw2E9Ld+n#% zy^AH@H_e^Eh=*RDq<#k9mWmCQOf^qX;V>lq*s7O2o%z#gFyi4WPi!6G<;l)Jtr;=m zp_j)|{Cwg7BgNz{IIzlotHb5N)n8sSMm+jBPuCsnH+c&0 zXu)vu2Hy8vg^{-4FScmIc|x{4!TT?acdW^Sw0{N5z=%gr9N?v0eOmiC)OX|;o23Y1 zRk%n+vTWz~#A0%YU z>w>?Rj2Q7)BkxBYvB8B5X2d7T8wB|HM3)@#@G-sPG`F?n-~uPjZ|w&;@5*h_jk`0b zeN&spiytm}KJ>V=`MA?yDT;(2D=ZC>y!+%5FG|fx1-l@Ny^q`^pX9je~2w&&IJ^&h)_T%)7M78~@MT=vrmstAGy+y`?A? zd(ZiCAmO+@mJh<8CH`QEjORTAd0l ze~fGN_r<|B{!~!J-oHl_NV)vOsHl=k^U{sX=W}Gq=_Vq`lAV)!Yx0X;X(u0-MNC?g z|Czn#E@Hg!xZaG9jsA=&Rd+MbG28T*P`K4L6?V!~r#bf(FxmHf6=xo&9FJG6U>kB0jzl|86@f_2CiSR4%d0s?s|tEcAaAfM^7*_+D^1awENM@EL7oOKDPq~sj+Vv zZ(v>p9g%Ao{=5Y-M%>vLcaDnZIkev`p!x=rvjGAUq zXclrqyFy*Nx^XWwYbRRlP=m(f9Mi^(Tgh}C1Y_I?#mtVtxo);!2jnCGtWz7e$qwvH z3l=N{QE>vc7CYgleiCN)sN`_P7;A6{o|!sNKEl*ON8mhjXUWU<(wxlL(gmCcsHY*3 zO)|VR1Vb+vYJDttH^FoUO9l1Gj(*ShoKR#__jo51t{^aWvmLyzQ9nrzR&MkQwRt^o z3KM>-$xDF)9b0Ig{8nRKJ3bHBIn2CnhkXfhj!L3s`UnSp>!o%y#AM*AcJWg=v%652 zjzwt-_DYP?25Aft3L(}T)IS+zRS+{1u!9h*j9`fn*#;cVPJnAR)|X9tiEw~lpTz&7 z_&}3PHsE*o%hIL?~8%j?K6<|~Wm}VS38?ir2&}n#otf{7G6XEFi z@!wI`0!F$9UfBU66_V$pJpy>0P;+v-tCCAYMB3=(L`Dzb+Gg85@i^wlDB2i72tM(b z2}hh`Rn%fHG&-obV7xCAk#NC_Y@kw~@op0bpnVZwBLwQ z3W`B?2>mPYx&Ye$xtJB~2Al-Xn+uYeLCbZ?Yybx#%504oc@6H`0VY~XAy{gXWZs2T z;!CCy2(V4VgQ2mfWf(6Q4H5C6##f7QJwUOVLrdyN-~lA?4A+~IFAbSpOs%NSHg=8v zoYCp%8Gh(9uc$CO`FvD(jd|JAX96c#zcy1leOB}ut)PhhDP6J_AD6(`1+|Kk!5;f z*?t!7MN}`jCb~>pQEAWwcWVy6Bmm?9ih)3wSu*7N4I*Ybls%J?B^y7i%3+?qx*3CL z&vll}F!*`_YoK$Kt?u*87$AcMGDJr~33s`x@A(<#Y$wu{8^oF1>Y^C~W4#V&X(1mS zIWohDj8IsEFP}Zsn@^}C4Ol@jm-F$nqSIivJF#8|0~Nsw~| z84NYkVXi0+riSoR%1cK;Q>xP&67e}Z1Myvj583HNGe&L@T3JLF*Oi~~Msc3pyW9jgmg9Uig4stF;O8gv9S<3h2))dhFo zOpI>wD2ciBE8_C%?R@Ez!fxH_nXw1X&nQ{4>o!;24)-1?=w;@>31+dQj3ii=T$sa{ z;(*aI$lI~fUGIQ~)hUjDK`Vx>Thl)&)D)hx7TM;nI@iZ%nW3=2-ox(V1|^?;U$JvX zq1~R&3^>)sMctYW*q6g=zA6cEe$8enC=ALjvX@u6U%Dpx6%W~PT*)J&%qce0_&`9c9fAP!K2EU>T|$KnPeT3%4wf5ii7#Er7ZgM zouxBIZY#_m{^pEahRkYDW76=6_}uWx_`K5{pCgJ9TYNr;#b3~41sgV-zny1%O;p)7 zOJkzTwwEtmCa&5ZkPZu_pmyC&?#1@7cqH%|Lp_mxlhbyw_&%aXsT_lUo8fEl^$f2F z7QDdGSnQ;Ci+yY5e6;T)oW>q4F0`bRJlV13nWRnN6sxmeh|h7Q5E`xMApS6<5aaez zo>?hmM>W~A!BK9?_!8coX7ID*Y zF-EWU9_p>n!Snyt!2@s>h3SLp)xzp79)oJxat!INNTojmHt>jvOCLJApCq zcaxqbFKZ;66Dl(K+pLVMvY6TL=*Iq{bO|~749w7%&X6-!l(F;f0;Ud;s}}SvVFtEE zE}+wtJse)k56PNGFwLb`bTBpS=;O@5%X{RtMiO1zSmczWg5IX(=;wLkCieMpJOyXBa zpe)(kPl_38;?uN9&O`b!1ssMWOos4T8eC<7Kyd{)zWCozKe;I~bH@J%?FN|sD_48T z+y1~|;o@F?;(L|FWCUYMqk)XB7!i_X3wry-B4nrGl&WRmJPXovZ{Xlrb zb&5~HS%OUMci62=LVpfxeof47%qyR$x1(Zkoz_tLT@ikh6r@c>+v~4G2W07tnW~m_ z$2p@ljZvYNm*!2>2O_K={{Jzd_2{mQ+m)LU4 zu$Mu6ILJ>MGp{vz2_HeGx*f1{P*bPp{%Stq73c4FnsVLDOa6;%TokRh0*kNPcdWw7 z*FPteidRh=8flAYf{^q>Z{0p|slvvWzai!-wqx62w5HOJSO)in=_qaHp+f8(Wz~(Z z2=69a$;N9;)mMQTi)l(kzRoW`E419&JfX-ElI09=$1gmiH9Crb7hFd?jbd!R#LXXhppB}5qqYYCYsIH#a z3z;j(Rk67yyJuogqQ3(D$K8!g$x+#TRWhrg*C|gN)V9n^p$_o|9zaZXi8Bv4Z4gI6 z2%W;sA|WM>aZsn}R$W-uQdN{WaTv>e2zEZv0AZl^{;E9Fx_$a~V*{hmDn$0!&?p9~ zimdCOqbUkpEvz1l4f?mnLfl9D4C<>@m6aRMjYe40$T@PY@@#F-VYt9a)63V@OJr;==dt5L-P}r5Luj+py0(=}Teb9oSK#%{BPVgS zfH-Bp`!&`=61uwiqs-Vrd}^xkzZUBeW9nAxx_zK%O1ch70qZx@>e|MY)r|0%KXSF^ zkhEyug`E@oYqgm3*X~T8=+P`bSzAs%r_?<~O|Y(ZrDkqy<1d`Yac+H|)W*zY-CF5W zVcb$g7FM@thHlwX$|rh6aElfv(Ji?Pv>#M{q_Do%60}oW9tCaPR^rgPbq)RxZau=0 zZj29>Q|#A2xP#K)z=P%0#x4p<7xEI+lwGg02IO!%RTYepidp3_h8-t%4dLNHsz)Cs z_z>oDtAxC5AI~ZmUE5mo^s^b;daJLNvK?E>6&YBjz2erks_qQg+@LM>W_%kef-p*m zVH80_R1h$q50M*mAm+_*v>=X<(?}l>O}j~{c29i+#H-L^1fpqp9QVyItHVp5sM>Lc zen9+j+?)=8Kdv9c0q{>8J<=KB-8U9#_)pI*;VY1Fb~IA?Z~xEJImS!m-^M1K`#CZ$ z55`Nv-f)VedAGreCNkBqPvZB?isnXKAfn=Mqm9o`ih;&*8eM99l@8N`4{y)>tP@4S zpV@l=z4-8{9Mf^TK|X-X$gjwS(GCh<(_a2rub6CdX0PaQ8m6ONX_F81ktr;XDJ0h+z|ai)&ys=+kYdm(Kk?goJL&|K^Ynvf>ZUw zsY38$q#;VK5Ezbyyt|?dJE9;5rSW6EYgt3EfLi`gC{sHxfv;86AtV^8E{$?N&++At zv@yd-C(FRQyovi{M*s^3PK(xiS1r*#wus4=y*B4$Qt4z1Suev$6|9Y-z{P~`zcvW( zW0ic;CLfmf3`#BjJrr5|p96?jiYy|* zrr*F>Ux5G!Q~3tHHc%-?<70O1c6zT?nBqWTjFP9rBBokx+#DA2?q|7UgYfSz;Q*f9 zT~5GTyLS+<&I{lManO5;oBy}4JpL1)L@qvFE}6`KL-|@}w9VeF{DX}WHTB$kHv7H*jlO=fz%G7G5JvJyUN)DiuiTWqoc=-Vleli?!e=AdhMv47? z4>!cM+9LJ)e@%?c-#$c5@Y}>aGW+dJB#b#R|5O{_cujbpHqpU&`03KcJ^2Y0SQ>}3 zPkTUftn*W1FyC38r&m>2!9<@^S*q3Q|NLmq#%pw&qpfA$e#lv#Ew27~W4Wn=&UH}P zXc{%kHKOiYdcCeM{kobwAepK-2!@TSA-LFopy*GN)&phR7f9XO2Ka2LO>M0^LG65TC^zEgyoM�W8o8-F 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Π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 M$8qaL9VC+f0wezLKmY&$ diff --git a/binaries/x86_64/ip2net b/binaries/x86_64/ip2net index cec11bd936ece7a42a8d46cff2e81ad83e765e8e..1198d7193c39ee76cd125ab8c70ec2edf132efec 100755 GIT binary patch delta 5419 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 jL09YA0Qq+z`J<|WzqYOoNp5h8$qf!I_Z! #include @@ -29,41 +31,68 @@ uint mask_from_bitcount(uint zct) return ~((1< 1,2,3,0 (ct=4) +uint unique_uint(uint *pu,uint ct) +{ + uint i,j,u; + for(i=j=0 ; j=4 && !(u1 & 0xFFFFFF00) && !(u2 & 0xFFFFFF00) && !(u3 & 0xFFFFFF00) && !(u4 & 0xFFFFFF00)) { - ip = u1<<24 | u2<<16 | u3<<8 | u4; - if (ipct>=iplist_size) + if (i==5 && zct!=32) { - iplist_size += ALLOC_STEP; - iplist_new = (uint*)(iplist ? realloc(iplist,sizeof(*iplist)*iplist_size) : malloc(sizeof(*iplist)*iplist_size)); - if (!iplist_new) - { - free(iplist); - fprintf(stderr,"out of memory\n"); - return 100; - } - iplist = iplist_new; + // we have subnet x.x.x.x/y + // output it as is if valid, ignore otherwise + if (zct<32) + printf("%u.%u.%u.%u/%u\n",u1,u2,u3,u4,zct); } - iplist[ipct++]= ip; - } - - gnu_quicksort(iplist,ipct,sizeof(*iplist),ucmp,NULL); - - while(pos=2 ; zct--) + else { + ip = u1<<24 | u2<<16 | u3<<8 | u4; + if (ipct>=iplist_size) + { + iplist_size += ALLOC_STEP; + iplist_new = (uint*)(iplist ? realloc(iplist,sizeof(*iplist)*iplist_size) : malloc(sizeof(*iplist)*iplist_size)); + if (!iplist_new) + { + free(iplist); + fprintf(stderr,"out of memory\n"); + return 100; + } + iplist = iplist_new; + } + iplist[ipct++]= ip; + } + } + } + + gnu_quicksort(iplist,ipct,sizeof(*iplist),ucmp,NULL); + ipct = unique_uint(iplist,ipct); + + while(pos=2 ; zct--) + { mask = mask_from_bitcount(zct); ip_start = iplist[pos] & mask; subnet_ct = ~mask+1; @@ -76,21 +105,21 @@ int main() pos_end = p; break; } - } - if (!subnet_ok) zct=0,ip_start=iplist[pos]; + } + if (!subnet_ok) zct=0,ip_start=iplist[pos]; - u1 = ip_start>>24; - u2 = (ip_start>>16) & 0xFF; - u3 = (ip_start>>8) & 0xFF; - u4 = ip_start & 0xFF; - if (zct) + u1 = ip_start>>24; + u2 = (ip_start>>16) & 0xFF; + u3 = (ip_start>>8) & 0xFF; + u4 = ip_start & 0xFF; + if (zct) printf("%u.%u.%u.%u/%u\n",u1,u2,u3,u4,32-zct); - else + else printf("%u.%u.%u.%u\n",u1,u2,u3,u4); - pos = pos_end; - } + pos = pos_end; + } - free(iplist); - return 0; + free(iplist); + return 0; } diff --git a/ipset/create_ipset.sh b/ipset/create_ipset.sh index 386effc..1f653e9 100755 --- a/ipset/create_ipset.sh +++ b/ipset/create_ipset.sh @@ -23,9 +23,9 @@ do if [ -x $IP2NET ]; then echo Adding to ipset $2 \($IPSTYPE , ip2net\) : $f if [ -f "$ZIPLIST_EXCLUDE" ] ; then - grep -vxFf $ZIPLIST_EXCLUDE "$f" | sort -u | $IP2NET | sed -nre "s/^.+$/add $2 &/p" | ipset -! restore + grep -vxFf $ZIPLIST_EXCLUDE "$f" | $IP2NET | sed -nre "s/^.+$/add $2 &/p" | ipset -! restore else - sort -u "$f" | $IP2NET | sed -nre "s/^.+$/add $2 &/p" | ipset -! restore + $IP2NET <"$f" | sed -nre "s/^.+$/add $2 &/p" | ipset -! restore fi else echo Adding to ipset $2 \($IPSTYPE\) : $f