Files
pg/netlink/route_linux.go
2024-07-19 19:33:29 +08:00

46 lines
867 B
Go

package netlink
import (
"context"
"log/slog"
"slices"
"github.com/vishvananda/netlink"
)
// RouteSubscribe takes a chan down which notifications will be sent
// when routes are added or deleted. Rules are not currently supported
func RouteSubscribe(ctx context.Context, ch chan<- RouteUpdate) error {
rawChan := make(chan netlink.RouteUpdate)
err := netlink.RouteSubscribe(rawChan, ctx.Done())
if err != nil {
return err
}
go func() {
defer close(ch)
for {
select {
case <-ctx.Done():
return
case e := <-rawChan:
if e.Dst == nil || e.Gw == nil {
continue
}
ru := RouteUpdate{
Dst: e.Dst,
Via: e.Gw,
}
if !slices.Contains([]uint16{24, 25}, e.Type) {
slog.Debug("DropUnsupportRouteEvent")
continue
}
if e.Type == 24 {
ru.New = true
}
ch <- ru
}
}
}()
return nil
}