




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
?盛科網絡(蘇州)。保留一切權利。州和任何方 州和任何方
,任何單位和個人不得擅自摘抄、本文檔內容的部分或全部 擁有商標。盛科交換機系列產品和系列產品的標志均為盛科網絡(蘇州)商標或商標。 本文檔提及的其他所有商標和商業名稱,由各自的所有人擁有。注您的產品、服務或特性等應受盛科網絡商業合同和條款的約束,本文檔中描述的全部或部分產品、服務或特性可能不在您的或使用范圍之內。除非合同另有約定,本公司對本文檔內容不做任何明示或默示的由于產品版本升級或其他原因,本文檔內容會不定期進行更新。除非另有約定,本文檔僅作為使用指導,本文檔中的所有陳述、信息和建議不構成任何明示或暗示的擔保。盛科網絡(蘇州 512-傳 郵介 軟件架 接口設計原 架構目 在系統中的位 軟件架 SDK SDK OS SDK中的一些重要概 本地端口 全局端口 邏輯端口(logic MacstGroup L3 配置開發環 結構組 頂 core/ ctccli/ sal/ Driver/ Dal/ libctccli/ app/ / 如何編譯 Makefile組織結 在linux環境下編譯 如何集成SDK 初始化...............................................................................................................................初始化流 Dal初始 Linux下初始化 Interrupt初始 中斷在中的組織架 中斷相關的 基本功能開發指 Port& Hybrid QinQ 拓撲 配 拓撲 配 拓撲 配 拓撲 配 拓撲 配 拓撲 配 - 拓撲 配 - 拓撲 配 MPLS 拓撲 配 表格表3-1:McastGroupID分 表4-1:SDK代 表4-2:$sdk/core/ 表4-3:$sdk/ctccli/ 表4-4:$sdk/sal/ 表4-5:$sdk/driver/ 表4-6:$sdk/dal/ 表4-7:$sdk/libctccli/ 表4-8:$sdk/app/ 表4-9 / 表4-10:庫文 表5-1 表5-2:類 表6-1:NetworkingDiagramforConfiguringMACAddress 表6-2:Switch 表6-3:Switch 表6-4:Switch 圖2-1:優秀API具備的特 圖2-2:CentecSDK在系統中的位 圖2-3:CentecSDK在系統中的位 圖2-4:SDK組 圖3-1:Greatbelt 圖3-2 圖4-1:SDKMakefiles組織結 圖4-2:SDKMakefiles組織結 圖5-1:初始化流 圖5-2:CentecChipsInterruptPinMapBlock 圖5-3:SDKInterrupt 圖6-1:NetworkingDiagramforConfiguringMACAddress 圖6-2:NetworkingDiagramforConfiguring 圖6-3:NetworkingDiagramforConfiguring 圖6-4:NetworkingDiagramforConfiguring 圖6-5:NetworkingDiagramforConfiguring 圖6-6:NetworkingDiagramforConfiguringL3圖6-7:NetworkingDiagramforConfiguring - 圖6-8:NetworkingDiagramforConfiguring - 圖6-9:NetworkingDiagramforConfiguringMPLS 1介紹在以太網交換應用領域,SDK的重要性十分顯著,它是上層系統與連接的SDK通用性的設計理念,旨在解決大家關心的兩個個問題:?CentecSDKAPI來開發系統?CentecSDKAPI接口如何做到前向兼容和后向兼容
2軟件架GoodAPI直觀化,容易,并且引導人寫出易讀的代碼。最小化API接口和較少的數據結構滿足功能需求,同時在可以使接口擴展性更好。一個比較典型的例子:FDBflushFDBQueryFDB,SDKAPI函數就實現所有與之相關的功能,上層用戶可以根數據結構中增加刪除或查詢條件就可以擴展相應的功能,如下是CTCSDK所有IPUC、IPMC、L2UC、L2MC的所有API接口:完整性API接口來提供,一個比較典型的例子,在Vlanclass,CTCAPIAPIIP/MAC/ProtocolVLAN,ctc_vlan_class_t數據結構提供了具有流的VlanClassifyKISS原則(keepitsimpleand直觀化APIAPI的內部實(Nexthop(rfId易于(Easytolearnand讓API易于,使用統一且精確名方法。API的接口和參數命名上,同一概一,讓上層用戶使用時易于,同時一致的API能夠聯想推測。如下nexthop提API接口,用戶在使用了創建nexthopmplsnexthop,很自然就能聯想到MPLS的nextho接口。通用性,從調用者的角度來進行設計,做到硬件透SDK的設計對硬件是透明,API接口與具體的無關,從系統應用的角度去設計API的接口,使接口更具通用性,上層用戶不需要關心具體的處理流程而從上層的業務應用找到對應的API函數,也不需要用戶了解如何操作中具體的表和易用性,使 具有最小系統的功Oamstats等;SDKCPU的收發報文進行處理;同時為了使用戶能靈活處理這些應用,SDK還提供回調函數給用戶,可由用戶控制處理行為。后向兼容,保持接口的一接口的一致性使用戶同一代不同版本或向新一代SDK切換時實現客戶的效.GreatbeltSDK90%以上的HumberSDK接口.前向兼容,使接口具有可擴展模塊化,根據不用的功能應用劃分模塊,用戶可針對不用的應用場景多平臺兼容,使代碼具有等系統中運行,同時SDKANSI‘C’提供豐富的debug容易查找和copy-paste的代碼,指導用戶開發,降低用戶的使用門檻。 SDKCLI界面友好,簡單SDKCLIsAPICLICLI健壯性與可提供內存管理函數SDK不會直接調用系統的malloc/函進行,而是用mem_malloc/mem_替換,mem_malloc/mem_的實現時采用宏,所以SDK的使用者在把SDK代碼集成系提供Debug管理函SDK代碼集成系統中時,可把具體實現替換成用戶系統中的Debug模塊。豐富的ErrorCode機錯誤時對先前操作進行回滾刪除 RoutingProtocols(IPv4,MPLSSwitchingandOAM&APS(EthOAM/TPSecurity(ACL/Stormcontrol/IpsourceAdapationWAdapationPackerOMTCP/IPAdapationLayerdispatchSNMP&Linux,VxWorks,BSD,oranyRTOSLinux,VxWorks,BSD,oranyRTOS
L2/L3protocol配層轉化后進行處理的,故CentecSDK再做API設計時:從系統應用和適配層角度方面進行深入研究和分析:遵循SDK架構目標中的通用性從系統應用的角度劃分SDK的模塊,并保持模塊間相對獨立,用戶可根據不用的pdu、parser、mirror、security、stp、sync_ether、stacking等模塊。基于盒式與分布式架構兼容性的設計使API接口完全不同的應用場景,使SDK在SDK初始化時指定本在全局中使用的gchip,之后對配置port和chip都包含gchip的信息就能完成配置.int32ctc_set_gchip_id(uint8lchip,uint8gchip)。CentecSDKAPI接口在不同版的SDK或不同代的,系統軟件的上層協議棧不需要更改或做較小的改動,如SDKAPI接口改動較少,則能降低適配層代碼開發的工作量,使客戶在短時DriverDriverSYSCTCAPIChipsetDeviceAdaptationSDKCLI,DiagCLI..)UserAdaptationSDKSDKcore是SDK的邏輯的處理代碼,主要完成SDKSDKCLIFTMProfile的使用、CPUOS塊、Debug管理模塊等。SDK如下圖所示,SDKsal、Core、Driver、app、libctccli、datapath等;dkitsDkits(Debug&Diagnosis)SDK的一個可選組件,Dkits提供了對的開發速度。CentecSDKSDKCentecSDKSDKOsSDKSDK中的一些重要概SDKSDK中的相關重要概念進行闡端口是交換機和網絡之間傳遞數據包的網絡接口,在盛科的交換機中把網本地端口是指單所管理的本地端口,在盛科中,本地端口不僅指物理端口,還包括中的保留端口和內部端口,盛科的每一款都有一定數量的本地端口,如Humber256個端口,Greatbelt128個端口,這些端可以作為索引DsPhyPort,DsSrcPortDsDestPort等以端口為索引的表項屬性,通常情況下,物理端口的范圍由能出的最大MAC數目而決定,而保留端口對于每一款保留的端口數量也是不一樣,除去物理端口和保留端口,剩下的端口全部都可以當做內部端口來使用,以Greatbelt為例,支持的端口情況如下圖所示:6067
由SDk的InternalPort模塊分配和管Demux、EVB、PortExtender等擴展端較靈活的業務分配內部端使用。全局端口端口即globalportgport,如下:LocalphysicalportLocalphysicalport linkaggidlinkaggidLocalphysical/linkagggchipglobalport的組
圖3-2從圖上可以看出,,gport5bitgchip,指的是全局指定IDSDKctc_set_gchip_id(uint8lchip,uint8gchip)指定所在板卡所在的全局ID,預留0x1e給;低8bit表示lport或linkaggid.邏輯端口(logiclogicport。VPLS網VPLSPWACAClogicport可以gportvlangportPW端口時可通過VCLabel兩層保護切換(APS)網模塊的接口把兩個端口配置屬于同一個logicportFIDForwardingInstanceID,在二層網絡中表示轉發實例號,在盛科的中所有的二層轉發都是基于MAC+FID進行的,FID可從以下映射得到:基于VlanL2Bridge?IVLvlan:fid1:1關系,此種應用可配置為:Fidvlan?SVLVlan:fidn:1DsVlan.fidVLAN在,上層用戶可通過Vlanmap的接口ctc_vlan_add_vlan_map()把C+S映射到一個FID中進行轉發。基于VSIVPLS范圍可能不一樣,以Greatbelt序列為例,最大支持16k個FID。MacstGroup在中,L2MC、IPMC、基于VLAN或基于VSI的廣播都采用組播的方式來實現,每一個組播組都有一個標示來索引它,這個標示就是組播組ID。同時在SDKDSMetEntryMcastGroupID來使用,這部分稱作GlobalDsMetEntry,剩余的給其他組播成員來分配使用稱作LocalDsMetEntry,一般情況下McastGroupID由上層來分配和使用,下面以CTC516x的默認FTMProfile為例給出McastGroupID分配的示例。McastMcastMcastGroupVlanbasedVSIbasedL2IPL3當于路由器上的接口,Physicalinterface基于Port的,可直接連接路由器。vlaninterfacePortvlanPortVlan來劃分不Ince。Greatbel中,L3interrace1kinterraceNexthop是一個廣義的概念,是對應中一系列表項的總稱,這些表項可能包含:DsFwd,,DsNexthop,,DsL2Edit,,DsL3Edit.這些表項決定報文會被發往哪些端ILoop:ToCpu:Drop Nexthop,是不需要用戶參與分配和管理的,由SDK代碼自信來完成,也不需要指定NHID,上述的L2UC/L2MC/IPMC/ILoop/ToCPI/Drop/BypassAll/STPtunnel等Nexthop都屬于這一類。配置開發環境頂CentecSDK根據SDK的組件劃分代 top-levelCentecCLI最上層的Makefilereleasenotescore/$sdk/core/子包含SDK的代碼,包含SDK分層中的三層代碼,分別是API片都會提供API函數;SYS層操作軟表,分配硬件表項的index,不同表之間的關聯,是SDK中處理代碼。$sdk/core/子在中主要完成以下功能top-levelSDKcore初始化函 存放core ctccli/$sdk/ctccli/ CLI的使用,熟悉和學習如何調用API函數;表4-3:$sdk/ctcclitop-level的sal/$sdk/kal/子 存放封裝與操作系統無關的代碼。CentecSDK提供的SAL支持Vxworks和Linux操作系統,如果用戶使用的是其他操作系統,用戶需要移植相關的代碼到SAL中。表4-4:$sdk/sal 存放sal 存放sal Driver/$sdk/driver/子存放表項驅動的代碼,它提供的中table/register讀表4-5:$sdk/drivertop-levelDal/$sdk/dal/子設備驅動層,位于Driver和底層OS之間的中間層,它封裝芯Driver的一部分。表4-6:$sdk/daltop-level libctccli/$sdk/libctccli/ 存放CentecCLI命令公共函數的代碼/top-level 存放libctccli app/$sdk/app/ 表4-8:$sdk/apptop-level用戶可以調用sdk的提供的接口實現一些功能并可把它作為SDK的一部分來管理和,該 軟件學習和老化FDB的示例代碼以及通過Eth端口報ctc_s/$sdk/ctc_s/ 表4-9:$sdk/ctc_s/Makefile組織結SDK中的Makefiles組織如下圖所示,在Linux環境下,$SDK 有一個makefile文件;而在Vxworks環境中每一個子 都有makefile。但只有$SDK/makefile及$SDK/mk/sys.mk$SDK/mk/sys_vx.mk -- SDK的交叉編譯器。默認:=ppc-linux-/mips64-octeon-linux-gnu-/mipsel-linux-/powerpc-linux-gnu-其中$SDK/mk/sys.mklinux平臺下,而$SDK/mk/sys_vx.mkvxworks環境CPPFLAGSCFLAGSCPPFLAGS=-DHOST_IS_LE=0 //CPU是否是小端字節序在linux環境下編譯Linux環境下SDK,進SDK,根據實際的編譯環境,通過上一節章節的描述修改$SDK/makefile和$SDK/mk/sys.mkCavium5010為例修,ifndefARCHexportARCHexportARCH=mipsStep1ifndeftargetbaseStep2ifndefexporttargetbase=linuxStep3ifndefBOARDStep4ifndefexportBOARD=linux-boardStep5ifndefexportCHIPNAME=Step6修改為(目前可選為greatbelt/humber,請正確選擇對應序列ifndefStep7ifndefSUBCHIPNAMEStep8修改為(請正確選擇具體對應型號ifndefexportSUBCHIPNAME=greatbelt備注:greatbelt序列包含:greatbelt(ctc516x)/rialto(ctc316x)/rama(ctc512x)humber序列包含:humber(ctc6048)Step9CPU=octeonStep10修改為(請正確選擇具體對應型號CPU=octeon修改Step11CPPFLAGS=Step12ifeqCPPFLAGS+=-mabi=n32Step13進入 編譯成功之后,你將在$sdk/build.octeon.d/lib.linux-board找到5個庫文件,上層應用代碼可以包含ctc_api.h和對應的5個庫文件,然后再和上層應用代碼一起編譯生 make命令以后你能在$sdk/build.octeon.d/bin.linux-board 默認生成的SDKImage在相應目標板上運行可以正常初始化,并且能在并完成API提供的所有功能。LibraryLibforSDKCLI,optionaltoSDKCLI,optionaltoDAL.MustbeSDKDriver.MustbeSAL.MustbeSDKcore.MustbeSDKCLI工作C/S模式下。SDKctcclilibctccliCLI的解析,并且調用core的處理邏輯,這部分處于server端;而s部分處于端,負責將輸入的CLI命令傳遞給server端。CTCCLI有兩種工作模式,一是和Server在一個進程中;另一個是分開為server和兩個進程。可以通過ctc_master_cli(is_ctc_s);的參數來選擇。is_ctc_s=1表示兩個進程模式。首先把serverlibctccli,liblibctccli,libsdkcore等與上層系統代碼編譯到一起,這樣SDK就會同系統軟件一同啟動,包括CLI處理邏輯 下令進行啟動當CLIserver工作在kernel時,cli主要通過netlink的方式通信,其通信netlink為20;可通過ctc_s.h中的 當CLIserveruser時,cli主要通過tcp的方式通信,L4port8100;ctc_s.h的 即可采用netlink方式,否則使用tcp初始化Interrupt等模塊的初始化。SDK代碼中,SDK的初始化作為用戶的參考代碼存放在$/sdk/app,上層代SDK初始化代碼時可以這個的代碼實現,現有的APP主要包含表5-1 從配置文件SDK的配置或用戶也可以選擇使用SDK的默認配置。api接口添加應用的包含軟件學習和老化的示例代碼以及通過Eth端口DataPath一個DataPath文件,在SDK初始化的第一步需要按照以下順序調用接口來完成DataPath的初始化。 Dal可以減少sdk和底層操作系統的耦合關系,dal的porting需要操作系統提供底層的互,因此dal的porting就是實現如下每個函數的功能。struct{ (*pci_read)(uint8lchip,uint32offset,uint32*value); (*pci_write)(uint8lchip,uint32offset,uint32value); (*pci_conf_read)(uint8lchip,uint32offset,uint32*value); (*pci_conf_write)(uint8lchip,uint32offset,uint32value); (*i2c_read)(uint8lchip,uint16offset,uint8len,uint8*buf); (*i2c_write)(uint8lchip,uint16offset,uint8len,uint8* (*interrupt_register)(uint32irq,int32prio,void(*)(void*),void*data); (*interrupt_unregister)(uint32irq); (*interrupt_set_en)(uint32irq,uint32enable); (*logic_to_phy)(uint8lchip,void*laddr);uint32*(*phy_to_logic)(uint8lchip,uint32paddr);uint32*(*dma_alloc)(uint8lchip,int32size,int32dma_type); (*dma_)(uint8lchip,void*ptr);typedefstructdal_op_s支持dma功能,在SDK默認情況下,在dal_kernal中已實現這些函數,所以上層用(*pci_read)(uint8lchip,uint32offset,uint32*功能:完成對寄存器的讀操作?lchip:localchipid,當有多個時用來區分操作在哪個?Offset:pciememory?Value*value=*(volatileuint32*)(pcie_base_addr+?lchip:localchipid,當有多個時用來區分操作在哪個?Offset:pciememory?Value*(volatileuint32*)(pcie_base_addr+offset)=功能:pcie配置空間,非必須功能,可不實現?lchip:localchipid,當有多個時用來區分操作在哪個?Offset:pciememory?Value的函數即可,dal層只是增加一層封裝而已。(*i2c_read)(uint8lchip,uint16offset,uint8len,uint8*通過i2c接口的功能?lchip:localchipid,當有多個時用來區分操作在哪個?Offset:pciememory?Len:的數據長?Buf根據cpu驅動中i2cmaster的實現來適配(*i2c_write)(uint8lchip,uint16offset,uint8len,uint8*功能:完成指定irq的中斷,建立irq和中斷服務程序之間的對應關系?irq:?Prio:中斷的優先級,體現在中斷服務程序的優先級(vxworks可不關心?void*)(void*)?data?irq?Enable:1-使能,0-去使能實現:參考dal_user.c中的實現dmalogicaddress轉換為physical?lchip:localchipid,當有多個時用來區分操作在哪個?Laddr:需要轉換的logical ?lchip:localchipid,當有多個時用來區分操作在哪個?Paddrphysical(*dma_alloc)(uint8lchip,int32size,int32?lchip:localchipid,當有多個時用來區分操作在哪個?Size?dma_type(*dma_)(uint8lchip,void*?int32dal_set_device_access_type(dal_access_type_t?int32dal_get_device_access_type(dal_access_type_t*Linuxdalmodule2個部分:UserMode和KernelModeKernelMode的部分可以編譯為一個可加載的模塊:dal_kernel.ko,系統啟動后可通UserMode部分負責提供DalmoduleApiSDKUser空間下,sdkdal初始dal_op_t結構體下即可,如在初始化時將dal_op_t結構體下對應的函數置為NULL,sdk將使用默認提供的函數來實現。Interrupt可根據需要進行修改來匹配。本文以CTC5160作為例子描述中斷的使用。中斷在中的組織架19MACLearning,上層6中斷向PCIeMSI消息機制來完成,如果使用中斷引腳則一個向量組對應一根中斷引腳;如果采用MSI消息機制,則僅支持一個中斷向量組。TaskKernelKernelKernelIntrIntrIntrIntrListenerIntrIntrListenerr如上圖所示是LinuxVxworks環境下的處理流程SDK工作Linux的ISR處理函數得到相應,FD1(b),DAL模塊會通Polling機制去掃FD(c),當對IRQFD1時,則顯示相應的中斷Drv的接口得到中斷狀態,并判斷中斷是否發生,如果發生則調相應的中斷處中斷相關struct{ group_count;/**<countofgroups intr_count;/**<countofinterrupts p_group;/**<arrayofgroups _t*p_intr;/**<arrayofinterrupts /**<interruptmode,0:interruptpin,1: typedefstructctc_intr_global_cfg_sSDK1PCIeMSI CTC_INTERRUPT_EVENT_FUNCcb);SDKDMAOAMDefect的回OAM功PTP的回調函數,PTP的回調函數,處理MACLinkDown,如果用戶需要關心LinkDown,則需要基本功能開發指南SDKAPIs來實現相應的功能,包括以下內容:Port&VLAN,MAC,QinQ,L2MC,IPUC,IPMC,VPLS/VPWS,和MPLS。Port&Access?UntaggedDefaultVlan相等的VLANID,如果是Untagged的報文進入交換機后將加上端口上的defaultVlan;?發往對端設備的以太網幀是不帶的幀/*accessport:defaultvlan20*/voidport_access_port_example(){uint16uint16vlan_id=/*vlanvlan_id/*port0x000Aasaccessgport=ctc_port_set_port_en(gport,ctc_port_set_default_vlan(gport,ctc_port_set_vlan_ctl(gport,/*onlyallowvlan20onport}TrunkTrunk端口是交換機上用來和其他交換機連接的端口,一般連接干道鏈路。有如下?允許接收多個Vlan的報文通過,如果接收時untagged的報文如果是Untagged的報文進入交換機后將加上端口上的defaultVlan;?如果從TrunkTagTag與端口缺省的VLANID相同,則交換機會剝掉該幀中的TagVLANID不同,則交換機對該幀不做任何動作,直接發送帶Tag的幀。/*trunkport:defaultvlan10,allowtagged20,30,40*/voidport_trunk_port_example(){uint16uint16vlan_id=/*portgport=vlan_idctc_port_set_mac_en(gport,ctc_port_set_default_vlan(gport,ctc_port_set_vlan_filter_en(gport,CTC_BOTH_DIRECTION,/*vlanvlan_idctc_vlan_add_port(vlan_id,vlan_idctc_vlan_add_port(vlan_id,vlan_idctc_vlan_add_port(vlan_id,vlan_idctc_vlan_add_port(vlan_id,}下特點:Hybrid端口允許多個VLAN的幀通過,并可以在出端口方向將某些VLAN幀的Tag剝掉。/*hybridport10:defaultvlan10,tagged20,30,40,untagged50,60*/voidport_hybrid_port_example(){uint16uint16vlan_id=/*portgport=vlan_idctc_port_set_mac_en(gport,ctc_port_set_default_vlan(gport,ctc_port_set_vlan_filter_en(gport,CTC_BOTH_DIRECTION,/*vlanvlan_idctc_vlan_add_port(vlan_id,vlan_idctc_vlan_add_port(vlan_id,vlan_idctc_vlan_add_port(vlan_id,vlan_idctc_vlan_add_port(vlan_id,vlan_idctc_vlan_add_port(vlan_id,vlan_id}QinQQinQ(802.1Q-in-802.1Q)QinQ協議的端口。QinQ端口可以給幀加上雙重Tag,即在原來Tag的基礎上,給幀加上一個新的Tag,從而可以支持多達4094x4094個VLAN,滿足城域網對VLAN數量的需求。QinQ幀的格式如圖所示。外層的通常被稱作公網Tag,用來存放公網的VLANID。內層通常被稱作私網Tag,用來存放私網的VLANID。6 6 4 4 2
4/*QinQport10:defaults-vlan100,cvlan10-->svlan200*/voidport_set_qinq_port_example(){uint16uint16vlan_id= _t /*portgport=ctc_port_set_port_en(gport,/*portgport=vlan_idctc_port_set_port_en(gport,ctc_port_set_default_vlan(gport,ctc_port_set_scl_key_type(gport,CTC_INGRESS,0, _en(gport,/*vlanvlan_idvlan_id/*vlan config*/ ,0, .key= .action= .old_cvid= .new_svid= .stag_op= .svid_sl= (gport, }黑洞MAC舉例說明.拓撲Switch
Port VLANPort PortPortSwitch Port
PC3VLAN PortPC1VLAN
PC2VLANTrunkLink配
void{uint16uint16vlan_id=ctc_l2_addr_t/*1.SwitchA/*vlanvlan_idvlan_idvlan_id/*port1,accessgport=ctc_port_set_port_en(gport,ctc_port_set_port_en(gport,vlan_idctc_port_set_default_vlan(gport,ctc_vlan_add_port(vlan_id,gport);/*port2,accessport*/gport=0x0002;ctc_port_set_mac_en(gport,TRUE);vlan_id=20;ctc_port_set_default_vlan(gport,vlan_id);ctc_vlan_add_port(vlan_id,gport);/*port3,trunkport,allowvlan10,20,defaultvlan1*/gport=0x0003;ctc_port_set_mac_en(gport,TRUE);vlan_id=1;ctc_port_set_default_vlan(gport,vlan_id);ctc_vlan_add_port(vlan_id,gport);vlan_id=10;vlan_id=20;/*fdbconfig,PC1->PC3*/l2_addr.mac[0]=0;l2_addr.mac[1]=l2_addr.mac[2]=0;l2_addr.mac[3]=0x12;l2_addr.mac[4]=0x34;l2_addr.mac[5]=0x56;l2_addr.fid=10;l2_addr.gport=0x0003;/*fdbconfig,PC3->PC1*/l2_addrmac[0]=0;l2_addr.mac[1]=l2_addr.mac[2]=0;l2_addr.mac[3]=0xab;l2_addr.mac[4]=0xcd;l2_addr.mac[5]=0xef;l2_addr.fid=10;l2_addr.gport=0x0001;l2_addr.flag=CTC_L2_FLAG_IS_STATIC||l2_addr.mac[0]=l2_addr.mac[1]=l2_addr.mac[2]=0;l2_addr.mac[5]=0;l2_addr.fid= /*blackhone/*1.SwitchB/*vlanvlan_idvlan_idvlan_id/*port1,accessgport=ctc_port_set_port_en(gport,vlan_idctc_port_set_default_vlan(gport,/*port2,accessgport=ctc_port_set_port_en(gport,vlan_idctc_port_set_default_vlan(gport,/*port3,trunkport,allowvlan10,20,defaultvlangport=ctc_port_set_port_en(gport,vlan_idctc_port_set_default_vlan(gport,vlan_idvlan_id/*fdbconfig,PC1-l2_addr.flag=l2_addr.mac[0]=l2_addr.mac[1]=l2_addr.mac[2]=l2_addr.mac[3]=l2_addr.mac[4]=l2_addr.mac[5]=l2_addr.fid=l2_addr.gport=/*fdbconfig,PC3-l2_addr.flag=l2_addr.mac[0]=l2_addr.mac[1]=l2_addr.mac[2]=l2_addr.mac[3]=l2_addr.mac[4]=l2_addr.mac[5]=l2_addr.fid=l2_addr.gport=}拓撲PCIPTVAB連接到運營商PC用戶攜帶的VLAN:Cvlan10/20/30IPTV終端用戶攜帶的VLAN:CVLAN100/200/300,在交換機ABQinQ,使PC用戶的流量在運營商網絡VLAN10中傳輸,IPTV終端用戶的流量在VLAN20中傳輸。配void{uint16uint16vlan_id=;;_t/*1.SwitchA/*vlanvlan_id=1;/*defaultvlan_id=vlan_id=/*port/*port1,qinqgportgport=ctc_port_set_scl_key_type(gport,ctc_port_set_scl_key_type(gport,CTC_INGRESS,_en(gport,vlan_idvlan_id=ctc_port_set_default_vlan(gport,ctc_port_set_default_vlan(gport,vlan_idvlan_id=ctc_port_set_default_vlan(gport,ctc_port_set_default_vlan(gport,vlan_idvlan_id=/*cvlan/*cvlan10/20/30->svlan.action=.key=.new_svid=.old_cvid=.new_svid=.old_cvid=(gport,.svid_sl=.stag_op=vlan.new_svid=.old_cvid=.new_svid=.old_cvid=.new_svid=.old_cvid=.action=.key=/*cvlan100/200/300->svlan.new_svid=.old_cvid=/*port/*portgportgport=vlan_idvlan_id=vlan_idvlan_id=/*1.SwitchB/*vlanvlan_id=1;/*defaultvlan_id=vlan_id=/*port/*port1,qinqgportgport=ctc_port_set_scl_key_type(gport,ctc_port_set_scl_key_type(gport,CTC_INGRESS,_en(gport,vlan_idvlan_id=ctc_port_set_default_vlan(gport,ctc_port_set_default_vlan(gport,vlan_idvlan_id=vlan_idvlan_id=/*cvlan/*cvlan10/20/30->svlan(gport,.new_svid=.old_cvid=(gport,.new_svid=.old_cvid=(gport,.new_svid=.old_cvid=.action=.key=/*cvlan100/200/300->svlan .key= .action= .old_cvid= .new_svid= (gport, .old_cvid= .new_svid= (gport, .old_cvid= .new_svid= (gport, /*portgport=ctc_port_set_port_en(gport,vlan_id=ctc_port_set_default_vlan(gport,vlan_id=}拓撲DHCPMulticastIPMPLSVLAN
PortPort 配
void{uint16uint16vlan_id=ctc_l2_mcast_addr_t/*vlanvlan_id/*port2:trunkgport=vlan_idvlan_id=/*port1:hybridport:vlan3:gport=/*port1:hybridport:vlan3:gport=vlan_id=/*createmcastsal_memset(&l2mc_addr,0,l2mc_addr.mac[0]=l2mc_addr.mac[1]=l2mc_addr.mac[2]=l2mc_addr.mac[3]=l2mc_addr.mac[4]=l2mc_addr.mac[5]=l2mc_addr.l2mc_grp_id=1;/*mcatgroup/*addmcastsal_memset(&l2mc_addr,0,l2mc_addr.mac[0]=l2mc_addr.mac[1]=l2mc_addr.mac[2]=l2mc_addr.mac[3]=l2mc_addr.mac[4]=l2mc_addr.mac[5]=}拓撲配
VLANIFIPSwitchPortSwitchPortSwitchPortSwitchPortSwitchPortSwitchPortSwitchPortvoid{uint16uint16vlan_id=ctc_ipuc_param_tctc_l3if_tuint16l3if_id=uint32nhid=/*vlanvlan_idvlan_idvlan_id/*SwitchBconfigurations/*port1,hybridport,andportdefaultconfig:routedgport=ctc_port_set_port_en(gport,vlan_id=/*port2,hybridport,andportdefaultconfig:routedgport=ctc_port_set_port_en(gport,vlan_id=/*port3,hybridport,andportdefaultconfig:routedgport=vlan_id=/*l3ifl3if_id /*allocatedl3ifidl3if.l3if_type=l3if.vlan_id=ctc_l3if_create(l3if_id,l3if_id /*allocatedl3ifidl3if.l3if_type=l3if.vlan_id=ctc_l3if_create(l3if_id,l3if_id=3;/*allocatedl3ifidl3if.l3if_type=l3if.vlan_id=ctc_l3if_create(l3if_id,/*1.createarp(/0.0.2:port1)&hostsal_memset(&nh_param,sal_memset(&nh_param,0,nh_param.dsnh_offset=0;nh_param.mac[0]nh_param.dsnh_offset=0;nh_param.mac[0]=nh_param.mac[1]=nh_param.mac[2]=nh_param.mac[3]=nh_param.mac[4]=nh_param.mac[5]=nh_param.oif.gport=nh_param.oif.vid=fromfromsystemsoftware'snhid=10;/*thenhid;ipuc_info.ip.ipv4=ipuc_info.nh_id=ipuc_info.ip_veripuc_info.nh_id=ipuc_info.ip_ver=ipuc_info.route_flag=/*createlpmsal_memset(&ipuc_info,0,;ipuc_info.ip.ipv4=ipuc_info.nh_id=ipuc_info.ip_ver=ipuc_info.route_flag=ipuc_info.nh_id=ipuc_info.ip_ver=ipuc_info.route_flag=/*2.createarp(/0.0.3:port2)&hostnh_param.dsnh_offset=0;nh_param.mac[0]=nh_param.mac[1]=nh_param.mac[2]=nh_param.mac[3]=nh_param.mac[4]=nh_param.mac[5]=nh_param.oif.gport=nh_param.oif.oif_type=nh_param.oif.vid=nhid=nhid=11;/*thenhidfromsystemsoftware's;ipuc_info.ip.ipv4=ipuc_info.nh_id=ipuc_info.ip_veripuc_info.nh_id=ipuc_info.ip_ver=ipuc_info.route_flag=/*createlpm;ipuc_info.ip.ipv4=ipuc_info.nh_id=ipuc_info.ip_ver=ipuc_info.route_flag=/*3.createarp(/0.0.4:port3)&hostnh_param.dsnh_offset=0;nh_param.mac[0]=nh_param.mac[1]=nh_param.mac[2]=nh_param.mac[3]=nh_param.mac[4]=nh_param.mac[5]=nh_param.oif.gport=nh_param.oif.vid=nhid=12;/*thenhid fromsystemsoftware'snexthop_index*/ipuc_info.ip.ipv4= ipuc_info.nh_id=ipuc_info.ip_ver=ipuc_info.route_flag=}拓撲DHCP
MulticastPhyif/24/PortSwitchPhyifVLAN 置使VLAN3配void{ uint16 uint16vlan_id= ctc_l3if_t uint16l3if_id= ctc_l3if_property_tl3if_prop= /*Routerconfigurations /*port2, gport=vlan_idvlan_id= gport= /*l3if l3if_id /*allocatedl3ifid l3if.l3if_type= l3if.gport= l3if_prop= ctc_port_set_phy_if_en(l3if.gport, l3if_id /*allocatedl3ifid l3if.l3if_type= l3if.vlan_id= l3if_prop= /*1.createmcastgroup&add ipmac_group.group_id= ipmac_group.ip_version= ipmac_group.ip_version= }拓撲
如圖所示CE1、CE3屬于 VLANIFIP-VLANIFIP-配void {uint16gport,vlan_id=0,l3if_id=uint32ctc_l3if_tctc_mpls_nexthop_tunnel_info_t ctc_mpls_nexthop_push_param_tctc_mpls_ilm_tctc_ipuc_param_t/*vlanvlan_idvlan_id/*Portconfig:ACgport=vlan_id=/*Portconfig:PWPort:Port3:vlangport=vlan_id=ctc_l3if_create(l3if_id,l3if_id=1;/*allocatedl3ifidl3if.l3if_type=l3if.vlan_id=ctc_l3if_create(l3if_id,ctc_l3if_create(l3if_id,l3if_id=1;/*allocatedl3ifidl3if.l3if_type=l3if.vlan_id=ctc_l3if_create(l3if_id,l3if_id=3;/*allocatedl3ifidl3if.l3if_type=l3if.vlan_id=ctc_l3if_create(l3if_id,/*createPW1tunnellabelp_nh_param=p_nh_param-p_nh_param->mac[0]=p_nh_param->mac[1]=p_nh_param->mac[2]=p_nh_param->mac[3]=p_nh_param->mac[4]=p_nh_param->mac[5]=p_nh_param-p_nh_param-p_nh_param-p_nh_param-p_nh_param-/*createtoPW1nexthop(LSPlabel+PWlabel)p_nh_param_push=.mac[5]=p_nh_param_push-.mac[4]=p_nh_param_push-.mac[3]=p_nh_param_push-.mac[2]=p_nh_param_push-.mac[1]=p_nh_param_push-.mac[0]=p_nh_param_push-.oif.vid=p_nh_param_push-p_nh_param_push-.opcode=p_nh_param_push-p_nh_param_push-p_nh_param_push-p_nh_param_push-p_nh_param_push-p_nh_param_push-p_nh_param_push-p_nh_param_push-p_nh_param_push-p_nh_param_push-p_nh_param_push-p_nh_param_push-p_nh_param_push-p_nh_param_push-p_nh_param_push-p_nh_param_push-p_nh_param_push-nhid=102;/*thenhid fromsystemsoftware'snexthop_index*//*ac-->pw:createlpmroutenexthopipuc_info.ip.ipv4=ipuc_info.vrf_id=ipuc_info.nh_id=ipuc_info.ip_ver=ipuc_info.route_flag=/*2.pw->acmpls_ilm.label=mpls_ilm.pop=1;/*PopLSPmpls_ilm.decap=/*DecapPWlabel,maptovrf88(vrffid:mpls_ilm.label=mpls_ilm.nh_id=mpls_ilm.id_type=mpls_ilm.type= /*createlpmroutenexthopipuc_info.ip.ipv4=ipuc_info.nh_id=ipuc_infovrf_id=ipuc_info.ip_ver=ipucinfo.route_flag=} -拓撲圖6-7所示CE1、CE3、CE5屬于1,而CE2和CE4屬于2,相關的配置11122配void{uint16gport,l3ifid=ctc_l3if_t _t ctc_mpls_nexthop_tunnel_info_t ctc_mpls_nexthop_push_param_tctc_mpls_ilm_t _pw_t /*Portconfig:ACgport=/*Portconfig:PWPort:Port3gport=l3ifid=2;/*allocatedl3ifidl3if.l3if_type=l3if.gport=ctc_l3if_create(l3ifid,/*1.ac->pw/*vlan config,vsi:1-->fid:4096*/ .key= .action .old_svid= .u3.fid= (gport, _en(gport,/*createPW1tunnellabelp_nh_param=p_nh_param-p_nh_param->mac[0]=p_nh_param->mac[1]=p_nh_param->mac[2]=p_nh_param->mac[3]=p_nh_param->mac[4]=p_nh_param->mac[5]=p_nh_param-p_nh_param-p_nh_param-p_nh_param-p_nh_param-ctc_nh_add_mpls_tunnel_label(1,/*createtoPW1nexthop(LSPlabel+PWlabel)p_nh_param_push=&(nh_param.nh_parap_nh_param_push- .opcode= p_nh_param_push- p_nh_param_push- p_nh_param_push- .mac[0]=p_nh_param_push- .mac[1]=p_nh_param_push- .mac[2]=p_nh_param_push- .mac[3]=p_nh_param_push- .mac[4]=p_nh_param_push- .mac[5]=p_nh_param_push-> CE_VLAN; .vlan_info.output_svid=p_nh_param_push-> p_nh_param_push-p_nh_param_push-p_nh_param_push-p_nh_param_push-p_nh_param_push-p_nh_param_push-p_nh_param_push-p_nh_param_push-p_nh_param_push-p_nh_param_push-p_nh_param_push->label_numnhid=102;/*thenhid fromsystemsoftware'snexthop_index*//*l2fdbaddmac0001.1111.abc5fid4096nexthop102,vsi:1-->fid:4096nhid=102;/*toPwl2_addr.mac[0]=l2_addr.mac[1]=l2_addr.mac[2]=l2_addr.mac[3]=l2_addr.mac[4]=l2_addr.mac[5]=l2_addr.fid=l2_addr.gport=/*2.pw->acmpls_ilm.label=mpls_ilm.pop=1;/
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 占地補償協議書性質
- 在家合伙創業協議書
- 宣傳活動承包協議書
- 就業協議書幾頁組成
- 農民培訓安全協議書
- 家里賣房協議書范本
- 章法普法賠償協議書
- 離婚財產協議書草稿
- 樓宇對講維修協議書
- 用電協議書范本模板
- 機電安裝工程危險源識別評價清單1-發網上
- 腫瘤療效評估新標準-mRECIST標準
- 全國普通高等學校招生統一考試(上海卷)考試手冊
- 260噸汽車吊地基承載力驗算
- 群文閱讀指導課-二年級《一個一個連下去》課件
- 沉淀反應 沉淀反應(免疫學檢驗課件)
- 2023年考研考博-考博英語-河北工業大學考試歷年高頻考點真題薈萃帶答案
- 西南18J202 坡屋面標準圖集
- 農業合作社全套報表(已設公式)-資產負債表-盈余及盈余分配表-成員權益變動表-現金流量表
- 中國船舶工業供應商
- 高考語文復習:文學類文本專題訓練擬寫頒獎詞
評論
0/150
提交評論