Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mdlayher/netlink
Package netlink provides low-level access to Linux netlink sockets (AF_NETLINK). MIT Licensed.
https://github.com/mdlayher/netlink
af-netlink go golang linux netlink
Last synced: 3 days ago
JSON representation
Package netlink provides low-level access to Linux netlink sockets (AF_NETLINK). MIT Licensed.
- Host: GitHub
- URL: https://github.com/mdlayher/netlink
- Owner: mdlayher
- License: mit
- Created: 2016-12-20T22:13:34.000Z (about 8 years ago)
- Default Branch: main
- Last Pushed: 2025-01-13T17:19:57.000Z (12 days ago)
- Last Synced: 2025-01-16T01:12:20.856Z (10 days ago)
- Topics: af-netlink, go, golang, linux, netlink
- Language: Go
- Homepage:
- Size: 621 KB
- Stars: 942
- Watchers: 23
- Forks: 99
- Open Issues: 15
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
Awesome Lists containing this project
- awesome-golang-repositories - netlink - level access to Linux netlink sockets. MIT Licensed. (Repositories)
README
# netlink [![Test Status](https://github.com/mdlayher/netlink/workflows/Linux%20Test/badge.svg)](https://github.com/mdlayher/netlink/actions) [![Go Reference](https://pkg.go.dev/badge/github.com/mdlayher/netlink.svg)](https://pkg.go.dev/github.com/mdlayher/netlink) [![Go Report Card](https://goreportcard.com/badge/github.com/mdlayher/netlink)](https://goreportcard.com/report/github.com/mdlayher/netlink)
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](https://mdlayher.com/blog/linux-netlink-and-go-part-1-netlink/).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!## Stability
See the [CHANGELOG](./CHANGELOG.md) 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 workMy 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!
```mermaid
flowchart LR
netlink["github.com/mdlayher/netlink"]
click netlink "https://github.com/mdlayher/netlink"subgraph "NETLINK_CONNECTOR"
direction LRgarlic["github.com/fearful-symmetry/garlic"]
click garlic "https://github.com/fearful-symmetry/garlic"
endsubgraph "NETLINK_CRYPTO"
direction LRcryptonl["github.com/mdlayher/cryptonl"]
click cryptonl "https://github.com/mdlayher/cryptonl"
endsubgraph "NETLINK_GENERIC"
direction LRgenetlink["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
endsubgraph "NETLINK_KOBJECT_UEVENT"
direction LRkobject["github.com/mdlayher/kobject"]
click kobject "https://github.com/mdlayher/kobject"
endsubgraph "NETLINK_NETFILTER"
direction LRgo-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
endsubgraph "NETLINK_ROUTE"
direction LRgo-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"
endsubgraph "NETLINK_W1"
direction LRgo-onewire["github.com/SpComb/go-onewire"]
click go-onewire "https://github.com/SpComb/go-onewire"
endsubgraph "NETLINK_SOCK_DIAG"
direction LRgo-diag["github.com/florianl/go-diag"]
click go-diag "https://github.com/florianl/go-diag"
endNETLINK_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
```