Re: RtNetlink in wireless.c and netlink_broadcast(uevent_sock,...) - newbie
From: Jean Tourrilhes <hidden>
Date: 2006-05-01 17:50:04
Xu Nakajima wrote :
Hello, I saw that in the wireless linux stack, there is usage of sending messages to user space via the RtNetlink event channel : in net/core/wireless.c, wireless_send_event() method calls rtmsg_iwinfo() which calls netlink_broadcast(rtnl, skb, 0, RTNLGRP_LINK, GFP_ATOMIC); (it fills a struct with rtnetlink_fill_iwinfo before). On the other hand, I see that for example, in the case of sending messeges to userspace udev socket, the netlink_broadcast() call is with a different mecahinsm; In lib/kobject_uevent.c, there is the following call netlink_broadcast(uevent_sock, skb, 0, 1, GFP_KERNEL); Is there something special about RtNetlink event channel which makes it needed fot wireless.c (for example)? While udev can use some other mechanism ? What is special about RtNetlink event channel in comaprison to non RtNetlink channels?
Netlink is a generic socket mechanism. On top of Netlink, you can have multiple types of sockets, the same way that on top of TCP sockets you can implement various protocols, such as HTTP, NFS, SSH... RtNetlink was the first Netlink protocol implemented and is the Netlink protocol used to configure network interfaces. In the file net/core/rtnetlink.c, you will find that there are many actions that generates RtNetlink events. Together with wireless events, they give you a very detailed view of what's happening with network interfaces. The udev-netlink protocol is quite recent and a completely different Netlink ptotocol that uses a different packet format. As far as exporting network information, it is very crude, because the goal of udev is not managing network interfaces. Yes, udev does duplicate some RtNetlink events, but the overlap is not so much, so that's ok. Good luck... Jean