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