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

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;