netlink socket
#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相关推荐
- [Copy] Netlink Socket
[b][size=14]简介[/size][/b] Netlink 是一种特殊的 socket,它是 Linux 所特有的,类似于 BSD 中的AF_ROUTE 但又远比它的功能强大,目前在最新的 L ...
- Linux Wireless netlink socket nl80211
1.netlink socket可用于用户空间与内核间的通信,获取内核中的信息 2.用户的rssi数据实际上是由nl80211实现的,最终追溯到cfg80211和mac80211 3.关于nl8021 ...
- Linux Kernel TCP/IP Stack — Socket Layer
目录 文章目录 目录 Socket 框架 Netlink Socket Socket 框架 Socket 的类型: IP Socket tcp udp icmp raw Packet Socket N ...
- linux 内核与用户空间通信之netlink使用方法
Linux中的进程间通信机制源自于Unix平台上的进程通信机制.Unix的两大分支AT&T Unix和BSD Unix在进程通信实现机制上的各有所不同,前者形成了运行在单个计算机上的Syste ...
- 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 ...
- Netlink 介绍(译)
原文地址:http://people.redhat.com/nhorman/papers/netlink.pdf 译文: 1 介绍 在Linux和Unix的众多发行版中的网络配置功能, 都是编程者事后 ...
- 用户空间与内核空间数据交换的方式(9)------netlink【转】
转自:http://www.cnblogs.com/hoys/archive/2011/04/10/2011722.html Netlink 是一种特殊的 socket,它是 Linux 所特有的,类 ...
- linux netlink 编程示例(二)应用层
这篇文章给出一个netlink应用层程序用例,和上一篇博客内核篇结合起来参考. 内核版本:3.4.39 nlclient.c /** Description : 应用层netlink编程* Date ...
- netlink怎么读_ovs源码阅读--netlink使用
netlink netlink socket是一种用于用户态进程和内核态进程之间的通信机制.它通过为内核模块提供一组特殊的API,并为用户程序提供了一组标准的socket接口的方式,实现了全双工的通讯 ...
最新文章
- ORACLE SQL语句总结2
- 1.4 Java创建一个学生类
- Android之android studio如何解决‘:app:packageDebug‘.(Duplicate files copied in APK META-INF/DEPENDENCIES)
- php 303,HTTP 的重定向301,302,303,307(转)
- hive cli启动判断hadoop version的问题
- 如何在html中加入字体库,网页中添加特殊字体解决方案
- 小程序在开发者工具、真机测试时好好的,体验版 页面空白无法通过审核
- 和计算机相关的英文名字女孩,简单好听寓意好的英文名字女孩
- 温度传感器DS18B20的相关介绍以及基于MSP430的驱动程序(附代码)
- php实现QQ打开跳转浏览器,【网站】 简单通用微信QQ跳转浏览器打开代码
- 重庆文理学院计算机公众号,重庆文理学院各微信公众号影响力排行榜新鲜出炉啦!!!...
- 育儿知识小分享—— 如何引导孩子学会分享
- 各类无次数限制的免费API接口,再也不怕找不到免费API了
- 程序员如何优雅的赚零花钱?分享几个接私活的平台利器
- CTF Reverse fantasy.apk解题思路
- 浅析“高内聚,低耦合”
- CCleaner科学使用方法
- 黑苹果OC引导AX201网卡教程,小新Pro13不换网卡也能上网
- 和大于等于target的最短子数组 | 循序递进---@二十一画
- 质子交换膜燃料电池流场设计(节选自课程设计作业)