基于DWC_ether_qos的以太网驱动开发-包过滤

原创 嵌入式Lee 2023-09-01 07:30

一. 前言

以太网上数据非常多,如果所有数据都接收交给软件去处理软件负载会非常重,所以一般只需要接收发给自己的数据即可,过滤掉不必要的数据,这样软件只处理自己需要的数据,软件负担更小更高效,CAN等总线也有类似的硬件过滤机制,意义基本类似。这就需要用到过滤功能,一般接收广播地址,和目的是本MAC地址的包即可。

参考手册9 Packet Filtering

二.包过滤的序列

过程如下

先进行第二层即数据链路层MAC帧的过滤(根据MAC帧的MAC源地址目的地址)

然后进行第二层VLAN过滤

然后进行第三层网络层的IP包的过滤(根据IP报的IP源地址目的地址)

最后进行第四层传输层TCP/UDP包的过滤(根据TCP/UDP报的源和目的端口)

最基本的是MAC帧的过滤,所以重点介绍该方式的过滤。

 

. MAC帧过滤介绍

3.1 MAC地址寄存器

MAC_HW_Feature0 寄存器(偏移0x11c)的位ADDMACADRSEL[22:18]可以查询启用的附加的1~31MAC地址寄存器的个数

MACADR64SEL[24]1表示启用附加的64~12764MAC地址寄存器

MACADR32SEL[23]1表示启用附加的32~6332MAC地址寄存器

我这里的配置是

(gdb) x /1xw 0x0116011C

0x116011c: 0x1a0d1122

(gdb)

[24]= 0

[23]= 0

[22:18] = 00011 = 3

所以只有额外的3MAC地址寄存器,一共40是总是有的。

对应的寄存器为

