aboutsummaryrefslogtreecommitdiff
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
parent927d9f8034fe1ddf183379a40ea6ff60ba44c1c0 (diff)
seperate monitor4 and monitor6 again
-rw-r--r--config.go3
-rw-r--r--monitor.go64
2 files changed, 66 insertions, 1 deletions
diff --git a/config.go b/config.go
index c8b5686..5c09cdc 100644
--- a/config.go
+++ b/config.go
@@ -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
+ }
+ }
+ }
+}