UA编程APIFAST平台支持软硬协同分组处理的基础。基本编程APIUA提供了与硬件流水线交互的基本手段。扩展API是面向FAST流水线中特定硬件模块而设计的API,主要通过对基本API再次封装实现。扩展API的使用可以大大简化UA编程的复杂性。本文以SDN交换规则管理为例,详细介绍扩展API的优点,实现方法和工作流程。

一、扩展API简介

      FAST基本APIFAST流水线中硬件模块设计者提供了与软件通信的接口。模块设计者还应根据模块提供的功能,基于基本API为用户提供扩展的API,以简化UA编程的复杂性。

1)扩展API的优点

扩展API可以简化用户UA编程的复杂性。例如,FASTSDN交换流水线包含了GPPGKEGMEGACGOE等功能模块。UA需要配置GME(通用匹配引擎)模块的规则表和GAC(通用动作执行)模块中的动作表以实现对特定报文的match-action操作。UA直接使用fast_ua_hw_rd()fast_ua_hw_wr()函数对GMEGAC模块中的表进行配置存在两个不便。

一是每次操作必须提供操作地址等底层信息,而这一信息与硬件模块实现相关。UA使用这些地址对低层配置与SDN交换机需要对转发层进行抽象的原则相违背;二是由于fast_ua_hw_rd()fast_ua_hw_wr()函数每次只能访问32位数据,对一条SDN规则的FlowMod配置需要拆分成访问不同模块的多次操作,增加了编程的复杂性。

为简化SDN规则管理,可在FAST编程库中可定义一些专用的数据结构。例如描述SDN网络中流的flow结构,对应FlowMod消息的fast_rule结构等。基于这些结构,可扩展UA编程API,为UA编程提供更高层次的抽象,简化编程的复杂性。

2)扩展API实现方法

扩展API的实现主要分为两个步骤。一是为UA编程定义数据结构,屏蔽底层实现细节;二是根据UA编程需求,设计相应的API函数。以下仍以SDN交换为例说明。

       由于SDN转发面的管理主要是对规则进行增加,删除等操作,因此FAST定义了Fast_rule数据结构,如下所示。因此UA在编程实现SDN的规则管理时,只需要实现对上述规则的操作即可,而不需要考虑规则的具体存储地址。我们会在基于FASTSDN交换实现相关文档中详细介绍Fast_rule数据结构。

 

struct fast_rule{

       struct  flow key;           /* 规则内容存储结构*/

       struct  flow mask;              /*规则掩码设置结构,key一一对应*/

       u32  priority;               /*规则的优先级设置*/

       u32  valid;                          /*规则的有效标志设置*/

       u32  action;                        /*规则所对应的执行动作*/

 

       /*此前数据必须要写入到硬件*/

       u32  flow_stats_len;           /* 流表信息长度*/

       u64  *flow_stats_info;   /*流表信息存储指针位置*/

       u32  *tmp;                          /*S4系统中,上面变量指针大小为32*/

       u64  cookie;                        /*用来存储流的cookie信息,软件使用*/

       u64  cookie_mask;             /*用来存储流cookie的掩码信息,软件使用*/

       u32  md5[4];                      /* MD5  */    

       u32  pad[18];               /*总长256B,此为确保数据结构大小做的填充*/

};

 

 

 

基于Fast_rule数据结构,可以为SDN规则管理定义如下5个扩展的API。分别实现规则表的初始化、规则添加、规则删除和规则打印等功能,如下表所示。

API类型 API函数 功能说明
规则初始化 init_rule() 将硬件流表规则清空,并写入默认的动作操作指令
规则添加 fast_add_rule() 将规则添加到硬件模块中,规则索引由系统维护
fast_modify_rule() 将规则添加到硬件模块中,规则索引由用户维护
规则删除 fast_del_rule() 将规则在硬件模块中删除
规则打印 print_hw_rule() 打印硬件模块中的规则

    显然,基于上述扩展API,可以方便的实现对SDN转发规则的管理,简化了UA设计的复杂度。

二、扩展API的实现

下图以Fast_add_rule()为例,介绍了扩展API的实现流程。其中UA程序实现了交换机上的openflow通道功能,需要根据SDN控制器发来的Flowmod指令对FAST硬件流水线中的规则进行管理。

以增加规则为例,UA首先按照FlowMod消息中包含的规则和动作信息,构造fast_rule结构体,然后调用FAST编程库中所提供的fast_rule_add()fast_rule结构体携带的流表配置信息经FAST内核和FAST驱动,写入硬件GME模块和硬件GAC模块所关联的lookup表中。

 

扩展API的执行过程

 每个FlowMod消息涉及到对FAST硬件流水线中GMEGAC两个模块对应的规则表和action表进行管理,而fast_rule_add()函数向用户屏蔽了这一硬件实现细节。

分类: FAST Spec

1 条评论

Winters · 2019年5月17日 上午10:50

good job

发表评论

电子邮件地址不会被公开。 必填项已用*标注