netlink组播的使用

摘要:
Linux的netlink机制是Linux内核与应用程序层进行双向数据交互的一种非常好的方式。如果需要实现应用层是服务器,核心是客户端的通信模式,则需要使用多播。在这种情况下,应用层守护程序需要获取内核中某些模块的状态信息。

Linux的netlink机制是非常好的Linux内核与应用层进行双向交互数据的方式。其常用的单播方式可以实现内核为服务端,应用层为客户端的通信方式。如果需要实现应用层为服务端,内核为客户端的通信方式,则需要使用组播。这种场景一般是应用层守护进程需要实现获取内核的某些模块的状态信息。

内核中已经定义好的组有:

#define NETLINK_ROUTE           0       /* Routing/device hook                          */
#define NETLINK_W1 1 /* 1-wire subsystem */
#define NETLINK_USERSOCK 2 /* Reserved for user mode socket protocols */
#define NETLINK_FIREWALL 3 /* Firewalling hook */
#define NETLINK_INET_DIAG 4 /* INET socket monitoring */
#define NETLINK_NFLOG 5 /* netfilter/iptables ULOG */
#define NETLINK_XFRM 6 /* ipsec */
#define NETLINK_SELINUX 7 /* SELinux event notifications */
#define NETLINK_ISCSI 8 /* Open-iSCSI */
#define NETLINK_AUDIT 9 /* auditing */
#define NETLINK_FIB_LOOKUP 10
#define NETLINK_CONNECTOR 11
#define NETLINK_NETFILTER 12 /* netfilter subsystem */
#define NETLINK_IP6_FW 13
#define NETLINK_DNRTMSG 14 /* DECnet routing messages */
#define NETLINK_KOBJECT_UEVENT 15 /* Kernel messages to userspace */
#define NETLINK_GENERIC 16

内核代码:

 1 #include <linux/module.h>
 2 #include <linux/kernel.h>
 3 #include <linux/init.h>
 4 #include <net/sock.h>
 5 #include <linux/socket.h>
 6 #include <linux/net.h>
 7 #include <asm/types.h>
 8 #include <linux/netlink.h>
 9 #include <linux/rtnetlink.h>
10 #include <linux/skbuff.h>
11 #include <linux/delay.h>
12 
13 #define NETLINK_USER 29  //User defined group, consistent in both kernel prog and user prog
14 #define MYGRP 2 //User defined group, consistent in both kernel prog and user prog
15 
16 struct sock *nl_sk = NULL;
17 
18 static void send_to_user(void);
19 
20 static void send_to_user(void)
21 {
22     struct sk_buff *skb_out;
23     struct nlmsghdr *nlh;
24     int msg_size;
25     char msg[20] = "Hello from kernel";
26     int res;
27 
28     printk(KERN_INFO "Entering: %s
", __FUNCTION__);
29     msg_size = strlen(msg);
30     printk(KERN_INFO "msg_size: %d
", msg_size);
31     //msg[msg_size - 1] = '

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Qt之手动布局Elasticsearch安装ik中文分词插件(四)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux远程图形化界面出错:MoTTY X11 proxy: Unsupported authorisation protocol

远程使用图形化界面时出错:MoTTY X11 proxy: Unsupported authorisation protocol 普通用户报错,root用户不报错的解决方法:cp /root/.Xauthority /home/xxx/ 普通用户不报错,root用户报错的解决方法: cp /home/xxx/.Xauthority /root/ xxx为用...

Linux下的JDK和OpenJDK有什么具体的区别

大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的openjdk.  openjdk是jdk的开放原始码版本,以GPL协议的形式放出。openjdk只包含最精简的JDK 在安装openjdk的机器上,输入“java -version”显示的是openjdkopenJDK 与 Sun 的 JDK 功能都是一样的,只是版权信息不一样。 O...

为github帐号添加SSH keys(Linux和Windows)

【gitee里面又非常详细的官方教程】 文章转自:https://blog.cofface.com/archives/406.html/2 一、Linux增加ssh keys方法: 使用git clone命令从github上同步github上的代码库时,如果使用SSH链接(如我自己的cofface_recovery项目:git@github.com:cof...

.Net Core Linux centos7行—.net core json 配置文件

.net core 对配置系统做出了大幅度更新,不在局限于之前的*.xml配置方式。现在支持json,xml,ini,in memory,环境变量等等。毫无疑问的是,现在的json配置文件是.net core世界中的一等公民。 每个类型的配置文件都有一个schema说明。有schema的好处是能有智能提示。 可以在任何配置项的Key上面按F12导航到该配...

Linux:bashd的环境配置文件

当bash启动时,系统自动调用的文件就是配置文件。 注意:用户自定义的命令别名,自订变量,在退出bash后就会失效。如果,你想保留的话,就要将它们写入配置文件中。 bash配置文件分为:全体系统的配置文件,用户个人偏好的配置文件。 一,login与non-login shell 在输入账户和密码后点击确认获得bash其实就执行了login指令 当在bash...

安装配置管理 之 NVIDIA nForce Linux Drivers 集成声网卡和声卡的安装说明

作者:北南南北来自:LinuxSir.Org提要:本文主要讲述NVIDIA NForce 芯片集成网卡nvnet和声卡nvsound驱动的安装方法 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++正文:+++++++++++++++++++++++++++++++++++++++...