ChangeLog discontinued, git history can be found here:
https://github.com/thom311/libnl

Summary of Changes from 1.0-pre6 to 1.0-pre7
================================================
	Thomas Graf <tgraf@suug.ch>
	  o Generic netlink support
	  o Route Addition/Deletion
	  o Added nl_cache_subset()
	  o Have nl_object_clone() make real clones without
	    sharing any data.
	  o Remove old nl_object_alloc() not based on a object
	    operations to avoid bugs due to missing init.
	  o Added nl-list-caches utility
	  o Removed nlmsg_build_no_hdr(), duplicate
	  o Reworked message interface
	  o Fixed nlmsg_put() and genlmsg_put() to correctly reserve
	    tail room for user specific headers.
	  o Added nl_cache_move()
	  o Renamed nl_cache_delete() to nl_cache_remove() (no API break)
	  o Fixed reference counting while objects stay in caches.
	  o Object marking
	  o Moved attribute mask for objects into generic structure
	  o nl-list-caches: List available dump procedures
	  o Use PAGE_SIZE as initial buffer size when reading from
	    netlink socket
	  o Double buffer size when recv() returns MSG_TRUNC
	  o Replaced filter object operation with new compare operation
	    capable of listing differences between two objects
	  o Added nl_object_identical() to check if two objects are
	    identical from a uniqueness point of view
	  o Added nl_object_diff() returning a bitmask of differences in
	    attributes
	  o Added nl_object_attr_list() generating a list of attribute
	    name the object has assigned 
	  o Cache updates based on event notifications, code based on
	    Patrick McHardy's patches
	  o Cache Manager
	  o Added NL_AUTO_PID, NL_AUTO_SEQ for convenience
	  o Disable MSG_PEEK by default and provide nl_socket_enable_msg_peek()
	  o Fixed nl_recvmsgs() to return 0 when interrupted via NL_STOP or
	    NL_SKIP
	  o Fixed nl_recvmsgs() to stop reading after parsing if not in the
	    middle of a multipart message.
	  o Fixed nl_recvmsgs() to not stop after receiving an ACK
	  o Fixed nl_recvmsgs() to not blindly discard remaining messages
	    if a NLMSG_DONE message is received.
	
	Petr Gotthard <petr.gotthard@siemens.com>
	Siemens AG Oesterreich
	  o Fix u32 to properly handle multiple keys
	  o rtnl_htb_set_(r|c)buffer()
	  o Fixed MTU handling in HTB class, problem pointed out
	    by Edouard Thuleau
	
	Zilvinas Valinskas <zilvinas@wilibox.com>
	  o Fix wrong msg_namelen in nl_recv()
	  o Fix memory leak in flnl_request_put()

	Helmut Schaa <hschaa@suse.de>
	  o Fix for using libnl from within C++

	Patrick McHardy <kaber@trash.net>
	  o *_alloc_cache(): Only refill cache if handle is provided
	
	James Oakley <jfunk@funktronics.ca>
	  o Fix rtnl_link_set_arptype() typo

	Philip Craig <philipc@snapgear.com>
	  o Change address family type from char to int
	  o Fix the error handling when the build fails.
	  o add nl_cache_mngr_get_fd()
	  o add netfilter support
	  o add netfilter conntrack support
	  o add netfilter log support

Summary of Changes from 1.0-pre5 to 1.0-pre6
================================================
	Christopher Aillon <caillon@redhat.com>
	  o Use $(libdir) instead of $(prefix)/lib for 64bit awesomeness.

	Thomas Graf <tgraf@suug.ch>
	  o Extend nl_msg to include source address, destination address
	    and the protocol being used.
	  o Make nl_send*() take a nl_msg instead of a nlmsghdr (API BREAK)
	  o Change callbacks to take a nl_msg instead of source address
	    and nlmsghdr (API BREAK)
	  o caches must specify the protocol they're hooked up from now on
	    if they intend to be associated with message types.
	  o cache_mngt_associate now takes the protocol besides the message
	    type to allow for multiple protocols to be supported (API BREAK)
	  o overwrite destination address in nl_send() when specified in the
	    message itself, allows for unbound addressing.
	  o Support for netlink based fib_lookup()
	  o Documentation fixes
	  o Fix double nlmsg_free() in nl_recvmsgs() while receiving
	    a multipart message and the read was interrupted.
	  o Change cache operations to store names for message types.
	  o Provide interface to convert message type to character string.
	  o Add dp_dump_msgtype to prefix each dumped element with a
	    pretty printed message type.
	  o netlink fib lookup support
	  o nl_recvmsgs() debugging
	  o use nl_cachemngt_type2name() when pretty printing netlink header
	  o Routing protocol translations.
	  o Routing metric translations.
	  o Revised route dumping
	  o Nexthop flag translations.
	  o Add support for IFF_DORMANT

	Petr Gotthard <petr.gotthard@siemens.com>
	Siemens AG Oesterreich
	  o Fix access to obj after freeing it
	  o Fix u32 selector access after realloc() 
	  o Fix missing out-of-memory error handling in various places
	  o Enhance nl-monitor to have group selection selectable and
	    demonstrate usage of select()
	  o Don't ignore IFF_RUNNING any longer
	  o fw classifier support
	
	Patrick McHardy <kaber@trash.net>
	  o Fix conflicting types for __u64
	  o Fix printf format string warnings
	  o Fix object cloning
	  o Deal with structure padding in nl_object_clone
	  o Fix nl_addr leak
	  o Set ce_msgtype in all parsed objects
	  o Fix addr flag filter
	  o Fix RTNLGRP definitions (was based on broken kernel version)
	  o Export nl_get_errno()
	  o Add function to get/set peer pid
	  o Add IFF_LOWER_UP
	  o Add/export some missing accessor functions
	  o print /0 prefix in nl_addr2str()
	  o Fix invalid free in nl_addr_parse for AF_UNSPEC addresses
	  o Use __str2flags instead of __str2type in rtnl_link_str2flags()
	  o Make sure object and filter types match in nl_object_match()
	  o Add support for credential passing over netlink sockets (API BREAK)
	  o Add support for custom dump callbacks
	  o Add NL_DUMP_ENV format

	Michael Biebl <biebl@teco.edu>
	"Alex V. Myltsev" <avm@altlinux.ru>
	  o Makefile fixes


