概述
在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_