免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1577 | 回复: 8

[网络子系统] netlink套接字消息为何可以通过send/recv发送与接收? [复制链接]

论坛徽章:
11
摩羯座
日期:2013-09-29 17:39:09白羊座
日期:2014-11-13 09:38:14技术图书徽章
日期:2014-01-17 15:07:36狮子座
日期:2013-12-25 14:01:52技术图书徽章
日期:2013-12-17 11:33:22技术图书徽章
日期:2013-12-03 10:27:57天秤座
日期:2013-11-08 15:47:19申猴
日期:2013-10-29 13:16:32未羊
日期:2013-10-12 22:28:56辰龙
日期:2013-10-09 14:39:5515-16赛季CBA联赛之山东
日期:2016-07-25 10:23:00
发表于 2016-05-05 22:41 |显示全部楼层
如题,通过

rtnetlink_socket = socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE);

方式创建的rtnetlink套接字,由于netlink消息是无连接的,因此发送与接收消息需要通过调用sendto/recvfrom或sendmsg/recvmsg,并在调用前初始化本端与对端的sockaddr_nl结构

但有些代码中,并未初始化本端与对端的sockaddr_nl结构,且数据的发送与接收是通过调用send/recv,此处不解,请各位指点一下,非常感谢!

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
发表于 2016-05-06 15:28 |显示全部楼层
sys_sendto -> sys_sendmsg -> netlink_sendmsg,此处决定dst_pid

1) 使用sendmsg的时候,dst_pid是addr->nl_pid,即来自于sockaddr参数
2)使用sento的时候,dst_pid是nlk->dst_pid,这又取决于是否调用过connect

3)如果调用过connect,则是connect的sockaddr参数
4)否则,默认为0,即目标是kernel。

评分

参与人数 1可用积分 +2 收起 理由
Godbach + 2 赞一个!

查看全部评分

论坛徽章:
11
摩羯座
日期:2013-09-29 17:39:09白羊座
日期:2014-11-13 09:38:14技术图书徽章
日期:2014-01-17 15:07:36狮子座
日期:2013-12-25 14:01:52技术图书徽章
日期:2013-12-17 11:33:22技术图书徽章
日期:2013-12-03 10:27:57天秤座
日期:2013-11-08 15:47:19申猴
日期:2013-10-29 13:16:32未羊
日期:2013-10-12 22:28:56辰龙
日期:2013-10-09 14:39:5515-16赛季CBA联赛之山东
日期:2016-07-25 10:23:00
发表于 2016-05-06 15:49 |显示全部楼层
回复 2# nswcfd

非常感谢楼上,但如何验证您所说的?看内核源码?
   

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
发表于 2016-05-06 17:14 |显示全部楼层
是的,可以再通过一些内核的辅助调试手段(比如systap或者kprobe)确认一下。

论坛徽章:
11
摩羯座
日期:2013-09-29 17:39:09白羊座
日期:2014-11-13 09:38:14技术图书徽章
日期:2014-01-17 15:07:36狮子座
日期:2013-12-25 14:01:52技术图书徽章
日期:2013-12-17 11:33:22技术图书徽章
日期:2013-12-03 10:27:57天秤座
日期:2013-11-08 15:47:19申猴
日期:2013-10-29 13:16:32未羊
日期:2013-10-12 22:28:56辰龙
日期:2013-10-09 14:39:5515-16赛季CBA联赛之山东
日期:2016-07-25 10:23:00
发表于 2016-05-06 17:18 |显示全部楼层
回复 4# nswcfd

受教,非常感谢!
   

论坛徽章:
11
摩羯座
日期:2013-09-29 17:39:09白羊座
日期:2014-11-13 09:38:14技术图书徽章
日期:2014-01-17 15:07:36狮子座
日期:2013-12-25 14:01:52技术图书徽章
日期:2013-12-17 11:33:22技术图书徽章
日期:2013-12-03 10:27:57天秤座
日期:2013-11-08 15:47:19申猴
日期:2013-10-29 13:16:32未羊
日期:2013-10-12 22:28:56辰龙
日期:2013-10-09 14:39:5515-16赛季CBA联赛之山东
日期:2016-07-25 10:23:00
发表于 2016-05-06 17:18 |显示全部楼层
回复 4# nswcfd

