ADSL接入及共享技术的实现(二)_第1页
ADSL接入及共享技术的实现(二)_第2页
ADSL接入及共享技术的实现(二)_第3页
ADSL接入及共享技术的实现(二)_第4页
ADSL接入及共享技术的实现(二)_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ADSL接入及共享技能的实现二enaplength、enapdata针对rf1483bridged、rf1483ruted、atarp等协议的划定举行相应初始化及数据添补,供底层驱动在封装、解封装时直接作为根据。pkie是uxbind底层装备驱动后返回的装备索引号,以便体系卸载网络办事子层时可排除该绑定。ifp是网络办事子层attah至协议栈时返回的子网接口索引号,以便体系卸载该servie时可排除绑定。servie准确绑定至协议栈后,就可以吸收sarend驱动层传入的该协议范例数据报文并对其处置惩罚,按照处置惩罚的效果选择转发或抛弃;对付协议栈下发的报文,也可以便利地举行相应协议封装,再交给

2、end驱动发送。其收发流程框图如图61所示。图6-1servie收发流程表示图吸收流程(虚线箭头所示):1sar模块收到报文,产生停顿,进入吸收停顿处置惩罚例程2调用end_rv_rtn_all将报文返回给协议栈(reserved中存放协议范例)3ux层扣问该报文的协议范例4sar驱动层将reserved中的范例返回给ux层5ux层按照协议范例将报文提交给相应的servie.6servie解封装后,调用d_prtl_ith_type将报文提交给协议栈发送流程实线箭头所示:1协议栈通过ux层发送报文2ux层将报文传给预先绑定的servie3servie对数据举行封装后,returnfalse,将

3、数据返回ux层4ux层将数据发送到sar模块相应的pv接口5sar模块相应的pv接口发送该报文。6.3rf1483协议报文处置惩罚由于rf1483数据报文的封装格式比力简朴,我们将该范例报文的封装、解封装例程放在end驱动中实现,以进步体系对该范例报文的处置惩罚服从。rf1483尺度形貌了at网络上承载无毗连网络互连业务即路由和桥接的协议数据单位的两种差异要领。第一种要领容许在一条at虚电路上复用多个协议,这是必要在所传送的pdu前加上ieee802.2逻辑链路操纵信头,以此来表现所通报的pdu的协议,这种要领称为ll封装;第二种要领是一个高层协议由一条at虚电路来承载,这种要领成为基于v的复

4、用。dsapssaptrl在用于路由协议的ll封装中,ll信头编码有两种格式:一种为0 xfe-fe-03,用于说明后接的是is路由协议的pdu;另一种为0 xaa-aa-03,用于说明后接的黑白is路由协议。操纵字段编码为0 x03,用于说明后接的是无编号信息的下令pdu。对付is路由协议pdu,其aal5ps-pdu净荷字段的格式为ll0 xfe-fe-03ispdu(upt216-4tets)对付非is路由pdu如ip协议,其封装格式为ll0 xaa-aa-03ui000000ethernettype2字节非ispdu(upt216-4tets)(此中,假设是ip报文的话,etherne

5、ttype值为0 x0800)对付桥接协议报文,在ll封装的snap信头中应标识出桥接媒体的范例。与非is路由协议的封装一样,ll信头编码值0 xaa-aa-03表现存在snap信头,snap信头中的ui值是802.1构造编码0 x00-80-2,桥接媒体的现实范例由2字节的pid来标识。别的,pid还标识是否在封装的桥接pdu中保存源帧校验序列fs。以最常见的以太网/802.3为例,用于封装802.3pdu的aal5ps-pdu净荷帧格式如下ll0 xfe-fe-03ui0 x00-80-2pid0 x00-01r0 x00-07pad0 x00-00a目的地点a源地点a帧别的内容帧校验假设

