免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8023 | 回复: 6
打印 上一主题 下一主题

netlink_kernel_create() 创建socket失败,总是返回NULL [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-03 16:55 |只看该作者 |倒序浏览
如题。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失败的原因?我手边没有代码,下了班回去之后会贴出,现在只希望有类似经验的人能够提供点建议。谢谢!

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
2 [报告]
发表于 2010-11-03 17:09 |只看该作者
错误信息是什么呢

论坛徽章:
0
3 [报告]
发表于 2010-11-03 17:51 |只看该作者
回复 2# Godbach

没有错误信息。只是我在程序里验证nl_sk总是为NULL。这也是我的问题:我在示例程序里看到他们都是只判断返回指针是否为空,如果是空就打印错误信息然后函数退出。我没有看到他们是如何追踪创建失败原因和如何重新创建的。请问在实际程序中是如何做的?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
4 [报告]
发表于 2010-11-03 22:15 |只看该作者
这个应该是加载模块时就创建的,应该是你不用应用程序测试就可以看出来的。
另外,
#define NETLINK_TEST 17

这个确保和系统已经定义的没有冲突吗?

论坛徽章:
0
5 [报告]
发表于 2010-11-08 20:56 |只看该作者
回复 4# Godbach


    多谢版主回复。我发现是我netfilter hook的问题,改正后就没有错误了。可是其实我在那个创建socket的函数里TestFunction并没有提及hook甚至netfilter(当时只是测试netlink用),不知为什么会有影响。另外就是我现在还是不知道如何追踪这种错误信息。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
6 [报告]
发表于 2010-11-08 23:09 |只看该作者
简单的方法打印出来一些调试信息

论坛徽章:
0
7 [报告]
发表于 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这个头文件。。不知道该怎么解决,希望版主大人指点一下。。在此表示感谢。。


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP