44 lines
1.8 KiB
Markdown
44 lines
1.8 KiB
Markdown
rtnetlink  [](https://godoc.org/github.com/jsimonetti/rtnetlink) [](https://goreportcard.com/report/github.com/jsimonetti/rtnetlink)
|
|
=======
|
|
|
|
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`](https://godoc.org/github.com/jsimonetti/rtnetlink/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.
|
|
|
|
### Debugging and netlink errors
|
|
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`. nlmod 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](https://invite.slack.golangbridge.org) in the `#networking`
|
|
channel!
|