【Linux4.1.12源码分析】VXLAN之remcsum实现分析

本文深入分析Linux 4.1.12内核中VXLAN的remcsum实现。在发送端,vxlan_xmit_skb函数构建了vxlan头,并处理了csum信息。而在接收端,vxlan_gro_receive和skb_gro_remcsum_process函数协同工作,完成校验和的重新计算。
摘要由CSDN通过智能技术生成

根据之前VXLAN之csum和remcsum实现分析(发包)的分析,由csum配置决定发送端是否计算UDP层的csum。 remcsum会在vxlan头中保存相关信息,然后在接收端进行处理,先看发送端如何构造vxlan头信息。

vxlan_xmit_skb函数(片段,发送方向)

	if (type & SKB_GSO_TUNNEL_REMCSUM) {				//配置remcsum场景
		u16 hdrlen = sizeof(struct vxlanhdr);			//vxlan头长度
		u32 data = (skb_checksum_start_offset(skb) - hdrlen) >>	//内层mac+ip头长度再除2, 长度值为偶数,除2信息不会丢失。 减去vxlan头
			   VXLAN_RCO_SHIFT;			        //是因为当前的报文已经增加了vxlan头,所以要减去。

		if (skb->csum_offset == offsetof(struct udphdr, check))	//判断是否为UDP报文,data与上0x80
			data |= VXLAN_RCO_UDP;

		vxh->vx_vni |= htonl(data);			//data值为低8位值
		vxh->vx_flags |= htonl(VXLAN_HF_RCO);		//vxlan头的flag增加VXLAN_HF_RCO标记

		if (!skb_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值