DPDK IP重组

1ip_reassembly功能介绍                                        

ip_reassembly模块是在IP层将分片的IPv4和IPv6的报文进行重组。它是通过rte_ipv4_frag_reassemble_packett()和rte_ipv6_frag_reassemble_packet ()两个函数进行重组。

2分片与IP首部

1、对于每份IP数据报来说,都有一个标识字段,该值在分片时被复制到每个片中。

2、标志字段用其中一个bit表示“更多的片”,除最后一片外,其他每个分片都要设置为1。

3、片偏移字段指的是该片偏移原始数据报开始处的位置。

4、数据报被分片后,每个片的总长度要改为该片的长度值。

5、标志字段中有一个bit表示“不分片”,如果该位1,IP将不对数据报进行分片。

    标识字段(ip_hdr->packet_id):标识特定数据报的分片

    标志字段(ip_off的3个高位比特  flag_offset &IPV4_HDR_MF_FLAG  )

    偏移字段(ip_off的13个低位比特   (uint16_t)(flag_offset& IPV4_HDR_OFFSET_MASK))

3关于rte_ipv4_frag_reassemble_packett()和rte_ipv6_frag_reassemble_packet ()函数

1、  通过ip_frag_find()函数在rte_ip_frag_tbl链表中查找需要重组的分片包,分片包结构ip_frag_key进行关联,结构体三个成员分别赋值通过源IP、目的IP,IPV4_KEYLEN、IPV6_KEYLEN两个宏集及packet_id,packet_id是IP报文里的标志字段,如果IP报文大于MTU值,就会进行分片,而packet_id就会被复制到每个分片包中。ip_frag_find()返回ip_frag_pkt结构体,在查找过程中,如果没有找到相同的key,就会在链表中创建一个新节点或者是替换超时的节点。

2、  通过ip_frag_process()函数将需要分片的报文进行重组处理。通过ip_frag_inuse()将处理完成的key进行删除。

3、  rte_ipv4_frag_reassemble_packett()和rte_ipv6_frag_reassemble_packet ()函数如果重组成功,则返回一个rte_mbuf结构体,重组失败则返回NULL。

4重组流程

1、在重组过程中,我们通过m->ol_flags &(PKT_RX_IPV4_HDR)来判断是否是IPV4报文重组,通过m->ol_flags &(PKT_RX_IPV6_HDR | PKT_RX_IPV6_HDR_EXT)来判断是否是IPV6重组。

2、  通过rte_ipv4_frag_pkt_is_fragmented()和rte_ipv6_frag_get_ipv6_fragment_header()判断是否是分片报文

3、  通过rte_ipv4_frag_reassemble_packet()和rte_ipv6_frag_reassemble_packet()进行重组处理。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值