Crates.io | netlink-packet-route |
lib.rs | netlink-packet-route |
version | 0.21.0 |
source | src |
created_at | 2019-12-20 08:09:04.995119 |
updated_at | 2024-09-12 13:09:06.235812 |
description | netlink packet types |
homepage | https://github.com/rust-netlink/netlink-packet-route |
repository | https://github.com/rust-netlink/netlink-packet-route |
max_upload_size | |
id | 190859 |
size | 1,013,156 |
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 to ip link
command.address
: IP address, similar to ip address
command.route
: Route, similar to ip route
command.rule
: Route rule, similar to ip rule
command.tc
: Traffic control, similar to tc
command.neighbour
: Neighbour, similar to ip neighbour
command.neighbour_table
: Neighbour table, similar to ip ntable
command.nsid
: Namespace, similar to ip netns
command.Normally, you should use rtnetlink
instead of using this
crate directly.
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 of unwrap()
or
expect()
.
Please run cargo fmt
and cargo 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:
modprobe nlmon
ip link add nl0 type nlmon
ip link set nl0 up
tcpdump -i nl0 -w netlink_capture_file.cap
# 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.