netlink

wpa_supplicant与kernel交互

﹥>﹥吖頭↗ 提交于 2020-03-01 09:50:06
wpa_supplicant与kernel交互的操作,一般需要先明确驱动接口,以及用户态和kernel态的接口函数,以此来进行调用操作。这里分为4个步骤讨论。 1. 首先需要明确指定的驱动接口。 因为有较多的驱动接口可以使用,如 wext 、 nl80211 等。指定了之后,才能调用相应接口的方法。 2. 保存驱动接口 3. 接口函数的实现 ( 分为用户态和 kernel 态 ) 。系统已经定义了,我们只需找到定义的地方,了解有哪些函数。 4. 交互 (a) 用户态向 kernel 态发送请求 ( 通过 ioctl) (b)kernel 态向用户态发送事件通知 ( 通过 netlink) 1. 首先需要明确指定的驱动接口 (1) 查看 init.XX.rc 中指定的 driver 的命令参数; (2) 根据命令参数,在 wpa_driver_ops *wpa_drivers[] 中查找对应接口。 wpa_drivers[] 的定义是在 [-->external/wpa_supplicant_8/src/drivers/drivers.c] 2. 保存驱动接口 在 wpa_supplicant 初始化过程中,在 wpa_supplicant_init_iface 方法中会调用 wpa_supplicant_set_driver 方法。该方法中又会调用 select_driver 方法

Is anyone using netlink for IPC?

冷暖自知 提交于 2020-02-27 05:42:33
问题 I am planning to use netlink for communication between two userland processes. Part of the reason being so picky about netlink is - Most of the processing for one of the process would eventually go in kernel space and netlink based communication can be used as it is (hopefully). The approach I am taking is - define a new Generic Netlink family (I will have to write a kernel module just to support that family - as it appears so at the moment). That is fine, I was looking at some example code,

Is anyone using netlink for IPC?

我只是一个虾纸丫 提交于 2020-02-27 05:42:06
问题 I am planning to use netlink for communication between two userland processes. Part of the reason being so picky about netlink is - Most of the processing for one of the process would eventually go in kernel space and netlink based communication can be used as it is (hopefully). The approach I am taking is - define a new Generic Netlink family (I will have to write a kernel module just to support that family - as it appears so at the moment). That is fine, I was looking at some example code,

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

﹥>﹥吖頭↗ 提交于 2020-02-22 18:37:06
摘自 https://www.cnblogs.com/x_wukong/p/5920437.html 转自:http://blog.csdn.net/haomcu/article/details/7371835 Linux中的进程间通信机制源自于Unix平台上的进程通信机制。Unix的两大分支AT&T Unix和BSD Unix在进程通信实现机制上的各有所不同,前者形成了运行在单个计算机上的System V IPC,后者则实现了基于socket的进程间通信机制。同时Linux也遵循IEEE制定的Posix IPC标准,在三者的基础之上实现了以下几种主要的IPC机制:管道(Pipe)及命名管道(Named Pipe),信号(Signal),消息队列(Message queue),共享内存(Shared Memory),信号量(Semaphore),套接字(Socket)。通过这些IPC机制,用户空间进程之间可以完成互相通信。为了完成 内核空间 与 用户空间 通信,Linux提供了基于socket的Netlink通信机制,可以实现内核与用户空间数据的及时交换。 本文第2节概述相关研究工作,第3节与其他IPC机制对比,详细介绍Netlink机制及其关键技术,第4节使用KGDB+GDB组合调试,通过一个示例程序演示Netlink通信过程。第5节做总结并指出Netlink通信机制的不足之处。

netlink实例

荒凉一梦 提交于 2020-02-17 01:38:49
#include <linux/module.h> #include <linux/netlink.h> #include <net/netlink.h> #include <net/net_namespace.h> #define NETLINK_TEST 31 #define NLMSG_SETECHO 0x11 #define NLMSG_GETECHO 0x12 static struct sock *sk; //内核端socket static void nl_custom_data_ready(struct sk_buff *skb); //接收消息回调函数 int __init nl_custom_init(void) { struct netlink_kernel_cfg nlcfg = { .input = nl_custom_data_ready, }; sk = netlink_kernel_create(&init_net, NETLINK_TEST, &nlcfg); printk(KERN_INFO "initialed ok!\n"); if (!sk) { printk(KERN_INFO "netlink create error!\n"); } return 0; } void __exit nl_custom_exit(void) {

PERCPU

南楼画角 提交于 2020-02-14 20:15:57
https://0xax.gitbooks.io/linux-insides/content/Concepts/linux-cpu-1.html percpu对某些应用来说非常高效,但是对需要频繁分配percpu变量时,就会变成累赘。因为分配时需要一个全局变量的锁。 最新的upstream kernel里面有一些patch解决了tc里面的percpu的问题。 commit d86784fe9b037baf06a154283a4e8cff46b6fe2f Merge: 21d8bd123ac4 9ae6b78708a7 Author: David S. Miller <davem@davemloft.net> Date: Wed Oct 30 18:07:51 2019 -0700 Merge branch 'Control-action-percpu-counters-allocation-by-netlink-flag' Vlad Buslov says: ==================== Control action percpu counters allocation by netlink flag Currently, significant fraction of CPU time during TC filter allocation is spent in

