#include <asm/types.h>
#include <sys/socket.h>
#include <linux/netlink.h>netlink_socket = socket(AF_NETLINK, socket_type, netlink_family);

1 netlink socket

NetLink被用于在内核和应用之前传输信息,在用户空间编程使用标准的socket相关的API接口,在内核空间使用kernel内部的API接口。

NetLink是一个面向数据报的服务,socket_type 可以是SOCK_RAW也可以是SOCK_DGRAM ,在netlink协议中不做区分。

netlink_family最常用的就是NETLINK_ROUTE用于网络相关的配置和NETLINK_KOBJECT_UEVENT用于设备热插拔监测。

2 socket 地址

struct sockaddr_nl {sa_family_t     nl_family;  /* AF_NETLINK */unsigned short  nl_pad;     /* Zero */pid_t           nl_pid;     /* Port ID */__u32           nl_groups;  /* Multicast groups mask */
};

使用socket通信肯定需要自身的地址和对方的地址。netlink socket使用struct sockaddr_nl作为通信的地址。

2.1 nl_pid

nl_pid是netlink socket的单播地址,类似于网络通信中的端口号,网络地址通常是ip+port,但是netlink是本地通信,所以有port就够了。

在netlink中,如果目的地址是内核,也就是说接收方是内核,那么目的地址的nl_pid就是0.

在用户空间,如果目的地址是应用程序,也就是说接收方是应用程序,那么目的地址的nl_pid通常是进程自己的PID号。但是比如在进程中创建多个netlink socktet,但是进程号是唯一的,多个socket不能使用相同的nl_pid,那么该怎么办,两个办法,在bind()调用之前,手动分配一个唯一的nl_pid或者将nl_pid设置为0,这样bind()的时候由内核自动分配一个唯一的nl_pid,和网络通信中的端口号非常像,就是手动指定和默认分配。

2.2 nl_groups

这个域类似于组播,就是内核会发送数据给一组net socketet,如果用户空间程序的netlink socket,在bind()的地址中的nl_groups指定了接收组,那就可以接收内核发送的数据,通俗的讲就是内核对多个应用通信,这个有什么用呢,非常有用,比如有硬件设备热插拔,内核可以发布这个消息到组,然后每一个bind()了这个组的应用程序,都可以接收热插拔消息。nl_groups更多时候就是用于用户程序监测内核事件,比如热插拔事件,网络管理事件等。每个socket 地址中接收32种组消息,因为nl_groups是32位数,每一位代表一个不同的组类型

比如想接收(监听)网卡事件和I地址变化,可以设置nl_groups =RTMGRP_LINK | RTMGRP_IPV4_IFADDR 。

参考链接

netlink(7) - Linux manual pagehttps://man7.org/linux/man-pages/man7/netlink.7.html

netlink socket相关推荐

  1. [Copy] Netlink Socket

    [b][size=14]简介[/size][/b] Netlink 是一种特殊的 socket,它是 Linux 所特有的,类似于 BSD 中的AF_ROUTE 但又远比它的功能强大,目前在最新的 L ...

  2. Linux Wireless netlink socket nl80211

    1.netlink socket可用于用户空间与内核间的通信,获取内核中的信息 2.用户的rssi数据实际上是由nl80211实现的,最终追溯到cfg80211和mac80211 3.关于nl8021 ...

  3. Linux Kernel TCP/IP Stack — Socket Layer

    目录 文章目录 目录 Socket 框架 Netlink Socket Socket 框架 Socket 的类型: IP Socket tcp udp icmp raw Packet Socket N ...

  4. linux 内核与用户空间通信之netlink使用方法

    Linux中的进程间通信机制源自于Unix平台上的进程通信机制.Unix的两大分支AT&T Unix和BSD Unix在进程通信实现机制上的各有所不同,前者形成了运行在单个计算机上的Syste ...

  5. NetLink Communication Mechanism And Netlink Sourcecode Analysis

    catalog 1. Netlink简介 2. Netlink Function API Howto 3. Generic Netlink HOWTO kernel API 4. RFC 3549 L ...

  6. Netlink 介绍(译)

    原文地址:http://people.redhat.com/nhorman/papers/netlink.pdf 译文: 1 介绍 在Linux和Unix的众多发行版中的网络配置功能, 都是编程者事后 ...

  7. 用户空间与内核空间数据交换的方式(9)------netlink【转】

    转自:http://www.cnblogs.com/hoys/archive/2011/04/10/2011722.html Netlink 是一种特殊的 socket,它是 Linux 所特有的,类 ...

  8. linux netlink 编程示例(二)应用层

    这篇文章给出一个netlink应用层程序用例,和上一篇博客内核篇结合起来参考. 内核版本:3.4.39 nlclient.c /** Description : 应用层netlink编程* Date ...

  9. netlink怎么读_ovs源码阅读--netlink使用

    netlink netlink socket是一种用于用户态进程和内核态进程之间的通信机制.它通过为内核模块提供一组特殊的API,并为用户程序提供了一组标准的socket接口的方式,实现了全双工的通讯 ...

最新文章

  1. ORACLE SQL语句总结2
  2. 1.4 Java创建一个学生类
  3. Android之android studio如何解决‘:app:packageDebug‘.(Duplicate files copied in APK META-INF/DEPENDENCIES)
  4. php 303,HTTP 的重定向301,302,303,307(转)
  5. hive cli启动判断hadoop version的问题
  6. 如何在html中加入字体库,网页中添加特殊字体解决方案
  7. 小程序在开发者工具、真机测试时好好的,体验版 页面空白无法通过审核
  8. 和计算机相关的英文名字女孩,简单好听寓意好的英文名字女孩
  9. 温度传感器DS18B20的相关介绍以及基于MSP430的驱动程序(附代码)
  10. php实现QQ打开跳转浏览器,【网站】 简单通用微信QQ跳转浏览器打开代码
  11. 重庆文理学院计算机公众号,重庆文理学院各微信公众号影响力排行榜新鲜出炉啦!!!...
  12. 育儿知识小分享—— 如何引导孩子学会分享
  13. 各类无次数限制的免费API接口,再也不怕找不到免费API了
  14. 程序员如何优雅的赚零花钱?分享几个接私活的平台利器
  15. CTF Reverse fantasy.apk解题思路
  16. 浅析“高内聚,低耦合”
  17. CCleaner科学使用方法
  18. 黑苹果OC引导AX201网卡教程,小新Pro13不换网卡也能上网
  19. 和大于等于target的最短子数组 | 循序递进---@二十一画
  20. 质子交换膜燃料电池流场设计(节选自课程设计作业)

热门文章

  1. HTML5之图片标签
  2. WSockExpert用法【转】
  3. 1000日本版式设计速查手册
  4. 亚马逊跟卖什么意思?跟卖时这些问题要注意
  5. 区块链快速入门(一)--原来这就是区块链
  6. 免费顶级域名WordPress博客申请全攻略
  7. margin属性总结
  8. 【软件】大企业ERP选型的方法
  9. 机器学习(三)—— 线性回归
  10. php微信公众号开发入门,PHP微信公众号开发入门(二)