MAC_Address(#i)_High31_1  i=1 i<=3-1=2  16

MAC_Address(#i)_Low31_1              32

这里

MACADR64SELMACADR32SEL都为0所以没有32~6364~127的寄存器。

该寄存器需要软件初始化时配置

注如下表达式中DWC_EQOS_ADD_MAC_ADDR_REG-1应该不需要-1,应该是文档错误,因为

DWC_EQOS_ADD_MAC_ADDR_REG即表示个数,0总是存在的所以从1开始,n个就是1n,比如这里为3就是1~3,3个额外的,还有04个。

MAC_Address(#i)_High31_1 (for i = 1; i <= DWC_EQOS_ADD_MAC_ADDR_REG-1)

(0x0008*i)+0x0300

AE[31]=1 使能该地址作为过滤 寄存器0只读始终是使能的

SA[30]=0 使用寄存器值[47:0]和接收包的DA比对,相同则接收;=1 使用寄存器值[47:0]和接收包的SA比对,相同则接收。 寄存器0没有。

MBC[29:24] 6bit分别对应6字节MAC地址的对应字节,对应位为1则不比较对应字节。

低位对应最后面的字节。寄存器0没有。

DCS[x:16] 匹配的数据将路由到该DMA通道去,对于单DMA则保留。

ADDRHI[15:0] MAC地址的高16

MAC_Address(#i)_Low31_1 (for i = 1; i <= DWC_EQOS_ADD_MAC_ADDR_REG-1)

ADDRLO[31:0] MAC地址的低32位。

如下可以看到0已经配置了,后面还有31~3(从初始值0xFFFFFFFF可以看出)

 

3.2地址过滤Hash

地址过滤Hash表的使能可以通过寄存器

MAC_HW_Feature1(0x120) 的位HASHTBLSZ[25:24]查询

00 Hash

01:64

10:128

11:256

我这里的值是

(gdb) x /1xw 0x01160120

0x1160120: 0x00000944

(gdb)

[25:24]=00,即没有使能Hash表。

四. 过滤模式配置

4.0 过滤模式配置寄存器

MAC_Packet_Filter寄存器0x08

控制过滤模式

RA[31] 设置为1表示接收所有的包(但是Rx Status Word还是会更新过滤是否通过的状态),设置为0则根据过滤结果控制是否接收。

调试阶段可以设置为1,以便进行接收测试。

DNTU[21]  设置为1MAC会丢弃非TCPUDP IP数据包。必须IPFE时才有效。

IPFE[20] 设置为1使能34层过滤。

VTFE[16] 设置为1使能VLAN Tag过滤

HPF[10] 设置为1使能Hash或者Perfert过滤(即寄存器匹配)

SAF[9] 设置为1使能源地址过滤

SAIF[8] 设置为1 源地址过滤反逻辑,即匹配的丢弃,不匹配的接收。

PCF[7:6]

00MAC过滤掉所有控制数据包

01: MAC接收除了Pause包外的所有控制包,哪怕是地址匹配失败

10 MAC接收所有控制包,哪怕是地址匹配失败

11: MAC接收所有通过地址过滤的控制包

DBF[5]: 设置为1不接收广播包

PM[4]: 设置为1接收所有多播包,即MAC地址的第一个bit1.

设置为0则由HMC决定。

DAIF[3]: 设置为1DA匹配之后反逻辑接收,即匹配的不接收。

HMC[2]: 设置为1DA 多播地址根据Hash匹配,否则使用寄存器匹配

HUC[1]: 设置为1DA 单播地址根据Hash匹配,否则使用寄存器匹配

PR[0]: 设置为1则不匹配SA DA都接收,甚至状态位都清除Rx Status Word

此模式可以作为监控模式,接收所有数据。

4.1 单播目的地址过滤

HUC[1]设置为0

MacAddr1MacAddr127地址用单独的使能位来使能。对于MacAddr1MacAddr31地址,可以通过在寄存器中设置相应的掩码字节控制位,在与相应的接收DA字节进行比较时屏蔽指定字节。允许对DA进行组地址筛选。MacAddr32MacAddr127地址没有掩码控制,并且将MAC地址的所有6字节与接收到的DA/SA6字节进行比较

在哈希过滤模式下(当设置了HUC位时),MAC使用64位哈希表对单播地址执行不完美的过滤。对于哈希过滤,MAC使用接收到的目的地地址的高6CRC来索引哈希表的内容。值00000选择所选寄存器的位0,值11111选择哈希表寄存器的位63。如果对应的比特(由6比特CRC指示)被设置为1,则单播分组被认为已经通过了哈希滤波器;否则,数据包被认为未通过哈希过滤器

4.2 多播放目的地址过滤

PM[4]设置为1否则由HMC决定多播的接收。

将多播地址与编程的MAC目的地地址寄存器(1-31)进行比较。还支持组地址筛选

在哈希过滤模式下,MAC使用64位哈希表执行不完美过滤。MAC使用接收到的多播地址的高6CRC来索引哈希表的内容。值000000选择所选寄存器的位0,值111111选择哈希表寄存器的位63。如果对应的比特被设置为1,则多播分组被认为已经通过了哈希过滤器。否则,数据包被认为未通过哈希过滤器

4.3 哈希或完美地址筛选

HPF[10]配置是使用哈希还是完美地址(寄存器匹配)过滤模式

配合HUC HMC配置多播和单播是使用哈希还是完美地址过滤模式

这适用于单播和多播数据包。如果HPF位被重置,则只有一个滤波器(HashPerfect)被应用于接收到的数据包。

4.4广播过滤

默认情况下,MAC不过滤任何广播数据包。设置MAC_Packet_Filter寄存器中DBF1不接收广播包。

4.5 单播源地址过滤

MAC地址寄存器的Bit 30设置为1比较SA否则比较DA

MAC还支持SA的组过滤。通过屏蔽地址的一个或多个字节来过滤一组地址。如果MAC_Packet_filter寄存器SAF置位,则MAC丢弃未通过SA过滤器的数据包。否则,SA过滤器的结果作为接收状态字中的状态位给出(Table 2-16 Receive Status at the MAC Interface)。当SAF位被设置时,SA滤波器和DA滤波器结果被以决定是否需要接收。这意味着,如果任何一个过滤器失败,数据包都会被丢弃。只有当数据包按顺序通过两个过滤器时,才会将数据包转发给应用程序

4.6 反逻辑

对于DASA过滤,可以通过设置MAC_Packet_filter寄存器的DAIFSAIF位,在最终输出时反转过滤器匹配结果。

DAIF位适用于单播和多播DA数据包。单播或多播目的地地址筛选器的结果在此模式中反转。类似地,当SAIF比特被设置时,单播SA滤波器的结果被反转。

五. 其他层级过滤

还有以下过滤,用时可以参考手册

VLAN过滤

扩展Rx VLAN过滤和路由

扩展Rx VLAN筛选和路由

六. 过滤测试

按照一般的配置DA匹配,接收目的地址DA是本设备MAC地址的包和广播包。

MAC的默认配置实际就是这样的。

寄存器0总是使能的,DA匹配,只需要填入本设备MAC地址即可,

低字节先发送如下对应FCF29FE93C18MAC地址。

MAC_Address0_HighMAC_Address0_Low

(gdb) x /20xw 0x01160300

0x1160300: 0x8000183c      0xe99ff2fc      0x0000ffff      0xffffffff

0x1160310: 0x0000ffff      0xffffffff      0x0000ffff      0xffffffff

0x1160320: 0x00000000      0x00000000      0x00000000      0x00000000

0x1160330: 0x00000000      0x00000000      0x00000000      0x00000000

0x1160340: 0x00000000      0x00000000      0x00000000      0x00000000

使能广播包

(gdb) x /1xw 0x01160008

0x1160008: 0x00000000

(gdb)

使用MAC回环测试。

测试广播地址能收到

    tx_buffer[0]=0xFF;    tx_buffer[1]=0xFF;    tx_buffer[2]=0xFF;    tx_buffer[3]=0xFF;    tx_buffer[4]=0xFF;    tx_buffer[5]=0xFF;

测试目的地址匹配能收到

    tx_buffer[0]=0xFC;    tx_buffer[1]=0xF2;    tx_buffer[2]=0x9F;    tx_buffer[3]=0xE9;    tx_buffer[4]=0x3C;    tx_buffer[5]=0x18;

测试非广播地址非目的地址匹配不能收到

    tx_buffer[0]=0xFC;    tx_buffer[1]=0xF2;    tx_buffer[2]=0x9F;    tx_buffer[3]=0xE9;    tx_buffer[4]=0x3C;    tx_buffer[5]=0x19;

以上说明过滤符合预期。

七. 总结

MAC支持的过滤多种多样,支持多个层级的过滤,最通常的就是接收广播地址和DA是和本设备MAC地址完全一样的包。


评论
  • 飞凌嵌入式基于瑞芯微RK3562系列处理器打造的FET3562J-C全国产核心板,是一款专为工业自动化及消费类电子设备设计的产品,凭借其强大的功能和灵活性,自上市以来得到了各行业客户的广泛关注。本文将详细介绍如何启动并测试RK3562J处理器的MCU,通过实际操作步骤,帮助各位工程师朋友更好地了解这款芯片。1、RK3562J处理器概述RK3562J处理器采用了4*Cortex-A53@1.8GHz+Cortex-M0@200MHz架构。其中,4个Cortex-A53核心作为主要核心,负责处理复杂
    飞凌嵌入式 2025-01-24 11:21 21浏览
  • 故障现象 一辆2007款日产天籁车,搭载VQ23发动机(气缸编号如图1所示,点火顺序为1-2-3-4-5-6),累计行驶里程约为21万km。车主反映,该车起步加速时偶尔抖动,且行驶中加速无力。 图1 VQ23发动机的气缸编号 故障诊断接车后试车,发动机怠速运转平稳,但只要换挡起步,稍微踩下一点加速踏板,就能感觉到车身明显抖动。用故障检测仪检测,发动机控制模块(ECM)无故障代码存储,且无失火数据流。用虹科Pico汽车示波器测量气缸1点火信号(COP点火信号)和曲轴位置传感器信
    虹科Pico汽车示波器 2025-01-23 10:46 74浏览
  •     IPC-2581是基于ODB++标准、结合PCB行业特点而指定的PCB加工文件规范。    IPC-2581旨在替代CAM350格式,成为PCB加工行业的新的工业规范。    有一些免费软件,可以查看(不可修改)IPC-2581数据文件。这些软件典型用途是工艺校核。    1. Vu2581        出品:Downstream     
    电子知识打边炉 2025-01-22 11:12 134浏览
  • 嘿,咱来聊聊RISC-V MCU技术哈。 这RISC-V MCU技术呢,简单来说就是基于一个叫RISC-V的指令集架构做出的微控制器技术。RISC-V这个啊,2010年的时候,是加州大学伯克利分校的研究团队弄出来的,目的就是想搞个新的、开放的指令集架构,能跟上现代计算的需要。到了2015年,专门成立了个RISC-V基金会,让这个架构更标准,也更好地推广开了。这几年啊,这个RISC-V的生态系统发展得可快了,好多公司和机构都加入了RISC-V International,还推出了不少RISC-V
    丙丁先生 2025-01-21 12:10 619浏览
  • 数字隔离芯片是一种实现电气隔离功能的集成电路,在工业自动化、汽车电子、光伏储能与电力通信等领域的电气系统中发挥着至关重要的作用。其不仅可令高、低压系统之间相互独立,提高低压系统的抗干扰能力,同时还可确保高、低压系统之间的安全交互,使系统稳定工作,并避免操作者遭受来自高压系统的电击伤害。典型数字隔离芯片的简化原理图值得一提的是,数字隔离芯片历经多年发展,其应用范围已十分广泛,凡涉及到在高、低压系统之间进行信号传输的场景中基本都需要应用到此种芯片。那么,电气工程师在进行电路设计时到底该如何评估选择一
    华普微HOPERF 2025-01-20 16:50 123浏览
  •  万万没想到!科幻电影中的人形机器人,正在一步步走进我们人类的日常生活中来了。1月17日,乐聚将第100台全尺寸人形机器人交付北汽越野车,再次吹响了人形机器人疯狂进厂打工的号角。无独有尔,银河通用机器人作为一家成立不到两年时间的创业公司,在短短一年多时间内推出革命性的第一代产品Galbot G1,这是一款轮式、双臂、身体可折叠的人形机器人,得到了美团战投、经纬创投、IDG资本等众多投资方的认可。作为一家成立仅仅只有两年多时间的企业,智元机器人也把机器人从梦想带进了现实。2024年8月1
    刘旷 2025-01-21 11:15 666浏览
  • 现在为止,我们已经完成了Purple Pi OH主板的串口调试和部分配件的连接,接下来,让我们趁热打铁,完成剩余配件的连接!注:配件连接前请断开主板所有供电,避免敏感电路损坏!1.1 耳机接口主板有一路OTMP 标准四节耳机座J6,具备进行音频输出及录音功能,接入耳机后声音将优先从耳机输出,如下图所示:1.21.2 相机接口MIPI CSI 接口如上图所示,支持OV5648 和OV8858 摄像头模组。接入摄像头模组后,使用系统相机软件打开相机拍照和录像,如下图所示:1.3 以太网接口主板有一路
    Industio_触觉智能 2025-01-20 11:04 194浏览
  • 2024年是很平淡的一年,能保住饭碗就是万幸了,公司业绩不好,跳槽又不敢跳,还有一个原因就是老板对我们这些员工还是很好的,碍于人情也不能在公司困难时去雪上加霜。在工作其间遇到的大问题没有,小问题还是有不少,这里就举一两个来说一下。第一个就是,先看下下面的这个封装,你能猜出它的引脚间距是多少吗?这种排线座比较常规的是0.6mm间距(即排线是0.3mm间距)的,而这个规格也是我们用得最多的,所以我们按惯性思维来看的话,就会认为这个座子就是0.6mm间距的,这样往往就不会去细看规格书了,所以这次的运气
    wuliangu 2025-01-21 00:15 324浏览
  • 临近春节,各方社交及应酬也变得多起来了,甚至一月份就排满了各式约见。有的是关系好的专业朋友的周末“恳谈会”,基本是关于2025年经济预判的话题,以及如何稳定工作等话题;但更多的预约是来自几个客户老板及副总裁们的见面,他们为今年的经济预判与企业发展焦虑而来。在聊天过程中,我发现今年的聊天有个很有意思的“点”,挺多人尤其关心我到底是怎么成长成现在的多领域风格的,还能掌握一些经济趋势的分析能力,到底学过哪些专业、在企业管过哪些具体事情?单单就这个一个月内,我就重复了数次“为什么”,再辅以我上次写的:《
    牛言喵语 2025-01-22 17:10 178浏览
  • 高速先生成员--黄刚这不马上就要过年了嘛,高速先生就不打算给大家上难度了,整一篇简单但很实用的文章给大伙瞧瞧好了。相信这个标题一出来,尤其对于PCB设计工程师来说,心就立马凉了半截。他们辛辛苦苦进行PCB的过孔设计,高速先生居然说设计多大的过孔他们不关心!另外估计这时候就跳出很多“挑刺”的粉丝了哈,因为翻看很多以往的文章,高速先生都表达了过孔孔径对高速性能的影响是很大的哦!咋滴,今天居然说孔径不关心了?别,别急哈,听高速先生在这篇文章中娓娓道来。首先还是要对各位设计工程师的设计表示肯定,毕竟像我
    一博科技 2025-01-21 16:17 159浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