Summary of Changes from 1.0-pre4 to 1.0-pre5
================================================
	Thomas Graf <tgraf@suug.ch>
	  o Use minimized local copies for <linux/if.h>, <linux/if_arp.h>,
	    and <linux/if_ether.h> to avoid compile troubles with
	    applications including <net/if*.h>
	    Reported by Christopher Aillon.

Summary of Changes from 1.0-pre3 to 1.0-pre4
================================================
	Thomas Graf <tgraf@suug.ch>
	  o Fix wrong rtnl_addr_set_prefixlen() external declaration,
	    reported by Dan Williams.
	  o Fix nl_addr_parse() to not change the original string
	    for prefixes.
	  o Do not build documentation per default, but have the user
	    issue 'make gendoc'
	  o Assume neighbours to be permanent, set NUD_PERMANENT if not
	    specified otherwise.

Summary of Changes from 1.0-pre2 to 1.0-pre3
================================================
	Thomas Graf <tgraf@suug.ch>
	  o Fix SFQ parser to allocate qdisc options.
	  o Fix rule statistics dumping to not call itself.
	  o Complete Netem qdisc interface.
	  o Add rtnl_*_put() and rtnl_*_free() to increase readability.
	  o Cleanup of nl-* tools
	  o Fix inclusion guards of route/neightbl.h
	  o Fix nl_connect() to only modify rx/tx socket buffers if not
	    already modified by the user.
	  o Fix wrong nl_handle_alloc() prototype.
	  o Fix typo in route/addr.c causing label to be marked as
	    local address.
	  o Use ~0UL as default prefix length instead of 0.
	  o Fix neighbour message parser to correctly store core.
	    attributes and provide them again.
	  o Fix neighbour message parser to correctly guess address family.
	    to make it compatible with nl_addr_parse() and ether llc
	    addresses.
	  o Add rtnl_route_table2str(), rtnl_route_str2table().
	  o Add nl_cache_nitems_filter() to find out if a filter produces
	    any matches.
	  o Remove rtnl_rule_set_(dst|src)_str() (obsolete).
	  o Remove scope and protocol field of routing rule.
	  o Complete routing rules module.
	  o Move realms translations from route to rtnl module.

Summary of Changes from 1.0-pre1 to 1.0-pre2
================================================
	Thomas Graf <tgraf@suug.ch>
	  o More API documentation
	  o Added flags argument to rtnl_addr_(add|build_add_request)().
	  o Added rtnl_addr_(set|get)_multicast().
	  o Moved scope translations routines from route/route.c to
	    route/rtnl.c, required by other modules as well.
	  o Removed old rtattr bits from rtnetlink-kernel.h
	  o Customized libnl.css for doxygen documentation
	  o Removed non-reentrant translation routines, only bloating
	    the code and too risky.
	  o Fixed wrong version number from 1.0-pre1.
	  o Re-enabled unfinished policer module.
	  o Reworked TBF module, automatic caluclation of transmit times,
	    limit setable via latency, automatic cell size calculation,
	    options TLV generation. (untested)
	  o Renamed nl_xmittime() to rtnl_tc_calc_txtime().
	  o Renamde nl_build_rtable() to rtnl_tc_build_rate_table()

	Petr Gotthard <petr.gotthard@siemens.com>,
	Siemens AG Oesterreich
	  o Fix symlinks to libnl library files to be moveable
	  o Fix extern struct prototypes meant to be static.
	  o Add empty install target to src/Makefile

	Simon Stelling <blubb@gentoo.org>
	  o Use LIBDIR instead of $(prefix)/lib for users to allow librariers
	    into $(prefix)/lib64.

