<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于DWC_ether_qos的以太網驅動開發-包過濾

嵌入式USB開發 ? 來源:嵌入式USB開發 ? 作者:嵌入式USB開發 ? 2023-09-02 09:19 ? 次閱讀

一. 前言

以太網上數據非常多,如果所有數據都接收交給軟件去處理軟件負載會非常重,所以一般只需要接收發給自己的數據即可,過濾掉不必要的數據,這樣軟件只處理自己需要的數據,軟件負擔更小更高效,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~31的MAC地址寄存器的個數

位MACADR64SEL[24]為1表示啟用附加的64~127共64個MAC地址寄存器

位MACADR32SEL[23]為1表示啟用附加的32~63共32個MAC地址寄存器

我這里的配置是

(gdb) x /1xw 0x0116011C

0x116011c: 0x1a0d1122

(gdb)

[24]= 0

[23]= 0

[22:18] = 00011 = 3

所以只有額外的3個MAC地址寄存器,一共4個0是總是有的。

對應的寄存器為

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

MAC_Address(#i)_Low31_1 低32位

這里

MACADR64SEL和MACADR32SEL都為0所以沒有3263,64127的寄存器。

該寄存器需要軟件初始化時配置

注如下表達式中DWC_EQOS_ADD_MAC_ADDR_REG-1應該不需要-1,應該是文檔錯誤,因為

DWC_EQOS_ADD_MAC_ADDR_REG****即表示個數,0總是存在的所以從1開始,n個就是1到n,比如這里為3就是1~3,3個額外的,還有0共4個。

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] 6個bit分別對應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已經配置了,后面還有3個1~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] 設置為1,MAC會丟棄非TCP或UDP 的 IP數據包。必須IPFE時才有效。

IPFE[20] 設置為1使能3層 4層過濾。

VTFE[16] 設置為1使能VLAN Tag過濾

HPF[10] 設置為1使能Hash或者Perfert過濾(即寄存器匹配)

SAF[9] 設置為1使能源地址過濾

SAIF[8] 設置為1 源地址過濾反邏輯,即匹配的丟棄,不匹配的接收。

PCF[7:6]

00:MAC過濾掉所有控制數據包

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

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

11: MAC接收所有通過地址過濾的控制包

DBF[5]: 設置為1不接收廣播包

PM[4]: 設置為1接收所有多播包,即MAC地址的第一個bit為1.

設置為0則由HMC決定。

DAIF[3]: 設置為1則DA匹配之后反邏輯接收,即匹配的不接收。

HMC[2]: 設置為1DA 多播地址根據Hash匹配,否則使用寄存器匹配

HUC[1]: 設置為1DA 單播地址根據Hash匹配,否則使用寄存器匹配

PR[0]: 設置為1則不匹配SA DA都接收,甚至狀態位都清除Rx Status Word

此模式可以作為監控模式,接收所有數據。

4.1 單播目的地址過濾

HUC[1]設置為0

MacAddr1到MacAddr127地址用單獨的使能位來使能。對于MacAddr1到MacAddr31地址,可以通過在寄存器中設置相應的掩碼字節控制位,在與相應的接收DA字節進行比較時屏蔽指定字節。允許對DA進行組地址篩選。MacAddr32到MacAddr127地址沒有掩碼控制,并且將MAC地址的所有6字節與接收到的DA/SA的6字節進行比較

在哈希過濾模式下(當設置了HUC位時),MAC使用64位哈希表對單播地址執行不完美的過濾。對于哈希過濾,MAC使用接收到的目的地地址的高6位CRC來索引哈希表的內容。值00000選擇所選寄存器的位0,值11111選擇哈希表寄存器的位63。如果對應的比特(由6比特CRC指示)被設置為1,則單播分組被認為已經通過了哈希濾波器;否則,數據包被認為未通過哈希過濾器

4.2 多播放目的地址過濾

PM[4]設置為1否則由HMC決定多播的接收。