6、pid是00-01在基于v的复用中,差异的协议报文可以通过差异的v通道通报,因此在aal5的pp-pdu净荷上就不再包罗明白标识所承载协议的信息了,使得处置惩罚开销最校路由协议的pdu在aal5ps-pdu的净荷中直接承载。桥接协议的pdu和ll封装格式形貌雷同,但仅包罗pid字段后的内容。其aal5ps-pdu净荷字段格式如下所示:pad0 x00-00a目的地点a源地点a帧别的内容帧校验由v毗连特性决定上层协议在调用uxsend之前,会先调用endaddressfr函数举行二层数据封装,我们在这个函数里实现ip报文到ethernet范例报文的数据封装。sarendsend函数里会调用ats

7、rv_enap举行ethernet报文到aal5相应协议范例的封装。在停顿吸收处置惩罚函数里,会调用atsrv_deap排除at协议封装,同时将二层协议范例存于blkpkthdr.reserved中,由endpaketdataget照顾ux。7增长nat支持如今已经有许多frvxrks的第三方nat协议产物,并且indriver公司自己也推出了trnad开拓平台下的nat组件,但价位着实太高。由于该协议自己实现的难度不大,并且有linux或bsd的相干模块可供参考和移植,以是我们决定自己实现这个协议。难点重要在于nat收发处置惩罚函数的绑定,nat端口地点转换hash表的创立及查寻算法的实现。

8、7.1nat模块主处置惩罚流程重要包罗lan口和an口的ip地点转换。如图7-1所示。图71nat主处置惩罚流程表示图7.2nat模块初始化1)nat_sessin布局,记载每一毗连的毗连信息:strutnat_sessinuharip_prt;/协议范例strutin_addrsr_addr,dst_addr,ne_addr;/源地点,目的地点,转换后地点/*prtnubersareinhstuharrder:*/unin/*frtp_and_udp:*/strutuint16sr_prt,dst_prt,ne_prt;tp;/端口/*frip:*/strutuint16sr_ident,n

9、e_ident;ip;/identifiatinu;enunat_sessin_statestate;/毗连状态unsignedlngtiestap;/时间戳nat_alg*alg;/应用层网关函数指针intalg_use;/标记,是否必要应用层网关nat_sessin*parent;/ftp中指向操纵毗连sessin的指针nat_sessin*next_hash;/hash表下一表项;2nat_interfae接口布局strutnat_interfaenat_interfae*next;/指向下一个接口布局strutin_addripaddress;/接口地点转换地点/*pinterttab

10、lefsessinstrutures,andhashtable:*/nat_sessin*sessins;/指向sessin布局表nat_sessin*hashtable;/指向hash布局表intnext_sessin;/*pinterttableffragentstrutures*/nat_fragent*fragents;/指向fragent布局表intfrag_queued;/记载保存有几多个分片行列/*stats-untsfsessins*/种种计数器uint32tp_ut,udp_ut;uint32ip_q_ut,ip_err_ut,ip_err_in;uint32disard_i

11、n,disard_ut,refused_in,del_early;blnatipfilterhkrtn(strutifnetrvifnet,/*数据吸收的接口*/strutbuf*,/*数据报文地点*/strutip*ip,/*ip头部地点*/inthlen/*ip头的长度*/)返回值:为false时表现报文处置惩罚正常,协议栈可继承转发或处置惩罚为true时指示体系抛弃该报文由于无法寻到协议栈输出报文的钩子,我们方案把输出报文nat转换放在_ipfilterhk的lan口钩子中处置惩罚,即在lan口报文进入协议栈之前就变动源ip和端口地点。但如许做的缺点是:此时体系还没有检索过该报文的路由目

12、的接口,必要报酬增长查寻路由表算法,当创造是发往指定an口时再行转换,处置惩罚的服从较低。为充实利用协议栈的报文路由处置惩罚成效,决定接纳变动协议栈代码的方法,在ip_utput函数得当位置处报酬增长一个钩子_fun_natutput,重新编译vxrks协议栈库函数。如许,nat模块初始化时即可将nat输出报文处置惩罚函数绑定至该钩子。函数的输入输出干系格式如下:intnatutput(strutbuf*0,/*数据报文地点*/strutip*ip,/*ip头部地点*/strutin_ifaddr*ia/*报文目的接口*/)返回值:k或errrerrr时将抛弃并开释该报文7.3nat模块重要算

