The libnl suite is a collection of libraries providing APIs to netlink protocol based Linux kernel interfaces.
Netlink is a IPC mechanism primarly between the kernel and user space processes. It was designed to be a more flexible successor to ioctl to provide mainly networking related kernel configuration and monitoring interfaces.
The interfaces are split into several small libraries to not force applications to link against a single, bloated library.
The easiest method of installing the libnl library suite is to use the existing packages of your linux distribution. See the table below for a list of available packages per distribution. Please note that the list may be out of date at times. Refer to the manual of your distribution for more information on how to install packages.
| Distribution | libnl-3.x | libnl-1.x |
|---|---|---|
| Source Package | libnl-3.2.25.tar.gz | libnl-1.1.4.tar.gz |
| CentOS | Never packaged | 1.1 Package names: libnl, libnl-devel |
| Debian | 3.2.24 Package names: libnl-3, libnl-3-dev, libnl-route-3-200, ... |
1.1 Package names: libnl1, libnl1-dev, libnl1-doc |
| Fedora | 3.2.24 Package names: libnl3 |
1.1 Package names: libnl, libnl-devel |
| OpenSUSE | 3.2.24 Package names: libnl3, libnl3-devel, libnl-config, libnl-tools |
1.1 Package names: libnl-1, libnl-1_1-devel |
| Slackware | 3.2.21 | 1.1 Package names: libnl-1.1 |
| Ubuntu | 3.2.24 Package names: libnl-3-200, libnl-3-200-dbg |
1.1 Package names: libnl1, libnl-dev, libnl-doc |
See the archives for specific older releases.
The latest stable release is: 3.2.25 (Released on Jul 16, 2014)
Cong Wang (1):
tc: add co_groups for tc qdisc and filter
Thomas Graf (1):
ip6tnl: Use for in6_addr and stuff
Thomas Haller (4):
doc: state in documentation that libnl3 is supposed to work with 3.x kernels
build: let autogen.sh script change into top source directory
build: embed the git commit id of HEAD in the configure script
libnl-3.2.25 release
Cong Wang (20):
remove the obsolete src/cls directory
remove nl_cache_lookup() from cache.h
basic: make BASIC_ATTR_TARGET optional
fix comments for rtnl_act_add()
remove some useless code in lib/route/cls/u32.c
fill prio and protocol attr bits when parsing cls message
link: document sk == NULL case for rtnl_link_alloc_cache()
u32: add const to rtnl_u32_add_key_in*_addr()
route: fix off-by-one in rtnl_act_parse()
act: fix policy range check
link: call rtnl_link_set_type() in link_msg_parser()
veth: implement ->io_alloc
veth: implement ->io_free
veth: use nl_object_clone() to deep copy rtnl_link object
add NLM_F_EXCL to rtnl_link_veth_add()
veth: grab a reference for rtnl_link_veth_get_peer()
act: grab a reference when adding an action to a filter
act: fix a pointer in rtnl_act_msg_parse()
tunnel: add a copy of include/linux/if_tunnel.h
act: fix the logic of parsing actions
Hangbin Liu (3):
gitignore: ignore ctags file
doc/core: reply message should send from kernel to app
gitignore: ignore patch files
Hiroaki KAWAI (1):
python: fix wrongly passing argument to function in ObjIterator.next()
Michał Górny (2):
Explicitly create output directories for flex/yacc output.
Use paths relative to srcdir in setup.py.
Peter Wu (3):
u32: prevent memcpy from NULL
attr: prevent garbage return value for NULL param
attr: fix compile warning in headers
Rich Fought (1):
netfilter/ct: expand CT parameters that can be used in add/delete operations
Sruthi Yellamraju (1):
cache: add missing declaration of nl_cache_move() in include/netlink/cache.h
Susant Sahani (8):
introduce ipip tunnel support
introduce gre tunnel support
introduce sit tunnel support
ipgre: fix attribute IPGRE_ATTR_OKEY in ipgre_put_attrs()
ipgre: rename new public API to avoid confusion
ipvti: introduce vti tunnel support
vlan: add support for IFLA_VLAN_PROTOCOL
ip6tnl: introduce ip6 tunnel support
Thomas Graf (1):
link: Catch missing io_free() implementations
Thomas Haller (39):
build: fix error when running `configure --disable-doc`
route: fix return value of nl_rtgen_request()
utils: fix nl_msec2str() which always returned '0msec' for whole second durations
route: rtnl_route_build_msg() should not overwrite the route scope
utils: add nl_has_capability() function
utils: indicate capability NL_CAPABILITY_ROUTE_BUILD_MSG_SET_SCOPE
route: don't enforce minlen in inet6_parse_protinfo() (IFLA_PROTINFO) and inet_parse_af() (IFLA_AF_S
route: detect missing cfgid in rtnl_link_inet_get_conf()
route: update kernel header snmp.h and fix inet6_parse_protinfo() after kernel API breakage
route: rename internal copy of kernel header file 'inetdevice.h' to 'ip.h'
route: update copy of kernel header 'ip.h'
route/addr: only sent IFA_FLAGS when needed to workaround picky older kernels
gitignore: ignore 'nf-ct-add' (netfilter/ct)
docs: add code comment to explain the meaning of the fields in rtnl_addr_cacheinfo
act: fix memory leak in rtnl_act_parse()
doc: fix wrong name in documentation for rtnl_link_bridge_alloc()
gitignore: ignore test binaries and artifacts in "tests/"
gitignore: ignore test binaries and artifacts in "tests/"
lib/socket: use proper typed constant UINT32_MAX for uint32_t typed port
lib/socket: don't fail if no more local ports can be assigned in nl_socket_alloc
lib/socket: retry generate local port in nl_connect on ADDRINUSE
lib/socket: randomize the generated local port
Merge branch 'socket_local_port'
Merge branch 'mgorny-master'
route/link: pass proper type to sizeof() for calloc() in vlan_parse()
lib: reorder free() after printf("%p") statements
route: remove unnecessary non-null check in pktloc and ematch
cli: add error checking to nl-route-get about out-of-memory
cls: fix array overrun in rtnl_ematch_opnd2txt()
cache: fix crash in nl_cache_dump_filter() when omitting the params argument
route/link: fix dangling pointer after rtnl_link_get_ifalias(link, NULL)
netfilter/ct: fix calling nfnl_*_put() on uninitialized memory after nfnlmsg_*_parse()
route/pktloc: read_pktlocs() always returned success status
Merge branch 'coverity-fixes'
build: fix error in include/Makefile.am
doc: fix error in core documentation for nl_cache_mngr_alloc()
Merge branch 'coverity-fixes-2'
doc: fix doxygen-link.py by skipping invalid entries in libnl.dict
attr: nla_get_u64() should return 0 if the attribute does not fully contain 64 bit
Tobias Klauser (5):
obj: Fix dereference before NULL check
msg: Remove unnecessary call of nlmsg_free on known NULL pointer
cli: Fix typo in error message
cache_mngr: Return proper error code if nl_socket_alloc() fails
cache_mngr: Fix assignment of error code in nl_cache_mngr_alloc()
Emmanuel Roullit (1):
Perform no operation on nl_object_free(NULL).
Emmanuel Thierry (1):
Wrong calcultation in nla_reserve
Jiri Pirko (1):
use MSG_TRUNC flag to get recv message size at once
Thomas Graf (2):
1.1.4 release
nl: Increase receive buffer size to 4 pages
Коренберг Марк (дома) (1):
Fix leak of cb if nl_socket_alloc_cb() failed to allocate socket
Documentation tarball: libnl-doc-3.2.25.tar.gz
| Library | Developer's Guide | API Reference | Tutorials |
|---|---|---|---|
| Core Library (libnl) | Core Library Developer's Guide | API Reference | |
| Routing Family (libnl-route) | Routing Library Developer's Guide | API Reference | |
| Generic Netlink Family (libnl-genl) | API Reference | ||
| Netfilter Family (libnl-nf) | API Reference |
Please post questions and patches to the libnl mailinglist libnl@lists.infradead.org.
Visit the info page for more information and to subscribe to the list or checkout the archives.
Releases 3.2.18 and 3.2.19 have been shipped with an incorrect SONAME.
Important: 3.2.10 reverted an an uneeded SONAME bump that was done due to an ABI/API breakage in an unused API. After severe discussion, it was decided to undo the SONAME bump to make life easier for distribution maintainers by removing the unused APIs from the public header files and by providing compat header files that mistakenly included them.
If you linked against 3.2.18 or 3.2.19 your binary will not be compatible with >= 3.2.20. You will have to relink your binary. We are sorry for any inconvenience this may cause.
git://git.infradead.org/users/tgr/libnl.git git://github.com/tgraf/libnl.git
Support for 1.1.x releases is limited, backports are only done upon request. Do not develop new applications based on libnl1 and consider porting your applications to libnl3