&n黑影bsp; FAST編程庫Libu雜高a.a和linreg.a為(wèi)Fast軟件編程提供标準編程API。Fas道書t編程API主要分為(wèi)三類。一是用戶UA編程API兒如,用戶可在UA進程中直接調用這些API函數實現與FA樂飛ST平台的通(tōng)信,包含UA管理、分吃科組收發和FAST流水線管理三類;二是Fast平台管理A場筆PI,實現對Fast硬件平台中FPGA OS的子是管理;三是擴展API,即面向FAST流水線中河火特定硬件模塊特定功能而設計的API。
信資
一、UA編程API
UA樂小編程使用的基本API如(rú)下表所示。如(rú)果用戶沒有向硬件流水線睡藍中添加自定義的模塊,那麼用戶UA隻使用以下6個函數就可以實現與Fast平台的交了也互。如(rú)果用戶向Fast流水線中添加了定制的模塊,媽美則需要根據所添加硬件模塊的功能對編程API樹朋進行擴充。
&nb家笑sp; 為(wèi)了簡化UA對硬件流水線模塊靜風的管理,Fast編程API提供了讀寫硬件模塊的函數。懂鐘在Fast編程庫函數實現時(shí),上述讀寫函數均被轉換成控制類的關筆Fast分組發往硬件流水線,并通(tōng)過流水線又輛的Cin/Cout控制環操作實現對分組的讀寫。
上表中的6個API函數的原型和參數說(shu村草ō)明如(rú)下。
購那(1)int fast_ua_init(int mid, f報中ast_ua_recv_callbackcall慢請back);
輸入參數作見mid為(wèi)用戶為(wèi)UA設置的模塊号,該模塊号是FAST平台去光對軟硬件模塊的唯一标識。根據FAST規範,軟件UA的mid範圍是128-255了城,由于128默認為(wèi)内核協議棧,因通是此用戶UA的mid範圍可設置為(wèi)129-255。用戶需保證mi空兒d參數不(bù)與系統中其他(tā)UA的參數沖突,如(rú)果發生沖突,函數舞志返回值為(wèi)1,表明注冊失敗。輸入參數callback為(wèi)F兒鄉ast平台在接收到發往用戶UA的分組時(shí什就)的回調函數,用戶需要在程序中對callback函數進行定義。如(r木謝ú)果UA注冊成功,函數返回值為(wèi)0,否則返回非0值。
年空
(2)void fast_請師ua_destroy(void);
用她年戶UA在退出時(shí)需執行的操作,主要是通(tōng)知FAS哥黑T平台釋放向UA分配的mid編号。
(3)int fast_ua_se刀慢nd(struct fast_packet *pkt,int pkt_白地len);
用戶UA調哥相用該函數向Fast平台發送分組。其中pkt是指向fast_pack來女et數據結構的指針。該數據結構包含了指向分組緩沖區的指針以及分組的目的舊中mid等參數。執行成功返回報文長(cháng)錯冷度,執行失敗返回-1。用戶在調用該函數時(shí),音數需要注意以下兩點。一是如(rú)果UA想直接将分組從Fast明村平台的網絡接口發出,需要将dmid設置為(wèi)5,即多章将目的模塊設置為(wèi)Fast硬件流水線中的通(tōng)用輸工市出模塊(GOE),同時(shí)設置Out員內port和Outtype字段,指明輸出的類型(內又單播/組播/廣播)以及輸出端口号或組播ID;二是如(rú)果UA想将分組發送給門討其他(tā)的UA,則需要将dmid設置為(wèi)UA的mid編号。一個用內飛戶UA如(rú)何獲取其他(tā)UA的mid不(bù又兒)是Fast規範考慮的問題。
&nbs銀玩p;(4)void fast_ua_recv();
U鄉森A啟動接收FAST報文。每當Fast内核接收到目的mid為(wè姐森i)用戶UAmid的分組後,會(huì)動亮通(tōng)過Netlink機制将分組拷金她貝到用戶空間,并調用UA初始化時(shí都快)設置好(hǎo)的callback回調函數對報文進行處理。報樂
(5)u32 fast_ua_h些山w_rd(u8 dmid, u32addr, u3日姐2 mask);
日員 其中dmid為(wèi)讀操作的硬件房場流水線模塊号,addr為(wèi)模塊内部的讀地址偏移量你樂。mask為(wèi)讀數據的掩碼,目前未使用,用戶應将mask設置為(w會電èi)0。
 站友;(6)void fast_ua_hw_wr(u8dmid,u32 addr,我通u32 value,u32 mask);
其民那中dmid為(wèi)寫操作的硬件流水線模塊号,ad城去dr為(wèi)模塊内部的寫地址偏移量,value為(wèi)寫數據的值。ma樹銀sk為(wèi)寫數據的掩碼,目前未使用,用戶需設置為窗暗(wèi)0。
三、擴展API
&n科國bsp; 根據Fast流水線的規西黃範,用戶可以根據分組處理的需求對Fast硬件流水線中的模塊進行擴展和定制。路為因此對于不(bù)同硬件流水線模塊也會(huì)産生不(bù)同的擴費用展API。
 店雜; 典型的例子(zǐ)是基于Fas制音t的SDN交換實現中,硬件流水線包含了GPP,GKE,GM花靜E,GAC和GOE5個功能模塊。用戶UA可能需要對這些功能模塊進行管理。例如購理(rú)配置GME模塊的規則表和GAC模塊中的動作表等。吧雜雖然規則表和動作表在模塊中具有固定的偏移地址,UA可線船使用fast_ua_hw_rd()和fast_ua_hw_wr()函大山數對其管理,但這樣十分複雜。為(wèi)此,可基于基礎的fast_ua_女視hw_rd()和fast_ua_hw_wr()函數,再封裝成fast_rul子冷e_add()和fast_rule_del()等擴問問展的API,簡化用戶UA編程的複雜性。
&n兒時bsp; 關于Fast通(tōng)用模塊的擴展API我們(men)将在後能志續文章中介紹。