UA編程API是FAST平臺支持軟硬協(xié)同分組處理的基礎?;揪幊藺PI為UA提供了與硬件流水線交互的基本手段。擴展API是面向FAST流水線中特定硬件模塊而設計的API,主要通過對基本API再次封裝實現(xiàn)。擴展API的使用可以大大簡化UA編程的復雜性。本文以SDN交換規(guī)則管理為例,詳細介紹擴展API的優(yōu)點,實現(xiàn)方法和工作流程。
一、擴展API簡介
FAST基本API為FAST流水線中硬件模塊設計者提供了與軟件通信的接口。模塊設計者還應根據(jù)模塊提供的功能,基于基本API為用戶提供擴展的API,以簡化UA編程的復雜性。
(1)擴展API的優(yōu)點
擴展API可以簡化用戶UA編程的復雜性。例如,F(xiàn)AST的SDN交換流水線包含了GPP,GKE,GME,GAC和GOE等功能模塊。UA需要配置GME(通用匹配引擎)模塊的規(guī)則表和GAC(通用動作執(zhí)行)模塊中的動作表以實現(xiàn)對特定報文的match-action操作。UA直接使用fast_ua_hw_rd()和fast_ua_hw_wr()函數(shù)對GME和GAC模塊中的表進行配置存在兩個不便。
一是每次操作必須提供操作地址等底層信息,而這一信息與硬件模塊實現(xiàn)相關。UA使用這些地址對低層配置與SDN交換機需要對轉(zhuǎn)發(fā)層進行抽象的原則相違背;二是由于fast_ua_hw_rd()和fast_ua_hw_wr()函數(shù)每次只能訪問32位數(shù)據(jù),對一條SDN規(guī)則的FlowMod配置需要拆分成訪問不同模塊的多次操作,增加了編程的復雜性。
為簡化SDN規(guī)則管理,可在FAST編程庫中可定義一些專用的數(shù)據(jù)結(jié)構。例如描述SDN網(wǎng)絡中流的flow結(jié)構,對應FlowMod消息的fast_rule結(jié)構等?;谶@些結(jié)構,可擴展UA編程API,為UA編程提供更高層次的抽象,簡化編程的復雜性。
(2)擴展API實現(xiàn)方法
擴展API的實現(xiàn)主要分為兩個步驟。一是為UA編程定義數(shù)據(jù)結(jié)構,屏蔽底層實現(xiàn)細節(jié);二是根據(jù)UA編程需求,設計相應的API函數(shù)。以下仍以SDN交換為例說明。
由于SDN轉(zhuǎn)發(fā)面的管理主要是對規(guī)則進行增加,刪除等操作,因此FAST定義了Fast_rule數(shù)據(jù)結(jié)構,如下所示。因此UA在編程實現(xiàn)SDN的規(guī)則管理時,只需要實現(xiàn)對上述規(guī)則的操作即可,而不需要考慮規(guī)則的具體存儲地址。我們會在基于FAST的SDN交換實現(xiàn)相關文檔中詳細介紹Fast_rule數(shù)據(jù)結(jié)構。
基于Fast_rule數(shù)據(jù)結(jié)構,可以為SDN規(guī)則管理定義如下5個擴展的API。分別實現(xiàn)規(guī)則表的初始化、規(guī)則添加、規(guī)則刪除和規(guī)則打印等功能,如下表所示。
顯然,基于上述擴展API,可以方便的實現(xiàn)對SDN轉(zhuǎn)發(fā)規(guī)則的管理,簡化了UA設計的復雜度。
二、擴展API的實現(xiàn)
下圖以Fast_add_rule()為例,介紹了擴展API的實現(xiàn)流程。其中UA程序?qū)崿F(xiàn)了交換機上的openflow通道功能,需要根據(jù)SDN控制器發(fā)來的Flowmod指令對FAST硬件流水線中的規(guī)則進行管理。
以增加規(guī)則為例,UA首先按照FlowMod消息中包含的規(guī)則和動作信息,構造fast_rule結(jié)構體,然后調(diào)用FAST編程庫中所提供的fast_rule_add()將fast_rule結(jié)構體攜帶的流表配置信息經(jīng)FAST內(nèi)核和FAST驅(qū)動,寫入硬件GME模塊和硬件GAC模塊所關聯(lián)的lookup表中。

圖1 擴展API的執(zhí)行過程
每個FlowMod消息涉及到對FAST硬件流水線中GME和GAC兩個模塊對應的規(guī)則表和action表進行管理,而fast_rule_add()函數(shù)向用戶屏蔽了這一硬件實現(xiàn)細節(jié)。