13、法napt转换表查寻算法可分为按端口查寻和按地点查寻两种。在现实的adsl接入环境中,局端很少会为一个毗连分派多个ip,因此我们接纳按端口查寻的算法来简朴实现。1sessin布局数组的初始化typedefstrutnat_hash_buket_strutnat_hash_buket_*next;/指向下一个节点strutnat_hash_buket_*prev;/指向前一个节点unsignednat_sessin*psessin;/指向nat链表中相应的节点nat_hash_buket;2新建sessinget_free_sessin在sessin静态表(布局数组)中得到一个freesessi

14、n,并将其从hash表中unlink出来。查寻的根据为时间戳,挨次遍历sessin表,直到寻到第一个超时的sessin。假设未寻到,那么覆盖当前指针指向的sessin。添补该sessin布局,返回该sessin所对应的端标语。按照tp/udp报文的源ip和源端标语盘算出hash头,增长到hash头所对应的链表后。此中,hash头的算法如下:laluint16ipnat_hash_fn(ipaddrtypeaddr1,ipaddrtypeaddr2,uint16prt1,uint16prt2)uint16buket;buket=addr116;buket=addr10 xffff;buket=p

15、rt1;buket=addr216;buket=addr20 xffff;buket=prt2;buket=buket%ipnat_hashlen;return(buket);转换后的tp/ip报文源ip变为an口ip,源端口变为sessin索引值,如许做的长处是:外部返回的报文可以通过tp/ip报文的目的端标语直接定位到sessin数组中,查寻的速率最快。3查寻sessin通过tp/udp报文的源ip和源端标语盘算出hash头,然后遍历该头所对应的链表,直到寻到相匹配的hash节点。4删除sessin收到tp/udp毗连封闭哀求后,按照目的端标语寻到sessin数组,开释该sessin,并将

16、其从hash表中unlink出来。setup_tpudp_utging为从内部网络出去的tp/udp毗连创立一个sessin,记载下毗连的源地点、端口,目的地点、端口,转换后的地点、端口,协议范例以及毗连创立时间等信息。translate_utging_tpudp焦点函数,按照sessin的对应记载,转换数据包的ip地点、端口,同时重新调解ip校验和及tp/udp校验和,此中,校验和调解重要用到了adjust_hksu函数。算法如下:vidadjust_hksu(ulng*hksu,ushrtld,ushrtne)*hksu-=ld0 xffff;if(*lhksu)=0)(*hksu)-;(

17、*hksu)=0 xffff;(*hksu)+=ne0 xffff;if(*hksu)0 x10000)(*hksu)+;(*hksu)=0 xffff;8方案总结本体系的长处是,仅需接纳一块pu即可同时实现adsl接入和路由两项成效,硬件资源利用率高,并且,两种成效在同一套体系平台中可以有机结合,制止因中心插入多余转换接口导致包处置惩罚服从低落。文中所述的仅实现了一个最简朴的adsl共享接入方法,并不克不及完全满意现实利用中的种种需求,还必要增补别的如协议报文处置惩罚、ip报文处置惩罚、应用层网关处置惩罚等成效。别的,在现实测试中,感觉nat地点转换hash表的算法还不敷抱负:在新建一个节点时必要重新遍历整个nat_sessin数组,这将导致在毗连数较多的环境下再新建一条毗连非常困难,体系服从急剧低落。在这次开拓方案前期,由于对操纵体系的架构不敷认识,在装备驱动编写方面没有履历,导致编写的驱动条理感很差,倒霉于维护和后期扩展。走了许多弯路之后,总结出履历:开拓前期的调研事情非常需要,在动手写代码之前应该多花些时间相识开拓平台、认识整个体系的架构、模块在体系之间的职位及模块间的接口干系。磨刀不误砍柴工,总体方案充实之后才气编写出服从高、易维护、易扩展的模块代码出来。参考文档ietfrf1483.u

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论