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

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