第一次看到以太網(wǎng)物理地址格式時,感覺很平淡。像看到IPV4和IPV6報文的標頭部分一樣沒有感覺。但真正去理解以太網(wǎng)物理地址某些比特含義時,是在幾年前的一次吹牛中體會到的。這次吹牛,差點毀掉了一直以來信譽良好的好名聲。
事情起源
在本文章中,曾經(jīng)提到過,TSN(Time Sensitive Networking,TSN)和TTE(Time-Triggered Ethernet)的起源及應(yīng)用領(lǐng)域,在那篇文章中,還提到了可以嘗試著把TTE看作是密閉空間內(nèi)使用的TSN的說法。事實上,這種說法是非常不準確的。二者雖然都對業(yè)務(wù)進行了是否實時性的區(qū)分,但實現(xiàn)時卻采用了截然不同的兩種方法。
TTE和TSN實時業(yè)務(wù)的保障方式
1、保障業(yè)務(wù)的實時性采用的是調(diào)度表的方式,對TT業(yè)務(wù)的收發(fā)嚴格按照調(diào)度表執(zhí)行;詳見上一篇公眾號文章:一個人,一個想法,一家公司和即將被改變的全世界網(wǎng)絡(luò)
2、TSN中對業(yè)務(wù)實時性保障的方式不是通過調(diào)度表的方式,而是提供資源預(yù)留,即流預(yù)留協(xié)議(SRP)。TSN中的流預(yù)留協(xié)議(SRP)包括廣播、注冊和解注冊三步。在流的整個傳輸路徑上采用協(xié)商機制,提前保留出流量傳輸所需要的帶寬,如果交換端口帶寬允許,則建立連接,否則連接失敗。 同時SRP協(xié)議規(guī)定將75%的帶寬分配給實時流量,25%的帶寬分配給盡力傳BE流量,所以TSN為低優(yōu)先級流量的發(fā)送提供了機會,某種程度上可以緩解低優(yōu)先級流量“饑餓”現(xiàn)象。(關(guān)于TSN的帶寬預(yù)留機制可以參見IEEE 802.1Qat和Qcc標準)。
而本文所說的事情就與TSN中的資源預(yù)留協(xié)議的實現(xiàn)相關(guān)。準確的說是與車載時間敏感網(wǎng)絡(luò)中的IEEE802.1Qat協(xié)議相關(guān),即多流注冊協(xié)議(Multiple Stream Registration Protocol,MSRP)。
任務(wù)要求
當時接到的任務(wù)是,通過XILINX的通用Zedboard開發(fā)平臺(本公眾號所有案例均在此平臺上實現(xiàn)),實現(xiàn)兩種數(shù)據(jù)幀的捕獲操作。
捕獲過程是指:數(shù)據(jù)幀通過網(wǎng)口進入FPGA,然后由FPGA通過字段匹配出需要提交給CPU的某種類型的數(shù)據(jù)幀,然后將該數(shù)據(jù)幀通過中斷的方式提交給CPU進行分析。
需要捕獲交給CPU的幀類型有兩種:1、MSRP報文:目的MAC為01-80-C2-00-00-0E,以太網(wǎng)類型為0x22EA;2、MVRP報文:目的MAC為01-80-C2-00-00-21,以太網(wǎng)類型為0x88F5;
要求:搭建一個演示平臺,通過CPU可以配置FPGA內(nèi)部用來識別捕獲幀特征的寄存器,數(shù)據(jù)幀的類型和目的MAC地址可任意配置,然后將上述兩種FPGA內(nèi)部產(chǎn)生的數(shù)據(jù)幀通過捕獲通道交給CPU。
看到了上述任務(wù)要求后感覺很簡單,這種事情做過的太多了。從HINOC項目到各種定制的星載交換系統(tǒng),都有類似的需求。于是在被人問需要多久做好時,毫不猶豫的爽快的說道:很簡單,明天就給你!
出現(xiàn)問題
接到任務(wù)是下午,吃過晚飯后就找了兩個學(xué)生開干。Zedboard板子以及操作系統(tǒng)環(huán)境甚至連FPGA的代碼基本都是現(xiàn)成的,需要做的只是少許修改,首先要實現(xiàn)通過操作系統(tǒng)去配置FPGA上相應(yīng)的寄存器內(nèi)容(MAC地址寄存器),但就在Linux操作系統(tǒng)嘗試著通過TCP/IP協(xié)議棧配置FPGA的MAC地址時就出現(xiàn)了問題,一般的MAC地址都能很容易的配置成功,但就是前面需要捕獲給CPU的MAC,也就是MSRP報文和MVRP報文都不能配置成功。
經(jīng)過反復(fù)的嘗試,發(fā)現(xiàn)MAC地址第一個字節(jié)最低位為1的MAC地址都無法正確配置。每次都返回set mac fail。
但在設(shè)置第一個字節(jié)最低位為0的地址時,都能夠設(shè)置成功。

