概述
在Linux网络栈中,XFRM(Transform)子系统负责实现IPsec等安全协议的功能。其中,xfrm4_mode_tunnel.c
是实现IPv4隧道模式封装的核心模块,为IPv4数据包提供隧道模式的封装和解封装能力。本文将深入分析这一模块的实现机制。
模块架构与功能
该模块通过注册到XFRM框架中的隧道模式处理程序,为IPv4协议提供以下核心功能:
-
输出路径封装:为外出数据包添加外层IP头
-
输入路径解封装:处理接收到的隧道数据包
-
GSO支持:提供隧道模式下的分段卸载处理
-
ECN/DSCP处理:正确处理显式拥塞通知和差分服务代码点
核心实现机制
输出封装处理
c
static int xfrm4_mode_tunnel_output(struct xfrm_state *x, struct sk_buff *skb) {// 保存内层头部信息skb_set_inner_network_header(skb, skb_network_offset(skb));skb_set_inner_transport_header(skb, skb_transport_offset(skb));// 调整skb头部指针以容纳外层IP头skb_set_