Switch branches/tags
android-wear-o-preview-4 android-wear-o-preview-3 android-wear-n-preview-2 android-wear-n-preview-1 android-wear-8.0.0_r1 android-wear-7.1.1_r1 android-wear-5.1.1_r1 android-wear-5.1.0_r1 android-wear-5.0.0_r1 android-vts-8.0_r7 android-vts-8.0_r6 android-vts-8.0_r2 android-vts-8.0_r1 android-sdk-support_r11 android-sdk-adt_r20 android-sdk-adt_r16.0.1 android-sdk-4.4.2_r1.0.1 android-sdk-4.4.2_r1 android-sdk-4.0.3_r1 android-sdk-4.0.3-tools_r1 android-o-preview-4 android-o-preview-3 android-o-preview-2 android-o-preview-1 android-o-mr1-preview-2 android-o-mr1-preview-1 android-o-mr1-iot-preview-6 android-o-iot-preview-5 android-n-preview-5 android-n-preview-4 android-n-preview-3 android-n-preview-2 android-n-preview-1 android-n-mr2-preview-2 android-n-mr2-preview-1 android-n-mr1-preview-2 android-n-mr1-preview-1 android-n-iot-preview-4 android-n-iot-preview-2 android-m-preview android-m-preview-2 android-m-preview-1 android-l-preview_r2 android-cts-verifier-4.0.3_r1 android-cts-verifier-4.0_r1 android-cts-8.1_r2 android-cts-8.1_r1 android-cts-8.0_r6 android-cts-8.0_r5 android-cts-8.0_r4 android-cts-8.0_r3 android-cts-8.0_r2 android-cts-8.0_r1 android-cts-7.1_r14 android-cts-7.1_r13 android-cts-7.1_r12 android-cts-7.1_r11 android-cts-7.1_r10 android-cts-7.1_r9 android-cts-7.1_r8 android-cts-7.1_r7 android-cts-7.1_r6 android-cts-7.1_r5 android-cts-7.1_r4 android-cts-7.1_r3 android-cts-7.1_r2 android-cts-7.1_r1 android-cts-7.0_r18 android-cts-7.0_r17 android-cts-7.0_r16 android-cts-7.0_r15 android-cts-7.0_r14 android-cts-7.0_r13 android-cts-7.0_r12 android-cts-7.0_r11 android-cts-7.0_r10 android-cts-7.0_r9 android-cts-7.0_r8 android-cts-7.0_r7 android-cts-7.0_r6 android-cts-7.0_r5 android-cts-7.0_r4 android-cts-7.0_r3 android-cts-7.0_r2 android-cts-7.0_r1 android-cts-6.0_r26 android-cts-6.0_r25 android-cts-6.0_r24 android-cts-6.0_r23 android-cts-6.0_r22 android-cts-6.0_r21 android-cts-6.0_r20 android-cts-6.0_r19 android-cts-6.0_r18 android-cts-6.0_r17 android-cts-6.0_r16 android-cts-6.0_r15 android-cts-6.0_r14 android-cts-6.0_r13 android-cts-6.0_r12
Nothing to show
Find file History
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
..
Failed to load latest commit information.
genl
.gitignore
Android.mk
README
attr.c
cache.c
dbg.c
handlers.c
msg.c
netlink.c
object.c
socket.c

README

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