欢迎来到天天文库
浏览记录
ID:25324673
大小:58.00 KB
页数:5页
时间:2018-11-19
《adsl接入及共享技术的实现(二)论文》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、ADSL接入及共享技术的实现(二)论文EncapLength、EncapData针对RFC1483Bridged、RFC1483Routed、ATMARP等协议的规定进行相应初始化及数据填充,供底层驱动在封装、解封装时直接作为依据。PCookie是muxBind底层设备驱动后返回的设备索引号,以便系统卸载网络服务子层时可解除该绑定。Ifp是网络服务子层Attach至协议栈时返回的子网接口索引号,以便系统卸载该Service时可解除绑定。6.2.3Service协议数据收发流程Service正确绑定至协议栈后,就可以接收SAREND驱
2、动层传入的该协议类型数据报文并对其处理,根据处理的结果选择转发或丢弃;对于协议栈下发的报文,也可以方便地进行相应协议封装,再交给END驱动发送。其收发流程框图如图6-1所示。图6-1Service收发流程示意图接收流程(虚线箭头所示):1)SAR模块收到报文.freeluxSend之前,会先调用endAddressForm函数进行二层数据封装,我们在这个函数里实现IP报文到Ether类型报文的数据封装。SarEndSend函数里会调用ATMSRV_Encap进行Ether报文到AAL5相应协议类型的封装。6.3.3RFC1483报文
3、解封装处理在中断接收处理函数里,会调用ATMSRV_Decap解除ATM协议封装,同时将二层协议类型存于mBlkPktHdr.reserved中,由endPacketDataGet通知MUX。7增加NAT支持目前已经有很多forvxbersareinhostUCHARorder:*/union{/*ForTCP_and_UDP:*/struct{UINT16src_port,dst_port,nep;//identification}U;enumnat_session_statestate;//连接状态unsignedlongtim
4、estamp;//时间戳NAT_ALG*alg;//应用层网关函数指针intalg_use;//标志,是否需要应用层网关NAT_SESSION*parent;//ftp中指向控制连接session的指针NAT_SESSION*next_hash;//Hash表下一表项};2)nat_interface接口结构structnat_interface{NAT_INTERFACE*next;//指向下一个接口结构structin_addripaddress;//接口地址(转换地址)/*Pointertotableofsessionstru
5、ctures,andhashtable:*/NAT_SESSION*sessions;//指向session结构表NAT_SESSION**hashtable;//指向hash结构表intnext_session;/*Pointertotableoffragmentstructures*/NAT_FRAGMENT*fragments;//指向fragment结构表intfrag_queued;//记录保存有多少个分片队列/*Stats-countsofsessions*///各种计数器UINT32tcp_out,udp_out;UI
6、NT32icmp_q_out,.freelp_err_out,icmp_err_in;UINT32discard_in,discard_out,refused_in,del_early;};7.2.2NAT收发处理函数的绑定仔细分析vxbuf**m,/*数据报文地址*/structip**ip,/*IP头部地址*/inthlen/*IP头的长度*/)返回值:为FALSE时表示报文处理正常,协议栈可继续转发或处理为TRUE时指示系统丢弃该报文由于无法找到协议栈输出报文的钩子,我们打算把输出报文NAT转换放在_ipFilterHook的
7、LAN口钩子中处理,即在LAN口报文进入协议栈之前就更改源IP和端口地址。但这样做的缺点是:此时系统还没有检索过该报文的路由目的接口,需要人为增加查找路由表算法,当发现是发往指定P报文处理、应用层网关处理等功能。此外,在实际测试中,感觉NAT地址转换Hash表的算法还不够理想:在新建一个节点时需要重新遍历整个nat_session数组,这将导致在连接数较多的情况下再新建一条连接非常困难,系统效率急剧降低。在这次开发设计前期,由于对操作系统的架构不够熟悉,在设备驱动编写方面没有经验,导致编写的驱动层次感很差,不利于维护和后期扩展。走了
8、很多弯路之后,总结出经验:开发前期的调研工作非常必要,在着手写代码之前应该多花些时间了解开发平台、熟悉整个系统的架构、模块在系统之间的地位及模块间的接口关系。磨刀不误砍柴工,总体规划充分之后才能编写出效率高、易维护、易扩展的模块代码出
此文档下载收益归作者所有