鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

flexda_custom_extract_hdr

接口功能

用户从报文中提取头信息。

接口格式

int flexda_custom_extract_hdr ( void *ctx, const struct flexda_custom_info_t *info)

参数说明

参数名

参数类型

入参/出参

说明

ctx

void *

入参

自定义上下文的地址。提取的头信息也保存其中。

info

struct flexda_custom_info_t *

入参

dpak-ovs提供flexda-ovs读取使用的信息。详情请参见表1

函数返回值

int

出参

若函数执行成功则返回0,若函数执行失败则返回错误码。

表1 struct flexda_custom_info_t

属性类型

属性名称

属性描述

uint16_t

input_port_id

当前OVS卸载报文的源input端口。

dp_packet *

pkt

当前OVS卸载的报文。

rte_flow_action *

src_actions

当前OVS卸载的软件流表action。

使用实例

int flexda_custom_extract_hdr(void *ctx, flexda_custom_info_t info)
{
    struct custom_packet_ctx *custom_ctx = (struct custom_packet_ctx *)ctx;
    struct flexda_sub_hdr *out_header = &custom_ctx->out_header;  // 框架提供的默认报文头信息结构体,搭配报文解析api使用
    struct dp_packet *pkt = info.pkt;
    struct flexda_extract_ctx pkt_parser;  // 框架提供的默认报文解析结构体,搭配报文解析api使用
    pkt_parser.pkt_itr = (uint8_t *)flexda_dp_packet_data(pkt);
    pkt_parser.pkt_end = (uint8_t *)flexda_dp_packet_data(pkt) + flexda_dp_packet_size(pkt);
    if (custom_ctx->vlan_poped == 1) {
        // 调用框架提供的默认报文头解析API,将报文头信息解析保存在报文自定义上下文中
        if (!flexda_extract_hdr(&pkt_parser, out_header)) { // 解析不成功
            return -EINVAL;
        }
        return 0; // 解析成功
    }
    return false;// 标志位不为1
}