内核Netlink接口剖析

Netlink是Linux内核与用户空间通信的接口,常用于内核扩展和配置管理。本文介绍了Netlink的起源、设计原则,以及其在Linux内核接口、虚拟文件系统、BSD套接字中的应用。Netlink具备可扩展性、事件通知机制,并通过TLV结构允许灵活的属性添加,是Linux内核与用户空间交互的重要手段。
摘要由CSDN通过智能技术生成


    当开发linux内核特性的时候,将必要的内核子系统的详细信息暴露给用户空间的程序是一个比较好的习惯,因为这增强了内核的扩展性。通常来说,软件开发者必须面对这样一个任务:寻找一种好的方法使得用户空间和内核空间进行交互。

    NetLink作为内核接口的一种,担任了这样的功能。维基百科对于它的解释:

Netlink socket family is a Linux kernel interface usedfor inter-process communication (IPC)between the kernel and user-space processes,as well as between user processes (e.g. Unix domain sockets) or amixture of both types. However, unlike INET sockets, it cannot traversehost boundaries, because it addresses processes by their (inherently local) PIDs.

    Netlink在linux内核2.0系列的时候被并入,2000年之前,当时用来替代Ioctl。不过直到现在这个ioctl也还存在,只不过它比较陈旧,rtnetlink和它完成同样的功能。(rtnetlink或许就是netlink最原本的目的,可能是后来随着netlink的壮大,才慢慢的出现了别的netlink,比如generic netlink)。

设计和实用性

主要是linux系统的跨平台的使用,和linux的设计技巧。有些内核子系统,比如网络和设备需要从用户空间来进行配置和管理。用户态程序需要获得资源,服务和信息,同时配置监控内核子系统(后面将要分析lldpad和DCB子系统的关系)。

内核接口是操作系统非常重要的一部分,提供灵活的内核接口对于内核的体验简直太棒了(不然要想要很多功能,内核就会变得非常臃肿),一方面内核可以保持比较小,另一方面又使得用户空间程序可以进行想要的操作。

netlink有很多好处,比如强大的可扩展性和支持基于事件的通知机制。要理解netlink,主要还是要理解C语言编程,要理解内核的一些基本知识,和BSD sockets。

linux内核接口

    linux本身有很多内核和用户接口,但是哪个更好,哪个更加适合在什么场合下使用,还是很值得我们深思的。内核接口应该提供的几个特性有可扩展性、架构可移植、事件通知机制和大数据传输特性。

    系统调用,是一个在多种操作系统上(包括Windows)非常通用和标准的接口。然而,linux内核开发者非常不情愿在linux上面添加系统调用,它也不能给每个子模块添加特别的调用,针对的是一些通用的接口,没有针对特殊模块的特殊接口。使用固定的layout格式的接口:ioctl;每一个配置都有一个唯一的ioctl号来识别。因为在内核和用户程序之间需要传递消息,为了让这个消息被识别,这个消息一般会用一个固定格式的数据结构(ioctl调用时,会有一个指向这个结构的指针)来表示,不过呢,如果新的配置需要去改变信息的格式,就会需要使用一个新的ioctl调用了。

虚拟文件系统

    主要是对于字符和块设备驱动接口来说,内核给用户程序提供了一种像访问文件一样的方式来和这个驱动进行通信。有/proc和sysfs等ÿ

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值