linux下netlink的使用简介

廉价感情. 提交于 2020-02-09 14:41:58
linux下netlink的使用简介 一、什么是netlink Netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应用程序与内核通信的最常用的接口。 在Linux 内核中,使用netlink 进行应用与内核通信的应用有很多,如 路由 daemon(NETLINK_ROUTE) 用户态 socket 协议(NETLINK_USERSOCK) 防火墙(NETLINK_FIREWALL) netfilter 子系统(NETLINK_NETFILTER) 内核事件向用户态通知(NETLINK_KOBJECT_UEVENT) 通用netlink(NETLINK_GENERIC) Netlink 是一种在内核与用户应用间进行双向数据传输的非常好的方式,用户态应用使用标准的 socket API 就可以使用 netlink 提供的强大功能,内核态需要使用专门的内核 API 来使用 netlink。 一般来说用户空间和内核空间的通信方式有三种: /proc、ioctl、Netlink 。而前两种都是单向的,而Netlink可以实现双工通信。 Netlink 相对于系统调用,ioctl 以及 /proc文件系统而言,具有以下优点: netlink使用简单,只需要在 include/linux/netlink.h 中增加一个新类型的 netlink

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

戏子无情 提交于 2020-01-19 13:50:05
转自:http://blog.csdn.net/haomcu/article/details/7371835 Linux中的进程间通信机制源自于Unix平台上的进程通信机制。Unix的两大分支AT&T Unix和BSD Unix在进程通信实现机制上的各有所不同,前者形成了运行在单个计算机上的System V IPC,后者则实现了基于socket的进程间通信机制。同时Linux也遵循IEEE制定的Posix IPC标准,在三者的基础之上实现了以下几种主要的IPC机制:管道(Pipe)及命名管道(Named Pipe),信号(Signal),消息队列(Message queue),共享内存(Shared Memory),信号量(Semaphore),套接字(Socket)。通过这些IPC机制,用户空间进程之间可以完成互相通信。为了完成 内核空间 与 用户空间 通信,Linux提供了基于socket的Netlink通信机制,可以实现内核与用户空间数据的及时交换。 本文第2节概述相关研究工作,第3节与其他IPC机制对比,详细介绍Netlink机制及其关键技术,第4节使用KGDB+GDB组合调试,通过一个示例程序演示Netlink通信过程。第5节做总结并指出Netlink通信机制的不足之处。 2 相关研究 到目前Linux提供了9种机制完成内核与用户空间的数据交换,分别是内核启动参数

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

邮差的信 提交于 2020-01-19 13:49:19
1 引言 Linux中的进程间通信机制源自于Unix平台上的进程通信机制。Unix的两大分支AT&T Unix和BSD Unix在进程通信实现机制上的各有所不同,前者形成了运行在单个计算机上的System V IPC,后者则实现了基于socket的进程间通信机制。同时Linux也遵循IEEE制定的Posix IPC标准,在三者的基础之上实现了以下几种主要的IPC机制:管道(Pipe)及命名管道(Named Pipe),信号(Signal),消息队列(Message queue),共享内存(Shared Memory),信号量(Semaphore),套接字(Socket)。通过这些IPC机制,用户空间进程之间可以完成互相通信。为了完成内核空间与用户空间通信,Linux提供了基于socket的Netlink通信机制,可以实现内核与用户空间数据的及时交换。 本文第2节概述相关研究工作,第3节与其他IPC机制对比,详细介绍Netlink机制及其关键技术,第4节使用KGDB+GDB组合调试,通过一个示例程序演示Netlink通信过程。第5节做总结并指出Netlink通信机制的不足之处。 2 相关研究 到目前Linux提供了9种机制完成内核与用户空间的数据交换,分别是内核启动参数、模块参数与 sysfs、sysctl、系统调用、netlink、procfs、seq_file

Linux 进程间通信(IPC)

老子叫甜甜 提交于 2020-01-13 20:12:06
Linux 进程间通信(IPC): Linux系统中除了进程和进程之间通信,我想大家也应该关注用户空间与内核空间是怎样通信的。例如说netlink等等。 除了传统进程间通信外像Socket通信也须要掌握的! /*-------------------------------------------------------------------------- * Project: aipc.c * Name: zwp * Date: 2014/6 *-------------------------------------------------------------------------*/ #include <sys/types.h> #include <sys/wait.h> #include <sys/socket.h> #include <unistd.h> #include <signal.h> #include <stdlib.h> #include <stdio.h> #define MAXLINE 1024 static void sig_pipe(int); int s_pipe(int fd[2]); int main(void) { int n, fd[2]; pid_t pid; char line[MAXLINE]; if(signal