---
title: fix parser
description: "对于常见报文类型和常见报文结构，代码里配备了默认的硬件解析器。当硬件解析器支持的协议能够满足用户需求时，用户可以不使用自定义parser，选择使用hydra_parser.hdr架构文件中提供的hdr_fix_parser作为解析器，此时解析将由硬件来完成，可以简化编程并提高性能。"
url: https://www.hikunpeng.com/document/detail/zh/flexda/devguide/dpak_dev0045.html
sourcePath: /source/zh/flexda/devguide/dpak_dev0045.html
indexId: 49c0574893eeef014a867e1b97169c929e99628d5c765a27712068b68b3bce8a44
---
# fix parser

对于常见报文类型和常见报文结构，代码里配备了默认的硬件解析器。当硬件解析器支持的协议能够满足用户需求时，用户可以不使用自定义parser，选择使用hydra_parser.hdr架构文件中提供的hdr_fix_parser作为解析器，此时解析将由硬件来完成，可以简化编程并提高性能。

#### 硬件解析器

硬件解析器支持的默认协议如下所示。


```
header_union l3_union_t {
ipv4_t                ipv4;
ipv6_t                ipv6;
}
header_union l4_union_t {
tcp_t                 tcp;
udp_t                 udp;
icmp_t                icmp;
}
header_union tunnel_union_t {
vxlan_t               vxlan;
geneve_t              geneve;
nvgre_t               nvgre;
}
struct hdr_fix_headers {
ethernet_t            ethernet;
vlan_t                vlan;
l3_union_t            l3;
l4_union_t            l4;
tunnel_union_t        tunnel;
ethernet_t            inner_ethernet;
vlan_t                inner_vlan;
l3_union_t            inner_l3;
l4_union_t            inner_l4;
}
```


**表1 硬件解析器使用场景**

| 场景 | 报文类型 | 最大解析深度 | 备注 |
| --- | --- | --- | --- |
| 非隧道报文 | TCP（TSO）、UDP（UFO）、ICMP | L4 | 无 |
| 非隧道报文 | IPv4，IPv6 | L3 | 无 |
| 非隧道报文 | 其他 | L2 | 无 |
| 隧道报文 | VXLAN、GENEVE | 外层隧道完全解析，隧道内层参见非隧道报文场景 | 不支持两层以上隧道 |
| 隧道报文 | IPIP、GRE | 外层L3 | 无 |


#### 使用示例

- 用户可直接使用hdr_fix_parser()作为parser组件实例化package，此时需要将hdr_fix_headers结构体作为control对应的入参，以在control中使用hdr_fix_parser解析结果。
- 用户不可自定义名为hdr_fix_headers的结构体，不可自定义名为hdr_fix_parser的parser组件，编译器会做相应的检查。


Fix Parser使用示例如下。

```
control MyPrePipe(in hdr_fix_headers hdr) {
/* body omitted*/
}
control MyPostPipe(in hdr_fix_headers hdr) {
/* body omitted*/
}
RX_OVS(
hdr_fix_parser(),
MyPrePipe(),
MyPostPipe()
) main;
```
