Chinaunix
标题:
netlink_kernel_create() 创建socket失败,总是返回NULL
[打印本页]
作者:
waveletwei
时间:
2010-11-03 16:55
标题:
netlink_kernel_create() 创建socket失败,总是返回NULL
如题。kernel version 2.6.22-generic。在我用来实验的简单程序里没有问题。nl_sk = netlink_kernel_create(&init_net,NETLINK_TEST,0, testFunction,NULL, THIS_MODULE)。我已经在module header的netlilnk.h中添加了#define NETLINK_TEST 17。testFunction()只是简单地打印user space传到kernel的信息。可是当我用到真正的代码中的时候,每次创建socket都失败,甚至即使我的handler继续使用testFunction也不行。我想请问应该如何跟踪创建socket失败的原因?我手边没有代码,下了班回去之后会贴出,现在只希望有类似经验的人能够提供点建议。谢谢!
作者:
Godbach
时间:
2010-11-03 17:09
错误信息是什么呢
作者:
waveletwei
时间:
2010-11-03 17:51
回复
2#
Godbach
没有错误信息。只是我在程序里验证nl_sk总是为NULL。这也是我的问题:我在示例程序里看到他们都是只判断返回指针是否为空,如果是空就打印错误信息然后函数退出。我没有看到他们是如何追踪创建失败原因和如何重新创建的。请问在实际程序中是如何做的?
作者:
Godbach
时间:
2010-11-03 22:15
这个应该是加载模块时就创建的,应该是你不用应用程序测试就可以看出来的。
另外,
#define NETLINK_TEST 17
这个确保和系统已经定义的没有冲突吗?
作者:
waveletwei
时间:
2010-11-08 20:56
回复
4#
Godbach
多谢版主回复。我发现是我netfilter hook的问题,改正后就没有错误了。可是其实我在那个创建socket的函数里TestFunction并没有提及hook甚至netfilter(当时只是测试netlink用),不知为什么会有影响。另外就是我现在还是不知道如何追踪这种错误信息。
作者:
Godbach
时间:
2010-11-08 23:09
简单的方法打印出来一些调试信息
作者:
zydovech
时间:
2015-01-09 16:02
回复
6#
Godbach
最近有个关于netlink的问题困扰着我。。希望版主有时间可以指点一下。。我用netlink实现用户空间和内核的通信。。在我自己的机子(我的系统的ubuntu10.04 对应的内核是2.6.32-21-generic)上运行的时候 我是没有在netlink.h里添加自己定义的协议的。我先调用用户空间的程序用 socket建立netlink套接字的时候,是没有报协议不支持的错误的(这个在netlink.h中添加自己定义的协议 会照成什么样的影响呀?为什么不添加也可以?添加的话就是在/usr/include/linux/netlink.h中添加一下 ,其他什么都不用做吗?)。就是说在我的机子上是可以正常实现的。但是最近要在板卡上跑程序。先在用户空间调用socket创建netlink套接字就会失败。报协议不支持的错误。如果我在内核里先加载了对应的创建netlink模块,就不会报协议不支持的错误,我看了一下netlink_kernel_create()函数的源码,可以理解为在内核调用netlink_kernel_create()的时候会注册协议。然后用户空间就不会报错。但是之前在我电脑上的事情又怎么解释呢。问题是,我在加载模块的时候就需要把一些信息通过netlink送出来。如果先加载模块的话 这部分信息就送不出来了。由于板卡的内核大小只有2M。include目录下都没有头文件,更没有找到netlink.h这个头文件。。不知道该怎么解决,希望版主大人指点一下。。在此表示感谢。。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2