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