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

圖1 擴展API的(de)執行過程
每個(gè)FlowMod消息涉及到(dào)對FAST硬件流水線中GME和(hé / huò)GAC兩個(gè)模塊對應的(de)規則表和(hé / huò)action表進行管理,而(ér)fast_rule_add()函數向用戶屏蔽了(le/liǎo)這(zhè)一硬件實現細節。