盛科SDK基础知识

本文档详细介绍了盛科CTC5160芯片的SDK基础知识,包括lport、gport、logicport等端口类型,FID、VRFID、McastGroupID等核心概念,以及NextHop、组播复制、自定义CPU报文处理等机制。内容涵盖芯片功能、工作模式、端口架构、转发实例、组播管理和路由转发实例的配置,是理解盛科SDK开发的重要参考资料。
摘要由CSDN通过智能技术生成

概述

接触盛科芯片已经快三年了,中间基于CTC5160做了很多项目,由于开发人员紧缺,基本上都是一个人负责整个功能模块的开发,难免要和SDK打交道,下面基于本人对盛科SDK的理解,做一些笔记,以便时常翻阅。资料主要来源盛科对外提供的资料。

ctc5160芯片介绍

CTC5160(GreatBelt)是一款多功能、高性能的IP/Ethernet交换芯片。集成了L2到L4包处理引擎、先进的流量管理单元和OAM引擎,可以达到120Gbps的线速处理能力。

支持的工作模式:

  • 24X1GE + 8X10GE
  • 48X1GE + 8X10GE
  • 12X10GE

N-Cube架构
在这里插入图片描述

SDK常用的概念

架构

lport、gport、logic port

端口是交换芯片和其它设备进行对接传输数据的,盛科sdk中把端口划分成了本地端口(lport)、全局端口(gport)和逻辑端口(logic port)这三种类型。

lport

单芯片情况下的本地端口,包括物理口、芯片中保留端口、内部端口

本地端口一般由芯片能出的MAC数目而决定,芯片支持的本地端口最大值:

  • Greatbelt 支持128个本地端口
  • Humber 支持256个本地端口

物理端口的作用:可以作为一些表项的索引,例如DsPhyPort、DsSrcPort、DsDestPort.

Greatbelt lport的组成
在这里插入图片描述

gport

如果单芯片情况下表示的就是lport,但是有时会出现多芯片场景的应用,例如分布式系统或者堆叠系统。使用lport是无法区分哪个芯片上的端口。此时就需要global port,简称gport。
像堆叠系统中,多台堆叠成员设备虚拟成一台网络设备,此时单播转发表的出端口必须要知道是哪个芯片上的端口,gport就携带芯片信息,然后经过堆叠口单播出去。

Global port的组成
在这里插入图片描述

logic port

盛科的逻辑端口是一种物理端口的映射,指的是一种业务在一个物理端口上的抽象,用在特殊的地方。

  • VPLS:作为AC的logic port时,可以通过gport+vlan或gport映射得到,作为PW端口时可以通过VC Label映射得到。
  • APS:两层保护切换网络,一对保护组的出口同时属于一个logic port,可通过Port模块的接口把两个端口配置属于同一个logic port。

FID

Greatbelt芯片最大支持16k个FID。
Forwarding Instance ID:转发实例号,盛科的芯片所有二层转发都基于MAC+FID进行的。FID的来源

  • 基于VLAN的L2 Bridge转发
    1. IVL: vlan:fid是1:1关系
    2. SVL: vlan:fid是n:1关系,可通过配置DsVlan.fid对应的VLAN在SVL中的FID。
  • 基于C+S VLAN的转发
    上层用户可以通过Vlan mapping的接口ctc_vlan_add_vlan_mapping()把C+S映射到一个FID中进行转发。
  • 基于VSI的VPLS的转发
    在VPLS应用中,虚拟交换实例即VSI可映射为芯片中的FID,在配置AC端口或PW端口时指定在同一个VSI,相当于在同一个转发实例中转发。VSI范围4096 + 1K

Mcast Group ID

在芯片中,二层组播、三层组播、基于VLAN的泛洪、基于VSI的泛洪都采用组播复制的方式实现,每个组播组都是用组播ID来索引。
下面时默认Mcast Group ID分配情况

Mcast TypeMcast NumberMcast Group ID
Vlan based Broadcast4K0~4095
VSI based Broadcast1K4096~5119
L2 Multicast1K5120~6143
IP Mulitcast1K6144~7167

VRF ID

VRF:Virtual Routing Forwarding,虚拟路由转发实例。在一台交换机上启用VRF,可以虚拟多台交换机,三层之间相互隔离。每个VRF独立管理自己的路由表。
一般VRF在L3VPN中使用,在PE设备上,为每个直接相连的Site建立并维护专门的VRF实例,即VPN实例。每个实例有自己的IP路由表、标签转发表、与VPN实例绑定的接口以及VPN实例的管理信息。
在盛科SDK中,vrfid属于L3 interface的属性。

L3 interface

l3 interface 全局支持1k interface, 分为三种类型:

  1. physical interface: 为Routed port,仅仅可以配置三层属性,只有路由功能,相当于路由器上的接口,是基于物理port的,可以直接连接路由器。
  2. Vlan interface: 是三层交换机中vlan配置的路由接口,Vlan interface基于vlan,vlan接口集成了交换和路由的功能。
  3. Sub interface: 为Routed port,仅仅可以配置三层属性,只有路由功能,是基于port + vlan来区分的,在一个物理端口port上,可以通过vlan来划分不同的Interface。

