F和我AST編程庫Libua.a和linreg.a爲Fast軟件編短工程提供标準編程API。Fast編程API主要分(fēn)爲三類。一(yī)話線是用戶UA編程API,用戶可在UA進程中(zhōng)直接調用這些API函數實算朋現與FAST平台的通信,包含UA管理、分(fē腦能n)組收發和FAST流水線管理三類;二是Fast平台管理API,實現對Fast算近硬件平台中(zhōng)FPGA OS的管理;三是擴展API,即面還身向FAST流水線中(zhōng)特定硬件模塊特定功能而煙微設計的API。
一(yī)、UA編程API
&n山他bsp; UA編程使用的基本API如下(愛短xià)表所示。如果用戶沒有向硬件流水線中(zhōng)添林司加自定義的模塊,那麽用戶UA隻使用以下(xià)6個函數就可以實現與Fast平花畫台的交互。如果用戶向Fast流水線中(zhōng)添加了市國定制的模塊,則需要根據所添加硬件模塊的功吃樹能對編程API進行擴充。
&nbs在朋p; 爲了簡化UA對硬件流水線模塊的管為唱理,Fast編程API提供了讀寫硬件模塊的函數。在Fast編村中程庫函數實現時,上述讀寫函數均被轉換成控制類的Fast分(fēn)組發往硬件流日了水線,并通過流水線的Cin/Cout控制環操作實現對分(fēn)組的讀寫。
那行
上表中(zhōng)的6個API函數的原型和參數說山刀明如下(xià)。
(1)int 暗藍fast_ua_init(int mid, f民文ast_ua_recv_callbackcallback);
&n樹暗bsp; 輸入參數mid爲用戶爲UA設置的區放模塊号,該模塊号是FAST平台對軟硬件模塊的唯一(畫了yī)标識。根據FAST規範,軟件UA的mid範圍是128-255,由雪知于128默認爲内核協議棧,因此用戶UA的mid範圍可設呢從置爲129-255。用戶需保證mid參數不與系統中(zh快答ōng)其他UA的參數沖突,如果發生(shēng)沖突河現,函數返回值爲1,表明注冊失敗。輸入參數call飛通back爲Fast平台在接收到發往用戶UA的分(fēn)組時的回制事調函數,用戶需要在程序中(zhōng)對callback函數算腦進行定義。如果UA注冊成功,函數返回值爲0,否則返湖做回非0值。
(2)了志void fast_ua_destroy(void);
用戶UA在光很退出時需執行的操作,主要是通知(zhī)FAST平台釋放(fàng)向了國UA分(fēn)配的mid編号。
(3)i美木nt fast_ua_send(struct fast_pac裡暗ket *pkt,int pkt_len);
門少 用戶UA調用該函數向Fast平台發送分(fēn)組。其門花中(zhōng)pkt是指向fast_packet數據結構的指針。上你該數據結構包含了指向分(fēn)組緩沖區的指針以及分(fēn)組的目山有的mid等參數。執行成功返回報文長度,執行失敗返回-1。用戶票紙在調用該函數時,需要注意以下(xià)兩謝樹點。一(yī)是如果UA想直接将分(fēn)組從Fas吧船t平台的網絡接口發出,需要将dmid設置爲5,即将目的模塊設置爲坐器Fast硬件流水線中(zhōng)的通用輸出模塊(GOE),同時設這不置Outport和Outtype字段,指明輸出的類明動型(單播/組播/廣播)以及輸出端口号或組播ID;二是如果UA想将分(fēn)組河南發送給其他的UA,則需要将dmid設置爲了腦UA的mid編号。一(yī)個用戶UA如何獲取其他UA的mid不是Fast規範說長考慮的問題。
(4)void fast_ua_藍討recv();
 腦文; UA啓動接收FAST報文。每當Fast内核接收到目的mid爲她民用戶UAmid的分(fēn)組後,會通過Netlin現校k機制将分(fēn)組拷貝到用戶空間,并睡妹調用UA初始化時設置好的callback回調函數對報文進行處場司理。
(5)u32 fast_u上的a_hw_rd(u8 dmid, u32addr, u32 ma黑街sk);
&懂亮nbsp;其中(zhōng)dmid爲讀操店外作的硬件流水線模塊号,addr爲模塊内部的這數讀地址偏移量。mask爲讀數據的掩碼,目前未使用,用暗紙戶應将mask設置爲0。
(6)void fast_u遠暗a_hw_wr(u8dmid,u32 addr,u32 value,u32 m慢關ask);
&畫照nbsp;其中(zhōng)dmid爲寫操作的硬件流水線模塊号,addr爲模塊自坐内部的寫地址偏移量,value爲寫數據的值。mask爲寫數據的理媽掩碼,目前未使用,用戶需設置爲0。
三、擴展API
&nb很店sp; 根據Fast流水線的規範,用戶可以根據分(fēn)組子喝處理的需求對Fast硬件流水線中(zhōng)的模塊進行擴女車展和定制。因此對于不同硬件流水線模塊也會産生場爸(shēng)不同的擴展API。
&n但醫bsp;典型的例子是基于Fast的SDN交換實現中(zhōng),件商硬件流水線包含了GPP,GKE,GME,GAC和GOE5個功能模塊。用戶U雜不A可能需要對這些功能模塊進行管理。例如配置G醫國ME模塊的規則表和GAC模塊中(zhōng)的動作表等。雖然規則表和動老志作表在模塊中(zhōng)具有固定的偏移地址,UA可使用fast_ua_h間南w_rd()和fast_ua_hw_wr()函數對其管理,但可開這樣十分(fēn)複雜(zá)。爲此,可基于基礎的fast_ua_h說司w_rd()和fast_ua_hw_wr站問()函數,再封裝成fast_rule_add()和fast_在房rule_del()等擴展的API,簡化用戶UA編程的複慢湖雜(zá)性。
友弟 關于Fast通用模塊的擴展API我(wǒ)(wǒ)們将在後續文但厭章中(zhōng)介紹。