




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
IP V4/MPLS转发介绍完成人:王斌一 。IPV4转发1.1 总体流程 1.2 建立转发的具体流程1.2.1 举例和结果实际添加顺序应当和下面的顺序相反1.2.2添加路由typedef struct ix_s_cc_ipv4_add_route_data ix_uint32 ipAddr; ix_uint32 netMask; ix_cc_rtmv4_nhid nextHopId; ix_cc_ipv4_add_route_data;ipAddr目的子网IP地址netMask目的子网掩码nextHopId下一跳ID,NextHop的索引,ix_uint32addRoute addRoute 192.168.0.0 255.255.0.0 201.2.3在NHDB中添加NextHoptypedef struct ix_s_cc_ipv4_add_next_hop_data ix_cc_rtmv4_nhid nextHopId; ix_cc_rtmv4_next_hop_info nextHopInfo; ix_cc_ipv4_add_next_hop_data;typedef struct ix_s_cc_rtmv4_next_hop_info ix_uint32 bladeID; ix_uint32 l2Index; ix_uint32 portID; ix_uint32 mtu; ix_uint32 flags; ix_uint32 ipAddr; ix_uint32 l2IndexType; ix_cc_rtmv4_next_hop_info;bladeID区分不同的NP板卡l2Index指向L2Entry的索引(与l2IndexType有关)portID输出端口的IDmtu下一跳mtuflags包括如下类型,一般为localIPV4_NH_FLAGS_LOCALIPV4_NH_FLAGS_DOWNIPV4_NH_FLAGS_DROPIPV4_NH_FLAGS_BROADCASTIPV4_NH_FLAGS_MULTICASTipAddr下一跳IP地址l2IndexType下一跳类型,NEXT_HOP_ID_IPV4_TYPE则 指向L2EntryaddNextHop addNextHop 20 1 14 0 1500 0 192.168.0.11 01.2.4添加L2Entry:addV4EthEntry nameaddV4EthEntry 14 192.168.0.11 11:00:00:00:00:00 12:00:00:00:00:00 DEFAULTl2Index索引ipAddr目的子网IP地址DestMAC下一跳MACSourceMAC出口port的MAC地址name默认为DEFAULT1.3 改造后的流程可以改造成普通的简单添加路由的模式addRoute destip目的子网IPnetmask目的子网掩码ipAddr下一跳IP其它表项生成过程ipAddr已知netMask已知nextHopId哈希生成nextHopId遍历0到NHDB最大数,哈希生成bladeID系统自动添加l2Index哈希生成portID系统根据ipAddr查找portmtu1500flagsIPV4_NH_FLAGS_LOCALipAddr已知l2IndexType0(ipv4)l2Index以destip为key哈希生成ipAddr已知DestMAC通过ARP自动学习SourceMAC通过ARP自动学习nameDEFAULT二。MPLS转发2.1 名词NHLFE,下一跳标记转发表FEC(Forwarding Equivalence Class),转发等价类LSP(Label Switched Path),标记交换路径 FTN,FEC到NHLFE的映射ILM,输入标记映射2.2 标签外部控制器只需提供标签值,其余字段,在系统中,通过NHLFE的相关数据填充。typedef struct ix_s_cc_mpls_label ix_uint32 label :20, reserved :12; ix_cc_mpls_label;typedef struct ix_s_cc_mpls_label_internal ix_uint32 label :20, exp :3, s :1, ttl :8; ix_cc_mpls_label_internal;label标签值exp用于实现QOS,系统不支持s栈底标记ttl生存期2.3 NHLFEtypedef struct ix_s_cc_mpls_nhlfe ix_uint8 pushCount; /* number of labels to push, from 1 to 4 */ ix_uint8 l3Protocol; /* type of the MPLS payload * MPLS_L3_UNKNOWN * MPLS_L3_IP_V4 * MPLS_L3_IP_V6 */ ix_uint32 nextHopId; /* index to the L2 table on the egress blade */ ix_uint16 bladeId; /* outgoing blade ID */ ix_uint16 outPortId; /* outgoing port ID */ ix_uint8 outPortType; /* outgoing port type - Eth, POS, ATM */ ix_cc_mpls_label topLabel; /* label pushed on the top of the stack */ ix_cc_mpls_label label1; /* label pushed below top of the stack */ ix_cc_mpls_label label2; /* label pushed below label1 */ ix_cc_mpls_label label3; /* label pushed below label2 */ ix_uint32 mplsPolicy; /* criteria for chosing set element */ ix_cc_mpls_nhlfe;pushCount压栈标签数,取值0到4如果是FTN,最多压入4个如果是ILM,最多压入3个l3Protocol三层协议类型(IPV4,IPV6,其他)nextHopId指向L2Entry的索引bladeId区分不同的NP板卡outPortType输出端口类型(Eth, POS, ATM)topLabel要压入第一个的标签label1要压入第二个的标签label2要压入第三个的标签label3要压入第四个的标签mplsPolicympls的参数,未使用实际使用中,使用handle指向NHLFEtypedef struct ix_s_cc_mpls_nhlfe_handle ix_uint32 bladeId : 8, outSegId : 24; /* Index to NHLFE table */ ix_cc_mpls_nhlfe_handle;在删除NHLFE时,需要提供这个handle,如果有LSP和这个NHLFE相关联,则无法删除。2.4 SET存在NHLFE SET 和ILM SETNHLFE SET存储了多个NHLFE的索引,一个NHLFE SET最多包含4个索引。通过使用NHLFE SET可以为同一个输入报文,分配多个输出路径,但是目前代码只使用第一条路径。NHLFE SET所指向的NHLFE不能是NHLFE SET在NP内部,NHLFE和NHLFE都为8个32bit的数据结构,开始8bit为flag,用于区分NHLFE和NHLFE SET。如果是NHLFE SET,取出其包含的第一个NHLFE。ILM SET的情况类似于NHLFE SET。2.5 LSP-FEC2.5.1 数据结构Ipv4的fec类似于路由,数据结构如下typedef struct ix_s_cc_mpls_fec #define IX_CC_MPLS_FEC_TYPE_IPV4 1 #define IX_CC_MPLS_FEC_TYPE_IPV6 2 /*! FEC type: IPv4, IPv6, 6-tuple, etc. */ ix_uint32 type; union struct ix_s_ip4fec ix_uint32 ipAddress; ix_uint32 netMask; ix_cc_rtmv4_nhid nexthopId; ip4fec; struct ix_s_ip6fec ix_uint8 ip6Addr16; ix_uint32 prefixLen; ip6fec; /* other FECs to be defined */ fec; ix_cc_mpls_fec2.5.2 处理过程LSP_FEC主要是完成FTN的功能,即将输入的IPV4报文转化为MPLS报文,消息处理句柄为ix_cc_mpls_ftn_pkt_handler。LSP-FEC与IPV4转发共享一个路由表,在NHDB中的l2IndexType若为NEXT_HOP_ID_MPLS_TYPE,则NHDB中的l2Index指向NHLFE表。FEC处理过程:l 检查元数据中的l2IndexType是否为NEXT_HOP_ID_MPLS_TYPE,所指向的NHLFE是否有效,如果所指向的是NHLFE SET,则取其第一个NHLFEl 检查IPV4报头中的ttl是否小于NHLFE中的ttl,如果是停止转发,并产生ICMP报文l 如果不是MPLS_FLAG_TUNNEL_UNIFORM,则会先将IPV4报文中TTL减去NHLFE中的TTL,并重新计算检验和l 根据pushCount,压入相应个数的标签,并设置相应的ttl和s比特l 计算新的报文长度,如果需要,进行分片2.6 LSP-ILM2.6.1数据结构ILM的数据结构类似于NHLFE,它在存储时,根据输入端口和输入标签值,决定其存储位置,便于ILM处理过程中读取。2.6.2 处理过程消息处理句柄为ix_cc_mpls_ilm_pkt_handler。 处理过程:第一阶段:l 如果标签值超过系统规定的标签范围,丢弃报文l 根据输入标签值和输入端口号,计算指向对应的ILM的地址l 检查ILM是否有效,是否为ILM SET,如果是,则取其指示的第一个ILMl 将ILM复制为NHLFE arg_pNhlfe-bladeId = arg_pIlmEntry-bladeId; arg_pNhlfe-exp2phb = arg_pIlmEntry-exp2phb; arg_pNhlfe-phb2exp = arg_pIlmEntry-phb2exp; arg_pNhlfe-l3Protocol = arg_pIlmEntry-l3Protocol; arg_pNhlfe-label1 = arg_pIlmEntry-label1; arg_pNhlfe-label2 = arg_pIlmEntry-label2; arg_pNhlfe-label3 = arg_pIlmEntry-label3; arg_pNhlfe-maxLabPktSize = arg_pIlmEntry-maxLabPktSize; arg_pNhlfe-nextHopId = arg_pIlmEntry-nextHopId; arg_pNhlfe-operation = arg_pIlmEntry-operation; arg_pNhlfe-outPortId = arg_pIlmEntry-outPortId; arg_pNhlfe-outPortType = arg_pIlmEntry-outPortType; arg_pNhlfe-pushCount = arg_pIlmEntry-pushCount; arg_pNhlfe-topLabel = arg_pIlmEntry-topLabel; arg_pNhlfe-ttl = arg_pIlmEntry-ttl; arg_pNhlfe-flags = arg_pIlmEntry-flags;第二阶段:l 如果是保留标签(小于15,#define IX_MPLS_RES_LABEL_MAX 15)如果标签为0,且为栈底,则弹出标签,并交给IPV4转发CC处理;其余情况,一律丢弃报文l 如果Nhlfe.operation 是IX_MPLS_LABELOP_POP,则会将所有的标签弹出,然后交给IPV4转发CC处理l 如果Nhlfe.operation 是IX_MPLS_LABELOP_POP_FORWARD,则会将最上层标签弹出,并交给QM发送l 如果Nhlfe.operation 是IX_MPLS_LABELOP_SWAP_PUSH,若pushcount为N,则将第N+1个标签与当前最上层标签交换,然后在这个标签上面压入N个标签,交给QM发送l 如果Nhlfe.operation 是IX_MPLS_LABELOP_SWAP,则将第一个标签(topLabe)与最上层标签交换,交给QM发送2.7 创建LSP2.7.1 总体创建LSP有两种方法:l 使用已有的NHLFE,提供相应的handle创建LSPl 提供新数据,创建新的NHLFE,然后利用获得的handle创建LSP如果输入的NHLFE个数超过一个,则会自动创建NHLFE SET创建LSP的数据结构:typedef struct ix_s_cc_mpls_message_lsp_create ix_cc_mpls_lsp Lsp; ix_cc_mpls_nhlfe NhlfeSetMPLS_MAX_NHLFE_IN_SET; ix_cc_mpls_message_lsp_create;如果要创建新的NHLFE,需要在NhlfeSet字段提供相应的数据。typedef struct ix_s_cc_mpls_lsp #define IX_CC_MPLS_LSP_FEC_TYPE 1 #define IX_CC_MPLS_LSP_ILM_TYPE 2 ix_uint8 lspType; /* LSP_FEC(1), LSP_ILM(2) */ union ix_cc_mpls_fec fec; ix_cc_mpls_ilm ilm; inSeg; #define IX_CC_MPLS_LSP_NHLFE_SET_HANDLE_TYPE 1 #define IX_CC_MPLS_LSP_NHLFE_HANDLE_TYPE 2 #define IX_CC_MPLS_LSP_NHLFE_DATA_TYPE 3 ix_uint8 nhlfeInfoType; /* NHLFE_SET_HANDLE_TYPE(1), * NHLFE_HANDLE_TYPE(2), * NHLFE_DATA_TYPE(3) */ ix_cc_mpls_nhlfe_handle nhlfeSetHandle; ix_uint16 nhlfe_num; /* number of nhlfes in the table */ union ix_cc_mpls_nhlfe_handle nhlfeHandleMPLS_MAX_NHLFE_IN_SET; ix_cc_mpls_nhlfe *nhlfeDataMPLS_MAX_NHLFE_IN_SET; outSeg; ix_cc_mpls_lsp_param lspParamsMPLS_MAX_NHLFE_IN_SET; ix_cc_mpls_lsp;lspTypeLSP_FEC(1), LSP_ILM(2)nhlfeInfoTypeNHLFE_SET_HANDLE_TYPE(1), NHLFE_HANDLE_TYPE(2), NHLFE_DATA_TYPE(3)nhlfe_num输入的nhlfe或nhlfe handle的数目nhlfeSetHandle如果为set类型,在此提供handle,否则为空outSeg如果是NHLFE_DATA_TYPE,不用填,系统会自动用nhlfeData其指向外层的NhlfeSet;如果是NHLFE_HANDLE_TYPE,在此提供NHLFE的handleinSeg提供fec(目的IP,掩码,下一跳ID)或ilm(输入标签,输入端口,操作类型) lspParams如果使用非0的ttl,flag,非1500的MTU,需在此提供新数值nhlfe_num新创建标签或提供的handle数,1-4typedef struct ix_s_cc_mpls_lsp_param ix_uint32 flags; /* LSP flags */ ix_uint16 maxLabPktSize; /* LSP MTU */ ix_uint8 ttl; /* ttl decrement value */ ix_uint32 flowID; /* flow ID for DiffServ */ ix_uint16 exp2phbIdx; /* index into the EXP2PHB table */ ix_uint16 phb2expIdx; /* index into the PHB2EXP table */ ix_cc_mpls_lsp_param;如果是创建新的NHLFE,前三项的值在新的NHLFE中均为0,如果需要设置,需要在这里提供相应的值,如果使用已有的NHLFE,可以在这里进行修改(但是不能修改和其他LSP相关联的NHLFE)2.7.2 LSP-FEC如果是FEC类型,系统根据输入值和handle,创建路由和NHDB路由直接使用FEC提供的目的IP,掩码和下一跳IDNHDB完成指向NHLFE的配置 /* set ipv4 address */ nextHopInfo.ipAddr = arg_pLsp-inSeg.fec.fec.ip4fec.ipAddress; /* set mpls next hop id type */ nextHopInfo.l2IndexType = NEXT_HOP_ID_MPLS_TYPE; nextHopInfo.l2Index = pCcLspEntry-NhlfeHandle.outSegId;/*指向当前NHLFE*/ nextHopInfo.bladeID = Nhlfe.bladeId; nextHopInfo.mtu = arg_pLsp-lspParams0.maxLabPktSize; nextHopInfo.portID = Nhlfe.outPortId; nextHopInfo.flags = 0;2.7.3 LSP-ILM如果是ILM类型,需要注意/* check TTL in ILM */ if (arg_pLsp-inSeg.ilm.operation = IX_MPLS_LABELOP_POP) & (arg_pLsp-lspParams0.ttl != 1) return IX_ERROR_WARNING(IX_CC_ERROR_RANGE, (_ix_cc_mpls_lsp_verify_input(): improper ilm ttl value for pop operation);如果操作类型为IX_MPLS_LABELOP_POP,则ttl必须为1需要提供typedef struct ix_s_cc_mpls_ilm ix_cc_mpls_label label; ix_uint16 in_port; /* 0 for per-platform label space */ /* LSP operation field definitions */ #define IX_MPLS_LABELOP_SWAP 0 #define IX_MPLS_LABELOP_SWAP_PUSH 1 #define IX_MPLS_LABELOP_POP 2 #define IX_MPLS_LABELOP_POP_FORWARD 3 #define IX_MPLS_LABELOP_PUSH 4 ix_uint8 operation; /* Label operation */ ix_cc_mpls_ilm;5种操作中,不支持最后一种然后利用NHLFE和上面的参数创建新的ILM arg_pIlmEntry-bladeId = arg_pNhlfe-bladeId; arg_pIlmEntry-exp2phb = arg_lspParams.exp2phbIdx; arg_pIlmEntry-l3Protocol = arg_pNhlfe-l3Protocol; arg_pIlmEntry-label1 = arg_pNhlfe-label1.label; arg_pIlmEntry-label2 = arg_pNhlfe-label2.label; arg_pIlmEntry-label3 = arg_pNhlfe-label3.label; arg_pIlmEntry-maxLabPktSize = arg_lspParams.maxLabPktSize; arg_pIlmEntry-nextHopId = arg_pNhlfe-nextHopId; arg_pIlmEntry-outPortId = arg_pNhlfe-outPortId; arg_pIlmEntry-outPortType = arg_pNhlfe-outPortType; arg_pIlmEntry-phb2exp = arg_lspParams.phb2expIdx; arg_pIlmEntry-pushCount = arg_pNhlfe-pushCount; arg_pIlmEntry-topLabel = arg_pNhlfe-topLabel.label; arg_pIlmEntry-ttl = arg_lspParams.ttl;arg_pIlmEntry-flags = MPLS_FLAG_VALID_BIT | arg_lspParams.flags;pNewIlmEntry-operation = arg_pLsp-inSeg.ilm.operation;根据输入的端口号和标签值,将ILM保存在相应的位置2.7.4 返回值/* CC_NHLFE table entry */typedef struct ix_s_cc_mpls_cc_nhlfeix_uint16 flags; /* bits 0:1* 00 entry is vacant* - 01 entry is taken by stand-alone NHLFE ,* - 10 entry points at NHL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全知识与7S培训课件
- 安全知格培训学成绩课件
- 2024年二年级品生下册《我随爸爸去做客》说课稿2 苏教版
- 安全相关法规培训学习课件
- 安全监管职责培训课件
- 地下车位物业服务协议模板6篇
- 海事局安全培训证书查询课件
- 安全监督志愿者培训课件
- 2024-2025学年七年级历史下册 7 辽、西夏与北宋的并立说课稿 新人教版
- 海丝酷爽安全生产培训课件
- 2025中国铁路北京局集团有限公司招聘高校毕业生76人(三)笔试参考题库附带答案详解(10套)
- 浙教版2025-2026学年八年级上科学第1章 对环境的察觉 单元测试卷
- 基底细胞癌护理查房
- 2025保密观知识竞赛题库(试题附答案25个)
- 2025-2026学年人教版(2024)初中生物八年级上册(全册)教学设计(附目录)
- 煤矿监管培训方案
- 企业反腐倡廉培训课件
- 湿疮湿疹中医护理查房
- 2025年6月新《中华人民共和国治安管理处罚法》全文+修订宣贯解读课件(原创内容丰富且全)
- DB31/T 1377.4-2022实验鸡和鸭第4部分:设施及环境
- 2025邮储银行面试题目及答案
评论
0/150
提交评论