【在线急等】Linux网络内核相关的问题?
我一直在做Android L2TP/IPsec 这块的代码,之前跟综上层没发现啥问题,后来我跟了下内核部分,
内核是:Linux2.6.35.3 的。
每次都是到L2TP发送SCCRQ的部分就发不出去,然后我就跟内核,总是在查找安全路由的时候被分到一个黑洞路由,然后我就看了看代码,代码大概是下面这个样子的,每次net->xfrm.sysctl_larval_drop总是通过,然后就制做了一个黑洞路由。
if (route == NULL && num_xfrms > 0) { /* The only case when xfrm_bundle_lookup() returns a * bundle with null route, is when the template could * not be resolved. It means policies are there, but * bundle could not be created, since we don't yet * have the xfrm_state's. We need to wait for KM to * negotiate new SA's or bail out with error.*/ if (net->xfrm.sysctl_larval_drop) { /* EREMOTE tells the caller to generate * a one-shot blackhole route. */ dst_release(dst); xfrm_pols_put(pols, drop_pols); XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTNOSTATES); return make_blackhole(net, family, dst_orig); } ..... }static void __net_init __xfrm_sysctl_init(struct net *net){ net->xfrm.sysctl_aevent_etime = XFRM_AE_ETIME; net->xfrm.sysctl_aevent_rseqth = XFRM_AE_SEQT_SIZE; net->xfrm.sysctl_larval_drop = 1;//改的这里 net->xfrm.sysctl_acq_expires = 30;}static void __net_init __xfrm_sysctl_init(struct net *net){ net->xfrm.sysctl_aevent_etime = XFRM_AE_ETIME; net->xfrm.sysctl_aevent_rseqth = XFRM_AE_SEQT_SIZE; net->xfrm.sysctl_larval_drop = 0;//改的这里 net->xfrm.sysctl_acq_expires = 30;}
12-06 13:21:46.610 W/Kernel-Dmesg( 0): <4>[ 4563.545298] [<c15bfeb7>] ip_push_pending_frames+0x271/0x2e4
12-06 13:21:46.610 W/Kernel-Dmesg( 0): <4>[ 4563.545338] [<c15da561>] udp_push_pending_frames+0x27f/0x2e0
12-06 13:21:46.610 W/Kernel-Dmesg( 0): <4>[ 4563.545374] [<c15db3bf>] ? udp_sendmsg+0x440/0x53a
12-06 13:21:46.610 W/Kernel-Dmesg( 0): <4>[ 4563.545411] [<c15db3de>] udp_sendmsg+0x45f/0x53a
12-06 13:21:46.610 W/Kernel-Dmesg( 0): <4>[ 4563.545453] [<c15e0608>] ? rcu_read_lock+0x0/0x2b
12-06 13:21:46.610 W/Kernel-Dmesg( 0): <4>[ 4563.545490] [<c15e0608>] ? rcu_read_lock+0x0/0x2b
12-06 13:21:46.610 W/Kernel-Dmesg( 0): <4>[ 4563.545530] [<c122709f>] ? get_parent_ip+0xb/0x31
12-06 13:21:46.610 W/Kernel-Dmesg( 0): <4>[ 4563.545567] [<c15e0cf5>] inet_sendmsg+0x47/0x50
12-06 13:21:46.610 W/Kernel-Dmesg( 0): <4>[ 4563.545606] [<c1576a44>] sock_sendmsg+0xc0/0xdb
12-06 13:21:46.610 W/Kernel-Dmesg( 0): <4>[ 4563.545648] [<c122435c>] ? __wake_up+0x32/0x3b
12-06 13:21:46.610 W/Kernel-Dmesg( 0): <4>[ 4563.545688] [<c14e82c3>] ? logger_aio_write+0x262/0x277
12-06 13:21:46.610 W/Kernel-Dmesg( 0): <4>[ 4563.545737] [<c1577432>] sys_sendto+0xc3/0xdf
12-06 13:21:46.610 W/Kernel-Dmesg( 0): <4>[ 4563.545785] [<c12a7b3c>] ? fsnotify_modify+0x5d/0x68
12-06 13:21:46.610 W/Kernel-Dmesg( 0): <4>[ 4563.545833] [<c1578548>] sys_socketcall+0x16d/0x3c1
12-06 13:21:46.610 W/Kernel-Dmesg( 0): <4>[ 4563.545874] [<c12a8473>] ? vfs_writev+0x36/0x44
12-06 13:21:46.615 W/Kernel-Dmesg( 0): <4>[ 4563.545916] [<c16b50dd>] syscall_call+0x7/0xb
12-06 13:21:46.615 W/Kernel-Dmesg( 0): <4>[ 4563.545947] ---[ end trace 01e818355159b7b9 ]---
我不明白上面的日志信息是什么意思,还有我改的那行代码是什么意思?望高手指点(net->xfrm.sysctl_larval_drop)
[解决办法]
没有人回答就自己google啊:
http://www.serverphorums.com/read.php?12,201874