---
title: flexda_custom_extract_hdr
description: "用户从报文中提取头信息。"
url: https://www.hikunpeng.com/document/detail/zh/flexda/api/dpak_api026.html
sourcePath: /source/zh/flexda/api/dpak_api026.html
indexId: c9d029abb5b23fee0d0bc055fa830a01e9169eaf8ab28d31436d5009c635faf938
---
# 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
}
```