Summary of Changes from 0.5.0 to 1.0-pre1
================================================
	Thomas Graf <tgraf@suug.ch>
	  o Uncountable number of changes, rewrite of certain modules,
	    several major API breakages
	
	Petr Gotthard <petr.gotthard@siemens.com>,
	Siemens AG Oesterreich
	  o added class_build, rtnl_class_build_add_request, rtnl_class_add
	  o added HTB (Hierarchical Token Bucket) class support
	  o added nl_xmittime, nl_build_rtable
	  o added nl_data_append to realloc a nl_data structure
	  o added rtnl_rcopy_ratespec as reverse to rtnl_copy_ratespec
	  o fixed byte order conversion of rtnl_filter.protocol
	  o SuSE and Fedora Linux compile fixes
	  o fixed u32 classifier support
	  o added rtnl_u32_set_handle, rtnl_u32_set_classid, rtnl_u32_set_flags
	    and several rtnl_u32_add_key_... operations to u32 classifier

Summary of Changes from 0.4.4 to 0.5.0
================================================
	Thomas Graf <tgraf@suug.ch>
	  o API documentation
	  o nl_cache_filter to manually filter on a object
	  o partial routing support
	  o routing rules support
	  o Properly set address family when setting addresses
	  o debug flag and some rare messages, more to come
	  o make error message verboseness configurable
	  o tc fixes to wait for ack
	  o cleanup and adaption of address code to latest internal API
	  o various cleanups
	  o dozens of API breakages (better now than later)

	Daniel Hottinger <hotti@hotti.ch>
	  o arch 64bit printf length modifier fixes

	Baruch Even <baruch@ev-en.org>,
	Mediatrix Telecom, inc. <ericb@mediatrix.com>
	  o address support

Summary of changes from 0.4.3 to 0.4.4
================================================
	Thomas Graf <tgraf@suug.ch>:
	  o overall cleanups for better code quality
	  o replace dump_(brief|full|with_stats) ops with
	    dump[NL_DUMP_MAX] array to allow further additions without
	    breaking the ABI.
	  o add of send_ack callback, called whenever when oppenent
	    asks for an ACK.
	  o make nl_parse_rtattr initialize the tb buffer like in the
	    kernel, caller must no longer take care of it.
	  o remove nl_addrnattr (obsolete)
	  o fixed nl_msg_append_raw to correctly calculate length
	    for raw data not aligned to NLMSG_ALIGN
	  o fix memory leak in nl_recv in case of errors
	  o correctly check sequence numbers if more than one message
	    was sent out before the answer is being received.
	  o add workaround for buggy netlink applications not properly
	    setting NLM_F_MULTI.

Summary of changes from 0.4.2 to 0.4.3
================================================

	Thomas Graf <tgraf@suug.ch>:
	  o use parser_param in nl_cache_parse
	  o EGP: dump nfilters attribute
	  o allow retrieving of filters attached to classes via
	    FILTER_CACHE_PARENT(C) cache argument
	  o filter message building API

Summary of changes from 0.4.1 to 0.4.2
================================================

	Baruch Even <baruch@ev-en.org>:
	  o memory leak fix in nl_parse_rtattr
	  o reset padding to 0 when appending raw data to a nl_msg
	  o avoid overwriting nlmsg ptr when buffer extending fails
	  o typo fixes
	  o create symlinks libnl.so.0 and libnl.so
	
	Thomas Graf <tgraf@suug.ch>:
	  o EGP classifier support
	  o avoid null pointer in printf call
	  o added nl_cache_parse to put nl_msg's into a cache
	  o added rtnl_filter_build to build a nl_msg filter message
	  o correctly install header files
	  o nl_msg_payload/nl_msg_payloadlen to access nl_msg payload
	  o nl_parse_nested macro to simplify nested TLV parsing
	  o NL_ERROR_ASSERT compile flag to assert(0) on errors
	  o rta alignment fix in nl_msg_append_tlv
	  o added nl_msg_parse_rtattr as shortcut for nl_parse_rtattr
	    for nl_msg API
	  o added nl_parse_nested for nested TLVs
	  o added RTA_ARRAY_ELEMS macro to calculate array length
	    for array TLVs
	  o added nl_wait_for_ack to wait for the next ack
	  o added rtnl_link_build_change_request(...)
	  o added rtnl_neigh_build_*_request
	  o converted neighbour code to use nl_wait_for_ack
	  o cb_recvmsgs_ow callback to overwrite internal calls to
	    nl_recvmsgs_def
	  o cb_seq_check callback to overwrite default sequence checking
	  o added nl_parser_param as argument for message parsers including
	    a callback to be called upon successful parsing of a message.
	    Removes the requirement of having all parsed messages to be added
	    to a cache.
	  o added cb_recv_ow and nl_send_ow callbacks to overwrite internal
	    calls to nl_recv and nl_send.

	Jamal Hadi Salim <hadi@cyberus.ca>
	  o Linux 2.4 compile fixes