Nexthop

NextHop在盛科芯片中是一个很重要的概念,它是对芯片中一系列表项的总称,这些表象包括DsFwd、DsNexthop、DsL2Edit、DsL3Edit。这些表项的作用就是决定将报文发往哪些端口,并且在出端口前对报文做哪些编辑等等。

NextHop 类型

  • L2UC:二层单播,初始化创建,FDB使用。
  • L2MC:二层组播,SDK维护,用于二层组播
  • IPUC:三层单播,用户自己创建删除,可以add/update/remove.
  • IPMC:三层组播,SDK维护,用于三层组播
  • MPLS
  • IP tunnel
    可以归为两类:
  1. 用户可以管理的:IPUC, MPLS, IP tunnel
  2. SDK自己维护:L2UC, L2MC, IPMC

自定义上送CPU的报文类型

在开发私有协议时,有时会用到特殊的报文类型,芯片无法自动识别上送CPU,此时需要采用特殊手段,由芯片主动抓取,然后上送CPU进行处理。

创建Mcast Nexhop

用于识别出报文后,报文将要进行的动作,发往哪些端口。

/* 直接创建一个mcast nexthop即可,用于acl识别出报文关联 */
ctc_nh_add_mcast(mcast_nhid, &nh_mcast_group);

特殊报文识别

ACL报文抓取:

  1. ctc_acl_create_group —创建一个入方向的acl组。
  2. ctc_acl_add_entry — 创建acl表项,可以基于l2/l3/l4进行报文的识别。
  3. ctc_acl_install_group — 安装,使之生效。
{/*  根据l4类型或则端口号进行匹配 示例 */
	acl_entry->entry_id = entry_id;
	acl_entry->key.type = CTC_ACL_KEY_IPV4;
	p_key->flag = CTC_ACL_IPV4_KEY_FLAG_L4_PROTOCOL;
	p_key->l4_protocol = l4_protocol;
	p_key->l4_protocol_mask = 0xff;
	p_action->nh_id = nhid;   /* 第一步创建的mcast nexthop */ 
	p_action->flag |= CTC_ACL_ACTION_FLAG_REDIRECT;
	ret = ctc_acl_add_entry(acl_group_id, acl_entry);
}

创建Misc Nexthop

使用的Misc Nexthop,用于关联cpu reason,上送CPU。

	nh_param.type = CTC_MISC_NH_TYPE_TO_CPU;
    nh_param.misc_param.cpu_reason.cpu_reason_id = reason_id;
	ret = ctc_nh_add_misc(nhid, &nh_param);

自定义CPU Reason

  1. 创建一个CPU reason, 并映射到16个CPU group中的一个queue
	que_cfg.type = CTC_QOS_QUEUE_CFG_QUEUE_REASON_MAP;
	que_cfg.value.reason_map.cpu_reason = reason_id;
	que_cfg.value.reason_map.queue_id = queue_id;
	que_cfg.value.reason_map.reason_group = group_id;
	ret = ctc_qos_set_queue(&que_cfg);
  1. 将CPU reason的目的地指向CPU
	dest_type = CTC_PKT_CPU_REASON_TO_LOCAL_CPU;
  	que_cfg.type = CTC_QOS_QUEUE_CFG_QUEUE_REASON_DEST;
    que_cfg.value.reason_dest.cpu_reason = reason_id; 
    que_cfg.value.reason_dest.dest_type = dest_type;
	ret = ctc_qos_set_queue(&que_cfg);
  1. 最后将上述创建的上送CPU的Misc Nexthop关联这个CPU reason
    nh_param.type = CTC_MISC_NH_TYPE_TO_CPU;
    nh_param.misc_param.cpu_reason.cpu_reason_id = reason_id;
	ret = ctc_nh_add_misc(nhid, &nh_param);

关联Mcast Nexthop和Misc Nexthop

这一步主要是将Misc-Nexthop添加到Mcast-Nexhop中去。上面使用Mcast-Nexthop的目的是为了不单单将自定义报文上送CPU,而且还要转发出去。如果仅仅时上送CPU,可以直接省略掉Mcast-Nexthop步骤,直接在ACL规则中关联Misc-Nexthop即可。

  1. 添加上送CPU的misc-nexthop
    nh_mcast_group.mem_info.member_type = CTC_NH_PARAM_MEM_LOCAL_WITH_NH;
	nh_mcast_group.opcode = CTC_NH_PARAM_MCAST_ADD_MEMBER;
	nh_mcast_group.mem_info.ref_nhid = misc_nhid;
	ret = ctc_nh_update_mcast(mcast_nhid, &nh_mcast_group);
  1. 添加普通的物理端口
	nh_mcast_group.mem_info.member_type = CTC_NH_PARAM_MEM_BRGMC_LOCAL;
	nh_mcast_group.opcode = CTC_NH_PARAM_MCAST_ADD_MEMBER;
	nh_mcast_group.mem_info.destid = gport;
	ret = ctc_nh_update_mcast(mcast_nhid, &nh_mcast_group);
  • 8
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值