芯片手册盛科sdk用户开发指南_第1页
芯片手册盛科sdk用户开发指南_第2页
芯片手册盛科sdk用户开发指南_第3页
芯片手册盛科sdk用户开发指南_第4页
芯片手册盛科sdk用户开发指南_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

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

文档简介

©盛科网络(苏州)。保留一切权利。州和任何方 州和任何方

,任何单位和个人不得擅自摘抄、本文档内容的部分或全部 拥有商标。盛科交换机系列产品和系列产品的标志均为盛科网络(苏州)商标或商标。 本文档提及的其他所有商标和商业名称,由各自的所有人拥有。注您的产品、服务或特性等应受盛科网络商业合同和条款的约束,本文档中描述的全部或部分产品、服务或特性可能不在您的或使用范围之内。除非合同另有约定,本公司对本文档内容不做任何明示或默示的由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,本文档中的所有陈述、信息和建议不构成任何明示或暗示的担保。盛科网络(苏州 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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论