將多播地址與編程的MAC目的地地址寄存器(1-31)進行比較。還支持組地址篩選

在哈希過濾模式下,MAC使用64位哈希表執行不完美過濾。MAC使用接收到的多播地址的高6位CRC來索引哈希表的內容。值000000選擇所選寄存器的位0,值111111選擇哈希表寄存器的位63。如果對應的比特被設置為1,則多播分組被認為已經通過了哈希過濾器。否則,數據包被認為未通過哈希過濾器

4.3 哈?;蛲昝赖刂泛Y選

HPF[10]配置是使用哈希還是完美地址(寄存器匹配)過濾模式

配合HUC HMC配置多播和單播是使用哈希還是完美地址過濾模式

這適用于單播和多播數據包。如果HPF位被重置,則只有一個濾波器(Hash或Perfect)被應用于接收到的數據包。

4.4廣播過濾

默認情況下,MAC不過濾任何廣播數據包。設置MAC_Packet_Filter寄存器中的DBF位為1不接收廣播包。

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 反邏輯

對于DA和SA過濾,可以通過設置MAC_Packet_filter寄存器的DAIF和SAIF位,在最終輸出時反轉過濾器匹配結果。

DAIF位適用于單播和多播DA數據包。單播或多播目的地地址篩選器的結果在此模式中反轉。類似地,當SAIF比特被設置時,單播SA濾波器的結果被反轉。

五. 其他層級過濾

還有以下過濾,用時可以參考手冊

VLAN過濾

擴展Rx VLAN過濾和路由

擴展Rx VLAN篩選和路由

六. 過濾測試

按照一般的配置DA匹配,接收目的地址DA是本設備MAC地址的包和廣播包。

MAC的默認配置實際就是這樣的。

寄存器0總是使能的,DA匹配,只需要填入本設備MAC地址即可,

低字節先發送如下對應FCF29FE93C18的MAC地址。

MAC_Address0_High,MAC_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地址完全一樣的包。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 驅動器
    +關注

    關注

    51

    文章

    7600

    瀏覽量

    143813
  • 嵌入式
    +關注

    關注

    5006

    文章

    18440

    瀏覽量

    292140
  • 以太網
    +關注

    關注

    40

    文章

    5145

    瀏覽量

    167021
  • 寄存器
    +關注

    關注

    30

    文章

    5167

    瀏覽量

    118227
  • 過濾器
    +關注

    關注

    1

    文章

    415

    瀏覽量

    19189
  • VLAN通信
    +關注

    關注

    0

    文章

    18

    瀏覽量

    5614
