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