【Linux4.1.12源码分析】vxlan报文发送之udp_tunnel_xmit_skb

udp_tunnel_xmit_skb函数是OVS2.5发送UDP报文的内核入口,在调用该函数之前,headroom空间需要准备完成,且vxlan头已经创建,skb结构体的data指向vxlan头的首地址。

1、udp_tunnel_xmit_skb函数

int udp_tunnel_xmit_skb(struct rtable *rt, struct sock *sk, struct sk_buff *skb,
			__be32 src, __be32 dst, __u8 tos, __u8 ttl,
			__be16 df, __be16 src_port, __be16 dst_port,
			bool xnet, bool nocheck)
{
	struct udphdr *uh;

	__skb_push(skb, sizeof(*uh));		//skb增加UDP头,skb报文的headroom大小在vxlan头封装前就完成准备,线性区的空间是充足的
	skb_reset_transport_header(skb);	//重置报文(外层报文)的transport header的偏移
	uh = udp_hdr(skb);

	uh->dest = dst_port;			//设置目的端口
	uh->source = src_port;			//设置源端端口
	uh->len = htons(skb->len);		//设置UDP头中的长度,该长度包括UDP头 + vxlan头 + 用户数据(payload)

	udp_set_csum(nocheck, skb, src, dst, skb->len);		//UDP头csum计算

	return iptunnel_xmit(sk, rt, skb, src, dst, IPPROTO_UDP,	//IP层封装tunnel发送报文
			     tos
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值