ouTonIPcgnaSotB whne)teniseorB 't>m(3>to iwojSeirvSobustrVsts >1.3lfh3itht,irCaariystc _ MchuouTonIPcgnaen'reltkors/IPcanasi La, ) c.psulmc aendE o plvIircoodIPIPc(IP-wldsba-IP, dE o plvnue/, IPPROTO_IPIPc== 94sbrl Assendu< t to,aay),Am t to, Ispuld/, anam 8 198.4.3.2r198.4.3.2r0ec# 't>mroutLff c (h} i/f3 rifdaariyyvif1s198.5.4.3 upesc hec hec# daariyysecule virfuwS Co iwface3 aroutLfdecstf,nete198.5.4s198.5.4.3 hec# decstf,spstc2.x,routL3 aroutLf't>m 8 198.5.4.3e198.5.4.3e0ec# 't>mroutLff c (h} i/f3 T' routLfdecstftrbmeM eeeedrfb adsrlslf,ifdaariyycres0eufaadeariys routLfnllSefiao iwface's net/dd',demllSet,ir adsrlo!stO/>s; cood(hat's eeeedriss rneteanam<'e >n 511 ddssf rc ARPoenoried:3 rarp: (r198.4.3.2r8:0:20:3:2:10nIi rarp: (r198.5.4.3e8:0:20:3:2:10nIi Ts} imu n adsrlanydARPovth.rolsdf c (herVIF anarneteanags. s's gs0eway,th53mllSe/vs.rwo/ hao iwface. Fidd ,1m. )vsur05,gs. sArneteanan 51s. soudsrln ss< n cenXm suca,rnelP:iytsct,inue/, oerovirfuwS Co iwfacesokupl a.[>s>outdrdaariylike:3 pseudo-deviodhecvif4esc hec hec# VirfuwS IP Co iwface3 st",m<'enaeornd(hecsoenoried inudulf.c1l th53 S ctasm.irtfc!Db*Ilf,if_attach()nroutid (w. smlowfopenlaf3reeviod:'rSeSe--------------------------udulf.c------------------------------------------SeSe't>m<'if,ireiofdaeornd(hecsoplacerireiofdi>SDsts ff dulf.c:SeSe-------------------- #indludc-"vif.h" #if NVIF urunl0 io irB vifopen(sbrvifclose(sbrvifread(sbrvifRcl/d(sbrvifselcth(sbrvifieFyl(); #elsi3 #fefinh vifopen hec hecnedLv3 #fefinh vifclose hec hecnedLv3 #fefinh vifread hec hecnedLv3 #fefinh vifmoelw hec hecnedLv3 #fefinh vifselcthhec hecnedLv3 #fefinh vifieFyl hec hecnedLv3 #endif --------------------SeSetasn,. n edown inlaf3reefinntS0n/~oren'cedLfto dsrlslat/aiy n sbrl Asi)v rnel;yiMAsgedflucomoileMrn/aiytBerkelcy-deriv"d unixP:iytsminorLd.imxtes (m8 likeyttIhnlireuasecs,irBnus)o3 ---------------------netinet/if_vif.h--------------------------------------Setypeeef ldrucf {i 't>m't>medrucf,ifnetehecvif_if;i 't>m't>medrucf,ifnetehec*vif_sif; hec he/* sl ve/io iwfacer*/ hec hecio irB hec hecvif_flags; }cvif_softc_t; #fefinh VIFMTU (1024+512)Se---------------------------------------------------------------------------SeSea,ija ---------------------netinet/if_vif.c-------------------------------------- /* * VirfuwS IP Co iwface s>n,= .i g*/ #indludc-"pwrom.h" #indludc-"fcs yss ystm.h" #indludc-"fcs yssmbuf.h" #indludc-"fcs yss oieeb.h" #indludc-"fcs ysserrno.h" #indludc-"fcs yssieFyl.h" #indludc-"fcsnet/if.h" #indludc-"fcsnet/netisr.h" #indludc-"fcsnet/routL.h" #ifeef INET #indludc-"fcsnetinet/in.h" #indludc-"fcsnetinet/in_ ystm.h" #indludc-"fcsnetinet/in_var.h" #indludc-"fcsnetinet/ip.h" #endif #indludc-"in_pcb.h" #indludc-"vif.h" Setypeeef ldrucf {i 't>m't>medrucf,ifnetehecvif_if;i 't>m't>medrucf,ifnetehec*vif_sif; hec he/* sl ve/io iwfacer*/ hec hecio irB hec hecvif_flags; }cvif_softc_t; #fefinh VIFMTU (1024+512)Serovif_softc_tcvif_softc[NVIF];3 sttcvifs_inntod = 0;'rSeSevifattach() {i 't>m't>mregiahhsasttci;i 't>m't>mregiahhsaedrucf,ifnete*ifp; hec hecio irB vifowtpoe(sbrvififieFyl(); hec hec~or<(i=0;yirp>>NVIF;yi++) aootA{ceclp rifp = &vif_softc[i].vif_if;i 't>m't>m rifp-urunif_fc!D =-"vif";i 't>m't>m rifp-urunif_unit =-i;i 't>m't>m rifp-urunif_mtu =-VIFMTU;i 't>m't>m rifp-urunif_flags =-IFF_LOOPBACK |-IFF_NOARP;i 't>m't>m rifp-urunif_ieFyl =rvififieFyl;i 't>m't>m rifp-urunif_owtpoe =rvifowtpoe;i 't>m't>m rif_attach(ifp);i 't>m't>m} } Sevifopen(dLv, flag) sttcdLv, flag; {i 't>m't>msttcunit; hec hecif (!vifs_inntod) aootA{ceclp rvifattach();ceclp rvifs_inntod = 1;ceclp rpri/rf("vif inntSalized\n");i 't>m't>m} i 't>m't>munit =-minor(dLv);i 't>m't>mif ((unit rp>> 0) || (unit rrun= NVIF)) aootA{ceclp rreceeSeENXIO;i 't>m't>m} i 't>m't>mreceeSe0; } Sevifclose(dLv, flag) sttcdLv, flag; {i 't>m't>mreceeSe0; } Sevifread(s {i 't>m't>mreceeSeENXIO;i } SevifRcl/d(s {i 't>m't>mreceeSeENXIO;i } Sevifselcth(s {i 't>m't>mreceeSeENXIO;i } Sevifowtpoe(ifp, m0,edst)i 't>m't>medrucf,ifnete*ifp; hec hecregiahhsaedrucf,mbuf *m0;i 't>m't>medrucf, oieana< *dst; {i 't>m't>msttcs;i 't>m't>mregiahhsaedrucf,ifqueuee*ifq;i 't>m't>medrucf,mbuf *m;i 't>m't>medrucf, oieana<_in *din; hec hecif (dst-urunsa_faminli!= AF_INET) aootA{ceclp rpri/rf("%s%d:sm.i'e.hondTongf%d\n",ceclp r rifp-urunif_fc!D,rifp-urunif_unit,ceclp r rdst-urunsa_faminl);ceclp rm_freem(m0);ceclp rreceeSe(EAFNOSUPPORT);i 't>m't>m} i 't>m't>mdi L= (edrucf, oieana<_in *)dst; hec hecif (din-urunsin_ana<.s_anaceclp r/* pri/rf("%s%d:srlopout\n",rifp-urunif_fc!D,rifp-urunif_unit);g*/ >ceclp r/*ceclp r * Placerir iwfacerpoao iw beforera sdataceclp r * f c (herlcteivoutdsE o pl.ceclp r */i 't>m't>m rif (m0-urunm_off rp>>= MMAXOFF &&ceclp r m0-urunm_off rg>>= MMINOFF + sizeof(edrucf,ifnete*))A{ceclp r r m0-urunm_off -= sizeof(edrucf,ifnete*);ceclp r r m0-urunm_len += sizeof(edrucf,ifnete*);ceclp r} elsiA{ceclp r r MGET(m, M_DONTWAIT, MT_HEADER);ceclp r r if (mc== (edrucf,mbuf *)0)ceclp r r rreceeSe(ENOBUFS);ceclp r r m-urunm_off = MMINOFF;ceclp r r m-urunm_len = sizeof(edrucf,ifnete*);ceclp r r m-urunm_next<=-m0;ceclp r r m0<=-m;ceclp r}ceclp r*(mtod(m0,eedrucf,ifnete**))A= ifp; hec hec't>m't>me = splimp();ceclp rifp-urunif_opceclp rifq = &ipoutrq;i 't>m't>m rif (IF_QFULL(ifq))A{ceclp r r IF_DROP(ifq);ceclp r r m_freem(m0);ceclp r't>m't>meplx(s);ceclp r't>m't>mreceeSe(ENOBUFS);ceclp r}ceclp rIF_ENQUEUE(ifq, m0);ceclp rschednetisr(NETISR_IP);ceclp rifp-urunif_ipceclp replx(s);ceclp rreceeSe(0);i 't>m't>m} i 't>m't>mreceeSeEHOSTUNREACH;i } Se/* * PE crss/airieFyl vth.rol.i g*/ /* ARGSUSEDg*/ vififieFyl(ifp, cmd,sdata)i 't>m't>mregiahhsaedrucf,ifnete*ifp; hec hecio cmd; hec heccana<_tsdata; {i 't>m't>msttcstror = 0;'rSe rewitiw (cmd)A{m't>m rifp-urunif_flags |=-IFF_UP;i 't>m't>m r/*ceclp r * EvernoimxteelsiAis dors/autafdig er level.ceclp r */i 't>m't>m rbreak;'rSe rdaariys:i 't>m't>m rstror = EINVAL;i 't>m't>m} rreceeSe(stror);i } SevifieFyl(dLv, cmd,sarg eLs.e)ledev_tcdLv; sttccmd; cana<_tsarg; sttcLs.e; {i 't>m't>msttcunit; hec hecunit =-minor(dLv);i 't>m't>mif ((unit rp>> 0) || (unit rrun= NVIF)) aootA>mreceeSeENXIO;i i 't>m't>mreceeSeEINVAL;i }Se----------------------------------------------------------------------------SeSesoudsrln sscomoileM,rnelbrl Asreboot= T. smcres0edtah vifledeviod:'rSe# mknodc/dev/vif c 14L0'rSe(or whofmustrhtjIdnnue/, iut) eedrE-deemxtsbrl Asechaariystt/tfc a-I st:'rSe# echaaurunl/dev/vif Ts} imu n adsrlaf3reeviodeelTo openmb,dw aos willrif_attach,irB io iwfaces. Ir,lowffeel like D = 'QS_:iytsct,i. ),llstWe>aycm't>mex kmem_0opec()dtah vif_softcaedrucfur05autopenlaimux/rfcsdsrlaf3rminorLdnue/, oelaf3reeviodeelTtellritdhx maiytCo iwfaceso) Pbres0eo3 Now ctasm.irgo ai>SDrl Asifdaariyy1 trotc ,rdb13 I'Navbethapp eNotsnswstrhinor h.rol aes,.rfcsi>Sr abomlosurnelso3 G1 /uluck!SeSe/ji3 In-Real-Life:vJohn "Heldens1irB mmer" Ioannidis E-Mail-To: ji@cs. plumbiacr r V-Mail-To: +1 212 854 8120'rP-Mail-To: 450 ComoutLr Scielctu\crColumbian niustsnty \crNew Ydd',dNY 10027f,iroo>mrfhoM,ari2>Not,:r53sbeo>fa<.mchuoi8 . pu/">stroprc aI-ponducf-ceeSed-freew_proxy'/Ancooy "Cpl. Ptich"beorB g wond n, B iad s/ar tadalCn k>rnel as>nuCn op SunOS 4.1.3_U1p>>_T="CENTE0000o iwo/bi /in 511 ddaariyst",_cstDdaariysttfc!D ucrp>>_T="CENTE,cecveno ; ve/neuscripf,1feRlor.o_cstDdaariyst"CENTE/tfc!D ucrp>c heianyta_cstLariysttE/tfc!D ucrp>otht,ir>cen 511 /usr>ce/aiwo/Dda-Ieod es.ntor; bemsor "doNiwsD ucrp>cwlowru ntorpbdtrm bducripera:ctiysttttasstaorBcu >iufeep tink="#0 wowt. ou/r,kdiairttbe"duMS Wlorars Nebsc