Linux kernel Linux内核中的IPsec-如何找出';发生什么事了

Linux kernel Linux内核中的IPsec-如何找出';发生什么事了,linux-kernel,ipsec,Linux Kernel,Ipsec,我正在为微控制器编写一个IPsec实现,我想使用运行Debian Lenny的标准Linux设备对其进行测试。这两个设备应在隧道模式下使用IPsec ESP保护它们之间的通信。使用setkey手动设置按键。在处理IPsec数据包时没有(或者至少应该没有)用户空间程序。现在我想看看Linux内核如何处理我创建的数据包。要查看原始数据包,我使用tcpdump捕获它们,并使用wireshark分析它们 获取有关IPsec处理的调试信息的最佳方法是什么 我如何判断内核是否接受了数据包 如何查看数据包被

我正在为微控制器编写一个IPsec实现,我想使用运行Debian Lenny的标准Linux设备对其进行测试。这两个设备应在隧道模式下使用IPsec ESP保护它们之间的通信。使用
setkey
手动设置按键。在处理IPsec数据包时没有(或者至少应该没有)用户空间程序。现在我想看看Linux内核如何处理我创建的数据包。要查看原始数据包,我使用
tcpdump
捕获它们,并使用
wireshark
分析它们

  • 获取有关IPsec处理的调试信息的最佳方法是什么
  • 我如何判断内核是否接受了数据包
  • 如何查看数据包被丢弃的原因

您可以插入XFRM(或者可能是
ipv4/esp.c
)内核代码,以便在正确的位置打印调试消息

例如,在
net/ipv4/esp.c
中存在一个函数
esp_input()
,该函数有一些错误情况,但您将看到最有趣的内容是
xfrm/*.c
代码

也就是说,我在与Linux互操作自定义IPSec时没有遇到问题。遵循43xx规范并通过wireshark验证数据包是否正确输出似乎做得很好。如果您遇到问题并且不想对内核进行测试,那么您可以设置iptables规则并计算每个点上(各种类型)的数据包数量

最后,确保您实际添加了安全策略(SP)和安全关联(SA),并正确设置了防火墙规则