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

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