Rust crate for Netlink Route Protocol
The netlink-packet-route
crate is designed to abstract Netlink route
protocol(rtnetlink
) packet into Rust data types. The goal of
this crate is saving netlink user from reading Kernel Netlink codes.
This crate grouped Netlink route protocol into these modules:
link
: NIC interface, similar to toip link
command.address
: IP address, similar toip address
command.route
: Route, similar toip route
command.rule
: Route rule, similar toip rule
command.tc
: Traffic control, similar totc
command.neighbour
: Neighbour, similar toip neighbour
command.neighbour_table
: Neighbour table, similar toip ntable
command.nsid
: Namespace, similar toip netns
command.
Normally, you should use rtnetlink
instead of using this
crate directly.
Development
-
Please use
git commit --signoff
to append Signed-off-by trailer to commit message. -
For new source file, please append
// SPDX-License-Identifier: MIT
at the beginning with content of license new code to MIT license. -
No panic is allowed, please use
Result<>
instead ofunwrap()
orexpect()
. -
Please run
cargo fmt
andcargo clippy
before creating pull request. -
All struct/enum should be decorated by
#[non_exhaustive]
to preserve API backwards compatibility unless explicit approval from maintainer. -
Unknown netlink attribute should be stored into
Other(DefaultNla)
instead of breaking decoding. -
Please use unit test case to cover the serialize and deserialize of the changed netlink attribute. To capture the netlink raw bytes, you may use tcpdump/wireshark again the
nlmon
interface. For example:
# Then use wireshark to open this `netlink_capture_file.cap`
# Find out the packet you are interested,
# right click -> "Copy" -> "...as Hex Dump".
# You may use https://github.com/cathay4t/hex_to_rust to convert this
# hexdump to rust u8 array
-
The integration test(play with linux kernel netlink interface) should be placed into
rtnetlink
crate. Current(netlink-packet-route) crate should only unit test case only. -
For certain netlink message which cannot captured by nlmon, please use Rust Debug and explain every bits in comment.
-
Optionally, please run
tools/test_cross_build.sh
to make sure your code is compilable on other platforms.