89 lines
3.4 KiB
Plaintext
89 lines
3.4 KiB
Plaintext
Netlink Protocol Library
|
|
|
|
This library is a clean room re-implementation of libnl 2.0 and
|
|
re-licensed under Apache 2.0. It was developed primarily to support
|
|
wpa_supplicant. However, with additional development can be extended
|
|
to support other netlink applications.
|
|
|
|
Netlink Protocol Format (RFC3549)
|
|
|
|
+-----------------+-+-------------------+-+
|
|
|Netlink Message |P| Generic Netlink |P|
|
|
| Header |A| Message Header |A|
|
|
|(struct nlmsghdr)|D|(struct genlmsghdr)|D|
|
|
+-----------------+-+-------------------+-+-------------+
|
|
|len:4|type:2|flags:2|seq:4 pid:4|cmd:1|ver:1|reserved:2|
|
|
+--------------------------------+----------------------+
|
|
+-----------------+-+-----------------+-+-----------------+-+-----------------+-+---+
|
|
|Netlink Attribute|P|Netlink Attribute|P|Netlink Attribute|P|Netlink Attribute|P|...|
|
|
| #0 Header |A| #0 Payload |A| #1 Header |A| #1 Payload |A| |
|
|
| (struct nlattr) |D| (void) |D| (struct nlattr) |D| (void) |D| |
|
|
+-----------------+-+-----------------+-+-----------------+-+-----------------+-+---+
|
|
|len:2(==4+payload)|type:2|payload|pad|
|
|
+-------------------------+-------+---+
|
|
|
|
NETLINK OVERVIEW
|
|
|
|
* Each netlink message consists of a bitstream with a netlink header.
|
|
* After this header a second header *can* be used specific to the netlink
|
|
family in use. This library was tested using the generic netlink
|
|
protocol defined by struct genlmsghdr to support nl80211.
|
|
* After the header(s) netlink attributes can be appended to the message
|
|
which hold can hold basic types such as unsigned integers and strings.
|
|
* Attributes can also be nested. This is accomplished by calling "nla_nest_start"
|
|
which creates an empty attribute with nest attributes as its payload. Then to
|
|
close the nest, "nla_nest_end" is called.
|
|
* All data structures in this implementation are byte-aligned (Currently 4 bytes).
|
|
* Acknowledgements (ACKs) are sent as NLMSG_ERROR netlink message types (0x2) and
|
|
have an error value of 0.
|
|
|
|
KNOWN ISSUES
|
|
|
|
GENERAL
|
|
* Not tested for thread safety
|
|
|
|
Android.mk
|
|
* No dynamic library because of netlink cache not implemented and
|
|
not tested for thread safety
|
|
|
|
attr.c
|
|
* nla_parse - does not use nla_policy argument
|
|
|
|
cache.c
|
|
* netlink cache not implemented and only supports one netlink family id
|
|
which is stored in the nl_cache pointer instead of an actual cache
|
|
|
|
netlink.c
|
|
* nl_recvmsgs - does not support nl_cb_overwrite_recv()
|
|
* nl_recv - sets/unsets asynchronous socket flag
|
|
|
|
SOURCE FILES
|
|
|
|
* Android.mk - Android makefile
|
|
* README - This file
|
|
* attr.c - Netlink attributes
|
|
* cache.c - Netlink cache
|
|
* genl/family.c - Generic netlink family id
|
|
* genl/genl.c - Generic netlink
|
|
* handlers.c - Netlink callbacks
|
|
* msg.c - Netlink messages construction
|
|
* netlink.c - Netlink socket communication
|
|
* object.c - libnl object wrapper
|
|
* socket.c - Netlink kernel socket utils
|
|
|
|
IMPORTANT HEADER FILES - NOTE: These are based on the the origin GPL libnl headers
|
|
|
|
* netlink-types.h - Contains many important structs for libnl
|
|
to represent netlink objects
|
|
* netlink/netlink-kernel.h - Netlink kernel headers and field constants.
|
|
* netlink/msg.h - macros for iterating over netlink messages
|
|
* netlink/attr.h - netlink attribute constants, iteration macros and setters
|
|
|
|
REFERENCES
|
|
|
|
* nl80211.h
|
|
* netlink_types.h
|
|
* $LINUX_KERNEL/net/wireless/nl80211.c
|
|
* http://www.infradead.org/~tgr/libnl/doc-3.0/index.html
|
|
* http://www.netfilter.org/projects/libmnl/doxygen/index.html
|