版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
獨(dú)創(chuàng)性(或創(chuàng)新性)本人所呈交的是我個(gè)人在導(dǎo)師指導(dǎo)下進(jìn)行的研究工作及取得的研究成果。盡我所知,除了文中特別加以標(biāo)注和致謝中所羅列的內(nèi)容以外,中不包含其他人已經(jīng)或撰寫過(guò)的研究成果;也不包含為獲得西安電子科技大學(xué)或其它教育機(jī)構(gòu)的或而使用過(guò)的材料。與我一同工作的對(duì)本做的任何貢獻(xiàn)均已在中做了明確的說(shuō)明并表示了謝意。申請(qǐng)與資料若有不實(shí)之處,本人承擔(dān)一切相關(guān)責(zé)任。 關(guān) 使用的說(shuō)本人完全了解西安電子科技大學(xué)有關(guān)保留和使用的規(guī)定,即:研究生在校攻讀期間工作的知識(shí)單位屬西安電子科技大學(xué)。本人保證畢業(yè)離校后,或使用工作成果時(shí)署位仍然為西安電子科技大學(xué)。學(xué)校有權(quán)保留送交的復(fù)印件,允許查閱和借閱;學(xué)??梢怨嫉娜炕虿糠謨?nèi)容,可以允許采用影印、縮印或其它保存(的在后遵守此規(guī)定本屬于,在 年后適用本書。 導(dǎo)師簽名 日新型的網(wǎng)絡(luò)設(shè)備的產(chǎn)生也將成為一種必然,有線無(wú)線交換機(jī)就是這種設(shè)想本文以某公司的AX7000有線無(wú)線企業(yè)級(jí)交換機(jī)項(xiàng)目為背景,深入研Cisco、Juniper等公司的接口管理設(shè)計(jì)模式,提出了自己的設(shè)計(jì)方案?;趬K,保證和數(shù)據(jù)轉(zhuǎn)發(fā)的高效、暢通。最終根據(jù)定義的接口實(shí)現(xiàn)命令行的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第一章緒 項(xiàng)目背 項(xiàng)目來(lái) 項(xiàng)目其間主要完成任務(wù)的工 章節(jié)安 第二章相關(guān)技術(shù)背 TCP/IP及LinuxTCP/IP協(xié)議 Linux驅(qū) Linux開源項(xiàng) 路由管理之 Linux邏輯總線之D- 第三章無(wú)線控制器體系結(jié) 無(wú)線控制器的功 無(wú)線控制器的體系結(jié) 功能體系結(jié)構(gòu)模 物理體系結(jié)構(gòu)模 第四章接口管理需求分 接口管理概 接口管理需 接口管理建 第五章接口管理設(shè)計(jì)實(shí) 軟件模塊設(shè)計(jì)實(shí) 基于接口的應(yīng)用層設(shè)計(jì)實(shí) 命令行模塊設(shè)計(jì)實(shí) 協(xié)議模塊設(shè)計(jì)實(shí) 接口底層驅(qū)動(dòng)模塊設(shè)計(jì)實(shí) 虛擬網(wǎng)卡驅(qū)動(dòng)模塊設(shè)計(jì)實(shí) 交換驅(qū)動(dòng)模塊設(shè)計(jì)實(shí) 接口管理設(shè)計(jì)實(shí) Port接 VLAN接 基于接口的ARP、Route學(xué) 接口管理測(cè) 第六章結(jié)束 全文總 工作展 致 參考文 網(wǎng)絡(luò)的初步應(yīng)用,可以追溯到第二次期間,采用無(wú)線電信號(hào)作1971ALOHNET的無(wú)線電通信網(wǎng)絡(luò)。無(wú)線局域網(wǎng)(WLAN,WirelessLocalAreaNetwork)采用無(wú)線通信技90900MHz2.4MHz5GHz為主要頻率。19976IEEE802.11的一場(chǎng)“”[1]。為無(wú)線局域網(wǎng)的物理層和MAC層提供了統(tǒng)一的標(biāo)準(zhǔn),為無(wú)近年來(lái),國(guó)際無(wú)線網(wǎng)絡(luò)市場(chǎng)發(fā)展迅速。據(jù)市場(chǎng),1998年無(wú)線網(wǎng)絡(luò)服務(wù)的收入為300億,收入主要還是來(lái)源于移動(dòng)的無(wú)線語(yǔ)音服務(wù)。到年無(wú)線網(wǎng)絡(luò)數(shù)據(jù)服務(wù)的收入達(dá)到億。預(yù)計(jì) 年無(wú)線網(wǎng)絡(luò)數(shù)據(jù) 億。到了2005年的無(wú)線服務(wù)收入將達(dá)到600億,其中無(wú)線數(shù)據(jù)通信的收入達(dá)到84億,將增長(zhǎng)14倍。到2006年,全球無(wú)線網(wǎng)絡(luò)設(shè)備的市場(chǎng)銷售額將達(dá)到103億2001年全球無(wú)線上網(wǎng)人口總數(shù)已達(dá)3900萬(wàn)人預(yù)計(jì)到2005年底可達(dá)到7.29億人并且全球?qū)⒂?6%的上網(wǎng)人口 Cisco4400系列,H3CWX5002AP2級(jí)模式,APAP為中心的一片片覆蓋區(qū)域組合而成的。這些區(qū)域各自獨(dú)立工作,AP作為該認(rèn)證等任務(wù)。所有的管理工作,比如channel管理和安全性設(shè)置,都必須針對(duì)每一臺(tái)AP單獨(dú)進(jìn)行。當(dāng)企業(yè)的無(wú)線局域網(wǎng)規(guī)模較大時(shí),這就成了網(wǎng)絡(luò)管理員相當(dāng)AP來(lái)解決這個(gè)問(wèn)題。在這種構(gòu)架稱智能天線)AP[3]。通過(guò)這種方式,就可以在整個(gè)企業(yè)范圍內(nèi)把安全性、移動(dòng)性、QoS和其他特性集中起來(lái)管理。AP802.11802.11802.3幀當(dāng)中,然后通過(guò)隧道傳輸?shù)綗o(wú)線交換機(jī)。從有線網(wǎng)的角度看,無(wú)線交換機(jī)TCO,更有效率的管理。AP與交換機(jī)之間的通信的隧道協(xié)議和管理協(xié)議(LWAPP)標(biāo)準(zhǔn)定制AP不能通信的時(shí)代已成為過(guò)去,LWAPP在市場(chǎng)WLAN系統(tǒng)設(shè)備共用,才能獲得最優(yōu)運(yùn)行效果的現(xiàn)象。LWAPP還提供了一個(gè)開WLAN架構(gòu)上提供安全的第二層和第三層網(wǎng)絡(luò)本文作者實(shí)習(xí)公司是業(yè)界唯一一個(gè)有線無(wú)線寬帶網(wǎng)絡(luò)解決方案提供WLAN統(tǒng)一安全策略。了企業(yè)的IT基礎(chǔ)設(shè)施投資。傲天動(dòng)聯(lián)提供單一的有線無(wú)線產(chǎn)品平臺(tái)和基于以上的市場(chǎng)需求,公司率先推出了業(yè)界領(lǐng)先、完全自主知識(shí)的有線無(wú)線解決方案,包括業(yè)界最高轉(zhuǎn)發(fā)性能和最具安全性的AX7000系列高端安全交換機(jī)、適用于中小型企業(yè)的AX5000/3000系列安全交換機(jī)、具有零配置自愈合功能的室外型無(wú)線接入點(diǎn)、基于開放式安全平臺(tái)的AUTEWARE操作系統(tǒng)等,為客戶提供安全、高速、統(tǒng)一管理、易于部署的整網(wǎng)而接口管理正是交換機(jī)的功能,同樣有線無(wú)線交換機(jī)也不例外。上的一系列結(jié)構(gòu)體,主要目的是為了高效合理的管理交換機(jī),并且以它為核Cisco8540配置文檔中可以看出,接口與路由有很大的關(guān)系,路IP地址,端口地址,數(shù)據(jù)封裝方法和介質(zhì)類型,這些所說(shuō)的只是其中的一部分??梢钥闯鯟isco的接口定義Juniper公司的接口管理[5]相對(duì)要清晰一點(diǎn),把接口的概念分層了,從物理層T3T1OC3鏈路的物理和邏輯特點(diǎn)從網(wǎng)絡(luò)的下層傳出,這些物理和邏輯的特點(diǎn)就定義了一個(gè)接口。而接口的配置應(yīng)該從低到高合理的配置,比如:原來(lái)的配置是IP運(yùn)行在ATM上,現(xiàn)在想改變?cè)瓉?lái)的模式,IPPPP上,PPPATM上,Juniper公司對(duì)接口定義比較嚴(yán)格。而接口的管理也更加的靈活。在作者實(shí)習(xí)公司的有線無(wú)線交換機(jī)中,接口管理吸收了Cisco管理規(guī)劃入兩個(gè)主要的邏輯結(jié)構(gòu)中——Port、VLAN中,用這兩個(gè)數(shù)據(jù)結(jié)構(gòu)去定1.3無(wú)線交換機(jī)的研發(fā)而來(lái)。這兩款新產(chǎn)品給用戶提供了無(wú)線網(wǎng)絡(luò)管理和有線網(wǎng)絡(luò)管理的解決方案,最大化的減小了用戶的投資,并使用戶長(zhǎng)期受益。服務(wù)器平臺(tái),進(jìn)行基于高速交換的嵌入式開發(fā)。將優(yōu)化過(guò)的一些相關(guān)理論方本的研究?jī)?nèi)容是實(shí)習(xí)公司AX7000和AX5000有線無(wú)線交換機(jī)的項(xiàng)目開始前期。閱讀有關(guān)TCP/IP籍、Socket編程書籍、線程管理和內(nèi)存管理書籍,硬件文檔,產(chǎn)品設(shè)計(jì)架構(gòu)文檔,了解國(guó)內(nèi)三層交換機(jī)框架的一些情況。閱讀交換的驅(qū)動(dòng)源代碼。對(duì)產(chǎn)品硬件結(jié)構(gòu)進(jìn)行培訓(xùn)與硬件工程師一起對(duì)交換的硬件轉(zhuǎn)發(fā)能力進(jìn)試驗(yàn)證。完成接口管理的基礎(chǔ),LinuxRSTPMSTP主要介紹了研究基于無(wú)線控制器的接口管理。本章介紹了研究背景、來(lái)源和組織安排。Linux驅(qū)動(dòng)做了總結(jié),最后對(duì)公司使用的兩個(gè)開源軟Quagga,D-Bus進(jìn)行簡(jiǎn)單的介紹。AX7000的各個(gè)功能做了概述,并從本產(chǎn)品的硬件架述,最后具體的論述了接口管理的設(shè)計(jì)與實(shí)現(xiàn),并且列出了。 的主要內(nèi)容,介紹了AX7000投入市場(chǎng)后情況,展TCP/IPLinuxTCP/IPTCP/IPBSDUNIX操作系統(tǒng)的一部分,TCP/IP協(xié)議得到了認(rèn)可,Internet誕生了[6]。1991年,internet開始用于商業(yè)用途,internetinternet發(fā)展的催化劑,使得它以空前的速度迅Linux正是一個(gè)誕生于網(wǎng)絡(luò)、成長(zhǎng)于網(wǎng)絡(luò)且成熟于網(wǎng)絡(luò)的奇特的操作系統(tǒng)。1991LinusTorvaldsUNIX的開源操作系統(tǒng)Linux,為了不讓這個(gè)羽毛未豐的操作系統(tǒng)矢折,LinusLinux通過(guò)中來(lái),Linux逐漸成長(zhǎng)起來(lái)。linux/net/下相應(yīng)的名稱[7]TCP/IP協(xié)議棧相關(guān)內(nèi)容linux/net/ipv4linux/net/ipv4/af_inet.c是主要的管理文件。示。網(wǎng)卡驅(qū)動(dòng)程序提供的I/O之上是地址解析協(xié)議和反向地址解析協(xié)議(ARP/RARPICMPIGMPOSI模型中的網(wǎng)絡(luò)層相似,其中以IP協(xié)議為,ICMP協(xié)議及IGMP協(xié)議協(xié)助IP協(xié)議以共同完成IP尋址、路udp.cNetwork……2.1TCP/IP以對(duì)TCP/IP協(xié)議棧按層次構(gòu)件化的任務(wù)主要集中在三層上:ARP/RARP層,INETBSDINETBSDIP2.2LinuxTCP/IPLinuxBSDTCP/IP協(xié)議,是通過(guò)網(wǎng)絡(luò)協(xié)議將其視為一組相連的軟件層來(lái)實(shí)現(xiàn)的,BSD套接字(BSDSocket)由通用的套接字管理軟的互聯(lián)問(wèn)題[8]。從協(xié)議分層來(lái)看,IP是網(wǎng)絡(luò)層協(xié)議,TCP是一個(gè)可靠的端口到端IP層傳輸報(bào)文時(shí),當(dāng)目的方網(wǎng)際協(xié)議(Protocol報(bào)文,以保證傳輸?shù)恼_性,IP層中的代碼用于實(shí)現(xiàn)網(wǎng)際協(xié)議,這些代碼將IPTCPUDPUDP報(bào)文發(fā)送出去后,Linux并不知道也不去關(guān)心它是否成功地到達(dá)了目的主機(jī)。IP層之Linux(PointtoPoint回送設(shè)備)Linux設(shè)備不同,它們不是會(huì)有/dev/eth0文件,ARPIP層和支持地址解析的協(xié)議層之間。LinuxLinux的內(nèi)核源代碼中占有很大的比例,源代碼的長(zhǎng)Linux內(nèi)核的不斷升級(jí)過(guò)程中,驅(qū)動(dòng)程2.4.xx2.6.xx的移植只需做少量的工作。Linux系統(tǒng)的設(shè)備分為字符設(shè)備(chardevice),塊設(shè)備(blockdevice)和網(wǎng)絡(luò)設(shè)備(networkdevice)三種。字符設(shè)備是指存取時(shí)沒(méi)有緩存的設(shè)備。塊設(shè)備的讀寫都有緩存來(lái)支持,并且塊設(shè)備必須能夠隨機(jī)存取(randomaccess),字符設(shè)備則沒(méi)有盤設(shè)備,CD-ROM等。一個(gè)文件系統(tǒng)要安裝進(jìn)入操作系統(tǒng)必須在塊設(shè)備上[9]。2個(gè)設(shè)備號(hào),第一個(gè)是主設(shè)備號(hào),標(biāo)識(shí)驅(qū)動(dòng)程序;第二個(gè)是從設(shè)備號(hào),設(shè)備驅(qū)動(dòng)程序在登記時(shí)申請(qǐng)的主設(shè)備號(hào)一致否則用戶進(jìn)程將無(wú)法驅(qū)動(dòng)程序。把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件數(shù)2.3LinuxLinux3個(gè)主要組成部分sleep()等與進(jìn)程運(yùn)行環(huán)境有關(guān)的函數(shù)。Linux系統(tǒng)來(lái)在Linux中,幾乎所有的內(nèi)容都是文件,對(duì)設(shè)備驅(qū)動(dòng)的也是以文件操件系統(tǒng)(VFS)轉(zhuǎn)化為設(shè)備驅(qū)動(dòng)與硬件操作程序的交互。即使是網(wǎng)絡(luò)設(shè)備的備接口,使用戶能夠透明地設(shè)備驅(qū)動(dòng)程序。所有的硬件設(shè)備都可以使用I/O控制,而驅(qū)動(dòng)程序的主要任務(wù)就是實(shí)現(xiàn)這些系統(tǒng)調(diào)用函數(shù)。Linux系統(tǒng)中的所有硬件設(shè)備都使用一種特殊的設(shè)備Linuxfile_operationsread、write實(shí)現(xiàn)中斷服務(wù)函數(shù)并用request_irq向內(nèi)核中斷并不是每個(gè)設(shè)備驅(qū)insmodfile_operation結(jié)構(gòu)中的成員幾乎全部是函數(shù)指針,它們是系統(tǒng)調(diào)用函數(shù)的真major、minor設(shè)備號(hào),轉(zhuǎn)換成對(duì)file_operation結(jié)構(gòu)的。常用的操作包括以下幾種:read,進(jìn)行讀操作,參數(shù)buf為存放結(jié)果的緩沖區(qū),count為所要讀取的數(shù)據(jù)長(zhǎng)度。返回值為負(fù)表示操作發(fā)生錯(cuò)誤;否則,返回實(shí)際的字節(jié)數(shù)。對(duì)于字符型,要求的字節(jié)數(shù)和返回的實(shí)際字節(jié)數(shù)都必須是inodei_blksize的倍數(shù)。writereadreaddir 點(diǎn)只有與文件系統(tǒng)相關(guān)的設(shè)備程序才使用。select,進(jìn)行選擇操作。如果驅(qū)動(dòng)程序沒(méi)有提供select,select操作會(huì)I/O操作。ioctl,進(jìn)行讀、寫以外的其他操作,參數(shù)cmd為自定義令失敗。如果驅(qū)動(dòng)程序沒(méi)有提供open,則只要/dev/driver文件存在就認(rèn)為打開releaseclosefile_operation結(jié)構(gòu)中函數(shù)實(shí)現(xiàn)。不需要的函數(shù)接口可以直接在file_operation結(jié)構(gòu)中初始化為NULL。file_operation變量會(huì)在驅(qū)動(dòng)程序初始化時(shí)到系統(tǒng)內(nèi)部。當(dāng)操作系統(tǒng)對(duì)設(shè)備操作時(shí),會(huì)調(diào)用驅(qū)動(dòng)程序的file_operation結(jié)構(gòu)中的函數(shù)指針。對(duì)于網(wǎng)絡(luò)設(shè)備來(lái)說(shuō)在Linux里有專門的處理。Linux的網(wǎng)絡(luò)系統(tǒng)主要是基于BSDunixsocket(sk_buff)DeliverpacketsReceivepacketsLinux網(wǎng)絡(luò)驅(qū)動(dòng)程序都遵循通用的接口。設(shè)計(jì)時(shí)采用的是面向?qū)ο蟮姆椒?。一個(gè)設(shè)備就是一個(gè)對(duì)象(device結(jié)構(gòu)),它內(nèi)部有自己的數(shù)據(jù)和方法。每一DeliverpacketsReceivepacketsSendSendtoMethodsandvariables(initialize,open,close,hard_xmit,HardwareReceivcefrom2.4skbuffnetif_rx()傳遞給上層處理。1998年4月7日由TimO`Reilly出面組織并主持了一“自由軟件,Source年Gartner一份,認(rèn)為在未來(lái)幾年,幾乎所有企業(yè)都將使用開源軟件。Gartner在一份名“TheStateofOpenSource2008”的中預(yù)測(cè):2012(全球)90%以上的企業(yè)都將使用開源軟件[13]。QuaggaGNUZebra現(xiàn)在的集中控制處理一樣。Quagga體VtyshZebra。,OSPFv3、RIPv1、RIPv2RIPngGNUGPLLinux和其它Unix變體系統(tǒng)上Zebra是最先進(jìn)的路由軟件之一版本可以從GUNZebraWeb站點(diǎn)上。,Zebra可以利用模塊法對(duì)各種協(xié)議進(jìn)行管理,這種設(shè)計(jì)是獨(dú)一無(wú)二的。它可護(hù)進(jìn)程的開發(fā),明確的配置和管理。Quaaga的守護(hù)進(jìn)程都是可配置的,可利用Vtysh——QuaggaCLI。VtyshQuagga所有Quagga體系結(jié)構(gòu)如下圖所示QuaggaQuaggaIP/RoutingLniux2.5QuaggaLinuxD-程序互通訊的自由軟件,它是作為項(xiàng)目的一部分開發(fā)的。D-BusDCOPKDE4releaseDCOP。Bonobo機(jī)制。D-Bus是相對(duì)來(lái)講比較新的進(jìn)程間通信(IPC)機(jī)制。在桌面操作系統(tǒng)中,扮HildonIPC,D-Bus丟掉了一些不必要的、復(fù)雜的東西,也正是因?yàn)檫@個(gè)原因,D-Bus比較快、簡(jiǎn)單。D-BusIPCsockets,sharedmemoryormessagequeues。D-Bus的主要目的是提供如下的一些更的功能:帶有異常處理的通用調(diào)用接C,C++,Python等。D-BusIPC的長(zhǎng)期經(jīng)驗(yàn)D-BusD-Bus也不會(huì)受累于緩慢的功能改進(jìn)(creefeaturism“bus”通過(guò)D-Bus發(fā)送消息通常包含如下步驟:創(chuàng)建和發(fā)送消息給busdaemon進(jìn)程,這個(gè)過(guò)程中會(huì)有兩個(gè)上下文的切換,busdaemon進(jìn)程會(huì)處理該消息,D-Bus在不同的進(jìn)程之間傳遞大量的數(shù)據(jù),D-Bus可能不是最雜的。D-Bus的地址和名字是為了把消息正確的送給接收者[19],IPC機(jī)制需要具有某種或某些尋址能力。D-Bus所設(shè)計(jì)的尋址方案是非常靈活和高效的。每個(gè)通企業(yè)級(jí)交換機(jī)可以提供用戶化定制、優(yōu)先級(jí)隊(duì)列服務(wù)和控制,并能500個(gè)信息點(diǎn)以上大型企業(yè)應(yīng)用的交換機(jī)為AP及大量無(wú)線用戶接入。無(wú)線控制器通過(guò)集中管理簡(jiǎn)化AP[21。在這種構(gòu)架中,無(wú)線交換機(jī)替代了原來(lái)二層交換機(jī)的位置,輕量級(jí)AP(通過(guò)這種方式,就可以在整個(gè)企業(yè)范圍內(nèi)把安全性、移動(dòng)性、QoS和其他特性集無(wú)線交換機(jī)的應(yīng)用使網(wǎng)絡(luò)管理員在混合和匹配用戶安全性能時(shí)變得更加靈活,無(wú)須再升級(jí)或重新配置802.1x、WE、TI等等[2223的做法是無(wú)法控制AP接入的,而且檢查AP的接入也非常麻煩。而采許的設(shè)備或用戶。如果交換機(jī)確定該設(shè)備是的,它將關(guān)閉接入點(diǎn)并自動(dòng)告警。并且由于對(duì)于無(wú)線信號(hào)的調(diào)制、數(shù)據(jù)的轉(zhuǎn)發(fā)、安全性控制和管理處理AP都需要相當(dāng)強(qiáng)的處理能力;而對(duì)于無(wú)線交換機(jī)加輕量級(jí)APAPAP升AP那樣,需要由管理員來(lái)一臺(tái)一臺(tái)的進(jìn)行固無(wú)線交換機(jī)通過(guò)實(shí)時(shí)空間、網(wǎng)絡(luò)增長(zhǎng)和用戶密度等,動(dòng)態(tài)地調(diào)整帶寬、接入控制、QoSWLAN系統(tǒng)的大腦。AP的信道和功率,這項(xiàng)突破性的AP的信道和減小其功率,以免發(fā)生。由于無(wú)線交換機(jī)是一種系統(tǒng),AP和交換機(jī)之間需要的隧道協(xié)議和管理協(xié)議,無(wú)線交換機(jī)的標(biāo)準(zhǔn)化協(xié)議正在草擬之Protocol本文作者在實(shí)習(xí)中所參與的項(xiàng)目是公司開發(fā)的有線無(wú)線交換AX7000AX5000于Linux的開發(fā)。此產(chǎn)品是市場(chǎng)上第一款集無(wú)線和有線的企業(yè)級(jí)交換機(jī),IP封包的轉(zhuǎn)發(fā),這些有規(guī)律的過(guò)程通過(guò)硬件高速實(shí)APCapwap隧道協(xié)議實(shí)現(xiàn)無(wú)線網(wǎng)絡(luò)的轉(zhuǎn)發(fā)、控制、管理。當(dāng)然此AX7000Linux3.1AX70003.1所示,AX7000功能模塊主要有以下模塊硬件模塊;硬件主要是指Marvell高速ASIC轉(zhuǎn)發(fā)和多核并行CPULinux2.6驅(qū)動(dòng)模塊;使在Linux系統(tǒng)上可正常運(yùn)轉(zhuǎn)針對(duì)AX7000的設(shè)計(jì),對(duì)這些功能模塊的抽象可以很好理解網(wǎng)絡(luò)報(bào)文在AX7000中的處理流程。當(dāng)報(bào)文通過(guò)硬件接口進(jìn)入交換機(jī),首先它被在交換的單元中,然后報(bào)文根據(jù)硬件中的表項(xiàng),進(jìn)行轉(zhuǎn)發(fā)。如果是可以二層轉(zhuǎn)發(fā),則直接被交換轉(zhuǎn)發(fā)出去,這個(gè)報(bào)文的處理流程結(jié)束。如果報(bào)文要進(jìn)IPIP在路由表中查找,如果找到本身對(duì)應(yīng)的路CAPWAPRIP或其他特殊報(bào)文,則報(bào)文通過(guò)接口管理模塊分流到相應(yīng)的AX7000交換機(jī)CPU采用Caviumnetwork公司的CN38XX,這是一款多單多核:最多16MIPS64cores/集成高性能網(wǎng)絡(luò)接口:最大4×10/100/1000ethernetMACs(RGMII)或者SPI4.264bit133MPCI/PCI-X接口。30milion個(gè)包每秒。硬件TCP,包括校驗(yàn)和和計(jì)數(shù)器。L2catch。72/144bitDDR2DRAM800MHzAX7000高速ASIC采用Marvell公司的DX的275和804兩塊。此類為用戶提供1G加密吞吐率和最多24GE/4SPF/2*10GE個(gè)端口,適用于部署中型企業(yè)。除普通的交換管理功能外,該處有特點(diǎn)如下:MAC地址配置空間;PCIMII/RGMII管理;QoS48PCLQoS和安全管理;動(dòng)態(tài)管理片上單元。HyperAccessLowLatencyMemoryControllerHyperAccessLowLatencyMemoryControllerXAUI*4&1XFPor6GEor3.2AX7000如上圖所顯示,AX7000的兩塊交換引出了四個(gè)插槽。作為CPU的SPI通道相連。CPU4*GE/SPFCPULinuxLinuxTCP/IP協(xié)議棧來(lái)進(jìn)行轉(zhuǎn)發(fā)。這樣就可以把CPU模塊抽象為一個(gè)高速的與804、275級(jí)聯(lián)的第三塊交換來(lái)CPUAX70003.3AX7000AX7000有線無(wú)線交換機(jī)具有的特點(diǎn):高度集成的有線無(wú)線設(shè)計(jì);WLANRF管理;88G的數(shù)據(jù)交換。AX7000的各個(gè)物理硬件模塊從底層對(duì)以上的特點(diǎn)進(jìn)行了有力的支撐。而另接口管理是交換機(jī)的軟件模塊。接口管理涉及到底層驅(qū)動(dòng)和上層對(duì)用戶件層面上對(duì)系統(tǒng)的Port、VLAN兩個(gè)結(jié)構(gòu)體的操作,主要目的是為了高效合理的管理交換機(jī),并且以它為進(jìn)行軟件開發(fā),容易擴(kuò)展功能,便于版本的移VLANQoS以及管interfacevlan<1-vlannointerfacevlan<1-vlaninterface進(jìn)入配置接口令節(jié)showVLANMSTPIGMPRouteARPMTU、雙工/IPARP,路由信息。接口在設(shè)置上是一個(gè)從底層到的過(guò)程,報(bào)文在從進(jìn)入到轉(zhuǎn)發(fā)也是一個(gè)TCP/IP協(xié)議處理的流程。接口管理是交換機(jī)中的內(nèi)容,更是有線無(wú)線交換機(jī)的開發(fā)的重中之重。在交換機(jī)中,不光要涉及到有線網(wǎng)絡(luò)的處理流程,還要處理無(wú)線網(wǎng)等報(bào)文來(lái)時(shí),對(duì)其進(jìn)行檢查,最后的選擇。理最直觀的體現(xiàn)。網(wǎng)絡(luò)管理員根據(jù)網(wǎng)絡(luò)拓?fù)渑渲媒粨Q機(jī)的物理屬性,F(xiàn)DB表項(xiàng),AX7000交換機(jī)功能上來(lái)說(shuō),最重要的是保證基本功能——報(bào)文正確TCP/IP西需要管理因此衍生出接口管理它也無(wú)可厚非的成為交換機(jī)軟件的部分。令行可以體會(huì)到它們對(duì)接口的定義的方式。Cisco對(duì)接口定義最廣泛,因此從上一節(jié)所的三層VLAN接口就可以看出。要配置一個(gè)VLAN接口首VLANVLANVLAN中的這些端口都共享VLAN轉(zhuǎn)發(fā)。 4.1PortVLANQoSARPARPROUTECapwap說(shuō)不是主要的,所以它可以直接從CPLD。Port和VLAN是交換機(jī)的基礎(chǔ),AX7000以它們?cè)O(shè)計(jì)INTERFACEPort的提供從第二點(diǎn)上看有兩種,一個(gè)是交換,一個(gè)是Cavium網(wǎng)卡,那么針對(duì)不同的硬件就有兩種不同的實(shí)現(xiàn)方式。對(duì)于簡(jiǎn)單的網(wǎng)卡只能基于Port,對(duì)于交換則可以是基PortVLANPortVLAN上。MIRROR和QoS可以把它們看成一個(gè)特性功能集,從手冊(cè)上看,它們的實(shí)現(xiàn)仍然與PortVLANPortVLAN綁定。第三點(diǎn)是RSTP/MSTP的作用是去除網(wǎng)絡(luò)中的環(huán)形連接,IGMPVLANPortVLAN之上的接口,不過(guò)會(huì)VLAN的部分。DHCPARP以及第五點(diǎn)中的路PortVLANPortVLAN4.2Interface4.2PortVLANLinux操作系統(tǒng)的前提下,最和接口管理方面的通信就是一個(gè)大問(wèn)題,LinuxD-Bus技術(shù)正好可以解決這AX7000的開發(fā)重點(diǎn)在于接口的設(shè)計(jì)。根據(jù)接口實(shí)現(xiàn)上層令行,接口管理函數(shù),底層操作,這是一個(gè)從上到下的縱向過(guò)程。還有橫向的過(guò)程,就是報(bào)文在中的轉(zhuǎn)發(fā)。縱向功能就像是一個(gè)個(gè)的閥門,橫向就如同一個(gè)管道。閥AX7000的硬件是多核CPU加ASIC的設(shè)計(jì),則整體軟件設(shè)計(jì)架構(gòu)就體4.3所示[27]。
System…DebianLinuxPortSystem…DebianLinuxPortPortSForwardingSForwardingBridgingBuilt-inHTTPServiceCoerMarvell圖AX7000要使用于各種網(wǎng)絡(luò)拓?fù)?,則它需要處理多種配置。配置的最終目的接口管理進(jìn)行轉(zhuǎn)發(fā)到協(xié)議或直接到硬件網(wǎng)卡驅(qū)動(dòng)和。如圖4.4所示。面面
圖4.4當(dāng)報(bào)文從Cavium網(wǎng)卡或Marvell收到后,它們的處理流程是不同的,但CPU經(jīng)過(guò)處理后根PCISPI或這一業(yè)務(wù)的實(shí)現(xiàn)主要是通過(guò)硬件驅(qū)動(dòng)實(shí)現(xiàn)。Marvell有自己強(qiáng)大的驅(qū)動(dòng)應(yīng)用庫(kù)函數(shù),Linux虛擬驅(qū)動(dòng)則是通過(guò)接口定義給Marvell端口和VLAN虛擬Linux4.5所示。D-BusLinuxnetlinksocket實(shí)現(xiàn)。4.64.5數(shù)動(dòng)Linux4.6模塊,操作模塊,板載設(shè)備操作模塊,功能庫(kù)模塊,無(wú)線模塊,虛擬網(wǎng)建,管理,命令節(jié)點(diǎn),分析命令字的模塊,把命令傳給接口管理模塊。命令逐個(gè)單詞解釋。DEFUN宏就是完完整整的定義這個(gè)結(jié)構(gòu)體,并實(shí)現(xiàn)命令字函數(shù)體的定義。Dclivtysh中添加的新功能命令。而添通過(guò)DEFUN定義令后要調(diào)用相應(yīng)的函數(shù)把令結(jié)構(gòu)體掛在vtyshZebrarip,ospf。它還提供了一套Linux用戶空間和內(nèi)核空間交互令比如命令ipaddressA.B.C.D/M就協(xié)議模塊中主要就是橋協(xié)議的實(shí)現(xiàn),現(xiàn)已實(shí)現(xiàn)兩個(gè)協(xié)議RSTP/MSTP和IGMP。RSTP/MSTP協(xié)議即生成樹協(xié)議,是一種二層管理協(xié)議,它通過(guò)有選擇性口的轉(zhuǎn)發(fā)大權(quán)—STP802.1d中定義,RSTP802.1w中定義,MSTP802.1s中定義。所在的多播組。多播路由器需要這些信息以便知道多播數(shù)據(jù)該向哪些接口轉(zhuǎn)IP數(shù)據(jù)報(bào)進(jìn)行傳輸。IGMP有固定的報(bào)文長(zhǎng)度,沒(méi)有可選數(shù)據(jù)。置的函數(shù)。功能配置主要有FDB,PORT,VLAN,ACL,MIRROR,ARP等等。的配置功能的實(shí)現(xiàn)是靠封裝提供的驅(qū)動(dòng)應(yīng)用函數(shù)庫(kù),給npd的接口提供下層的操作函數(shù)。功能庫(kù)模塊主要是mcpssmcpss是marvell提供的驅(qū)動(dòng)應(yīng)用函數(shù)庫(kù)。它里面主要包含了的初始化,包含了從到內(nèi)存的收發(fā)包機(jī)制,還有就是對(duì)常見的功能配置的函數(shù)。nbm。nbmAX7000Cavium網(wǎng)卡一些wid,wtp,wsmnpd里面定義了接口管理的數(shù)據(jù)結(jié)構(gòu),并且軟件上保存了里面的設(shè)置,同步里面的表項(xiàng),把功能構(gòu)建成一個(gè)易于理解的軟件模型,上層的調(diào)用5.1所示。,AX7000設(shè)備主要是轉(zhuǎn)發(fā)報(bào)文,而不是產(chǎn)生報(bào)文。首先是交換機(jī)啟動(dòng)和初始IGMP收發(fā)包線程,再就是路由學(xué)習(xí)等等線程。接下來(lái)啟動(dòng)協(xié)議進(jìn)程和Quagganamnbm是作為兩個(gè)函數(shù)庫(kù)存在。報(bào)文從某一個(gè)網(wǎng)口傳輸進(jìn)來(lái)到了。首先先做報(bào)文的(也就是物理層面上東西;接著是的TCP/IP協(xié)議的數(shù)據(jù)鏈路層來(lái)做;分析報(bào)文的二層DMACpvid(untag形式加入的vlanvlanid)FDB表里面查詢,如果查詢到相應(yīng)的表項(xiàng),則根據(jù)表項(xiàng)的端口信息轉(zhuǎn)發(fā);如果沒(méi)有查找到相應(yīng)的表項(xiàng),F(xiàn)DBSMAC,進(jìn)入設(shè)備時(shí)的端,pvid等,以便新的轉(zhuǎn)發(fā)。當(dāng)然沒(méi)有找到不會(huì)就此把這個(gè)報(bào)文丟掉會(huì)在pvid這個(gè)vlan中廣播此報(bào)文。當(dāng)相應(yīng)的表項(xiàng)被找到,但是表項(xiàng),CPUCPU丟棄。如果報(bào)文找到相應(yīng)的表項(xiàng),但是表項(xiàng)令字是traptocpu則報(bào)文就會(huì)被VLAN參數(shù)等等。和內(nèi)存的交互,這個(gè)交互是npd的DMA控制線程實(shí)現(xiàn)。的DMA控制器把中的ARP功能模塊進(jìn)行ARP學(xué)習(xí)做軟件保存,并且把學(xué)到的ARP寫到的ARPBPDUSTP/MSTPLinux虛擬網(wǎng)卡驅(qū)動(dòng)被轉(zhuǎn)發(fā)出來(lái),則報(bào)文又從內(nèi)存經(jīng)DMA發(fā)給Marvell的單元,再把報(bào)文發(fā)送出去。PCILinuxTCP/IP比如通過(guò)SPI或其他而這些都是通過(guò)提供給用戶的接口配置命令進(jìn)行選擇。mcpssnpd模塊的關(guān)系是調(diào)用關(guān)系,mcpss作為一個(gè)庫(kù)存在,npd在啟動(dòng)的時(shí)候,首先調(diào)用mcpss中的初始化函數(shù)創(chuàng)建初始化線程,緊接著啟動(dòng)報(bào)文收發(fā)線程,等等還有其他線程。mcpss還有一個(gè)重要的作用就是按功能提供底QuaggaVtysh。Vtysh已經(jīng)完全實(shí)現(xiàn)了命令組織,命令分析,命令格式設(shè)計(jì),命令節(jié)點(diǎn)設(shè)置令。VtyshENABLE節(jié)點(diǎn)。在這個(gè)接口設(shè)計(jì),最主要的是INTERFACE,VLAN,ETH-PORT,IGMP,STP,ACLVtysh加載時(shí)的啟動(dòng)過(guò)程/*Quagga的默認(rèn)配置文件*/get_default_config();/*Vty*/vtysh_init_vty();/**/vtysh_config_init();/*添加開發(fā)人員所設(shè)計(jì)令*/dl_dcli_init();Vtyshdl_dcli_init()函數(shù),這個(gè)函數(shù)調(diào)用加載所有開發(fā)人員添加令節(jié)點(diǎn)以及命令。Vtysh提供令行節(jié)點(diǎn)結(jié)構(gòu)體如下structenumnode_type /*節(jié)點(diǎn)類型 /*命令提示符VTYSH(*func)(structvty配置文件寫函數(shù)命令節(jié)點(diǎn)序列向量要?jiǎng)?chuàng)建一個(gè)新令節(jié)點(diǎn)則只需要定義一個(gè)上面的結(jié)構(gòu)體,再使用下面的函voidinstall_node(structcmd_node*node,int(*func)(structvty定義新命令主要使用下面令結(jié)構(gòu)體struct /*命令字符/*命令響應(yīng)函數(shù)int(*func)(structcmd_element*,structvty*,int,char命令提示所屬的守護(hù)進(jìn)程命令描述符序列向量命令序列索引配置說(shuō)明然后調(diào)用下面的宏實(shí)現(xiàn)對(duì)上面令結(jié)構(gòu)體定義及賦值。最重要的是大括號(hào)DEFUN({/*命令處理函數(shù)}以上是在添加新令所用到的結(jié)構(gòu)體和API函數(shù)。通過(guò)利用Vtysh的已經(jīng)設(shè)計(jì)好令組織執(zhí)行框架,開發(fā)人員只需要定義命令字,命令解析函數(shù)。無(wú)線npd模塊。npd根據(jù)不同的接D-Bus來(lái)實(shí)現(xiàn)兩個(gè)進(jìn)程之間的通信。在AX7000中命令是以功能模塊為單元,把各個(gè)功能模塊令全部掛載在各自令節(jié)點(diǎn)下面。開發(fā)不同的功能模塊則要開發(fā)人員自己添加對(duì)這個(gè)功能模showeth-portPORTNOattributes這個(gè)命令是顯示端口的物理屬性,PORTNOPORTNODEFUN宏來(lái)創(chuàng)建命令結(jié)構(gòu)體,這個(gè)結(jié)構(gòu)體如前所說(shuō)主要是定義命令字,并且定析這個(gè)命令字的函數(shù)。parse_slotport_noPORTNOD-Busdbus_message_new_method_calldbus_message_append_args函數(shù)把解析出來(lái)的端口索到npd的處理函數(shù)處,然后調(diào)用dbus_message_get_args函數(shù)得到npd端函數(shù)的處理結(jié)果并按照一定的格式輸出。當(dāng)定義完這個(gè)命令體后,要把這個(gè)命令結(jié)構(gòu)體掛載到相應(yīng)令節(jié)點(diǎn):voidinstall_element(enumnode_typentype,structcmd_element*cmd)這樣在用戶命令行Vtysh端的新命令創(chuàng)建的過(guò)程,各個(gè)功能模塊的npddcliD-Bus的消息分發(fā)機(jī)制調(diào)用要對(duì)這個(gè)命令進(jìn)行處理的接口管理函數(shù)(這就是在第二章中所介紹的D-Bus處理模式。上面令對(duì)應(yīng)npd端的處理函數(shù)是npd_dbus_ethports_interface_show_ethport_attr。nam模塊封裝的硬件管理函數(shù),是這些都比較雷同。Dcli端根據(jù)接口定義命令,D-Bus根據(jù)通道分發(fā)消息,npd起作用的是在報(bào)文轉(zhuǎn)發(fā)流程中。一個(gè)接口可以對(duì)應(yīng)很多令,例如一個(gè)三層接不只是對(duì)交換的控制,它還要對(duì)一些特殊協(xié)議進(jìn)行控制,接口模塊相應(yīng)的定PortVLAN。協(xié)議模塊主要在做的是STP/RSTP/MSTP——生成樹協(xié)議。這個(gè)協(xié)議都作為獨(dú)立的進(jìn)程存在于系統(tǒng)中。STPSTPtree,因此必然有一條鏈路要blockingblocking的鏈路才會(huì)之前鏈路所承擔(dān)的職責(zé),做數(shù)據(jù)的轉(zhuǎn)發(fā)。無(wú)論怎樣,總會(huì)有一條鏈STP基礎(chǔ)上額外定義了兩種portrole分別是alternate與backup。另外重定ainstance,并不需要那么多的生成樹,只需要按照冗余鏈路的條數(shù)來(lái)得出需要幾冗余與負(fù)載分擔(dān)。MSTPRSTP的,MSTP65個(gè)MSTinstanceVLAN數(shù)目是無(wú)限的。RSTP/MSTPstructstpm_t /*端口角色選擇狀態(tài)機(jī)/*映射在這個(gè)實(shí)例上的VLAN位圖,用于MSTP*/ }structport_t/*BPDU/*端口角色切換狀態(tài)機(jī)/*端口狀態(tài)切換狀態(tài)機(jī)/*拓?fù)渥兓癄顟B(tài)機(jī)/*發(fā)包狀態(tài)機(jī)receive/*}MSTPRSTPRSTPMSTP中都有自己的一個(gè)變量Version,這個(gè)MSTPinstance0RSTPMSTP中所有的端口都會(huì)映射到instance0,這個(gè)是不會(huì)變化的,無(wú)論這個(gè)端口加入那個(gè)VLANVLANinstance,instance0上的端口都不會(huì)改變,instance0MSTPRSTP的配置命令就可以實(shí)現(xiàn)。VLANMSTPnpd端的管理接口并且建npdstructstp_info_s enumstp_running_modemode;unsignedint unsignedint unsignedint unsignedint unsigned unsignedint enumstp_state_ent_sstate;UNIXsocket實(shí)現(xiàn)。這種實(shí)現(xiàn)比較簡(jiǎn)單,比較安全,唯一的不足是比較慢。UNIXsocket通道的建立和網(wǎng)絡(luò)編程上接口管理模塊對(duì)socket控制的幾個(gè)主要函數(shù)如下:npd_rstp_sock_ini(); /*創(chuàng)建socket*/npd_read_stp_ports_state(); npd_cmd_write_ro_rstp(); 協(xié)議端對(duì)socket控制的幾個(gè)函數(shù)如下:npdSocketInit(); /*創(chuàng)建socket*/npdSocketRecvfrom( /*接口管理端的信息npdSockedto() /*向接口管理端發(fā)送信息MSTPinstance為例闡述它們之間的實(shí)現(xiàn)方式。Vtysh端的配MSTID在接口上保存并寫入到上,同時(shí)協(xié)議端也會(huì)收到此消息在port_t,stpm_t中接口stp_info_s中的協(xié)議信息,再調(diào)用nam中的硬件操作函數(shù)寫到轉(zhuǎn)發(fā)中,使的報(bào)文轉(zhuǎn)發(fā)作出相應(yīng)硬件措施。當(dāng)用戶想看狀態(tài)機(jī)的用行結(jié)果則,直接調(diào)stp_info_s中的信息即可,它是硬件信息以及協(xié)議狀態(tài)的備份。通過(guò)在改變VLAN或端調(diào)用如下函數(shù)實(shí)現(xiàn):/*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(當(dāng)這些消息通過(guò)這四個(gè)函數(shù)發(fā)送到npd端,則分別解析它們穿過(guò)來(lái)令字VLANIDAPIMSTP的屬性,從而影響IP地址,查看網(wǎng)絡(luò)狀態(tài)。AX7000的硬件架構(gòu)設(shè)計(jì)是通過(guò)Marvell高速轉(zhuǎn)發(fā)實(shí)現(xiàn)但當(dāng)是發(fā)給網(wǎng)關(guān)VLAN,在同時(shí)對(duì)ASIC進(jìn)行了設(shè)置,也就是說(shuō)在這個(gè)端口或VLAN中接收Linux。DevofDevofInterfaceof傳送數(shù)據(jù)的;二是提供三層接口。在Linux中所有的虛擬空間被分為用戶空經(jīng)過(guò)驅(qū)動(dòng)程序提供工的read,write,ioctl等函數(shù)來(lái)實(shí)現(xiàn)。驅(qū)動(dòng)的實(shí)質(zhì)就是實(shí)現(xiàn)這些Linux內(nèi)核的TCP/IPAX7000中有二十多個(gè)端口,4096VLAN,用戶可能創(chuàng)建基于這么多的端口,VLAN三層接口,IP,用硬件實(shí)現(xiàn)是不現(xiàn)實(shí)的,所以就需要隨時(shí)可以創(chuàng)建或刪除的虛。DevofDevofInterfaceofInterfaceInterfaceof圖5.2三層接口和交換關(guān)系的方式連接用戶態(tài)和態(tài)。圖5.3是虛擬網(wǎng)卡和物理網(wǎng)卡對(duì)比圖。5.3readwrite函kapkap驅(qū)動(dòng)程序中,因?yàn)橐ㄟ^(guò)一個(gè)字符MAC地址等等。structkap_struct structsk_buff_head structuser_netdevice**udev_index; structnet_device_stats unsignedint /*網(wǎng)絡(luò)設(shè)備標(biāo)志/*MACMAC相同unsignedchar。kap_structudev_index中就包含了網(wǎng)絡(luò)設(shè)備類型,即接口類型,是Port模式還是VLAN模式才能把上的端口和三層接口之間的關(guān)系聯(lián)系起來(lái),更重要的作用是報(bào)文在LinuxTCP/IP協(xié)議棧進(jìn)行處理的時(shí)候要和網(wǎng)絡(luò)設(shè)備綁定,驅(qū)動(dòng)就根據(jù)傳入的報(bào)文給報(bào)一定的可以認(rèn)識(shí)的標(biāo)記,來(lái)保證報(bào)文在中的正確發(fā)送。下面是structuser_netdevice的具體定義。。structstructnet_device*dev; KAP_DEV_TYPEdev_type;/*賦予網(wǎng)絡(luò)設(shè)備的類型*/unsignedintl3_index; unsignedintl2_index; unsignedint /*VLAN模式的網(wǎng)絡(luò)設(shè)備所對(duì)應(yīng)VLANstructnet_device[33]linuxKap驅(qū)動(dòng)中所涉及到這個(gè)結(jié)構(gòu)體里面主要是有以下方面:intifindex全局唯一的設(shè)備ID在每個(gè)設(shè)備時(shí)調(diào)用dev_new_index生成。kapnpd中,對(duì)三層sioctlkap中最常設(shè)置的就是網(wǎng)絡(luò)設(shè)備的flags,表示設(shè)備現(xiàn)在模式,主要有這幾種:IFF_UP、IFF_DOWN、IFF_MULTICAST等。net_device結(jié)構(gòu)中同樣包括了許多函數(shù)指針。這些函數(shù)指針主要完成以下幾個(gè)功能,收發(fā)數(shù)據(jù)幀,添加或分析鏈路層數(shù)據(jù)包頭等。kap驅(qū)動(dòng)中主要實(shí)現(xiàn)的結(jié)open:kap_net_open(structnet_device*dev);close:kap_net_close(structnet_device*dev);/*數(shù)據(jù)包發(fā)送函數(shù)hard_start_xmit:kap_net_xmit(structsk_buff*skb,structnet_deviceget_stats:kap_net_stats(structnet_device*dev);擬文件系統(tǒng)(VFS)轉(zhuǎn)化為設(shè)備驅(qū)動(dòng)與硬件操作程序交互。即使是網(wǎng)絡(luò)設(shè)備的備接口,使用戶能夠透明地設(shè)備驅(qū)動(dòng)程序。所有的硬件設(shè)備都可以使用I/O控制,而驅(qū)動(dòng)程序的主要任在Linux中,字符設(shè)備和塊設(shè)備統(tǒng)一以文件的方式,它們的接口是統(tǒng)始化時(shí)到系統(tǒng)內(nèi)部。當(dāng)操作系統(tǒng)對(duì)設(shè)備操作時(shí),會(huì)調(diào)用驅(qū)動(dòng)程序的staticstructfile_operationskap_fops= = = = = = =read,讀操作,參數(shù)buf為存放結(jié)果的緩沖區(qū),count為所要的數(shù)據(jù)長(zhǎng)度。返回值為負(fù)表示操作發(fā)生錯(cuò)誤;否則,返回實(shí)際的字節(jié)數(shù)。在虛擬它的主要作用就是對(duì)網(wǎng)卡設(shè)備的控制,例如創(chuàng)建、刪除、修改設(shè)備Link狀態(tài)、IP和MA地址等等。compat_ioctl,Linux2.664bitkernelstructfile_operation中增加的成員,compatarg是一個(gè)用戶態(tài)指針,32compat_ptr(art)64位的指在內(nèi)核中利用misc_register()函數(shù)將該驅(qū)動(dòng)為非標(biāo)準(zhǔn)字符設(shè)備驅(qū)動(dòng),提#modprobe#mknod/net/dev/kapc10Linuxnet/dev下創(chuàng)建一個(gè)字符設(shè)c表示是字符設(shè)備10200分別是主設(shè)備kap設(shè)備時(shí),openkap_chr_open()函數(shù),其中將完成的初始化和等待隊(duì)列的初始化。kap驅(qū)動(dòng)中網(wǎng)卡的被嵌入了字符驅(qū)動(dòng)的ioctl程序中,它是通過(guò)對(duì)字符設(shè)備文件描述符利用自定義的ioctl設(shè)置標(biāo)志首先使用open函數(shù)打開在/net/dev/處的字符設(shè)備,返回設(shè)備描述符。如果需要?jiǎng)?chuàng)建三層接口則調(diào)用ioctl()函數(shù)操作字符設(shè)備文件描述符,命令標(biāo)志為PortVLANVLANID,當(dāng)處理完后還要通過(guò)這個(gè)npd端進(jìn)行保存。structif_cfg_struct /*ifname,e.g."en0"*/KAP_DEV_TYPEdev_type;KAP_DEV_LINK_STATUSdev_state;unsignedintl3_index;unsignedintl2_index;unsignedintvId;unsignedintnetmask;unsignedchar返回產(chǎn)生的綁定dev初始化創(chuàng)建user_dev、調(diào)用ioctlOpen5.4kap_create_iffalloc_devstructnet_device,kaptcp/ip協(xié)議棧的角度而言,它和真實(shí)網(wǎng)卡kap設(shè)備獲取的數(shù)據(jù)不是來(lái)自物理鏈路,而是來(lái)自用戶區(qū),kapkap設(shè)備也不是發(fā)送到物理鏈路,kaphard_start_xmithard_start_xmitkap_net_xmit函數(shù),skbskbkap設(shè)備字符驅(qū)動(dòng)讀數(shù)據(jù)的進(jìn)程,接著kap設(shè)備的字符驅(qū)動(dòng)部分調(diào)用其kap_chr_read()過(guò)程skb鏈表,skb發(fā)往用戶區(qū),完成虛擬網(wǎng)卡的數(shù)據(jù)發(fā)送。write()kapkap_chr_writekap_get_userskb中,netif_rx_ni(skb)skbtcp/ip協(xié)議棧處理,完成虛擬網(wǎng)卡的數(shù)據(jù)接收。readwrite5.5所示。調(diào)用調(diào)用write否創(chuàng)建sk_buff根據(jù)參數(shù)查找否是是否大于64否調(diào)用read5.5write、readLinux虛擬網(wǎng)卡驅(qū)動(dòng)實(shí)現(xiàn)了用戶空間和內(nèi)核空間的通信,讓到達(dá)內(nèi)存的報(bào)文Marvell是掛載在PCI總線上的CPU外設(shè)。雖然它和網(wǎng)卡有些相似,但是它本身有處理報(bào)文的能力,所以它在內(nèi)核中不是以網(wǎng)絡(luò)設(shè)備去,而是DMA機(jī)制來(lái)完成報(bào)文從外設(shè)到用戶空間的傳遞,更重要的是用戶程序?qū)ile_opreationstaticstructfile_operations _fops{.llseek= = =pres = .compat_ioctl = =pres.release= read,write,open,release,ioctlmmapcompat_ioctl,Linux2.664bitkernelstructfile_operation中增加的成員,compatarg是一個(gè)用戶態(tài)指針,32compat_ptr(art)64位的指proc文件,可以在/proc/下對(duì)驅(qū)動(dòng)的一些參數(shù)進(jìn)行修改[36]。初始化驅(qū)動(dòng)信號(hào)燈和時(shí)鐘周期。Marvell的驅(qū)動(dòng)主要作用是提供read,write,mmap函數(shù),讓應(yīng)用程序可以方便到的內(nèi)存空間。Marvellnpd收?qǐng)?bào)文線程的主函數(shù)是cpssDxChPacketRxAdapterStartReceiveVLANID查找對(duì)應(yīng)的三層接口的索引,也就是虛擬網(wǎng)絡(luò)設(shè)備ARPARP路由學(xué)習(xí)模塊進(jìn)行處理,最后才送read函數(shù)報(bào)文,然后根據(jù)和報(bào)文一塊傳出來(lái)的虛擬網(wǎng)絡(luò)設(shè)備屬性,給這個(gè)報(bào)文建立特殊標(biāo)記,然后發(fā)送到Marvell中,讓把此報(bào)文發(fā)送出去。Cavium網(wǎng)卡驅(qū)動(dòng),至此有了這三個(gè)驅(qū)動(dòng),通過(guò)接AX7000上的端口就是所看到的網(wǎng)口。它的直觀功能就是插上網(wǎng)線能上網(wǎng)。AX7000中使用了兩塊硬件,一塊是275,另一塊是804。這兩個(gè)都使用同一個(gè)驅(qū)動(dòng)。所以在Marvell提供的開發(fā)包中,每個(gè)函數(shù)都有一個(gè)參數(shù)——devNum5.6顯示了硬件結(jié)構(gòu)各種物理端口。從圖中可以看出AX7000中的275和804引出端口是24個(gè)GE和4個(gè)10GE口。這些端口提供給用戶使用,就需要有相應(yīng)的方法能管理它們。在軟件structnet_device一樣。WiCtrlWiCtrlPCI- 2*PCI- 4*(6GE)Memory連接到4個(gè)MVLSwitchCavium1×PCMCIACombo(光電互換主控直接出2×10GE5.6AX7000種是基于端口的,一種是基于VLAN的;上一節(jié)所說(shuō)的協(xié)議模塊,當(dāng)它運(yùn)行在MSTP版本時(shí),VLANFDB,QoS,ACL接口管理是通過(guò)設(shè)計(jì)兩個(gè)結(jié)構(gòu)體eth_port_s和vlan_s來(lái)實(shí)現(xiàn)。接口管理模塊Port結(jié)構(gòu)體如下:structeth_port_senum 32bitsofattributes,definedinnpd_sysdef.hBits0~11tohave12kindsofbinaryattributesBits12~15torepresent4bits16kindsofspeed,Bits16~31forfuturemoreattributesunsigned unsigned structeth_port_func_data_s structeth_port_counter_s port_type10Gattr_bitmapmtufuncs標(biāo)識(shí)端口所有的功能。counters是這個(gè)端口上所有流經(jīng)報(bào)文的統(tǒng)計(jì)。Marvell的端口物理屬性是以下幾種Port結(jié)構(gòu)體就可以對(duì)它們進(jìn)行管理。當(dāng)別的模塊需要端口屬性,就可以直接在此結(jié)構(gòu)體,結(jié)構(gòu)體中attr_bitmap的相應(yīng)位或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( /*獲得管理狀態(tài)npd_set_port_link_status /*Link狀態(tài)npd_get_port_link_status /*Link狀態(tài)npd_set_port_mru /*npd_get_port_mru /*mtu大小5.7所示。attr_bitmapmtu的作用,這些基本的物理層功能,是在AX7000的高速中把報(bào)文處理分為ingresspipe和egresspipe。這兩個(gè)管道上最重要的幾個(gè)功能就是IngressEngine,BridgeEngine,Router是否否否是是否Link否是報(bào)文是否大于是是否否否是是否Link否是報(bào)文是否大于是5.7structeth_port_func_data_sBitmapoffunctionsthatisenabledonthisport,wesupportatmost32ethernetportfunctions.Thiscanbeexterndto64functionsinThereisadefinitionofthesebitmapinnpd_sysdef.hunsigned /*Portcapability,hardwaredependant,initializedinthebeginning*/unsignedint /*Portrunningfuncs,canbeconfiguredbyuserduringruntime*/ funcs_cap_bitmap標(biāo)識(shí)了端口所支持的功能位圖,funcs_run_bitmap標(biāo)識(shí)了端funcs_run_bitmap中標(biāo)識(shí)的功能而準(zhǔn)備的私有數(shù)據(jù),也可根據(jù)不同的功能對(duì)這個(gè)接口去編程和應(yīng)用,但歸根結(jié)底是實(shí)現(xiàn)了Ingress和Egress的功能模塊的管理。TCP/IP協(xié)議模型定義數(shù)據(jù)鏈路層是一根網(wǎng)線之間的傳輸,為網(wǎng)絡(luò)層來(lái)服務(wù)的。這個(gè)服務(wù)體現(xiàn)在報(bào)文上就是每個(gè)IP14字節(jié)的鏈路層數(shù)據(jù),目的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是函數(shù)指針,這個(gè)函數(shù)主要作用是當(dāng)端口出現(xiàn)Linkdisableenable。其他功能接口都有這個(gè)函數(shù)。這是無(wú)線控制器上最經(jīng)常出現(xiàn)的。過(guò)Internet遠(yuǎn)在地球兩端的人可以,,共享文件等等。而這些的實(shí)現(xiàn)都是靠Route來(lái)完成。AX7000作為一個(gè)企業(yè)級(jí)的交換機(jī),也具備這種路由功Linuxstructeth_port_intf_s/*基于端口的三層接口信息*/unsignedintifIndex;enumVLAN_PORT_SUBIF_FLAGflag;structeth_port_promi_s{/*Cavium網(wǎng)卡驅(qū)動(dòng)實(shí)現(xiàn)*/enumuplink_type_stype;unionuplink_portup;dot1q_vlan_list_ssubifList;如上所述端口有三種接口模式,一是switch接口,一是route接口,一是promisouse接口。這三個(gè)接口在每個(gè)端口上某一時(shí)刻只能存在式,即三種接口是互斥的。switchroute接口模IPpromisousePCICavium網(wǎng)卡驅(qū)動(dòng)。npd_set_port_switch_mode(); /*設(shè)置switch接口*/npd_set_port_route_mode(); /*設(shè)置route接口*/npd_set_port_promi_mode(); /*設(shè)置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查找否是丟結(jié)
查找是是
Promise開開調(diào)用Cavium動(dòng)調(diào)用SPI送Linux棧結(jié)否查找路由 丟送
結(jié)5.8struct{/*安全接口信息unsigned unsignedlong unsigned unsigned unsigned QOS_PROFILE_OUT_PROFILE_ACTION_Eunsigned AX7000對(duì)網(wǎng)絡(luò)的協(xié)議模塊的接口如前面協(xié)議模塊設(shè)計(jì)實(shí)現(xiàn)小節(jié)所述。AX7000VLAN的接口,現(xiàn)在困structeth_port_dot1q_list_s/*Tagged端口*/unsignedshortvid;structlist_headstructport_based_vlan_s{/*Untagged端口*/unsignedshortvid;5.9所示。讀讀CPLD設(shè)備號(hào)/int槽號(hào)/圖5.9端口轉(zhuǎn)化1999VLAN802.1Q協(xié)議標(biāo)準(zhǔn)草案。VLANLANVLANLAN有著相同的屬性。但由于它是邏輯地而不是物理LANVLAN內(nèi)部的廣播和單播流VLAN是為解決以太網(wǎng)的廣播問(wèn)題和安全性而一種協(xié)議,它在以太網(wǎng)VLANVLANID把用戶劃分為更小的工作組,限制不VLAN4MACIP在AX7000中對(duì)VLAN的實(shí)現(xiàn)采用的是第案,這是IEEE802.1Q規(guī)定的依據(jù)以太網(wǎng)交換機(jī)的端口來(lái)劃分VLAN的國(guó)際標(biāo)準(zhǔn)[38],而且也是最簡(jiǎn)單的一種。VLANVLAN可以包含很多端口,VLAN一個(gè)端口在VLAN中的形式只有一種,也就是在統(tǒng)一VLAN中一個(gè)端口不能tagged和untagged共存。每個(gè)端口都有自己的PVID,這個(gè)值是和這個(gè)端口以u(píng)ntaggedVLANVID相同。發(fā)。VLAN同樣也是一個(gè)對(duì)TCP/IP網(wǎng)絡(luò)模型的定義,同樣要有和網(wǎng)絡(luò)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結(jié)構(gòu)體中定義vlan_port_list_s定義了兩個(gè)鏈表,一是所包含的這里只列出對(duì)VLAN三層接口的管理函數(shù):npd_intf_create_vlan_l3intf(); /*創(chuàng)建三層VLAN接口*/npd_intf_del_vlan_l3intf( /*刪除三層VLAN接口npd_intf_vlan_check /*VLAN接口npd_intf_set_vlan_attr /*VLAN接口屬性npd_intf_get_info( /*VLAN接口信息VLANVLNA就有了三層轉(zhuǎn)發(fā)的功能。VLAN802.1Q定義的一樣,AX7000對(duì)在網(wǎng)絡(luò)中轉(zhuǎn)發(fā)的報(bào)滿足標(biāo)準(zhǔn)的802.1Q定義的報(bào)文格式。根據(jù)802.1Q分類的VLANTag標(biāo)記報(bào)文和普通二層報(bào)文。VLANTag標(biāo)記報(bào)文比普否是否VLAN是查找端口以Tagged所屬否是否是對(duì)應(yīng)表項(xiàng)的否是否VLAN是查找端口以Tagged所屬否是否是對(duì)應(yīng)表項(xiàng)的VLAN檢查出端口與DSATagVLAN以Tag以Untag形 屬于去掉DSATag修改幀中的VLNA改寫DSA查找給報(bào)文寫入DSA圖 AX7000VLAN中報(bào)文的處理流VLAN上,就可以很輕松的管理。PortVLANPortVLANnpdMarvell驅(qū)動(dòng)檢測(cè)到有網(wǎng)線拔或插就會(huì)產(chǎn)生一個(gè)中斷,最終這個(gè)中斷的處理就是調(diào)用PortfunsPort/*route接口針對(duì)Link的處理函數(shù)*/npd_route_port_link_change();/*promi接口針對(duì)的處理函數(shù)*/npd_promi_port_link_change();/*VLAN根據(jù)VLAN中的untag端口狀態(tài)對(duì)Link的處理函數(shù)*/npd_vlan_untag_port_link_change();/*VLAN根據(jù)VLAN中的tag端口狀態(tài)對(duì)Link的處理函數(shù)*/npd_vlan_tag_port_link_change();/*RSTP/MSTP協(xié)議對(duì)Link的處理函數(shù)*/npd_rstp_link_change();VLAN,如果自己VLANVLANPort的狀態(tài)而變化,基于VLAN的功能模塊也要改變。接口管理總體設(shè)計(jì)思想就是以Port和VLAN為結(jié)構(gòu)體把其他的接口掛地址解析協(xié)議(AddressResolutionProtocol,ARP)IP地IPv4和以太網(wǎng)的廣泛應(yīng)用,其主要用作將格方式和非表格方式。ARP(IPOSI的第三層)地址解析為數(shù)據(jù)連接層(MACOSI的第二層
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 出租屋衣柜衛(wèi)生管理制度
- 村級(jí)衛(wèi)生健康教育制度
- 職工食堂食品衛(wèi)生制度
- 醫(yī)院餐廳衛(wèi)生制度
- 愛國(guó)衛(wèi)生崗位責(zé)任制度
- 2025工會(huì)財(cái)務(wù)制度
- 辦公室衛(wèi)生區(qū)域排班制度
- ktv洗消間衛(wèi)生制度
- p2p理財(cái)公司財(cái)務(wù)制度
- 120急救站財(cái)務(wù)制度
- 山西焦煤考試試題及答案
- GA 1812.1-2024銀行系統(tǒng)反恐怖防范要求第1部分:人民幣發(fā)行庫(kù)
- 48個(gè)國(guó)際音標(biāo)表教學(xué)資料
- 校園文化建設(shè)可行性報(bào)告
- 2025年春人教版(2024)小學(xué)數(shù)學(xué)一年級(jí)下冊(cè)教學(xué)計(jì)劃
- 特種設(shè)備生產(chǎn)(含安裝、改造、維修)單位質(zhì)量安全風(fēng)險(xiǎn)管控清單
- 五年級(jí)下冊(cè)字帖筆順
- 非遺文化媽祖祭典文化知識(shí)
- Charter開發(fā)與立項(xiàng)流程(CDP)
- JTGT F20-2015 公路路面基層施工技術(shù)細(xì)則
- 七年級(jí)下冊(cè)《6.1 第3課時(shí) 平方根》課件
評(píng)論
0/150
提交評(píng)論