0731-84728105
15116127200
FAST軟件編程基礎(1)Fast_packet數據結構
發布時間:2019-4-18
     FAST的(de)核心優點是支持軟硬協同的(de)分組處理(lǐ)。在FAST架構中,用戶在Linux用戶空間編寫的(de)進程稱為(wèi)UA(User Application)。在FAST硬件流水線确定後,用戶可(kě)通過UA編程實現對硬件流水線的(de)控制,從硬件流水線接收分組,或将分組發往硬件流水線進行(xíng)處理(lǐ)和(hé)轉發。
一(yī)、Fast_packet數據結構
     Fast_packet是UA編程必須使用的(de)核心數據結構,UA通過FAST編程API收發的(de)分組均使用Fast_packet結構定義。fast_packet主要由用戶模塊(UM)頭标識,對齊标志以及完整的(de)以太網報文三部分組成,如(rú)下所示。
     Fast報文分為(wèi)數據報文和(hé)控制報文兩種類型。數據報文的(de)data中存儲完整以太網報文,用于UA和(hé)FAST流水線之間,以及UA之間分組的(de)交換;Fast控制報文用于UA 和(hé)Fast流水線之間的(de)控制通信,如(rú)UA對流水線中相應模塊中寄存器、計數器和(hé)控制表的(de)讀寫等操作。控制報文的(de)data值為(wèi)空。
     Flag字段為(wèi)2字節,主要有(yǒu)兩個作用。一(yī)是将14字節的(de)以太網頭補齊為(wèi)16字節,将IP分組的(de)頭對齊到16字節邊界,便于軟硬件的(de)處理(lǐ)。二是FAST內(nèi)核軟件使用該标志來标記FAST報文。用戶可(kě)以不初始化和(hé)使用該字段。
二、um_metadata結構定義
     FAST數據報文中的(de)um_metadata結構負責在軟硬件模塊之間傳遞分組的(de)元數據信息,主要包含報文時間戳,序号,源目的(de)MID,報文長(cháng)度,端口号等,詳細定義如(rú)下:
     UA編程時,需要對um_metadata結構體中的(de)discard、pktdst、pktsrc、outport、dstmid、srcmid、inport、flowID、len等字段進行(xíng)初始化。
     discard表示報文是否丢棄,默認為(wèi)0,表示不丢棄,置1時表示丢棄,如(rú)執行(xíng)ddos防禦策略時,異常報文流要丢棄,此時discard必須設置為(wèi)1;
     pktdst、pktsrc标識報文的(de)輸入輸出方向,0表示輸出到網絡端口,1表示輸出到CPU。如(rú)UA處理(lǐ)後的(de)報文需要發送到網絡中,則應該設置pktsrc為(wèi)1,pktdst為(wèi)0;
     inport、outport标識報文從設備的(de)物理(lǐ)端口輸入輸出,一(yī)般是結合流表規則一(yī)起使用;
     dstmid、srcmid标識報文下次處理(lǐ)的(de)目的(de)模塊編号和(hé)上次處理(lǐ)時的(de)模塊編号。如(rú)UA處理(lǐ)後的(de)報文需要發送到網絡中,則dstmid設置為(wèi)5;
     flowID字段由FAST UM填充,标識着報文命中了哪一(yī)條流表;
     len表示整個FAST報文長(cháng)度(包含UM頭,對齊标志和(hé)完整以太網報文)。FAST平台報文緩存區最大為(wèi)2048,完整以太網報文的(de)MTU不超過1518。
     Pkttype字段表示報文類型,0為(wèi)數據報文,1為(wèi)控制報文。
三、ctl_metadata結構定義
     FAST平台控制報文對應的(de)控制信息為(wèi)ctl_metadata,包含值、掩碼、地(dì)址、源目的(de)MID、類型、報文類型等,詳細定義如(rú)下。
      需要注意的(de)是,用戶在UA編程時不需要自(zì)己構造Fast控制報文,而是通過調用FAST編程API提供的(de)fast_ua_hw_rd()函數來實現對硬件流水線的(de)管理(lǐ)。FAST 編程API的(de)使用說明将在後續文章(zhāng)中介紹。