diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2022-10-19 19:16:21 +0200 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2022-10-19 19:16:21 +0200 |
commit | ab9dde1b72ebfa934f0906919aac166e7616f9bf (patch) | |
tree | 52fd2252acff8219d27f305a401f1833797ffc29 | |
parent | 927d9f8034fe1ddf183379a40ea6ff60ba44c1c0 (diff) |
seperate monitor4 and monitor6 again
-rw-r--r-- | config.go | 3 | ||||
-rw-r--r-- | monitor.go | 64 |
2 files changed, 66 insertions, 1 deletions
@@ -9,7 +9,8 @@ import ( type config struct { User string Passwd string - Link string + Link4 string + Link6 string Interval time.Duration PrefixLen int Records4 []int diff --git a/monitor.go b/monitor.go new file mode 100644 index 0000000..d3631c0 --- /dev/null +++ b/monitor.go @@ -0,0 +1,64 @@ +package main + +import ( + "net" + "time" +) + +func monitor4(conf *config, update4 chan<- net.IPAddr) { + refresh := time.NewTicker(conf.Interval) + for range refresh.C { + link, err := net.InterfaceByName(conf.Link4) + if err != nil { + logger.Printf("can't find interface %s: %v", conf.Link4, err) + continue + } + + addrs, err := link.Addrs() + if err != nil { + const format = "can't read IPv4 addresses from %s: %v" + logger.Printf(format, conf.Link4, err) + continue + } + + var addr4 *net.IPAddr + for _, netAddr := range addrs { + addr := netAddr.(*net.IPAddr) + + if addr.To4() != nil && !addr.IP.IsPrivate() { + addr4 = addr + break + } + } + } +} + +func monitor6(conf *config, update6 chan<- net.IPNet) { + refresh := time.NewTicker(conf.Interval) + for range refresh.C { + link, err := net.InterfaceByName(conf.Link6) + if err != nil { + logger.Printf("can't find interface %s: %v", conf.Link6, err) + continue + } + + addrs, err := link.Addrs() + if err != nil { + const format = "can't read IPv6 addresses from %s: %v" + logger.Printf(format, conf.Link6, err) + continue + } + + var prefix6 *net.IPNet + for _, netAddr := range addrs { + addr := netAddr.(*net.IPAddr) + + if addr.To4() == nil && addr.IP.IsGlobalUnicast() { + cidr := net.CIDRMask(conf.PrefixLen, 128) + prefix6 = addr.IP.Mask(cidr) + + break + } + } + } +} |