Chinaunix

标题: 经典面试之二:netlink有什么好处? [打印本页]

作者: smalloc    时间: 2012-05-23 16:55
标题: 经典面试之二:netlink有什么好处?
本帖最后由 Godbach 于 2012-05-24 10:41 编辑

求赐教
作者: embeddedlwp    时间: 2012-05-23 17:24
怎么没有面试一呢??
作者: 帅绝人寰    时间: 2012-05-23 19:40
根正苗红       
作者: Godbach    时间: 2012-05-24 10:41
回复 1# smalloc

我的实际应用中,netlink 用的不多。

netlink 的特点,用户空间做好设置了,内核态可以主动的发送信息给用户态。除此之外,暂时想不起来还有那些场景 netlink 可以胜任,其他通信方式都不好用的情形。

但是 netlink 一次数据量受报文长度的控制。

   
作者: smalloc    时间: 2012-05-24 12:04
。怎么把我的帖子分内改了。!。
当时我想,最最最要紧最重点的一句搞定吧,于是说,能在中断上下文发包并且可发广播。继续被问,还有没有别的好处,我死活想不出还有什么值得一提的好处
作者: Godbach    时间: 2012-05-24 12:26
回复 5# smalloc
netlink 属于内核与用户态通信,我觉得划分到通信比较合适。


   
作者: Godbach    时间: 2012-05-24 12:27
回复 5# smalloc

你可反问一下,你觉得还有那些好处呢?


smalloc 大牛还需要面试啊,人家应该直接招了。
   
作者: smalloc    时间: 2012-05-25 09:39
回复 7# Godbach


    我说想不到其他好处了(本意是想说没有其他值得说的好处了)。然后被BS。于是我反问,那还有什么其他好处了,面试官轻摇头笑而不语。
我回来就纠结了。
作者: asuka2001    时间: 2012-05-25 10:16
http://blog.csdn.net/dog250/article/details/6430801

不知道这算不算。。。
作者: zonian    时间: 2012-08-22 10:54
smalloc 发表于 2012-05-24 12:04
。怎么把我的帖子分内改了。!。
当时我想,最最最要紧最重点的一句搞定吧,于是说,能在中断上下文发包并 ...


因为对于netlink不是太了解,但“能在中断上下文发包”,有点疑问。如果使用kernel里面发送uevent包的方法(kobject_uevent_env/kobject_uevent),里面均有不少睡眠的函数存在,请问,大神们一般是怎么使用这个netlink的?
作者: daniel_kohler    时间: 2012-08-22 23:11
回复 4# Godbach


    在实际应用中,netlink非常普遍,至少网络这一块儿基本都是使用netlink实现的,
作者: androidfried1    时间: 2012-08-23 16:44
1. duplex.
2. multicast
3. asynchronous
4. buffered IO
?

I hate such questions. Just like a teacher VS student.
作者: linuxfellow    时间: 2012-08-24 19:36
回复 12# androidfried1
面试和相亲很相似:乘兴而去, 败兴而归

   
作者: myspace21    时间: 2012-08-25 17:29
作为内核和用户空间通信的方式之一,好像主要是网络参数的配置和查询用得比较多吧,呵呵。
作者: hk_sean    时间: 2012-11-27 09:24
netlink相对于系统调用,ioctl以及/proc文件系统而言焗油以下优点:
1、为了使用netlink,用户仅需要在include/linux/netlink.h中添加一个新类型的netlink协议定义即可,如#define NETLINK_MYTEST 17,然后,内核和用户态应用就可以通过socket API使用该netlink协议类型进行数据交换。但系统调用需要增加新的系统调用,ioctl则需要增加设备或文件,那需要不少代码,/proc文件系统则需要在/proc下添加新的文件或目录,那将使本来就混乱的proc更加混乱。
2、netlink是一种异步通信机制,在内核用户态应用之间传递的消息保存在socket缓存中,发送消息只是把消息保存在接受者的socket的接收队列,而不需要等待接收者收到消息,但系统调用与ioctl则是同步通信机制,如果传递的数据太长,将影响调度粒度。
3、使用netlink的内核部分可以采用模块的方式实现,使用netlink的应用部分和内核部分没有编译依赖,但系统调用就有依赖,而且新的系统调用的实现必须静态地连接到内核中,它无法在模块中实现,使用新的系统调用的应用在编译时需要依赖内核。
4、netlink支持多播,ioctl和系统调用只是单播。
5、内核可以使用netlink首先发起会话,但系统调用和ioctl只能由用户发起调用。
6、netlink使用标准的socket API,因此很容易使用。
作者: smalloc    时间: 2012-11-27 10:21
但问题是netlink老需要挂在某dev 设备上,这个恶心的问题如何解决?另外一个是数据包缓存/清除问题。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2