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