README
1 Netlink Protocol Library
2
3 This library is a clean room re-implementation of libnl 2.0 and
4 re-licensed under Apache 2.0. It was developed primarily to support
5 wpa_supplicant. However, with additional development can be extended
6 to support other netlink applications.
7
8 Netlink Protocol Format (RFC3549)
9
10 +-----------------+-+-------------------+-+
11 |Netlink Message |P| Generic Netlink |P|
12 | Header |A| Message Header |A|
13 |(struct nlmsghdr)|D|(struct genlmsghdr)|D|
14 +-----------------+-+-------------------+-+-------------+
15 |len:4|type:2|flags:2|seq:4 pid:4|cmd:1|ver:1|reserved:2|
16 +--------------------------------+----------------------+
17 +-----------------+-+-----------------+-+-----------------+-+-----------------+-+---+
18 |Netlink Attribute|P|Netlink Attribute|P|Netlink Attribute|P|Netlink Attribute|P|...|
19 | #0 Header |A| #0 Payload |A| #1 Header |A| #1 Payload |A| |
20 | (struct nlattr) |D| (void) |D| (struct nlattr) |D| (void) |D| |
21 +-----------------+-+-----------------+-+-----------------+-+-----------------+-+---+
22 |len:2(==4+payload)|type:2|payload|pad|
23 +-------------------------+-------+---+
24
25 NETLINK OVERVIEW
26
27 * Each netlink message consists of a bitstream with a netlink header.
28 * After this header a second header *can* be used specific to the netlink
29 family in use. This library was tested using the generic netlink
30 protocol defined by struct genlmsghdr to support nl80211.
31 * After the header(s) netlink attributes can be appended to the message
32 which hold can hold basic types such as unsigned integers and strings.
33 * Attributes can also be nested. This is accomplished by calling "nla_nest_start"
34 which creates an empty attribute with nest attributes as its payload. Then to
35 close the nest, "nla_nest_end" is called.
36 * All data structures in this implementation are byte-aligned (Currently 4 bytes).
37 * Acknowledgements (ACKs) are sent as NLMSG_ERROR netlink message types (0x2) and
38 have an error value of 0.
39
40 KNOWN ISSUES
41
42 GENERAL
43 * Not tested for thread safety
44
45 Android.mk
46 * No dynamic library because of netlink cache not implemented and
47 not tested for thread safety
48
49 attr.c
50 * nla_parse - does not use nla_policy argument
51
52 cache.c
53 * netlink cache not implemented and only supports one netlink family id
54 which is stored in the nl_cache pointer instead of an actual cache
55
56 netlink.c
57 * nl_recvmsgs - does not support nl_cb_overwrite_recv()
58 * nl_recv - sets/unsets asynchronous socket flag
59
60 SOURCE FILES
61
62 * Android.mk - Android makefile
63 * README - This file
64 * attr.c - Netlink attributes
65 * cache.c - Netlink cache
66 * genl/family.c - Generic netlink family id
67 * genl/genl.c - Generic netlink
68 * handlers.c - Netlink callbacks
69 * msg.c - Netlink messages construction
70 * netlink.c - Netlink socket communication
71 * object.c - libnl object wrapper
72 * socket.c - Netlink kernel socket utils
73
74 IMPORTANT HEADER FILES - NOTE: These are based on the the origin GPL libnl headers
75
76 * netlink-types.h - Contains many important structs for libnl
77 to represent netlink objects
78 * netlink/netlink-kernel.h - Netlink kernel headers and field constants.
79 * netlink/msg.h - macros for iterating over netlink messages
80 * netlink/attr.h - netlink attribute constants, iteration macros and setters
81
82 REFERENCES
83
84 * nl80211.h
85 * netlink_types.h
86 * $LINUX_KERNEL/net/wireless/nl80211.c
87 * http://www.infradead.org/~tgr/libnl/doc-3.0/index.html
88 * http://www.netfilter.org/projects/libmnl/doxygen/index.html
89