BCM5314x PACKET FLOW

本文介绍了BCM5314x芯片在二层和三层网络中的报文处理流程,包括以太网报文的长度范围、二层上行处理中的VLAN分配与MAC学习、三层上行转发的IP查找与路由处理等内容。

                                                                      BCM5314x PACKET FLOW

 

支持标准以太网报文 64~1522 超长包可达9K byte;

 

L2上行处理:

上行处理模块进行报文解析,可以通过上行模块和fp模块解析报文所有字段;对于不带vlan标签的报文可以通过vcap、vlan转换表、子网、协议和端口进行分配vlan及优先级;

带vlan标签的报文,使用报文的vlan进行查找vlan表,并按照命中的vlan表进行处理,如果vlan配置了生成树,则按照vlan端口bitmap和端口过滤规则进行处理。如果vlan表不存在则丢弃或把该报文送到cpu处理;

源mac学习,基于mac+vlan进行学习,可以通过cpu managed learning控制是否由cpu进行学习mac,cml可以基于端口配置,cpu学习时,硬件复制学报文送到cpu。

目的mac查找,先查找L2_USER_ENTRY,如果命中则按照表项结果进行处理,不命中继续查 L2_ENTRY表,命中按表项内容转发处理,不命中则vlan内广播;

多播报文处理,也同样查L2_USER_ENTRY并和单播报文同样处理,不命中时查L2_ENTRY表,命中L2_ENTRY表则从表中获取L2MC表的索引查找L2MC表(内容为bitmap),根据vlan表中的PFM标志进行处理,PFM为0则vlan内广播,为1则按L2MC表的bitmp复制转发,为2且L2MC不命中则丢弃;

广播报文也同样像单播报文一样解析,在学习mac后vlan内广播;

 

L3上行转发:

芯片支持三层交换和路由转发,三层交换功能允许从一个vlan转发到另外一个vlan中,和二层交换不同,三层交换基于目的ip,使用三层交换功能时必须是能L3_ENABLE标志;

三层报文经过目的mac查找,如果命中L2_USER_ENTRY或L2_ENTRY表,并且L3_ENABLE标志是能则进入L3模块,否则按照二层转发处理;

报文进入三层处理模块,先查找源ip表,如果没有命中,则设置sip no hit标志,继续查找目的ip表;源ip查找失败时随机复制报文送到cpu,上送原因为source miss;源ip查找命中,芯片更新L3 hit bit标志,当源ip表内容和报文的mac、入端口号不一致时,报文转发给cpu,由软件更新L3接口表项;

用目的ip查找IP表,命中后表项中获取ING_L3_NEXT_HOP和EGR_L3_NEXT_HOP表的索引,在ING_L3_NEXT_HOP表中包含目的端口,EGR_L3_NEXT_HOP表中包含下一跳的mac;

如果L3表项项查找失败,硬件继续查找L3 LPM表,按最长匹配搜索;如果命中,表项包NEXT_HOP_INDEX,用来查找ING_L3_NEXT_HOP和EGR_L3_NEXT_HOP表;

上面的描述是一个非静态默认路由,所以用户可以通过程序下发适当的默认路由到LPM表中,可以下发一条包含所有条目的掩码的表项,用来匹配所有报文;

一个正常路由转发的报文,硬件自动的进行源目的mac和vlan的修改,并且对TTL字段进行递减,重新计算checksum和以太FCS。非正常路由转发的报文可选送到cpu进行处理。三层表项包含的hit bit可以用来支持基于软件老化表项功能,hit bit有dip查找时进行刷新,也可选择sip查找时刷新;LPM表的hit bit在查找LPM表项时进行刷新;

 

Cpu端口的上下行报文:

5314x cpu端口是CMIC模块的一部分,通过PCIe接口可以连接外部cpu。芯片允许应用程序通过cpu端口和外部ge接口发送或接收报文。Cmic模块的dma 引擎收发接口和cpu的报文数据,pci总线操作对于dma引擎来说也像操作一个pci总线master一样;cmic可以发送两种报文格式到cpu: 以太报文和higig头报文;

发送以太报文时,像一个普通报文通过ge口进入交换芯片一样转发处理,通过转发逻辑对报文进行处理。

当发送higig格式报文时,cpu通过higig头对报文的转发进行完全控制。这种方式一般使用在前面芯片是一个strataXGS器件。报文的转发基于cpu精确指定的信息进行转发。这种模式一般可用于发送控制报文,如bpdu、rip、ospf等报文;

if (NULL == node) { if (addTime - study_item_time > WIDS_WIPS_STUDY_TIME) { WIDSWIPS_DEBUG("study_ study_shot_count = %d, study_item_num = %d", study_shot_count, study_item_num); // 时间窗口到期,进行阈值判断 if (study_item_num > WIDS_WIPS_STUDY_ITEM_COUNT && (study_shot_count * 1.0 / study_item_num) > 0.8) { // 触发学习模式:缩短黑名单老化时间 WIDSWIPS_DEBUG("study_shot_count"); study_flag = 1; // param->ic_cfg.dy_black_list_expire_time = 300; } else { // 未达阈值:恢复默认老化时间 WIDSWIPS_DEBUG("study_shot_count no"); study_flag = 0; // param->ic_cfg.dy_black_list_expire_time = param->black_list_expire_time_backup; } study_item_time = addTime; // 重置时间窗口 study_item_num = 0; // 重置计数器 study_shot_count = 0; } else{ wids_wips_priv_node *study_node = NULL; // 查看是否命中 for (int index = 0; index < WIDS_WIPS_NODE_TABLE_LEN; index++) { study_node = &(param->ic_flood_table.node[index].ni_elem); if (NODE_STATE_ACTIVE == study_node->state){ if ((0 == memcmp(study_node->sourceMac, (u_int8_t *)(hdr->sa.octet), 3)) && (abs(study_node->sourceApRssi - wrxh->rssi) < 4) && study_node->bss_chann.ic_freq == wf_chspec_primary20_chan(wlc->chanspec)) /* find the entry */ { study_shot_count ++; break; } } } study_item_num++; } }为什么加上这段程序,固件就会报错insmod: can't insert '/lib/modules/4.19.294/extra/wl.ko': unknown symbol in module, or unknown parameter /etc/init.d/bcm-wlan-drivers.sh: line 441: /bin/pspctl: not found Configuring wlan related threads... no thread pin applied Wlan related processes are pinned by default Broadcom Packet Flow Cache learning via BLOG disabled. Broadcom Packet Flow Cache flushing the flows [ 22.505090] Archer Mode set to L3 Broadcom Packet Flow Cache acceleration mode <L3> Broadcom Packet Flow Cache learning via BLOG enabled. Flow Refresh Timer Interval = 10000 millisecs TCP Flow Idle Timer = 60 s UDP Flow Idle Timer = 120 s
最新发布
11-10
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值