調(diào)試中遇到問題是家常便飯,對于第一次遇見這樣奇怪的問題,一下子激起了大家的好奇心。決定一定要弄明白是怎么回事。
分析及查找問題
1、分析問題
通過Linux命令行配置目的MAC地址失敗,原因肯定在該數(shù)據(jù)的通路上。這個配置數(shù)據(jù)經(jīng)過命令行輸入后,會依次經(jīng)過TCP/IP協(xié)議棧、驅(qū)動,然后再由AXI總線寫入FPGA內(nèi)部自定義的MAC寄存器。如果出現(xiàn)問題,那么肯定是這個通路沒有走通。那到底是哪一步?jīng)]有走通呢?
2、查看FPGA內(nèi)部寄存器是否被正確寫入
為了定位問題,我們先從FPGA內(nèi)部Verilog代碼描述的專門接收操作系統(tǒng)配置下來的目的MAC寄存器查起。為了定位,我們把該寄存器及相關(guān)的寫操作及寄存器內(nèi)容都作為ChipScope的監(jiān)測信號。在命令行輸入配置信息后,看寫該寄存器的寫使能信號是否被觸發(fā),結(jié)果發(fā)現(xiàn)在寫命令輸入之后,寫使能信號沒有被觸發(fā),該寄存器值仍然是復(fù)位值。也就是說,MAC地址沒有寫入FPGA內(nèi)部的相應(yīng)寄存器中,甚至連寫該寄存器的動作都沒有。
3、看驅(qū)動是否接收到命令行給出的配置數(shù)據(jù)
從操作系統(tǒng)Linux命令行給出來的配置MAC指令,經(jīng)過操作系統(tǒng)處理之后,最后肯定要寫到驅(qū)動上,由驅(qū)動執(zhí)行寫FPGA內(nèi)部寄存器的動作才能把數(shù)據(jù)寫入FPGA內(nèi)部寄存器。這里的驅(qū)動,屬于我們自己寫的SNMP網(wǎng)管軟件的一部分,SNMP網(wǎng)管功能主要包括驅(qū)動和應(yīng)用程序兩個部分,這里的應(yīng)用程序大家可以簡單的理解為就是剛才的命令行輸入的配置目的MAC地址的指令。而驅(qū)動則包括字符型驅(qū)動和網(wǎng)絡(luò)設(shè)備驅(qū)動兩部分。字符型驅(qū)動一般用來與應(yīng)用程序進行交互。而網(wǎng)絡(luò)設(shè)備驅(qū)動,主要是插入捕獲功能等,本文開始提到的捕獲MSRP報文及MVRP報文就是通過網(wǎng)絡(luò)設(shè)備驅(qū)動執(zhí)行的。
于是,修改C代碼,在字符驅(qū)動相關(guān)函數(shù)中加入打印信息,命令行配置目的MAC地址后,該驅(qū)動函數(shù)未被調(diào)用。也就是說,配置信息連驅(qū)動層面都沒有到,下一步就猜測:有可能配置的目的MAC地址被TCP/IP協(xié)議棧給過濾掉了。
定位問題
經(jīng)過上述分析和查找定位,基本上定位在配置的目的MAC地址可能被TCP/IP協(xié)議棧給過濾掉了。這個時候我們才想起來,會不會是我們給出的目的MAC地址不合法啊?為什么總是第一個字節(jié)最低位為1的目的MAC地址會被TCP/IP協(xié)議棧過濾掉(文中開頭提到的MVRP和MSRP報文MAC地址的第一個字節(jié)最低位都為1)呢?
我們先來看一下MAC地址的定義及每一個bit的含義吧。

MAC地址含義
1、MAC地址是48bit二進制的地址,前24位為供應(yīng)商代碼,后24為序列號;2、單播地址:第一字節(jié)最低位為0,如00-e0-fc-00-00-06;3、多播地址:第一字節(jié)最低位為1,如01-e0-fc-00-00-06;4、廣播地址:48位全1,如ff-ff-ff-ff-ff-ff。
通過上面的描述,基本確認了問題,也就是說TCP/IP協(xié)議棧會把第一個字節(jié)最低位為1的MAC地址,也就是多播地址,自動的給過濾掉。會把配置多播地址為某個板子的MAC地址的Linux指令定義為無效指令。
找到并定位到問題以后,已經(jīng)晚上12點了。。。原本以為半小時就能搞定的問題,竟然花了四個小時才定位到問題。
解決問題
既然TCP/IP協(xié)議棧會把這類MAC地址過濾掉,那么我們不走TCP/IP協(xié)議棧不就可以了嗎?
好在之前做過的項目中預(yù)留了可以旁路掉TCP/IP協(xié)議棧的通路,直接將配置數(shù)據(jù)交給驅(qū)動,寫進FPGA相應(yīng)的寄存器中。
這樣,捕獲給CPU的觸發(fā)條件,也就是MAC地址就順利的配到FPGA內(nèi)部了。好在,捕獲通道很順利,很容易的就把目的地址為任意MAC地址的以太網(wǎng)幀都順利的交給CPU了。(因為當時未保留MVRP和MSRP報文捕獲成功的截圖,隨便找了一張上課演示的圖片)

等一切都搞定的時候,已經(jīng)到了凌晨一點多了。
哦,對了。本文中需要將Zedboard開發(fā)板設(shè)置為從SD卡啟動模式,板子上的跳帽位置如下:
同時,在這種模式下,不加載操作系統(tǒng)的純FPGA代碼上板調(diào)試是不受影響的。
結(jié)論
1、無論任何時候,都不要隨便的說大話。要保持低調(diào)且謙虛謹慎的態(tài)度去面對任何一次科學(xué)實驗;
2、MAC地址中第一個字節(jié)的最低位為1表示該地址是組播地址,是不能通過操作系統(tǒng)經(jīng)過TCP/IP協(xié)議棧配置給FGPA板子的。這是文中的結(jié)論,求大佬們給出更專業(yè)的解釋。
3、本文是日常項目調(diào)試中出現(xiàn)的眾多問題中非常普通的一個,希望大家也能夠養(yǎng)成問題記錄的好習慣,引用一位跟我同名同姓老鄉(xiāng)的話來說就是:日有寸進,得寸進尺,日積月累,必有所成!
-
FPGA
+關(guān)注
關(guān)注
1660文章
22424瀏覽量
636749 -
寄存器
+關(guān)注
關(guān)注
31文章
5609瀏覽量
130054
原文標題:從一次TSN相關(guān)協(xié)議實現(xiàn)中了解以太網(wǎng)MAC地址的含義
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
什么是R&TTE指令?
R&TTE認證的指令是什么?
CE認證中R&TTE指令是什么?
新指令RED與舊指令R&TTE的差異分析
數(shù)據(jù)分析報表無法響應(yīng)業(yè)務(wù)變化?
TSN 和現(xiàn)場總線:選型要點
基于信息技術(shù)的軍械保障業(yè)務(wù)流程再造研究
EVAL-猛禽-TSNEK RapID 平臺 - TSN 評估套件
華為智能業(yè)務(wù)分析網(wǎng)絡(luò)解決方案實時保障業(yè)務(wù)的極致體驗
基于TSN 802.1AS協(xié)議的時間同步分析(7種延時,1次厘清)
TSN時間敏感網(wǎng)絡(luò)技術(shù)入門級解決方案TSN?BasicSolution
TSN Qav測試實踐
TTE和TSN業(yè)務(wù)的保障方式及分析問題
評論