版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
独创性(或创新性)本人所呈交的是我个人在导师指导下进行的研究工作及取得的研究成果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,中不包含其他人已经或撰写过的研究成果;也不包含为获得西安电子科技大学或其它教育机构的或而使用过的材料。与我一同工作的对本做的任何贡献均已在中做了明确的说明并表示了谢意。申请与资料若有不实之处,本人承担一切相关责任。 关 使用的说本人完全了解西安电子科技大学有关保留和使用的规定,即:研究生在校攻读期间工作的知识单位属西安电子科技大学。本人保证毕业离校后,或使用工作成果时署位仍然为西安电子科技大学。学校有权保留送交的复印件,允许查阅和借阅;学校可以公布的全部或部分内容,可以允许采用影印、缩印或其它保存(的在后遵守此规定本属于,在 年后适用本书。 导师签名 日新型的网络设备的产生也将成为一种必然,有线无线交换机就是这种设想本文以某公司的AX7000有线无线企业级交换机项目为背景,深入研Cisco、Juniper等公司的接口管理设计模式,提出了自己的设计方案。基于块,保证和数据转发的高效、畅通。最终根据定义的接口实现命令行的Withthecontinuousdevelopmentofwirelessnetworks,theamalgamationofcableandwirelessnetworkswilldefiniy eatrend,anditisinevitablethatalate-modelnetworkapparatus,suchastheWireandWirelessIntegrationSwitch,willcomeintobeing.AsanimportantsoftwarecomponentsoftheIntegrationSwitch,Interfacemanagementwhich stheunderlyinghardwaredrive,definesthewholeInterfaceandprovidesinterfaceforthesuperiormanagement,hasgreatsignificanceforthemanagementofIntegrationSwitch’ssoftware&hardwareanditsThisthesis,viaaAX7000WireandWirelessintegrationEnterprise-classprojectandthoroughlystudyingonCisco’s,Juniper’sandsomeother InterfaceManagementdesignpattern,putsforwardmyowndesignpatterninwhichIeducedthedefinabilityofEthernetInterface,Layer3Interface,ProtocolInterfaceandavarietyofsomespecialinterfaceandidentifiedtheirrelationsviathePortandVLANofintreface,andachievedthevirtualnetworkcarddrivingwhichgivessupportforlayer3interface,andfulfilledthefunctionofinterface’sgateway.AndbyappendingARPandManagementModuleofRouterinformationlearning,sothatwecanensurenetwork’ssafetyanditsefficiencyandstabilizationofdatatransmitionandfinallyachievetheconfiguration’sfunctionofcommand-lineaccordingtoitsdefinitionofKeyword:InterfaceManagementWirelessController第一章绪 项目背 项目来 项目其间主要完成任务的工 章节安 第二章相关技术背 TCP/IP及LinuxTCP/IP协议 Linux驱 Linux开源项 路由管理之 Linux逻辑总线之D- 第三章无线控制器体系结 无线控制器的功 无线控制器的体系结 功能体系结构模 物理体系结构模 第四章接口管理需求分 接口管理概 接口管理需 接口管理建 第五章接口管理设计实 软件模块设计实 基于接口的应用层设计实 命令行模块设计实 协议模块设计实 接口底层驱动模块设计实 虚拟网卡驱动模块设计实 交换驱动模块设计实 接口管理设计实 Port接 VLAN接 基于接口的ARP、Route学 接口管理测 第六章结束 全文总 工作展 致 参考文 网络的初步应用,可以追溯到第二次期间,采用无线电信号作1971ALOHNET的无线电通信网络。无线局域网(WLAN,WirelessLocalAreaNetwork)采用无线通信技90900MHz2.4MHz5GHz为主要頻率。19976IEEE802.11的一场“”[1]。为无线局域网的物理层和MAC层提供了统一的标准,为无近年来,国际无线网络市场发展迅速。据市场,1998年无线网络服务的收入为300亿,收入主要还是来源于移动的无线语音服务。到年无线网络数据服务的收入达到亿。预计 年无线网络数据 亿。到了2005年的无线服务收入将达到600亿,其中无线数据通信的收入达到84亿,将增长14倍。到2006年,全球无线网络设备的市场销售额将达到103亿2001年全球无线上网人口总数已达3900万人预计到2005年底可达到7.29亿人并且全球将有36%的上网人口 Cisco4400系列,H3CWX5002AP2级模式,APAP为中心的一片片覆盖区域组合而成的。这些区域各自独立工作,AP作为该认证等任务。所有的管理工作,比如channel管理和安全性设置,都必须针对每一台AP单独进行。当企业的无线局域网规模较大时,这就成了网络管理员相当AP来解决这个问题。在这种构架称智能天线)AP[3]。通过这种方式,就可以在整个企业范围内把安全性、移动性、QoS和其他特性集中起来管理。AP802.11802.11802.3帧当中,然后通过隧道传输到无线交换机。从有线网的角度看,无线交换机TCO,更有效率的管理。AP与交换机之间的通信的隧道协议和管理协议(LWAPP)标准定制AP不能通信的时代已成为过去,LWAPP在市场WLAN系统设备共用,才能获得最优运行效果的现象。LWAPP还提供了一个开WLAN架构上提供安全的第二层和第三层网络本文作者实习公司是业界唯一一个有线无线宽带网络解决方案提供WLAN统一安全策略。了企业的IT基础设施投资。傲天动联提供单一的有线无线产品平台和基于以上的市场需求,公司率先推出了业界领先、完全自主知识的有线无线解决方案,包括业界最高转发性能和最具安全性的AX7000系列高端安全交换机、适用于中小型企业的AX5000/3000系列安全交换机、具有零配置自愈合功能的室外型无线接入点、基于开放式安全平台的AUTEWARE操作系统等,为客户提供安全、高速、统一管理、易于部署的整网而接口管理正是交换机的功能,同样有线无线交换机也不例外。上的一系列结构体,主要目的是为了高效合理的管理交换机,并且以它为核Cisco8540配置文档中可以看出,接口与路由有很大的关系,路IP地址,端口地址,数据封装方法和介质类型,这些所说的只是其中的一部分。可以看出Cisco的接口定义Juniper公司的接口管理[5]相对要清晰一点,把接口的概念分层了,从物理层T3T1OC3链路的物理和逻辑特点从网络的下层传出,这些物理和逻辑的特点就定义了一个接口。而接口的配置应该从低到高合理的配置,比如:原来的配置是IP运行在ATM上,现在想改变原来的模式,IPPPP上,PPPATM上,Juniper公司对接口定义比较严格。而接口的管理也更加的灵活。在作者实习公司的有线无线交换机中,接口管理吸收了Cisco管理规划入两个主要的逻辑结构中——Port、VLAN中,用这两个数据结构去定1.3无线交换机的研发而来。这两款新产品给用户提供了无线网络管理和有线网络管理的解决方案,最大化的减小了用户的投资,并使用户长期受益。服务器平台,进行基于高速交换的嵌入式开发。将优化过的一些相关理论方本的研究内容是实习公司AX7000和AX5000有线无线交换机的项目开始前期。阅读有关TCP/IP籍、Socket编程书籍、线程管理和内存管理书籍,硬件文档,产品设计架构文档,了解国内三层交换机框架的一些情况。阅读交换的驱动源代码。对产品硬件结构进行培训与硬件工程师一起对交换的硬件转发能力进试验证。完成接口管理的基础,LinuxRSTPMSTP主要介绍了研究基于无线控制器的接口管理。本章介绍了研究背景、来源和组织安排。Linux驱动做了总结,最后对公司使用的两个开源软Quagga,D-Bus进行简单的介绍。AX7000的各个功能做了概述,并从本产品的硬件架述,最后具体的论述了接口管理的设计与实现,并且列出了。 的主要内容,介绍了AX7000投入市场后情况,展TCP/IPLinuxTCP/IPTCP/IPBSDUNIX操作系统的一部分,TCP/IP协议得到了认可,Internet诞生了[6]。1991年,internet开始用于商业用途,internetinternet发展的催化剂,使得它以空前的速度迅Linux正是一个诞生于网络、成长于网络且成熟于网络的奇特的操作系统。1991LinusTorvaldsUNIX的开源操作系统Linux,为了不让这个羽毛未丰的操作系统矢折,LinusLinux通过中来,Linux逐渐成长起来。linux/net/下相应的名称[7]TCP/IP协议栈相关内容linux/net/ipv4linux/net/ipv4/af_inet.c是主要的管理文件。示。网卡驱动程序提供的I/O之上是地址解析协议和反向地址解析协议(ARP/RARPICMPIGMPOSI模型中的网络层相似,其中以IP协议为,ICMP协议及IGMP协议协助IP协议以共同完成IP寻址、路udp.cNetwork……2.1TCP/IP以对TCP/IP协议栈按层次构件化的任务主要集中在三层上:ARP/RARP层,INETBSDINETBSDIP2.2LinuxTCP/IPLinuxBSDTCP/IP协议,是通过网络协议将其视为一组相连的软件层来实现的,BSD套接字(BSDSocket)由通用的套接字管理软的互联问题[8]。从协议分层来看,IP是网络层协议,TCP是一个可靠的端口到端IP层传输报文时,当目的方网际协议(Protocol报文,以保证传输的正确性,IP层中的代码用于实现网际协议,这些代码将IPTCPUDPUDP报文发送出去后,Linux并不知道也不去关心它是否成功地到达了目的主机。IP层之Linux(PointtoPoint回送设备)Linux设备不同,它们不是会有/dev/eth0文件,ARPIP层和支持地址解析的协议层之间。LinuxLinux的内核源代码中占有很大的比例,源代码的长Linux内核的不断升级过程中,驱动程2.4.xx2.6.xx的移植只需做少量的工作。Linux系统的设备分为字符设备(chardevice),块设备(blockdevice)和网络设备(networkdevice)三种。字符设备是指存取时没有缓存的设备。块设备的读写都有缓存来支持,并且块设备必须能够随机存取(randomaccess),字符设备则没有盘设备,CD-ROM等。一个文件系统要安装进入操作系统必须在块设备上[9]。2个设备号,第一个是主设备号,标识驱动程序;第二个是从设备号,设备驱动程序在登记时申请的主设备号一致否则用户进程将无法驱动程序。把数据从内核传送到硬件和从硬件数2.3LinuxLinux3个主要组成部分sleep()等与进程运行环境有关的函数。Linux系统来在Linux中,几乎所有的内容都是文件,对设备驱动的也是以文件操件系统(VFS)转化为设备驱动与硬件操作程序的交互。即使是网络设备的备接口,使用户能够透明地设备驱动程序。所有的硬件设备都可以使用I/O控制,而驱动程序的主要任务就是实现这些系统调用函数。Linux系统中的所有硬件设备都使用一种特殊的设备Linuxfile_operationsread、write实现中断服务函数并用request_irq向内核中断并不是每个设备驱insmodfile_operation结构中的成员几乎全部是函数指针,它们是系统调用函数的真major、minor设备号,转换成对file_operation结构的。常用的操作包括以下几种:read,进行读操作,参数buf为存放结果的缓冲区,count为所要读取的数据长度。返回值为负表示操作发生错误;否则,返回实际的字节数。对于字符型,要求的字节数和返回的实际字节数都必须是inodei_blksize的倍数。writereadreaddir 点只有与文件系统相关的设备程序才使用。select,进行选择操作。如果驱动程序没有提供select,select操作会I/O操作。ioctl,进行读、写以外的其他操作,参数cmd为自定义令失败。如果驱动程序没有提供open,则只要/dev/driver文件存在就认为打开releaseclosefile_operation结构中函数实现。不需要的函数接口可以直接在file_operation结构中初始化为NULL。file_operation变量会在驱动程序初始化时到系统内部。当操作系统对设备操作时,会调用驱动程序的file_operation结构中的函数指针。对于网络设备来说在Linux里有专门的处理。Linux的网络系统主要是基于BSDunixsocket(sk_buff)DeliverpacketsReceivepacketsLinux网络驱动程序都遵循通用的接口。设计时采用的是面向对象的方法。一个设备就是一个对象(device结构),它内部有自己的数据和方法。每一DeliverpacketsReceivepacketsSendSendtoMethodsandvariables(initialize,open,close,hard_xmit,HardwareReceivcefrom2.4skbuffnetif_rx()传递给上层处理。1998年4月7日由TimO`Reilly出面组织并主持了一“自由软件,Source年Gartner一份,认为在未来几年,几乎所有企业都将使用开源软件。Gartner在一份名“TheStateofOpenSource2008”的中预测:2012(全球)90%以上的企业都将使用开源软件[13]。QuaggaGNUZebra现在的集中控制处理一样。Quagga体VtyshZebra。,OSPFv3、RIPv1、RIPv2RIPngGNUGPLLinux和其它Unix变体系统上Zebra是最先进的路由软件之一版本可以从GUNZebraWeb站点上。,Zebra可以利用模块法对各种协议进行管理,这种设计是独一无二的。它可护进程的开发,明确的配置和管理。Quaaga的守护进程都是可配置的,可利用Vtysh——QuaggaCLI。VtyshQuagga所有Quagga体系结构如下图所示QuaggaQuaggaIP/RoutingLniux2.5QuaggaLinuxD-程序互通讯的自由软件,它是作为项目的一部分开发的。D-BusDCOPKDE4releaseDCOP。Bonobo机制。D-Bus是相对来讲比较新的进程间通信(IPC)机制。在桌面操作系统中,扮HildonIPC,D-Bus丢掉了一些不必要的、复杂的东西,也正是因为这个原因,D-Bus比较快、简单。D-BusIPCsockets,sharedmemoryormessagequeues。D-Bus的主要目的是提供如下的一些更的功能:带有异常处理的通用调用接C,C++,Python等。D-BusIPC的长期经验D-BusD-Bus也不会受累于缓慢的功能改进(creefeaturism“bus”通过D-Bus发送消息通常包含如下步骤:创建和发送消息给busdaemon进程,这个过程中会有两个上下文的切换,busdaemon进程会处理该消息,D-Bus在不同的进程之间传递大量的数据,D-Bus可能不是最杂的。D-Bus的地址和名字是为了把消息正确的送给接收者[19],IPC机制需要具有某种或某些寻址能力。D-Bus所设计的寻址方案是非常灵活和高效的。每个通企业级交换机可以提供用户化定制、优先级队列服务和控制,并能500个信息点以上大型企业应用的交换机为AP及大量无线用户接入。无线控制器通过集中管理简化AP[21。在这种构架中,无线交换机替代了原来二层交换机的位置,轻量级AP(通过这种方式,就可以在整个企业范围内把安全性、移动性、QoS和其他特性集无线交换机的应用使网络管理员在混合和匹配用户安全性能时变得更加灵活,无须再升级或重新配置802.1x、WE、TI等等[2223的做法是无法控制AP接入的,而且检查AP的接入也非常麻烦。而采许的设备或用户。如果交换机确定该设备是的,它将关闭接入点并自动告警。并且由于对于无线信号的调制、数据的转发、安全性控制和管理处理AP都需要相当强的处理能力;而对于无线交换机加轻量级APAPAP升AP那样,需要由管理员来一台一台的进行固无线交换机通过实时空间、网络增长和用户密度等,动态地调整带宽、接入控制、QoSWLAN系统的大脑。AP的信道和功率,这项突破性的AP的信道和减小其功率,以免发生。由于无线交换机是一种系统,AP和交换机之间需要的隧道协议和管理协议,无线交换机的标准化协议正在草拟之Protocol本文作者在实习中所参与的项目是公司开发的有线无线交换AX7000AX5000于Linux的开发。此产品是市场上第一款集无线和有线的企业级交换机,IP封包的转发,这些有规律的过程通过硬件高速实APCapwap隧道协议实现无线网络的转发、控制、管理。当然此AX7000Linux3.1AX70003.1所示,AX7000功能模块主要有以下模块硬件模块;硬件主要是指Marvell高速ASIC转发和多核并行CPULinux2.6驱动模块;使在Linux系统上可正常运转针对AX7000的设计,对这些功能模块的抽象可以很好理解网络报文在AX7000中的处理流程。当报文通过硬件接口进入交换机,首先它被在交换的单元中,然后报文根据硬件中的表项,进行转发。如果是可以二层转发,则直接被交换转发出去,这个报文的处理流程结束。如果报文要进IPIP在路由表中查找,如果找到本身对应的路CAPWAPRIP或其他特殊报文,则报文通过接口管理模块分流到相应的AX7000交换机CPU采用Caviumnetwork公司的CN38XX,这是一款多单多核:最多16MIPS64cores/集成高性能网络接口:最大4×10/100/1000ethernetMACs(RGMII)或者SPI4.264bit133MPCI/PCI-X接口。30milion个包每秒。硬件TCP,包括校验和和计数器。L2catch。72/144bitDDR2DRAM800MHzAX7000高速ASIC采用Marvell公司的DX的275和804两块。此类为用户提供1G加密吞吐率和最多24GE/4SPF/2*10GE个端口,适用于部署中型企业。除普通的交换管理功能外,该处有特点如下:MAC地址配置空间;PCIMII/RGMII管理;QoS48PCLQoS和安全管理;动态管理片上单元。HyperAccessLowLatencyMemoryControllerHyperAccessLowLatencyMemoryControllerXAUI*4&1XFPor6GEor3.2AX7000如上图所显示,AX7000的两块交换引出了四个插槽。作为CPU的SPI通道相连。CPU4*GE/SPFCPULinuxLinuxTCP/IP协议栈来进行转发。这样就可以把CPU模块抽象为一个高速的与804、275级联的第三块交换来CPUAX70003.3AX7000AX7000有线无线交换机具有的特点:高度集成的有线无线设计;WLANRF管理;88G的数据交换。AX7000的各个物理硬件模块从底层对以上的特点进行了有力的支撑。而另接口管理是交换机的软件模块。接口管理涉及到底层驱动和上层对用户件层面上对系统的Port、VLAN两个结构体的操作,主要目的是为了高效合理的管理交换机,并且以它为进行软件开发,容易扩展功能,便于版本的移VLANQoS以及管interfacevlan<1-vlannointerfacevlan<1-vlaninterface进入配置接口令节showVLANMSTPIGMPRouteARPMTU、双工/IPARP,路由信息。接口在设置上是一个从底层到的过程,报文在从进入到转发也是一个TCP/IP协议处理的流程。接口管理是交换机中的内容,更是有线无线交换机的开发的重中之重。在交换机中,不光要涉及到有线网络的处理流程,还要处理无线网等报文来时,对其进行检查,最后的选择。理最直观的体现。网络管理员根据网络拓扑配置交换机的物理属性,FDB表项,AX7000交换机功能上来说,最重要的是保证基本功能——报文正确TCP/IP西需要管理因此衍生出接口管理它也无可厚非的成为交换机软件的部分。令行可以体会到它们对接口的定义的方式。Cisco对接口定义最广泛,因此从上一节所的三层VLAN接口就可以看出。要配置一个VLAN接口首VLANVLANVLAN中的这些端口都共享VLAN转发。 4.1PortVLANQoSARPARPROUTECapwap说不是主要的,所以它可以直接从CPLD。Port和VLAN是交换机的基础,AX7000以它们设计INTERFACEPort的提供从第二点上看有两种,一个是交换,一个是Cavium网卡,那么针对不同的硬件就有两种不同的实现方式。对于简单的网卡只能基于Port,对于交换则可以是基PortVLANPortVLAN上。MIRROR和QoS可以把它们看成一个特性功能集,从手册上看,它们的实现仍然与PortVLANPortVLAN绑定。第三点是RSTP/MSTP的作用是去除网络中的环形连接,IGMPVLANPortVLAN之上的接口,不过会VLAN的部分。DHCPARP以及第五点中的路PortVLANPortVLAN4.2Interface4.2PortVLANLinux操作系统的前提下,最和接口管理方面的通信就是一个大问题,LinuxD-Bus技术正好可以解决这AX7000的开发重点在于接口的设计。根据接口实现上层令行,接口管理函数,底层操作,这是一个从上到下的纵向过程。还有横向的过程,就是报文在中的转发。纵向功能就像是一个个的阀门,横向就如同一个管道。阀AX7000的硬件是多核CPU加ASIC的设计,则整体软件设计架构就体4.3所示[27]。
System…DebianLinuxPortSystem…DebianLinuxPortPortSForwardingSForwardingBridgingBuilt-inHTTPServiceCoerMarvell图AX7000要使用于各种网络拓扑,则它需要处理多种配置。配置的最终目的接口管理进行转发到协议或直接到硬件网卡驱动和。如图4.4所示。面面
图4.4当报文从Cavium网卡或Marvell收到后,它们的处理流程是不同的,但CPU经过处理后根PCISPI或这一业务的实现主要是通过硬件驱动实现。Marvell有自己强大的驱动应用库函数,Linux虚拟驱动则是通过接口定义给Marvell端口和VLAN虚拟Linux4.5所示。D-BusLinuxnetlinksocket实现。4.64.5数动Linux4.6模块,操作模块,板载设备操作模块,功能库模块,无线模块,虚拟网建,管理,命令节点,分析命令字的模块,把命令传给接口管理模块。命令逐个单词解释。DEFUN宏就是完完整整的定义这个结构体,并实现命令字函数体的定义。Dclivtysh中添加的新功能命令。而添通过DEFUN定义令后要调用相应的函数把令结构体挂在vtyshZebrarip,ospf。它还提供了一套Linux用户空间和内核空间交互令比如命令ipaddressA.B.C.D/M就协议模块中主要就是桥协议的实现,现已实现两个协议RSTP/MSTP和IGMP。RSTP/MSTP协议即生成树协议,是一种二层管理协议,它通过有选择性口的转发大权—STP802.1d中定义,RSTP802.1w中定义,MSTP802.1s中定义。所在的多播组。多播路由器需要这些信息以便知道多播数据该向哪些接口转IP数据报进行传输。IGMP有固定的报文长度,没有可选数据。置的函数。功能配置主要有FDB,PORT,VLAN,ACL,MIRROR,ARP等等。的配置功能的实现是靠封装提供的驱动应用函数库,给npd的接口提供下层的操作函数。功能库模块主要是mcpssmcpss是marvell提供的驱动应用函数库。它里面主要包含了的初始化,包含了从到内存的收发包机制,还有就是对常见的功能配置的函数。nbm。nbmAX7000Cavium网卡一些wid,wtp,wsmnpd里面定义了接口管理的数据结构,并且软件上保存了里面的设置,同步里面的表项,把功能构建成一个易于理解的软件模型,上层的调用5.1所示。,AX7000设备主要是转发报文,而不是产生报文。首先是交换机启动和初始IGMP收发包线程,再就是路由学习等等线程。接下来启动协议进程和Quagganamnbm是作为两个函数库存在。报文从某一个网口传输进来到了。首先先做报文的(也就是物理层面上东西;接着是的TCP/IP协议的数据链路层来做;分析报文的二层DMACpvid(untag形式加入的vlanvlanid)FDB表里面查询,如果查询到相应的表项,则根据表项的端口信息转发;如果没有查找到相应的表项,FDBSMAC,进入设备时的端,pvid等,以便新的转发。当然没有找到不会就此把这个报文丢掉会在pvid这个vlan中广播此报文。当相应的表项被找到,但是表项,CPUCPU丢弃。如果报文找到相应的表项,但是表项令字是traptocpu则报文就会被VLAN参数等等。和内存的交互,这个交互是npd的DMA控制线程实现。的DMA控制器把中的ARP功能模块进行ARP学习做软件保存,并且把学到的ARP写到的ARPBPDUSTP/MSTPLinux虚拟网卡驱动被转发出来,则报文又从内存经DMA发给Marvell的单元,再把报文发送出去。PCILinuxTCP/IP比如通过SPI或其他而这些都是通过提供给用户的接口配置命令进行选择。mcpssnpd模块的关系是调用关系,mcpss作为一个库存在,npd在启动的时候,首先调用mcpss中的初始化函数创建初始化线程,紧接着启动报文收发线程,等等还有其他线程。mcpss还有一个重要的作用就是按功能提供底QuaggaVtysh。Vtysh已经完全实现了命令组织,命令分析,命令格式设计,命令节点设置令。VtyshENABLE节点。在这个接口设计,最主要的是INTERFACE,VLAN,ETH-PORT,IGMP,STP,ACLVtysh加载时的启动过程/*Quagga的默认配置文件*/get_default_config();/*Vty*/vtysh_init_vty();/**/vtysh_config_init();/*添加开发人员所设计令*/dl_dcli_init();Vtyshdl_dcli_init()函数,这个函数调用加载所有开发人员添加令节点以及命令。Vtysh提供令行节点结构体如下structenumnode_type /*节点类型 /*命令提示符VTYSH(*func)(structvty配置文件写函数命令节点序列向量要创建一个新令节点则只需要定义一个上面的结构体,再使用下面的函voidinstall_node(structcmd_node*node,int(*func)(structvty定义新命令主要使用下面令结构体struct /*命令字符/*命令响应函数int(*func)(structcmd_element*,structvty*,int,char命令提示所属的守护进程命令描述符序列向量命令序列索引配置说明然后调用下面的宏实现对上面令结构体定义及赋值。最重要的是大括号DEFUN({/*命令处理函数}以上是在添加新令所用到的结构体和API函数。通过利用Vtysh的已经设计好令组织执行框架,开发人员只需要定义命令字,命令解析函数。无线npd模块。npd根据不同的接D-Bus来实现两个进程之间的通信。在AX7000中命令是以功能模块为单元,把各个功能模块令全部挂载在各自令节点下面。开发不同的功能模块则要开发人员自己添加对这个功能模showeth-portPORTNOattributes这个命令是显示端口的物理属性,PORTNOPORTNODEFUN宏来创建命令结构体,这个结构体如前所说主要是定义命令字,并且定析这个命令字的函数。parse_slotport_noPORTNOD-Busdbus_message_new_method_calldbus_message_append_args函数把解析出来的端口索到npd的处理函数处,然后调用dbus_message_get_args函数得到npd端函数的处理结果并按照一定的格式输出。当定义完这个命令体后,要把这个命令结构体挂载到相应令节点:voidinstall_element(enumnode_typentype,structcmd_element*cmd)这样在用户命令行Vtysh端的新命令创建的过程,各个功能模块的npddcliD-Bus的消息分发机制调用要对这个命令进行处理的接口管理函数(这就是在第二章中所介绍的D-Bus处理模式。上面令对应npd端的处理函数是npd_dbus_ethports_interface_show_ethport_attr。nam模块封装的硬件管理函数,是这些都比较雷同。Dcli端根据接口定义命令,D-Bus根据通道分发消息,npd起作用的是在报文转发流程中。一个接口可以对应很多令,例如一个三层接不只是对交换的控制,它还要对一些特殊协议进行控制,接口模块相应的定PortVLAN。协议模块主要在做的是STP/RSTP/MSTP——生成树协议。这个协议都作为独立的进程存在于系统中。STPSTPtree,因此必然有一条链路要blockingblocking的链路才会之前链路所承担的职责,做数据的转发。无论怎样,总会有一条链STP基础上额外定义了两种portrole分别是alternate与backup。另外重定ainstance,并不需要那么多的生成树,只需要按照冗余链路的条数来得出需要几冗余与负载分担。MSTPRSTP的,MSTP65个MSTinstanceVLAN数目是无限的。RSTP/MSTPstructstpm_t /*端口角色选择状态机/*映射在这个实例上的VLAN位图,用于MSTP*/ }structport_t/*BPDU/*端口角色切换状态机/*端口状态切换状态机/*拓扑变化状态机/*发包状态机receive/*}MSTPRSTPRSTPMSTP中都有自己的一个变量Version,这个MSTPinstance0RSTPMSTP中所有的端口都会映射到instance0,这个是不会变化的,无论这个端口加入那个VLANVLANinstance,instance0上的端口都不会改变,instance0MSTPRSTP的配置命令就可以实现。VLANMSTPnpd端的管理接口并且建npdstructstp_info_s enumstp_running_modemode;unsignedint unsignedint unsignedint unsignedint unsigned unsignedint enumstp_state_ent_sstate;UNIXsocket实现。这种实现比较简单,比较安全,唯一的不足是比较慢。UNIXsocket通道的建立和网络编程上接口管理模块对socket控制的几个主要函数如下:npd_rstp_sock_ini(); /*创建socket*/npd_read_stp_ports_state(); npd_cmd_write_ro_rstp(); 协议端对socket控制的几个函数如下:npdSocketInit(); /*创建socket*/npdSocketRecvfrom( /*接口管理端的信息npdSockedto() /*向接口管理端发送信息MSTPinstance为例阐述它们之间的实现方式。Vtysh端的配MSTID在接口上保存并写入到上,同时协议端也会收到此消息在port_t,stpm_t中接口stp_info_s中的协议信息,再调用nam中的硬件操作函数写到转发中,使的报文转发作出相应硬件措施。当用户想看状态机的用行结果则,直接调stp_info_s中的信息即可,它是硬件信息以及协议状态的备份。通过在改变VLAN或端调用如下函数实现:/*VLANVLANinstance0*/npd_mstp_add_vlan_on_mst();/*VLANinstancenVLAN删除*/npd_mstp_del_vlan_on_mst();/*VLANVLANinstancen*/npd_mstp_add_port();/*VLANVLANinstancen删除instance0*/npd_mstp_del_port(当这些消息通过这四个函数发送到npd端,则分别解析它们穿过来令字VLANIDAPIMSTP的属性,从而影响IP地址,查看网络状态。AX7000的硬件架构设计是通过Marvell高速转发实现但当是发给网关VLAN,在同时对ASIC进行了设置,也就是说在这个端口或VLAN中接收Linux。DevofDevofInterfaceof传送数据的;二是提供三层接口。在Linux中所有的虚拟空间被分为用户空经过驱动程序提供工的read,write,ioctl等函数来实现。驱动的实质就是实现这些Linux内核的TCP/IPAX7000中有二十多个端口,4096VLAN,用户可能创建基于这么多的端口,VLAN三层接口,IP,用硬件实现是不现实的,所以就需要随时可以创建或删除的虚。DevofDevofInterfaceofInterfaceInterfaceof图5.2三层接口和交换关系的方式连接用户态和态。图5.3是虚拟网卡和物理网卡对比图。5.3readwrite函kapkap驱动程序中,因为要通过一个字符MAC地址等等。structkap_struct structsk_buff_head structuser_netdevice**udev_index; structnet_device_stats unsignedint /*网络设备标志/*MACMAC相同unsignedchar。kap_structudev_index中就包含了网络设备类型,即接口类型,是Port模式还是VLAN模式才能把上的端口和三层接口之间的关系联系起来,更重要的作用是报文在LinuxTCP/IP协议栈进行处理的时候要和网络设备绑定,驱动就根据传入的报文给报一定的可以认识的标记,来保证报文在中的正确发送。下面是structuser_netdevice的具体定义。。structstructnet_device*dev; KAP_DEV_TYPEdev_type;/*赋予网络设备的类型*/unsignedintl3_index; unsignedintl2_index; unsignedint /*VLAN模式的网络设备所对应VLANstructnet_device[33]linuxKap驱动中所涉及到这个结构体里面主要是有以下方面:intifindex全局唯一的设备ID在每个设备时调用dev_new_index生成。kapnpd中,对三层sioctlkap中最常设置的就是网络设备的flags,表示设备现在模式,主要有这几种:IFF_UP、IFF_DOWN、IFF_MULTICAST等。net_device结构中同样包括了许多函数指针。这些函数指针主要完成以下几个功能,收发数据帧,添加或分析链路层数据包头等。kap驱动中主要实现的结open:kap_net_open(structnet_device*dev);close:kap_net_close(structnet_device*dev);/*数据包发送函数hard_start_xmit:kap_net_xmit(structsk_buff*skb,structnet_deviceget_stats:kap_net_stats(structnet_device*dev);拟文件系统(VFS)转化为设备驱动与硬件操作程序交互。即使是网络设备的备接口,使用户能够透明地设备驱动程序。所有的硬件设备都可以使用I/O控制,而驱动程序的主要任在Linux中,字符设备和块设备统一以文件的方式,它们的接口是统始化时到系统内部。当操作系统对设备操作时,会调用驱动程序的staticstructfile_operationskap_fops= = = = = = =read,读操作,参数buf为存放结果的缓冲区,count为所要的数据长度。返回值为负表示操作发生错误;否则,返回实际的字节数。在虚拟它的主要作用就是对网卡设备的控制,例如创建、删除、修改设备Link状态、IP和MA地址等等。compat_ioctl,Linux2.664bitkernelstructfile_operation中增加的成员,compatarg是一个用户态指针,32compat_ptr(art)64位的指在内核中利用misc_register()函数将该驱动为非标准字符设备驱动,提#modprobe#mknod/net/dev/kapc10Linuxnet/dev下创建一个字符设c表示是字符设备10200分别是主设备kap设备时,openkap_chr_open()函数,其中将完成的初始化和等待队列的初始化。kap驱动中网卡的被嵌入了字符驱动的ioctl程序中,它是通过对字符设备文件描述符利用自定义的ioctl设置标志首先使用open函数打开在/net/dev/处的字符设备,返回设备描述符。如果需要创建三层接口则调用ioctl()函数操作字符设备文件描述符,命令标志为PortVLANVLANID,当处理完后还要通过这个npd端进行保存。structif_cfg_struct /*ifname,e.g."en0"*/KAP_DEV_TYPEdev_type;KAP_DEV_LINK_STATUSdev_state;unsignedintl3_index;unsignedintl2_index;unsignedintvId;unsignedintnetmask;unsignedchar返回产生的绑定dev初始化创建user_dev、调用ioctlOpen5.4kap_create_iffalloc_devstructnet_device,kaptcp/ip协议栈的角度而言,它和真实网卡kap设备获取的数据不是来自物理链路,而是来自用户区,kapkap设备也不是发送到物理链路,kaphard_start_xmithard_start_xmitkap_net_xmit函数,skbskbkap设备字符驱动读数据的进程,接着kap设备的字符驱动部分调用其kap_chr_read()过程skb链表,skb发往用户区,完成虚拟网卡的数据发送。write()kapkap_chr_writekap_get_userskb中,netif_rx_ni(skb)skbtcp/ip协议栈处理,完成虚拟网卡的数据接收。readwrite5.5所示。调用调用write否创建sk_buff根据参数查找否是是否大于64否调用read5.5write、readLinux虚拟网卡驱动实现了用户空间和内核空间的通信,让到达内存的报文Marvell是挂载在PCI总线上的CPU外设。虽然它和网卡有些相似,但是它本身有处理报文的能力,所以它在内核中不是以网络设备去,而是DMA机制来完成报文从外设到用户空间的传递,更重要的是用户程序对file_opreationstaticstructfile_operations _fops{.llseek= = =pres = .compat_ioctl = =pres.release= read,write,open,release,ioctlmmapcompat_ioctl,Linux2.664bitkernelstructfile_operation中增加的成员,compatarg是一个用户态指针,32compat_ptr(art)64位的指proc文件,可以在/proc/下对驱动的一些参数进行修改[36]。初始化驱动信号灯和时钟周期。Marvell的驱动主要作用是提供read,write,mmap函数,让应用程序可以方便到的内存空间。Marvellnpd收报文线程的主函数是cpssDxChPacketRxAdapterStartReceiveVLANID查找对应的三层接口的索引,也就是虚拟网络设备ARPARP路由学习模块进行处理,最后才送read函数报文,然后根据和报文一块传出来的虚拟网络设备属性,给这个报文建立特殊标记,然后发送到Marvell中,让把此报文发送出去。Cavium网卡驱动,至此有了这三个驱动,通过接AX7000上的端口就是所看到的网口。它的直观功能就是插上网线能上网。AX7000中使用了两块硬件,一块是275,另一块是804。这两个都使用同一个驱动。所以在Marvell提供的开发包中,每个函数都有一个参数——devNum5.6显示了硬件结构各种物理端口。从图中可以看出AX7000中的275和804引出端口是24个GE和4个10GE口。这些端口提供给用户使用,就需要有相应的方法能管理它们。在软件structnet_device一样。WiCtrlWiCtrlPCI- 2*PCI- 4*(6GE)Memory连接到4个MVLSwitchCavium1×PCMCIACombo(光电互换主控直接出2×10GE5.6AX7000种是基于端口的,一种是基于VLAN的;上一节所说的协议模块,当它运行在MSTP版本时,VLANFDB,QoS,ACL接口管理是通过设计两个结构体eth_port_s和vlan_s来实现。接口管理模块Port结构体如下:structeth_port_senum 32bitsofattributes,definedinnpd_sysdef.hBits0~11tohave12kindsofbinaryattributesBits12~15torepresent4bits16kindsofspeed,Bits16~31forfuturemoreattributesunsigned unsigned structeth_port_func_data_s structeth_port_counter_s port_type10Gattr_bitmapmtufuncs标识端口所有的功能。counters是这个端口上所有流经报文的统计。Marvell的端口物理属性是以下几种Port结构体就可以对它们进行管理。当别的模块需要端口属性,就可以直接在此结构体,结构体中attr_bitmap的相应位或mtunpd_set_port_autoNego_status(); npd_get_port_autoNego_status(); npd_set_port_flowCtrl_state(); npd_get_port_flowCtrl_state(); npd_set_port_backPressure_state(); npd_get_port_backPressure_state(); npd_set_port_admin_status(); npd_get_port_admin_status( /*获得管理状态npd_set_port_link_status /*Link状态npd_get_port_link_status /*Link状态npd_set_port_mru /*npd_get_port_mru /*mtu大小5.7所示。attr_bitmapmtu的作用,这些基本的物理层功能,是在AX7000的高速中把报文处理分为ingresspipe和egresspipe。这两个管道上最重要的几个功能就是IngressEngine,BridgeEngine,Router是否否否是是否Link否是报文是否大于是是否否否是是否Link否是报文是否大于是5.7structeth_port_func_data_sBitmapoffunctionsthatisenabledonthisport,wesupportatmost32ethernetportfunctions.Thiscanbeexterndto64functionsinThereisadefinitionofthesebitmapinnpd_sysdef.hunsigned /*Portcapability,hardwaredependant,initializedinthebeginning*/unsignedint /*Portrunningfuncs,canbeconfiguredbyuserduringruntime*/ funcs_cap_bitmap标识了端口所支持的功能位图,funcs_run_bitmap标识了端funcs_run_bitmap中标识的功能而准备的私有数据,也可根据不同的功能对这个接口去编程和应用,但归根结底是实现了Ingress和Egress的功能模块的管理。TCP/IP协议模型定义数据链路层是一根网线之间的传输,为网络层来服务的。这个服务体现在报文上就是每个IP14字节的链路层数据,目的DatabaseFDB的控制和管理上。structeth_port_switch_s/*二层接口信息*/intisSwitch;unsignedintfdbLimit;/*port-basedFDBprotectedunsignedintfdbCount;/*port-basedFDBprotectednumberlearnedcount*/ fdb_interface_info_s{/*接口上的FDB信息*/ unionstructunsignedchar unsigned }port; unsigned }}npd_switch_port_notifier_func是函数指针,这个函数主要作用是当端口出现Linkdisableenable。其他功能接口都有这个函数。这是无线控制器上最经常出现的。过Internet远在地球两端的人可以,,共享文件等等。而这些的实现都是靠Route来完成。AX7000作为一个企业级的交换机,也具备这种路由功Linuxstructeth_port_intf_s/*基于端口的三层接口信息*/unsignedintifIndex;enumVLAN_PORT_SUBIF_FLAGflag;structeth_port_promi_s{/*Cavium网卡驱动实现*/enumuplink_type_stype;unionuplink_portup;dot1q_vlan_list_ssubifList;如上所述端口有三种接口模式,一是switch接口,一是route接口,一是promisouse接口。这三个接口在每个端口上某一时刻只能存在式,即三种接口是互斥的。switchroute接口模IPpromisousePCICavium网卡驱动。npd_set_port_switch_mode(); /*设置switch接口*/npd_set_port_route_mode(); /*设置route接口*/npd_set_port_promi_mode(); /*设置promi接口*/npd_del_port_switch_mode(); /*删除switch接口*/npd_del_port_route_mode(); /*删除route接口*/npd_del_port_promi_mode(); /*删除promi接口*/npd_set_promi_attr( /*switch接口npd_port_type_deal(); npd_check_port_switch_mode(); /*检查是否switch接口*/npd_check_port_route_mode(); /*检查是否route接口*/npd_check_port_promi_mode(); /*检查是否promi接口*/5.8所示。开Switch开Switch查找否是丢结
查找是是
Promise开开调用Cavium动调用SPI送Linux栈结否查找路由 丢送
结5.8struct{/*安全接口信息unsigned unsignedlong unsigned unsigned unsigned QOS_PROFILE_OUT_PROFILE_ACTION_Eunsigned AX7000对网络的协议模块的接口如前面协议模块设计实现小节所述。AX7000VLAN的接口,现在困structeth_port_dot1q_list_s/*Tagged端口*/unsignedshortvid;structlist_headstructport_based_vlan_s{/*Untagged端口*/unsignedshortvid;5.9所示。读读CPLD设备号/int槽号/图5.9端口转化1999VLAN802.1Q协议标准草案。VLANLANVLANLAN有着相同的属性。但由于它是逻辑地而不是物理LANVLAN内部的广播和单播流VLAN是为解决以太网的广播问题和安全性而一种协议,它在以太网VLANVLANID把用户划分为更小的工作组,限制不VLAN4MACIP在AX7000中对VLAN的实现采用的是第案,这是IEEE802.1Q规定的依据以太网交换机的端口来划分VLAN的国际标准[38],而且也是最简单的一种。VLANVLAN可以包含很多端口,VLAN一个端口在VLAN中的形式只有一种,也就是在统一VLAN中一个端口不能tagged和untagged共存。每个端口都有自己的PVID,这个值是和这个端口以untaggedVLANVID相同。发。VLAN同样也是一个对TCP/IP网络模型的定义,同样要有和网络structvlan_s/*VLANidunsigned /*VLANname /*VLANIGMPsnooenableFlag*/unsignedchar /*VLANlayer2infostruct /*VLANlayer3infostruct /*VLANQ-in-Qinfostruct /*untaggedportlist eth_global_indexlist*/ /*taggedportlisteth_global_indexlist*/ /*trunklist,trunkgroupidlist*/ /*untagtrunklist /*IGMPsnoocontrollist*/ /*DHCPsnoocontrolliststructdhcp_snoo /*ACLcontrolstruct /*QoScontrollist*/ VLANPORTVLANstructbrg_vlan_info_sunsigned /*vlanstate:uporunsignedint /*vlan-basedFDBprotectednumber*/unsignedint /*FDBlearnedonthisvlan*/structvlan_ports_bmp /*untaggedportbitmap*/structvlan_ports_bmp /*taggedportbitmap*/VLANstructvlan_intf_info_sunsignedint /*vlanId*/ VLAN_PORT_SUBIF_FLAGflag;VLANstructdhcp_snoo_info_s{unsignedintitemId;unsignedlong unsignedshort unsignedintifindex;/*etherportglobalindex:caculatedbyslot/portstructigmp_snoo_info_s{unsignedintgroupId;unsignedintvid;structigmp_snoo_list_node_s{structlist_head unsignedint unsignedshort 在VLAN结构体中定义vlan_port_list_s定义了两个链表,一是所包含的这里只列出对VLAN三层接口的管理函数:npd_intf_create_vlan_l3intf(); /*创建三层VLAN接口*/npd_intf_del_vlan_l3intf( /*删除三层VLAN接口npd_intf_vlan_check /*VLAN接口npd_intf_set_vlan_attr /*VLAN接口属性npd_intf_get_info( /*VLAN接口信息VLANVLNA就有了三层转发的功能。VLAN802.1Q定义的一样,AX7000对在网络中转发的报满足标准的802.1Q定义的报文格式。根据802.1Q分类的VLANTag标记报文和普通二层报文。VLANTag标记报文比普否是否VLAN是查找端口以Tagged所属否是否是对应表项的否是否VLAN是查找端口以Tagged所属否是否是对应表项的VLAN检查出端口与DSATagVLAN以Tag以Untag形 属于去掉DSATag修改帧中的VLNA改写DSA查找给报文写入DSA图 AX7000VLAN中报文的处理流VLAN上,就可以很轻松的管理。PortVLANPortVLANnpdMarvell驱动检测到有网线拔或插就会产生一个中断,最终这个中断的处理就是调用PortfunsPort/*route接口针对Link的处理函数*/npd_route_port_link_change();/*promi接口针对的处理函数*/npd_promi_port_link_change();/*VLAN根据VLAN中的untag端口状态对Link的处理函数*/npd_vlan_untag_port_link_change();/*VLAN根据VLAN中的tag端口状态对Link的处理函数*/npd_vlan_tag_port_link_change();/*RSTP/MSTP协议对Link的处理函数*/npd_rstp_link_change();VLAN,如果自己VLANVLANPort的状态而变化,基于VLAN的功能模块也要改变。接口管理总体设计思想就是以Port和VLAN为结构体把其他的接口挂地址解析协议(AddressResolutionProtocol,ARP)IP地IPv4和以太网的广泛应用,其主要用作将格方式和非表格方式。ARP(IPOSI的第三层)地址解析为数据连接层(MACOSI的第二层
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 关于体育课件教学课件
- 2024年度成都农产品批发市场运营合同
- 2024年度广告发布合同:某品牌广告投放协议
- 2024年建筑工程施工安全管理协议
- 20245G基站建设项目合同
- 2024年定期货物运输协议
- 2024年上海房屋装修工程维修合同
- 2024年度★店铺转让及财务交接合同
- 2024年城市公共艺术装置安装工程分包合同
- 04版房地产买卖与开发合同
- 《中华商业文化》第六章
- 医院玻璃采光顶玻璃雨棚施工方案
- 运筹学-随机规划课件
- 《电阻》说课课件
- 同济外科学课件之颈腰椎退行性疾病
- 杜邦杜邦工程塑料课件
- 砌体工程监理实施细则
- 运输车辆卫生安全检查记录表
- 房建装修修缮工程量清单
- 部编版四年级道德与法治上册第8课《网络新世界》优质课件
- 柴油发电机组应急预案
评论
0/150
提交评论