From f1574b7be189c86cf73fda56323c4adc9b276e68 Mon Sep 17 00:00:00 2001 From: rkonfj Date: Fri, 19 Jul 2024 19:53:42 +0800 Subject: [PATCH] netlink: add func AddrSubscribe on linux --- netlink/addr_default.go | 12 ++++++++++++ netlink/addr_linux.go | 31 +++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 netlink/addr_default.go create mode 100644 netlink/addr_linux.go diff --git a/netlink/addr_default.go b/netlink/addr_default.go new file mode 100644 index 0000000..661ca89 --- /dev/null +++ b/netlink/addr_default.go @@ -0,0 +1,12 @@ +//go:build !linux && !windows && !darwin + +package netlink + +import ( + "context" + "errors" +) + +func AddrSubscribe(ctx context.Context, ch chan<- AddrUpdate) error { + return errors.ErrUnsupported +} diff --git a/netlink/addr_linux.go b/netlink/addr_linux.go new file mode 100644 index 0000000..e5309b3 --- /dev/null +++ b/netlink/addr_linux.go @@ -0,0 +1,31 @@ +package netlink + +import ( + "context" + + "github.com/vishvananda/netlink" +) + +func AddrSubscribe(ctx context.Context, ch chan<- AddrUpdate) error { + rawChan := make(chan netlink.AddrUpdate) + err := netlink.AddrSubscribe(rawChan, ctx.Done()) + if err != nil { + return err + } + go func() { + defer close(ch) + for { + select { + case <-ctx.Done(): + return + case e := <-rawChan: + ch <- AddrUpdate{ + New: e.NewAddr, + Addr: e.LinkAddress, + LinkIndex: e.LinkIndex, + } + } + } + }() + return nil +}