收藏 人收藏

    評論

    相關推薦

    基于DWC_ether_qos以太網驅動開發-MAC幀格式介紹

    本文轉自公眾號,歡迎關注 基于DWC_ether_qos以太網驅動開發-MAC幀格式介紹 (qq.com) 一.前言 ? 在以太網
    的頭像 發表于 08-30 09:23 ?1416次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-MAC幀格式介紹

    基于DWC_ether_qos以太網驅動開發-MDIO驅動編寫與測試

    本文轉自公眾號歡迎關注 基于DWC_ether_qos以太網驅動開發-MDIO驅動編寫與測試 一.前言
    的頭像 發表于 08-30 09:37 ?2667次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-MDIO<b class='flag-5'>驅動</b>編寫與測試

    基于DWC_ether_qos以太網驅動開發-描述符鏈表介紹

    本文轉自公眾號歡迎關注 一.描述符概述 1.0 前言 對于DWC Ethernet QoS驅動的編寫來說,初始化完成之后,核心操作就是DMA的描述符鏈表配置(linked list
    的頭像 發表于 08-30 09:39 ?3113次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-描述符鏈表介紹

    基于DWC_ether_qos以太網驅動開發-數據流驗證過程

    轉自公眾號歡迎關注 https://mp.weixin.qq.com/s/klrHhaLMM_0W3FGVwHXFkA 基于DWC_ether_qos以太網驅動開發-數據流驗證過程
    的頭像 發表于 08-31 08:41 ?1312次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-數據流驗證過程

    基于DWC_ether_qos以太網驅動開發-收發驅動編寫與調試

    本文轉自公眾號,歡迎關注 基于DWC_ether_qos以太網驅動開發-收發驅動編寫與調試 (qq.com) https://mp.wei
    的頭像 發表于 09-05 08:47 ?1556次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-收發<b class='flag-5'>驅動</b>編寫與調試

    基于DWC_ether_qos以太網驅動開發-無OS環境移植LWIP

    本文轉自公眾號歡迎關注 基于DWC_ether_qos以太網驅動開發-無OS環境移植LWIP (qq.com) https://mp.weixin.qq.com
    的頭像 發表于 09-06 08:40 ?968次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-無OS環境移植LWIP

    基于DWC_ether_qos以太網驅動開發-LWIP的堆管理介紹

    本文轉自公眾號歡迎關注 基于DWC_ether_qos以太網驅動開發-LWIP的堆管理介紹 (qq.com) https://mp.weixin.qq.com
    的頭像 發表于 09-08 08:40 ?828次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-LWIP的堆管理介紹

    基于DWC_ether_qos以太網驅動開發-RTOS環境移植LWIP與性能測試

    本文轉自公眾號,歡迎關注 基于DWC_ether_qos以太網驅動開發-RTOS環境移植LWIP與性能測試 (qq.com) https://mp.weixin.qq.com
    的頭像 發表于 09-11 11:20 ?1312次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-RTOS環境移植LWIP與性能測試

    基于DWC_ether_qos以太網驅動開發-LWIP在PC上進行開發調試

    本文轉自公眾號歡迎關注 基于DWC_ether_qos以太網驅動開發-LWIP在PC上進行開發調試 (qq.com) https://mp
    的頭像 發表于 09-11 08:40 ?1357次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-LWIP在PC上進行<b class='flag-5'>開發</b>調試

    車載以太網基礎培訓——車載以太網的鏈路層#車載以太網

    車載以太網
    北匯信息POLELINK
    發布于 :2023年09月19日 16:25:21

    電信級以太網QoS的解決思路與方案

    技術繼承了以太網技術成本低、操作簡單、互通性好等優點,并能通過系列新型技術為以太網設備添加電信級性能。為此很多研究機構和設備廠商進行了探索,提出了一些方法。如:具有冗余結構的環狀連接方法,通過ERP/RPR(以太網
    發表于 04-24 09:10

    設計軟件核心以太網服務質量數據手冊免費下載

    本文描述Synopsys設計軟件核心以太網服務質量DWC以太網QoS核心5.10A。DWC以太網
    發表于 10-23 08:00 ?15次下載
    設計軟件核心<b class='flag-5'>以太網</b>服務質量數據手冊免費下載

    DesignWare核心以太網服務質量數據本

      本文檔介紹Synopsys DesignWare核心以太網服務質量(DWC_Ethernet_qos)核心,5.10a。DWC_Ethernet_qos實現了與MAC層相關的以太網
    發表于 03-31 15:11 ?3次下載

    基于DWC_ether_qos以太網驅動開發-軟復位介紹與問題案例

    一般模塊都會有軟復位的功能,軟復位在驅動編寫中很重要。一般初始化時執行軟復位使得模塊進入確定的初始狀態以提高可靠性,異常時也可以重新初始化來恢復,所以軟復位在驅動中一般是必須要做的動作。
    的頭像 發表于 09-02 09:17 ?998次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-軟復位介紹與問題案例

    基于DWC_ether_qos以太網驅動開發-描述符格式介紹

    前面我們介紹了描述符鏈表的工作模式,重點是了解環形鏈表是如何環形的,以及相關的寄存器。驅動編寫就需要更進一步,了解描述符的具體內容,即4個描述符的每個字段的含義。
    的頭像 發表于 09-04 14:14 ?1213次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-描述符格式介紹
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>