Package rtnetlink provides low-level access to the Linux rtnetlink API. MIT Licensed.
Go
173
383 commits
updated Oct 12, 2026
Package rtnetlink allows the kernel's routing tables to be read and
altered. Network routes, IP addresses, Link parameters, Neighbor setups,
Queueing disciplines, Traffic classes and Packet classifiers may all be
controlled. It is based on netlink messages.
A convenient, high-level API wrapper is available using package
rtnl.
The base rtnetlink library explicitly only exposes a limited low-level API to
rtnetlink. It is not the intention (nor wish) to create an iproute2
replacement.
Unfortunately the errors generated by the kernels netlink interface are not very great.
When in doubt about your message structure it can always be useful to
look at the message send by iproute2 using strace -f -esendmsg /bin/ip
or similar.
Another (and possibly even more flexible) way would be using nlmon and
wireshark. nlmon is a special kernel module which allows you to
capture all netlink (not just rtnetlink) traffic inside the kernel. Be
aware that this might be overwhelming on a system with a lot of netlink
traffic.
# modprobe nlmon
# ip link add type nlmon
# ip link set nlmon0 up
At this point use wireshark or tcpdump on the nlmon0 interface to view all netlink traffic.
Have a look at the examples for common uses of rtnetlink.
If you have any questions or you'd like some guidance, please join us on
Gophers Slack in the #networking
channel!
Overall
Maintained
Code review
Go module
Latest release
Releases this year
713 followers · starred Apr 2019
1,093 followers · starred Nov 2024
2,549 followers · starred Sep 2022
450 followers · starred Apr 2019
Package rtnetlink provides low-level access to the Linux rtnetlink API. MIT Licensed.
Go
173
383 commits
updated Oct 12, 2026
Package rtnetlink allows the kernel's routing tables to be read and
altered. Network routes, IP addresses, Link parameters, Neighbor setups,
Queueing disciplines, Traffic classes and Packet classifiers may all be
controlled. It is based on netlink messages.
A convenient, high-level API wrapper is available using package
rtnl.
The base rtnetlink library explicitly only exposes a limited low-level API to
rtnetlink. It is not the intention (nor wish) to create an iproute2
replacement.
Unfortunately the errors generated by the kernels netlink interface are not very great.
When in doubt about your message structure it can always be useful to
look at the message send by iproute2 using strace -f -esendmsg /bin/ip
or similar.
Another (and possibly even more flexible) way would be using nlmon and
wireshark. nlmon is a special kernel module which allows you to
capture all netlink (not just rtnetlink) traffic inside the kernel. Be
aware that this might be overwhelming on a system with a lot of netlink
traffic.
# modprobe nlmon
# ip link add type nlmon
# ip link set nlmon0 up
At this point use wireshark or tcpdump on the nlmon0 interface to view all netlink traffic.
Have a look at the examples for common uses of rtnetlink.
If you have any questions or you'd like some guidance, please join us on
Gophers Slack in the #networking
channel!
Overall
Maintained
Code review
Go module
Latest release
Releases this year
713 followers · starred Apr 2019
1,093 followers · starred Nov 2024
2,549 followers · starred Sep 2022
450 followers · starred Apr 2019