aboutsummaryrefslogtreecommitdiff
path: root/monitor.go
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2022-10-19 19:16:21 +0200
committerHimbeerserverDE <himbeerserverde@gmail.com>2022-10-19 19:16:21 +0200
commitab9dde1b72ebfa934f0906919aac166e7616f9bf (patch)
tree52fd2252acff8219d27f305a401f1833797ffc29 /monitor.go
parent927d9f8034fe1ddf183379a40ea6ff60ba44c1c0 (diff)
seperate monitor4 and monitor6 again
Diffstat (limited to 'monitor.go')
-rw-r--r--monitor.go64
1 files changed, 64 insertions, 0 deletions
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
+ }
+ }
+ }
+}