From 32f47de62a3089ec125b6b2a625cbef4d44be3ce Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Fri, 10 Feb 2023 01:12:26 -0600 Subject: [PATCH] need a netlink function to trigger on changes Signed-off-by: Jeff Carr --- gui.go | 3 +++ netlink.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ unix.go | 2 +- 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 netlink.go diff --git a/gui.go b/gui.go index 2f1ad3a..3f7c31a 100644 --- a/gui.go +++ b/gui.go @@ -49,7 +49,10 @@ func addDNSTab(window *gui.Node, title string) { dd.OnChanged = func(*gui.Node) { s := dd.GetText() tb.SetText("hello world " + args.User + "\n" + s) + log.Println("text =", s) } + g.NewLabel("UID =") + g2 = newNode.NewGroup("group 2") tb = g2.NewTextbox("tb") diff --git a/netlink.go b/netlink.go new file mode 100644 index 0000000..ff32b96 --- /dev/null +++ b/netlink.go @@ -0,0 +1,48 @@ +package main + +/* +import ( +// "os" +// "os/exec" + // "log" + // "net" + // "unix" + "github.com/vishvananda/netlink" + "github.com/jsimonetti/rtnetlink" +// "git.wit.org/wit/gui" +// "github.com/davecgh/go-spew/spew" +) + +// In golang, write a function to register with netlink to detect changes to any network interface Use tab indentation. Do not include example usage. + +func registerNetlink() error { + // Create netlink socket + sock, err := netlink.Socket(rtnetlink.NETLINK_ROUTE, 0) + if err != nil { + return err + } + // Register for interface change events + err = netlink.AddMembership(sock, netlink.RTNLGRP_LINK) + if err != nil { + return err + } + // Close the socket + defer sock.Close() + // Handle incoming notifications + for { + msgs, _, err := sock.Receive() + if err != nil { + return err + } + for _, msg := range msgs { + switch msg.Header.Type { + case unix.RTM_NEWLINK: + // Do something with new link + case unix.RTM_DELLINK: + // Do something with deleted link + } + } + } + return nil +} +*/ diff --git a/unix.go b/unix.go index 3cebd40..6a78e72 100644 --- a/unix.go +++ b/unix.go @@ -19,7 +19,7 @@ func CheckSuperuser() bool { func Escalate() { if os.Getuid() != 0 { - cmd := exec.Command("sudo", "./control-panel-dns") + cmd := exec.Command("sudo", "./control-panel-dns") // TODO: get the actual path cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr