0731-84728105
15116127200
四行代码定乾坤:硬件二层交换机设计与实现
发布时间:2022-11-04
     “我OpenBox又(yòu)回来了!” 沉寂了16个月,终于又(yòu)提筆(bǐ)开始写《硬件二层交换设计与实现》。从软件设计到硬件设计需要这么長(cháng)时间吗?答(dá)案是肯定的,不仅需要,而且这点时间还只能(néng)初入Verilog代码编程之门。 但从网络实验教學(xué)的角度来看,这是不可(kě)接受的。故我们想换个思路,走走捷径。然而这一走,便走了整整16月有(yǒu)余。 所幸略有(yǒu)小(xiǎo)成,与君分(fēn)享,共勉自學(xué)、自研、自证之艰辛与快乐。
     A)P4与Tofino
     书上或网上能(néng)找到的内容请大家自行查找了解。见:https://p4.org
     B)FAST全软件可(kě)编程平台
     FAST架构在我们之前的文(wén)章中有(yǒu)介绍,该平台也是一种典型的SDN架构设计,硬件数据平面主要包括FPGA OS和UM两部分(fēn),核心逻辑处理(lǐ)在UM模块中。UM又(yòu)分(fēn)成了5个不同逻辑功能(néng)流水線(xiàn), 用(yòng)户可(kě)以针对此流水線(xiàn)进行改造升级或扩展新(xīn)的流水级功能(néng)。然而,使用(yòng)Verilog语言来开发FPGA芯片功能(néng)着实是一件比较有(yǒu)难度的事情,至少在成為(wèi)一个合格的Verilog代码工程师之前来说,确实有(yǒu)比较漫長(cháng)和艰辛的路程要走。
     受P4编程思想的启发,我们决定将FAST架构中的UM部分(fēn)更换成具备P4开发能(néng)力的硬件逻辑部件。故该平台依然采用(yòng)多(duō)核CPU加FPGA架构,P4逻辑全采用(yòng)FPGA编写,所有(yǒu)功能(néng)和指令逻辑全在硬件实现。
     C)基本功能(néng)
     1.分(fēn)组前96字节内,小(xiǎo)于128的任意bit位,任意多(duō)个PHV对象定义;
     2.支持32字节Metadata对象编程,含16字节用(yòng)户自定义Metadata内容;
     3.分(fēn)组前60字节内,任意bit位对象查表匹配,精确匹配与带掩码匹配,匹配字段支持输入端口等Metadata字段;
     4.每动作支持14条指令,支持加、减、与、或、异或、取反等操作;
     5.每个指令执行器中含16个临时寄存器,支持临时变量暂存与读取,位宽支持1到64位;
     6.支持有(yǒu)状态的存储寄存器对象定义与操作,存储寄存器位宽支持1到64位,最大个数支持128个。支持多(duō)个寄存器对象编程;
     7.支持对分(fēn)组进行协议插入与删除,長(cháng)度支持1到16字节;
     8.动作与指令均支持参数化配置,即可(kě)运行前实例化,也可(kě)运行时调整;
     9.支持32种不同逻辑业務(wù)处理(lǐ)功能(néng)在線(xiàn)编译、在線(xiàn)加载、在線(xiàn)配置、在線(xiàn)卸载,不影响其他(tā)业務(wù)逻辑;
     10.提供P4后端编译器,支持用(yòng)户P4代码编译;
     11.提供P4运行时配置管理(lǐ)工具,支持用(yòng)户流表配置、动作配置和寄存器初始配置。
     拥有(yǒu)上述平台编程功能(néng)后,对硬件的设计要求便会变得较為(wèi)简单。原来要花(huā)较長(cháng)时间,写较多(duō)代码的功能(néng),现在可(kě)以简单、快速的实现。
     A)设计原理(lǐ)
     从交换机的几个功能(néng)步骤开始,先实现源MAC地址的學(xué)习。从平台功能(néng)分(fēn)析,使用(yòng)寄存器部件比较合适。 拟定义一个端口与MAC地址的映射表,存储在寄存器对象中,使用(yòng)源MAC地址作為(wèi)寄存器对象的索引,分(fēn)组输入端口号作為(wèi)该索引位置的值。在使用(yòng)目的MAC查表时,亦使用(yòng)MAC地址作為(wèi)索引进行查找,即可(kě)获取该地址學(xué)习存储的端口号。
     由于MAC地址為(wèi)48位,本平台支持寄存器的深度有(yǒu)限,故本案例中仅取MAC地址的后4位作為(wèi)索引。故实验演示时,要求测试主机的MAC地址尾数不同。
     单播地址可(kě)以采用(yòng)上述思路进行设备,那组播与广播地址呢(ne),我们本案例拟采用(yòng)全泛洪的方式先来实现一个基础版本。 想要做组播功能(néng)可(kě)以将组播协议配置规则送CPU处理(lǐ),CPU學(xué)习到入组和退组信息后,通过P4的运行时工具进行组播MAC与相应端口号的规则配置即可(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);
}

单播自學(xué)习与转发

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

多(duō)播泛洪
以上為(wèi)硬件二层交换机(原型系统)全部业務(wù)逻辑功能(néng)代码。是的,就是这四行代码!!!!
      A)软件核心代码

      B)编译器结果

      C)硬件配置

      D)Ping通测试

C:\Users\Administrator>ping 192.168.1.198
正在 Ping 192.168.1.198 具有(yǒu) 32 字节的数据:
来自 192.168.1.198 的回复: 字节=32 时间<1ms TTL=127
来自 192.168.1.198 的回复: 字节=32 时间<1ms TTL=127
来自 192.168.1.198 的回复: 字节=32 时间<1ms TTL=127
来自 192.168.1.198 的回复: 字节=32 时间<1ms TTL=127

     物(wù)质守恒、能(néng)力守恒,苦难亦然守恒。
     為(wèi)了让學(xué)生们在我们平台编写硬件逻辑少些痛苦,我们艰苦奋斗了16个月,对P4的原理(lǐ)、代码和编译器进行了仔细琢磨、分(fēn)析和领悟。我们认為(wèi)P4是一门较為(wèi)优秀的编程语言,更是一种硬件编程的创新(xīn)思路和具體(tǐ)表达形式。我们无法去破解P4的硬件实现,固然也无从参考,而是领悟P4编程方式的精髓理(lǐ)念后,采用(yòng)了原有(yǒu)FAST架构和部分(fēn)逻辑调整,并配置P4后端编译适配,打造了现如今的支持P4的FAST架构可(kě)编程平台。
     本平台结合了FAST架构与P4可(kě)编程的双重优势。支持用(yòng)户在最底层硬件到最高层软件全方便的编程与验证,而且编程语言均使用(yòng)C语言和类似C的P4语言,进一步降低了學(xué)习与使用(yòng)难度。
     下一步,做个硬件路由器?或者您有(yǒu)更美好的想法,我们可(kě)以试一试!
     有(yǒu)需要开发可(kě)编程硬件(FPGA、ASIC等)的P4后端编译器,或获得本平台介绍相关源码的客户,请与15116127200(微信同号)联系,阅读更多(duō)FAST相关文(wén)章请进入以下公众号。

服務(wù)热線(xiàn)