mdlayher/netlink
mdlayher/netlink has 1,087 GitHub stars and 112 forks. Star changes are not measured yet. Last checked 2026-11-09 10:32 UTC. Last push 2026-11-01.
Package netlink provides low-level access to Linux netlink sockets (AF_NETLINK). MIT Licensed.
Measured star growth
- in 24h
- Update delayed
- in 7 days
- Update delayed
- in 15 days
- Update delayed
- in 1 month
- Update delayed
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
Originalnetlink

Package netlink provides low-level access to Linux netlink sockets
(AF_NETLINK). MIT Licensed.
For more information about how netlink works, check out my blog series on Linux, Netlink, and Go.
If you have any questions or you'd like some guidance, please join us on
Gophers Slack in the #networking
channel!
Stability
See the CHANGELOG file for a description of changes between releases.
This package has a stable v1 API and any future breaking changes will prompt the release of a new major version. Features and bug fixes will continue to occur in the v1.x.x series.
This package only supports the two most recent major versions of Go, mirroring Go's own release policy. Older versions of Go may lack critical features and bug fixes which are necessary for this package to function correctly.
Design
A number of netlink packages are already available for Go, but I wasn't able to find one that aligned with what I wanted in a netlink package:
- Straightforward, idiomatic API
- Well tested
- Well documented
- Doesn't use package/global variables or state
- Doesn't necessarily need root to work
My goal for this package is to use it as a building block for the creation of other netlink family packages.
Ecosystem
Over time, an ecosystem of Go packages has developed around package netlink.
Many of these packages provide building blocks for further interactions with
various netlink families, such as NETLINK_GENERIC or NETLINK_ROUTE.
To have your package included in this diagram, please send a pull request!
flowchart LR
netlink["github.com/mdlayher/netlink"]
click netlink "https://github.com/mdlayher/netlink"
subgraph "NETLINK_CONNECTOR"
direction LR
garlic["github.com/fearful-symmetry/garlic"]
click garlic "https://github.com/fearful-symmetry/garlic"
end
subgraph "NETLINK_CRYPTO"
direction LR
cryptonl["github.com/mdlayher/cryptonl"]
click cryptonl "https://github.com/mdlayher/cryptonl"
end
subgraph "NETLINK_GENERIC"
direction LR
genetlink["github.com/mdlayher/genetlink"]
click genetlink "https://github.com/mdlayher/genetlink"
devlink["github.com/mdlayher/devlink"]
click devlink "https://github.com/mdlayher/devlink"
ethtool["github.com/mdlayher/ethtool"]
click ethtool "https://github.com/mdlayher/ethtool"
go-openvswitch["github.com/digitalocean/go-openvswitch"]
click go-openvswitch "https://github.com/digitalocean/go-openvswitch"
ipvs["github.com/cloudflare/ipvs"]
click ipvs "https://github.com/cloudflare/ipvs"
l2tp["github.com/axatrax/l2tp"]
click l2tp "https://github.com/axatrax/l2tp"
nbd["github.com/Merovius/nbd"]
click nbd "https://github.com/Merovius/nbd"
quota["github.com/mdlayher/quota"]
click quota "https://github.com/mdlayher/quota"
router7["github.com/rtr7/router7"]
click router7 "https://github.com/rtr7/router7"
taskstats["github.com/mdlayher/taskstats"]
click taskstats "https://github.com/mdlayher/taskstats"
u-bmc["github.com/u-root/u-bmc"]
click u-bmc "https://github.com/u-root/u-bmc"
wgctrl["golang.zx2c4.com/wireguard/wgctrl"]
click wgctrl "https://golang.zx2c4.com/wireguard/wgctrl"
wifi["github.com/mdlayher/wifi"]
click wifi "https://github.com/mdlayher/wifi"
devlink & ethtool & go-openvswitch & ipvs --> genetlink
l2tp & nbd & quota & router7 & taskstats --> genetlink
u-bmc & wgctrl & wifi --> genetlink
end
subgraph "NETLINK_KOBJECT_UEVENT"
direction LR
kobject["github.com/mdlayher/kobject"]
click kobject "https://github.com/mdlayher/kobject"
end
subgraph "NETLINK_NETFILTER"
direction LR
go-conntrack["github.com/florianl/go-conntrack"]
click go-conntrack "https://github.com/florianl/go-conntrack"
go-nflog["github.com/florianl/go-nflog"]
click go-nflog "https://github.com/florianl/go-nflog"
go-nfqueue["github.com/florianl/go-nfqueue"]
click go-nfqueue "https://github.com/florianl/go-nfqueue"
netfilter["github.com/ti-mo/netfilter"]
click netfilter "https://github.com/ti-mo/netfilter"
nftables["github.com/google/nftables"]
click nftables "https://github.com/google/nftables"
conntrack["github.com/ti-mo/conntrack"]
click conntrack "https://github.com/ti-mo/conntrack"
conntrack --> netfilter
end
subgraph "NETLINK_ROUTE"
direction LR
go-tc["github.com/florianl/go-tc"]
click go-tc "https://github.com/florianl/go-tc"
qdisc["github.com/ema/qdisc"]
click qdisc "https://github.com/ema/qdisc"
rtnetlink["github.com/jsimonetti/rtnetlink"]
click rtnetlink "https://github.com/jsimonetti/rtnetlink"
rtnl["gitlab.com/mergetb/tech/rtnl"]
click rtnl "https://gitlab.com/mergetb/tech/rtnl"
end
subgraph "NETLINK_W1"
direction LR
go-onewire["github.com/SpComb/go-onewire"]
click go-onewire "https://github.com/SpComb/go-onewire"
end
subgraph "NETLINK_SOCK_DIAG"
direction LR
go-diag["github.com/florianl/go-diag"]
click go-diag "https://github.com/florianl/go-diag"
end
NETLINK_CONNECTOR --> netlink
NETLINK_CRYPTO --> netlink
NETLINK_GENERIC --> netlink
NETLINK_KOBJECT_UEVENT --> netlink
NETLINK_NETFILTER --> netlink
NETLINK_ROUTE --> netlink
NETLINK_SOCK_DIAG --> netlink
NETLINK_W1 --> netlink
Explore related projects
codecrafters-io/build-your-own-x
Master programming by recreating your favorite technologies from scratch.
561,607 starspublic-apis/public-apis
A collective list of free APIs
497,930 starsmorluto/rea
Reverse engineer anything with agents, from app behavior down to native binaries.
449,872 starsopenclaw/openclaw
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
394,297 stars