受教,非常感谢!
   

论坛徽章:
11
摩羯座
日期:2013-09-29 17:39:09白羊座
日期:2014-11-13 09:38:14技术图书徽章
日期:2014-01-17 15:07:36狮子座
日期:2013-12-25 14:01:52技术图书徽章
日期:2013-12-17 11:33:22技术图书徽章
日期:2013-12-03 10:27:57天秤座
日期:2013-11-08 15:47:19申猴
日期:2013-10-29 13:16:32未羊
日期:2013-10-12 22:28:56辰龙
日期:2013-10-09 14:39:5515-16赛季CBA联赛之山东
日期:2016-07-25 10:23:00
发表于 2016-05-06 19:04 |显示全部楼层
本帖最后由 superwujc 于 2016-05-06 19:05 编辑

回复 2# nswcfd

还有一个问题请教楼上,对于内核已定义的netlink协议,如
  1. include/linux/netlink.h

  2. #define NETLINK_ROUTE       0   /* Routing/device hook      */
  3. #define NETLINK_UNUSED      1   /* Unused number            */
  4. #define NETLINK_USERSOCK    2   /* Reserved for user mode socket protocols  */
  5. #define NETLINK_FIREWALL    3   /* Firewalling hook         */
  6. #define NETLINK_INET_DIAG   4   /* INET socket monitoring   */
  7. #define NETLINK_NFLOG       5   /* netfilter/iptables ULOG  */
  8. #define NETLINK_XFRM        6   /* ipsec */
  9. #define NETLINK_SELINUX     7   /* SELinux event notifications */
  10. #define NETLINK_ISCSI       8   /* Open-iSCSI   */
  11. #define NETLINK_AUDIT       9   /* auditing     */
  12. #define NETLINK_FIB_LOOKUP  10  
  13. #define NETLINK_CONNECTOR   11
  14. #define NETLINK_NETFILTER   12  /* netfilter subsystem      */
  15. #define NETLINK_IP6_FW      13
  16. #define NETLINK_DNRTMSG     14  /* DECnet routing messages  */
  17. #define NETLINK_KOBJECT_UEVENT  15  /* Kernel messages to userspace */
  18. #define NETLINK_GENERIC     16
  19. /* leave room for NETLINK_DM (DM Events) */
  20. #define NETLINK_SCSITRANSPORT   18  /* SCSI Transports              */
  21. #define NETLINK_ECRYPTFS    19

  22. #define MAX_LINKS 32
复制代码
发送单播消息的时候可以不用初始化sockaddr_nl结构,且可以调用send/recv发送与接收消息

但对于用户自定义协议经netlink套接字发送接收时,比如
  1. #define NETLINK_CUSTOM    88
复制代码
无论发送接收单播或多播消息,都必须初始化sockaddr_nl结构且必须通过sendmsg/recvmsg或sendto/recvfrom处理?

可以这样理解吗?
   

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
发表于 2016-05-09 20:22 |显示全部楼层
自定义是指kernel module? 发送是指用户态到内核?如果是那样的话,跟内核已有的没有区别。

从用户态的角度看,它们的区别仅仅在socket(family, type, protocol)的第三个参数protocol上,其它都是一样的(从socket api的使用角度来说)。

论坛徽章:
11
摩羯座
日期:2013-09-29 17:39:09白羊座
日期:2014-11-13 09:38:14技术图书徽章
日期:2014-01-17 15:07:36狮子座
日期:2013-12-25 14:01:52技术图书徽章
日期:2013-12-17 11:33:22技术图书徽章
日期:2013-12-03 10:27:57天秤座
日期:2013-11-08 15:47:19申猴
日期:2013-10-29 13:16:32未羊
日期:2013-10-12 22:28:56辰龙
日期:2013-10-09 14:39:5515-16赛季CBA联赛之山东
日期:2016-07-25 10:23:00
发表于 2016-05-10 23:59 |显示全部楼层
回复 8# nswcfd

受教,多谢!
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP