0731-84728105
15116127200
四行(xíng)代碼定乾坤:硬件二層交換機(jī)設計與實現
發布時間:2022-11-04
     “我OpenBox又回來了!” 沉寂了16個月,終于又提筆(bǐ)開始寫《硬件二層交換設計與實現》。從軟件設計到硬件設計需要這麽長(cháng)時間嗎?答案是肯定的(de),不僅需要,而且這點時間還隻能初入Verilog代碼編程之門。 但從網絡實驗教學(xué)的(de)角度來看,這是不可(kě)接受的(de)。故我們想換個思路,走走捷徑。然而這一(yī)走,便走了整整16月有(yǒu)餘。 所幸略有(yǒu)小成,與君分享,共勉自(zì)學(xué)、自(zì)研、自(zì)證之艱辛與快樂(yuè)。
     A)P4與Tofino
     書上或網上能找到的(de)內(nèi)容請大家自(zì)行(xíng)查找了解。見:https://p4.org
     B)FAST全軟件可(kě)編程平台
     FAST架構在我們之前的(de)文章(zhāng)中有(yǒu)介紹,該平台也是一(yī)種典型的(de)SDN架構設計,硬件數據平面主要包括FPGA OS和(hé)UM兩部分,核心邏輯處理(lǐ)在UM模塊中。UM又分成了5個不同邏輯功能流水線, 用戶可(kě)以針對此流水線進行(xíng)改造升級或擴展新的(de)流水級功能。然而,使用Verilog語言來開發FPGA芯片功能着實是一(yī)件比較有(yǒu)難度的(de)事情,至少在成為(wèi)一(yī)個合格的(de)Verilog代碼工程師之前來說,确實有(yǒu)比較漫長(cháng)和(hé)艱辛的(de)路程要走。
     受P4編程思想的(de)啓發,我們決定将FAST架構中的(de)UM部分更換成具備P4開發能力的(de)硬件邏輯部件。故該平台依然采用多核CPU加FPGA架構,P4邏輯全采用FPGA編寫,所有(yǒu)功能和(hé)指令邏輯全在硬件實現。
     C)基本功能
     1.分組前96字節內(nèi),小于128的(de)任意bit位,任意多個PHV對象定義;
     2.支持32字節Metadata對象編程,含16字節用戶自(zì)定義Metadata內(nèi)容;
     3.分組前60字節內(nèi),任意bit位對象查表匹配,精确匹配與帶掩碼匹配,匹配字段支持輸入端口等Metadata字段;
     4.每動作支持14條指令,支持加、減、與、或、異或、取反等操作;
     5.每個指令執行(xíng)器中含16個臨時寄存器,支持臨時變量暫存與讀取,位寬支持1到64位;
     6.支持有(yǒu)狀态的(de)存儲寄存器對象定義與操作,存儲寄存器位寬支持1到64位,最大個數支持128個。支持多個寄存器對象編程;
     7.支持對分組進行(xíng)協議插入與删除,長(cháng)度支持1到16字節;
     8.動作與指令均支持參數化配置,即可(kě)運行(xíng)前實例化,也可(kě)運行(xíng)時調整;
     9.支持32種不同邏輯業務處理(lǐ)功能在線編譯、在線加載、在線配置、在線卸載,不影響其他業務邏輯;
     10.提供P4後端編譯器,支持用戶P4代碼編譯;
     11.提供P4運行(xíng)時配置管理(lǐ)工具,支持用戶流表配置、動作配置和(hé)寄存器初始配置。
     擁有(yǒu)上述平台編程功能後,對硬件的(de)設計要求便會變得較為(wèi)簡單。原來要花較長(cháng)時間,寫較多代碼的(de)功能,現在可(kě)以簡單、快速的(de)實現。
     A)設計原理(lǐ)
     從交換機(jī)的(de)幾個功能步驟開始,先實現源MAC地(dì)址的(de)學(xué)習。從平台功能分析,使用寄存器部件比較合适。 拟定義一(yī)個端口與MAC地(dì)址的(de)映射表,存儲在寄存器對象中,使用源MAC地(dì)址作為(wèi)寄存器對象的(de)索引,分組輸入端口号作為(wèi)該索引位置的(de)值。在使用目的(de)MAC查表時,亦使用MAC地(dì)址作為(wèi)索引進行(xíng)查找,即可(kě)獲取該地(dì)址學(xué)習存儲的(de)端口号。
     由于MAC地(dì)址為(wèi)48位,本平台支持寄存器的(de)深度有(yǒu)限,故本案例中僅取MAC地(dì)址的(de)後4位作為(wèi)索引。故實驗演示時,要求測試主機(jī)的(de)MAC地(dì)址尾數不同。
     單播地(dì)址可(kě)以采用上述思路進行(xíng)設備,那組播與廣播地(dì)址呢(ne),我們本案例拟采用全泛洪的(de)方式先來實現一(yī)個基礎版本。 想要做(zuò)組播功能可(kě)以将組播協議配置規則送CPU處理(lǐ),CPU學(xué)習到入組和(hé)退組信息後,通過P4的(de)運行(xíng)時工具進行(xíng)組播MAC與相應端口号的(de)規則配置即可(kě)。
     B)代碼實現

