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

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