mirror of
https://github.com/sigcn/pg.git
synced 2025-09-27 01:05:51 +08:00
netlink: add func AddrSubscribe on linux
This commit is contained in:
12
netlink/addr_default.go
Normal file
12
netlink/addr_default.go
Normal file
@@ -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
|
||||
}
|
31
netlink/addr_linux.go
Normal file
31
netlink/addr_linux.go
Normal file
@@ -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
|
||||
}
|
Reference in New Issue
Block a user