Say what you do and do what you say

0%

松散源路由发包失败问题

问题

近期遇到松散源路由报文通信失败,通过systemtap可以很快定位报文丢弃在何处。

直接上探测脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
probe begin()
{
print("Begin probe..\n")
}
probe end()
{
print("End probe.\n")
}
probe kernel.function("icmp_echo")
{
print_backtrace()//调用栈回溯
printf("%s\n",pp())//调用点
}
probe kernel.statement("*@net/ipv4/ip_input.c:341")
{
printf("%s\n",pp())
}
probe kernel.function("ip_options_compile").return
{
printf("ip_options_compile return:%d\n",$return)
}
probe timer.ms(10000)
{
exit()
}

在报文路径上增加探测点直接定位出丢包位置。

分析

这个具体问题是在函数static inline bool ip_rcv_options(struct sk_buff *skb)中如果源路由未打开则直接drop。

打开内核中源路由选项,通信正常。