最近遇到一个问题,虽然应用层使用的系统调用send已经返回成功,而且没有错误日志产生,也没有errno的设置。那是不是代表一定是没有问题?从抓包的结果看,虽然上层应用已经显示发出去,但是实际抓包的时候,还是没有在接口上抓到相应的包!是为什么呢?
通过调查看代码发现,内核对于ipsec的处理过程中,send系统调用,所调用的内核代码的函数链里,有可能将这个err丢失。
如下的一个图示,函数调用:
esp_output_done,这个函数调用xfrm_output_resume,而这个函数的返回值却没有进行处理,造成丢失错误的情况。
所以大家需要注意这种情况。
这个时候需要查看的counter就是
/proc/net/xfrm_state
/proc/net/snmp* 看有没有丢包