UA编程API是FAST平台支持软硬协同分(fēn)组处理(lǐ)的基础。基本编程API為(wèi)UA提供了与硬件流水線(xiàn)交互的基本手段。扩展API是面向FAST流水線(xiàn)中特定硬件模块而设计的API,主要通过对基本API再次封装实现。扩展API的使用(yòng)可(kě)以大大简化UA编程的复杂性。本文(wén)以SDN交换规则管理(lǐ)為(wèi)例,详细介绍扩展API的优点,实现方法和工作流程。
一、扩展API简介
FAST基本API為(wèi)FAST流水線(xiàn)中硬件模块设计者提供了与软件通信的接口。模块设计者还应根据模块提供的功能(néng),基于基本API為(wèi)用(yòng)户提供扩展的API,以简化UA编程的复杂性。
(1)扩展API的优点
扩展API可(kě)以简化用(yòng)户UA编程的复杂性。例如,FAST的SDN交换流水線(xiàn)包含了GPP,GKE,GME,GAC和GOE等功能(néng)模块。UA需要配置GME(通用(yòng)匹配引擎)模块的规则表和GAC(通用(yòng)动作执行)模块中的动作表以实现对特定报文(wén)的match-action操作。UA直接使用(yòng)fast_ua_hw_rd()和fast_ua_hw_wr()函数对GME和GAC模块中的表进行配置存在两个不便。
一是每次操作必须提供操作地址等底层信息,而这一信息与硬件模块实现相关。UA使用(yòng)这些地址对低层配置与SDN交换机需要对转发层进行抽象的原则相违背;二是由于fast_ua_hw_rd()和fast_ua_hw_wr()函数每次只能(néng)访问32位数据,对一条SDN规则的FlowMod配置需要拆分(fēn)成访问不同模块的多(duō)次操作,增加了编程的复杂性。
為(wèi)简化SDN规则管理(lǐ),可(kě)在FAST编程库中可(kě)定义一些专用(yòng)的数据结构。例如描述SDN网络中流的flow结构,对应FlowMod消息的fast_rule结构等。基于这些结构,可(kě)扩展UA编程API,為(wèi)UA编程提供更高层次的抽象,简化编程的复杂性。
(2)扩展API实现方法
扩展API的实现主要分(fēn)為(wèi)两个步骤。一是為(wèi)UA编程定义数据结构,屏蔽底层实现细节;二是根据UA编程需求,设计相应的API函数。以下仍以SDN交换為(wèi)例说明。
由于SDN转发面的管理(lǐ)主要是对规则进行增加,删除等操作,因此FAST定义了Fast_rule数据结构,如下所示。因此UA在编程实现SDN的规则管理(lǐ)时,只需要实现对上述规则的操作即可(kě),而不需要考虑规则的具體(tǐ)存储地址。我们会在基于FAST的SDN交换实现相关文(wén)档中详细介绍Fast_rule数据结构。
基于Fast_rule数据结构,可(kě)以為(wèi)SDN规则管理(lǐ)定义如下5个扩展的API。分(fēn)别实现规则表的初始化、规则添加、规则删除和规则打印等功能(néng),如下表所示。
显然,基于上述扩展API,可(kě)以方便的实现对SDN转发规则的管理(lǐ),简化了UA设计的复杂度。
二、扩展API的实现
下图以Fast_add_rule()為(wèi)例,介绍了扩展API的实现流程。其中UA程序实现了交换机上的openflow通道功能(néng),需要根据SDN控制器发来的Flowmod指令对FAST硬件流水線(xiàn)中的规则进行管理(lǐ)。
以增加规则為(wèi)例,UA首先按照FlowMod消息中包含的规则和动作信息,构造fast_rule结构體(tǐ),然后调用(yòng)FAST编程库中所提供的fast_rule_add()将fast_rule结构體(tǐ)携带的流表配置信息经FAST内核和FAST驱动,写入硬件GME模块和硬件GAC模块所关联的lookup表中。

图1 扩展API的执行过程
每个FlowMod消息涉及到对FAST硬件流水線(xiàn)中GME和GAC两个模块对应的规则表和action表进行管理(lǐ),而fast_rule_add()函数向用(yòng)户屏蔽了这一硬件实现细节。