FAST编程库Libua.alinreg.aFast软件编程提供标准编程APIFast编程API主要分为三类。一是用户UA编程API,用户可在UA进程中直接调用这些API函数实现与FAST平台的通信,包含UA管理、分组收发和FAST流水线管理三类;二是Fast平台管理API,实现对Fast硬件平台中FPGA OS的管理;三是扩展API,即面向FAST流水线中特定硬件模块特定功能而设计的API

一、UA编程API

UA编程使用的基本API如下表所示。如果用户没有向硬件流水线中添加自定义的模块,那么用户UA只使用以下6个函数就可以实现与Fast平台的交互。如果用户向Fast流水线中添加了定制的模块,则需要根据所添加硬件模块的功能对编程API进行扩充。

为了简化UA对硬件流水线模块的管理,Fast编程API提供了读写硬件模块的函数。在Fast编程库函数实现时,上述读写函数均被转换成控制类的Fast分组发往硬件流水线,并通过流水线的Cin/Cout控制环操作实现对分组的读写。

 

API类型 API函数 功能说明
UA管理 fast_ua_init() UAFast平台注册mid
fast_ua_destroy() UAFast平台注销mid
UA分组收发 fast_ua_send() UAFast平台发送分组
fast_ua_recv() UAFast平台接收分组
硬件流水线访问 fast_ua_hw_rd() UA读硬件流水线模块
fast_ua_hw_wr() UA写硬件流水线模块

 

上表中的6API函数的原型和参数说明如下。

1int fast_ua_init(int mid, fast_ua_recv_callbackcallback);

输入参数mid为用户为UA设置的模块号,该模块号是FAST平台对软硬件模块的唯一标识。根据FAST规范,软件UAmid范围是128-255,由于128默认为内核协议栈,因此用户UAmid范围可设置为129-255。用户需保证mid参数不与系统中其他UA的参数冲突,如果发生冲突,函数返回值为1,表明注册失败。输入参数callbackFast平台在接收到发往用户UA的分组时的回调函数,用户需要在程序中对callback函数进行定义。如果UA注册成功,函数返回值为0,否则返回非0值。

2void fast_ua_destroy(void);

用户UA在退出时需执行的操作,主要是通知FAST平台释放向UA分配的mid编号。

3int fast_ua_send(struct fast_packet *pkt,int pkt_len)

用户UA调用该函数向Fast平台发送分组。其中pkt是指向fast_packet数据结构的指针。该数据结构包含了指向分组缓冲区的指针以及分组的目的mid等参数。执行成功返回报文长度,执行失败返回-1。用户在调用该函数时,需要注意以下两点。一是如果UA想直接将分组从Fast平台的网络接口发出,需要将dmid设置为5,即将目的模块设置为Fast硬件流水线中的通用输出模块(GOE),同时设置OutportOuttype字段,指明输出的类型(单播/组播/广播)以及输出端口号或组播ID;二是如果UA想将分组发送给其他的UA,则需要将dmid设置为UAmid编号。一个用户UA如何获取其他UAmid不是Fast规范考虑的问题。

4void fast_ua_recv()

UA启动接收FAST报文。每当Fast内核接收到目的mid为用户UAmid的分组后,会通过Netlink机制将分组拷贝到用户空间,并调用UA初始化时设置好的callback回调函数对报文进行处理。

5u32 fast_ua_hw_rd(u8 dmid, u32addr, u32 mask);

其中dmid为读操作的硬件流水线模块号,addr为模块内部的读地址偏移量。mask为读数据的掩码,目前未使用,用户应将mask设置为0

6void fast_ua_hw_wr(u8dmid,u32 addr,u32 value,u32 mask);

其中dmid为写操作的硬件流水线模块号,addr为模块内部的写地址偏移量,value为写数据的值。mask为写数据的掩码,目前未使用,用户需设置为0

二、Fast平台管理API

      Fast平台管理API主要针对不同平台的FPGAOS管理功能,因此不同的FAST平台具有不同的平台管理API实现。包括硬件平台初始化管理,接口管理等。由于用户UA编程不会使用平台管理API,此处不再详细介绍。

三、扩展API

      根据Fast流水线的规范,用户可以根据分组处理的需求对Fast硬件流水线中的模块进行扩展和定制。因此对于不同硬件流水线模块也会产生不同的扩展API

      典型的例子是基于FastSDN交换实现中,硬件流水线包含了GPPGKEGMEGACGOE5个功能模块。用户UA可能需要对这些功能模块进行管理。例如配置GME模块的规则表和GAC模块中的动作表等。虽然规则表和动作表在模块中具有固定的偏移地址,UA可使用fast_ua_hw_rd()fast_ua_hw_wr()函数对其管理,但这样十分复杂。为此,可基于基础的fast_ua_hw_rd()fast_ua_hw_wr()函数,再封装成fast_rule_add()fast_rule_del()等扩展的API,简化用户UA编程的复杂性。

      关于Fast通用模块的扩展API我们将在后续文章中介绍。

分类: FAST Spec

发表评论

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