action learn_forward()
{
     MAC_PORT.regwrite((u8)hdr.eth.smac&0xF,std_meta.ioport);
     std_meta.ioport = MAC_PORT.regread((u8)hdr.eth.dmac&0xF);
}

單播自(zì)學(xué)習與轉發

action mb_cast()
{
     MAC_PORT.regwrite((u8)hdr.eth.smac&0xF,std_meta.ioport);
     std_meta.ioport = ~std_meta.ioport;
}

多播泛洪
以上為(wèi)硬件二層交換機(jī)(原型系統)全部業務邏輯功能代碼。是的(de),就是這四行(xíng)代碼!!!!
      A)軟件核心代碼

      B)編譯器結果

      C)硬件配置

      D)Ping通測試

C:\Users\Administrator>ping 192.168.1.198
正在 Ping 192.168.1.198 具有(yǒu) 32 字節的(de)數據:
來自(zì) 192.168.1.198 的(de)回複: 字節=32 時間<1ms TTL=127
來自(zì) 192.168.1.198 的(de)回複: 字節=32 時間<1ms TTL=127
來自(zì) 192.168.1.198 的(de)回複: 字節=32 時間<1ms TTL=127
來自(zì) 192.168.1.198 的(de)回複: 字節=32 時間<1ms TTL=127

     物質守恒、能力守恒,苦難亦然守恒。
     為(wèi)了讓學(xué)生們在我們平台編寫硬件邏輯少些痛苦,我們艱苦奮鬥了16個月,對P4的(de)原理(lǐ)、代碼和(hé)編譯器進行(xíng)了仔細琢磨、分析和(hé)領悟。我們認為(wèi)P4是一(yī)門較為(wèi)優秀的(de)編程語言,更是一(yī)種硬件編程的(de)創新思路和(hé)具體表達形式。我們無法去(qù)破解P4的(de)硬件實現,固然也無從參考,而是領悟P4編程方式的(de)精髓理(lǐ)念後,采用了原有(yǒu)FAST架構和(hé)部分邏輯調整,并配置P4後端編譯适配,打造了現如(rú)今的(de)支持P4的(de)FAST架構可(kě)編程平台。
     本平台結合了FAST架構與P4可(kě)編程的(de)雙重優勢。支持用戶在最底層硬件到最高(gāo)層軟件全方便的(de)編程與驗證,而且編程語言均使用C語言和(hé)類似C的(de)P4語言,進一(yī)步降低(dī)了學(xué)習與使用難度。
     下一(yī)步,做(zuò)個硬件路由器?或者您有(yǒu)更美好的(de)想法,我們可(kě)以試一(yī)試!
     有(yǒu)需要開發可(kě)編程硬件(FPGA、ASIC等)的(de)P4後端編譯器,或獲得本平台介紹相關源碼的(de)客戶,請與15116127200(微信同号)聯系,閱讀更多FAST相關文章(zhāng)請進入以下公衆号。