PackageTrack
Sign in Get early access

neli

Type safe netlink library written in Rust

0.7.4 39M downloads/mo #1443 most downloaded on crates.io jbaublitz/neli

What this package is like to depend on

Last release 6 months ago

28 Jan 2026

Release timing varies

gaps range from 4 weeks to 1.4 years

Most releases are documented

notes for 19 of 26 stable releases

1 version withdrawn

withdrawn after publishing

9 years old

35 releases · first in 2018

3 releases in the last 12 months

see the full history below

Release timeline

35 releases · Jan 2018 to Jan 2026
2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 35
  1. 0.7.4 28 Jan 2026
    Release notes Open source →
    Release notes

    Bug fixes

    • Fix memory leak in asynchronous and synchronous router that causes threads not to be cleaned up when the NlRouter object is dropped
      • The fix should reliably signal to the thread to exit. Tested with valgrind.
      • ctrl-list-multiple example allows testing multiple socket creation and drop operations to confirm the problem is resolved
      • Please note that the underlying file descriptor had to be set to non-blocking to work with epoll. This mechanism allows waiting for either a thread exit signal or input from the socket.
    Open source →
  2. 0.7.3 08 Dec 2025
    Release notes Open source →
    Release notes

    Fixes

    • Revert Rust edition 2024 bump
    Open source →
  3. 0.7.2 04 Dec 2025
    Release notes Open source →
    Release notes

    Features

    • VLAN support

    Bug fixes and maintenance

    • Fix connector tests for endianness
    • Clippy maintenance
    • nl80211 example updates
    • Doc improvements
    Open source →
  4. 0.7.1 23 Jul 2025
    Release notes Open source →
    Release notes

    Features

    • Support FromBytes and ToBytes for statically sized arrays
    • Allow setting recv buffer size in socket
    • Support for the connector protocol

    Maintenance

    • Clippy fixes
    • Update to Rust 2024 edition
    Open source →
  5. 0.7.0 22 Jun 2025
    Release notes Open source →
    Release notes

    Breaking changes

    • FromBytes and FromBytesWithInput have had the lifetime parameter removed. This removes the ability to borrow data from the buffer written to by the recv() syscall. This is intentional as it provides more ergonomic support for NlRouter to send messages across threads. A new trait, FromBytesWithInputBorrowed, has been added to support the use case of borrowing payloads from attributes as &str or &[u8].
    • The async feature API has been completely redesigned to more closely resemble it's corresponding synchronous API.
    • All new() methods and public fields on data structures used to construct packets have been replaced by the builder pattern.
    • The IO error variant is now the full IO error wrapped in an Arc.

    New Cargo features

    • sync has been added as a Cargo feature. If a user is only interested in asynchronous functionality, sync can be disabled to disable the higher level synchronous API and reduce the number of required dependencies.

    Features

    • Extended ACK support. Sockets now support parsing and enabling entended ACKs for more information in error cases.
    • New router infrastructure allowing ACK handling, seq management, and PID validation for requests sent in parallel.
    • Builder pattern defined for all data structures used to construct netlink packets.
    Open source →
  6. 0.7.0-rc3 16 Jan 2025 pre-release
    Release notes

    Merge pull request #257 from jbaublitz/release

    neli-0.7.0-rc3 and neli-proc-macros-0.2.0-rc3

    Open source →
  7. 0.7.0-rc2 15 Aug 2023 pre-release

    Nothing published for this version

  8. 0.7.0-rc1 22 Jan 2023 pre-release

    Nothing published for this version

  9. 0.6.5 14 Jan 2025

    Nothing published for this version

  10. 0.6.4 21 Jan 2023
    Release notes

    Bug fixes

    • Fixed bug in error intepretation for Nlmsgerr.

    Features

    • Add FromBytes/ToBytes implementations for u128.

    Thanks to the upstream contributors who provided the code for this release!

    Open source →
  11. 0.6.3 21 Oct 2022
    Release notes

    Bug fixes

    • Fixed memory bug in NlSocket::drop_mcast_membership() unsafe code found using valgrind

    Clean up

    • CI and clippy maintenance
    Open source →
  12. 0.6.2 13 Jul 2022
    Release notes

    Enhancements

    • Added support for option user header in netlink protocol for generic netlink
    • Added method to get socket PID
    • Added support for converting to a FlagBuffer from a bitmask

    Bug fixes

    • Fixed up examples directory to compile successfully with cargo build --examples

    Clean up

    • Removed unnecessary features and dependencies (PR from MaxVerevkin)
    • CI and clippy maintenance
    Open source →
  13. 0.6.1 28 Jan 2022
    Release notes

    Bug fixes

    • Bug fix for RtBuffer and GenlBuffer size calculation
    • Bug fix for Rtattr size calculation
    • Bug fixes in tokio usage
    • Bug fix where padding at the end of an empty netlink packet caused errors

    Improvements

    • Better debug logging

    See all pull requests and issues that went into this release here!

    Open source →
  14. 0.6.0 07 Nov 2021
    Release notes

    Bug fixes

    • Fixed problem where Tcmsg could not be created due to padding.
    • Fixed problem with listing multicast groups.

    Additions

    • Addition of neli-proc-macros crate to handle most of trait generation.
    • More testing!

    Breaking changes

    • Changed the core traits from Nl to a number of different, more granular traits.
    • Consolidated iter() and iter2().
    • Major changes to async module.
    • Changes to how bit flag sets are handled.
    Open source →
  15. 0.5.3 21 Mar 2021
    Release notes

    Bug fixes

    • Bug fix for Ifinfomsg.ifi_change being serialized twice.
    • Bug fix for Ndmsg where it could not be constructed due to private padding fields.
    • Bug fix for Ifinfomsg.ifi_change. This should be of type IffFlags, not Iff.
    • Fixed assumption in NlSocketHandle::recv() where this method never expected an ACK to be returned with no data.
      • The behavior of NlSocketHandle::recv() has changed slightly. It will now return ACKs and only returns None when nonblocking. Use NlSocketHandle::iter() for handling of streams of messages.
    • Fixed bug for deserialization of errors returned at the application level.
    • Fixed bug in subscription to multicast groups.
      • The API has been changed and U32Bitmask has been replaced by NetlinkBitArray.

    Additions

    • More constants in Arphrd.
    • More constants in Ifla.
    • Addition of NlSocketHandle::iter2() that does not restrict users to the NlWrapperType type for packet parsing.
    • Addition of convenience methods on RtBuffer and GenlBuffer types to make parsing nested attributes easier.

    Dependency updates

    • Update to tokio 1.0.
    Open source →
  16. 0.5.2 04 Jan 2021
    Release notes

    Bug fixes

    • Fixed bug in Ifaddrmsg serialization and deserialization. Thanks, @joshtriplett!
    Open source →
  17. 0.5.1 01 Dec 2020
    Release notes

    Bug fixes

    • Fixed bug in ACK handling.
      • This change makes NlSocketHandle exclusively responsible for handling ACKs.
    Open source →
  18. 0.5.0 27 Nov 2020
    Release notes

    Breaking changes

    • Change from buffering structs for serialization to regular slices to allow buffer size tracking for each layer of serialization and deserialization and easy slicing into smaller, sized pieces.
    • Change stream feature to async for clarity with higher level API.
    • Remove seq and pid tracking. This will eventually be added to higher level APIs.
    • Make NlSocket::send/::recv take an immutable reference due to the case made for message vs. stream based sockets.
    • Remove universal exports of constants from the consts module.
    • Update to tokio 0.3.
    • Split lower level and higher level synchronous netlink socket calls across two structs, NlSocket and NlSocketHandle.
    • Factor out parsing code so that it can be used across multiple socket types.
    • Add nested netlink attribute parsing for routing netlink attributes.
    • Changes to the Nlmsg struct to support handling application errors returned by the kernel. Previously, there was no easy way to handle application errors returned inside of an Nlmsg packet.
    • Added the ability to define the visibility for constants defined by the consts macros.

    Additions

    • Add genetlink ID to family name/multicast group name lookup.
    • Add Index type for nested attributes returned as a numbered list.
    • NlSocket functions to leave/list multicast groups.
    • Macro infrastructure for generating serialize and deserialize methods safely.
    • attr module for shared attribute code.
    • Debug logging enabled through the logging feature.

    Deprecations

    • Nlattr.get_nested_attributes() in favor of .get_attr_handle()
    • NlSocket.set_mcast_groups() in favor of .add_multicast_membership()

    Bug fixes

    • Bug fixes for rtnetlink

    Documentation

    • Updates to the documentation.
    • More examples.
    • Links to the referenced data structures.
    Open source →
  19. 0.5.0-rc1 03 May 2020 pre-release
    Release notes

    Additions

    • Feature flagged NFLOG support, in the netfilter module.

    Resolved issues

    • Resolved issue relating to allowing documentation annotations in macros for enum variants representing netlink constants.
    Open source →
  20. 0.4.4 10 Aug 2020

    Nothing published for this version

  21. 0.4.3 26 Sep 2019
    Release notes

    Breaking changes

    • Change Nlattr.add_nested_attribute() to take a reference

    Additions

    • Support RTM_* constants in consts.rs
    • Fix length calculation errors
    • Add methods to Nl trait with default implementations - does not break API
    • Additional tests for padding
    • Add design decision documentation for new padding handling

    Deprecations

    • Deprecate .size() usage for Vec<Nlattr> - use .asize() instead

    Structure changes

    • consts.rs is now consts/ with a corresponding submodule for each category of constant - not a breaking change
    • Start enforcing rustfmt in CI and use cargo fmt to switch over to new formatting

    Fixes

    • Merge PR fixing rtnetlink support
    Open source →
  22. 0.4.3-r2 07 Sep 2019 pre-release

    Nothing published for this version

  23. 0.4.3-r1 13 Jul 2019 pre-release

    Nothing published for this version

  24. 0.4.2 25 Jun 2019
    Release notes

    Dependencies

    • Update buffering to 0.3.4 minimum to force stable channel support for neli
    Open source →
  25. 0.4.1 18 Jun 2019
    Release notes

    Breaking changes

    • Revert to builder pattern for creating/parsing generic netlink messages with attributes
      • Particular notable changes for nested attribute handling
    Open source →
  26. 0.4.0 03 Jun 2019
    Release notes

    Breaking changes

    • Rework API in a number of places:
      • Tokio support for sockets
      • Many socket functions
      • Generic netlink

    Additions

    • Support for rtnetlink
    • Iterative message parsing from NlSocket

    Bug fixes

    • Support parsing multiple netlink messages returned in the same socket read buffer
    • Missing documentation added
    • Fix alignment bugs when serializing netlink attributes
    Open source →
  27. 0.3.1 22 Jul 2018
    Release notes

    Breaking changes

    • Migration to buffering crate for buffer operations - this does change the API

    NOTE:

    For record keeping it should be noted that semantic versioning was misused here. 0.3.0-r1 and 0.3.0-r2 should have been 0.3.1 and 0.3.2 respectively.

    Open source →
  28. 0.3.0 27 May 2018 withdrawn
    Release notes

    Breaking changes

    • Type signature of bind and connect calls' groups parameter was changed to be a Vec<u32> which will allow specifying a list of IDs and the group bitmask will be calculated for the user.
    • poll implementation of for NlSocket for tokio::prelude::Stream trait will now return io::ErrorKind::InvalidData if the socket file descriptor is not set to non-blocking before polling. This is intentional as Tokio docs rely on polls being non-blocking and my implementation requires a read that either returns an io::ErrorKind::WouldBlock value or the desired data.
    • There is now an nlattr module to group together all of the netlink attribute code.

    Additions

    • A function block was added to allow reversing nonblock function on NlSocket.
    • is_blocking was added and returns a bool indicating whether reads will block on this socket.

    Deprecations

    • get_payload_as was deprecated in favor of get_payload_with.

    Removed

    None

    Open source →
  29. 0.3.0-r2 27 May 2018 pre-release
    Release notes

    Bug fixes

    • Fix documentation bug
    Open source →
  30. 0.3.0-r1 27 May 2018 pre-release
    Release notes

    Bug fixes

    • After looking at tokio's File implementation, the file descriptor should block for the Stream implementation
    Open source →
  31. 0.2.1 27 May 2018

    Nothing published for this version

  32. 0.2.0 12 Apr 2018

    Nothing published for this version

  33. 0.1.2 06 Feb 2018

    Nothing published for this version

  34. 0.1.1 02 Feb 2018

    Nothing published for this version

  35. 0.1.0 20 Jan 2018

    Nothing published for this version

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive