- Notifications
You must be signed in to change notification settings - Fork101
Package netlink provides low-level access to Linux netlink sockets (AF_NETLINK). MIT Licensed.
License
mdlayher/netlink
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Packagenetlink
provides low-level access to Linux netlink sockets(AF_NETLINK
). MIT Licensed.
For more information about how netlink works, check out my blog seriesonLinux, Netlink, and Go.
If you have any questions or you'd like some guidance, please join us onGophers Slack in the#networking
channel!
See theCHANGELOG file for a description of changes betweenreleases.
This package has a stable v1 API and any future breaking changes will promptthe release of a new major version. Features and bug fixes will continue tooccur in the v1.x.x series.
This package only supports the two most recent major versions of Go, mirroringGo's own release policy. Older versions of Go may lack critical features and bugfixes which are necessary for this package to function correctly.
A number of netlink packages are already available for Go, but I wasn't able tofind 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 creationof other netlink family packages.
Over time, an ecosystem of Go packages has developed around packagenetlink
.Many of these packages provide building blocks for further interactions withvarious netlink families, such asNETLINK_GENERIC
orNETLINK_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
About
Package netlink provides low-level access to Linux netlink sockets (AF_NETLINK). MIT Licensed.