• Home
Name Date Size #Lines LOC

..--

genl/03-May-2024-348211

.gitignoreD03-May-202438 32

Android.mkD03-May-2024768 3825

READMED03-May-20243.4 KiB8971

attr.cD03-May-20246.1 KiB240150

cache.cD03-May-2024890 3811

dbg.cD03-May-2024238 1310

handlers.cD03-May-20241.9 KiB9153

msg.cD03-May-20243.5 KiB15192

netlink.cD03-May-20246.2 KiB274179

object.cD03-May-2024890 3411

socket.cD03-May-20242.9 KiB14291

README

1Netlink Protocol Library
2
3This library is a clean room re-implementation of libnl 2.0 and
4re-licensed under Apache 2.0. It was developed primarily to support
5wpa_supplicant. However, with additional development can be extended
6to support other netlink applications.
7
8Netlink 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
25NETLINK 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
40KNOWN 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
60SOURCE 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
74IMPORTANT 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
82REFERENCES
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