Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Package netlink provides low-level access to Linux netlink sockets (AF_NETLINK). MIT Licensed.

License

Notifications You must be signed in to change notification settings

mdlayher/netlink

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

467 Commits

Repository files navigation

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
Loading

About

Package netlink provides low-level access to Linux netlink sockets (AF_NETLINK). MIT Licensed.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 23

Languages

AltStyle によって変換されたページ (->オリジナル) /