summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go69
1 files changed, 69 insertions, 0 deletions
diff --git a/main.go b/main.go
index c248501..29c8829 100644
--- a/main.go
+++ b/main.go
@@ -3,6 +3,8 @@ package main
import (
"log"
+ "net"
+ "github.com/fsnotify/fsnotify"
"git.wit.org/wit/gui"
arg "github.com/alexflint/go-arg"
)
@@ -13,5 +15,72 @@ func main() {
log.Println("Toolkit = ", args.Toolkit)
// gui.InitPlugins([]string{"andlabs"})
+
+ scanInterfaces()
+ watchNetworkInterfaces()
+ go inotifyNetworkInterfaceChanges()
gui.Main(initGUI)
}
+
+func watchNetworkInterfaces() {
+ // Get list of network interfaces
+ interfaces, _ := net.Interfaces()
+
+ // Set up a notification channel
+ notification := make(chan net.Interface)
+
+ // Start goroutine to watch for changes
+ go func() {
+ for {
+ // Check for changes in each interface
+ for _, i := range interfaces {
+ if status := i.Flags & net.FlagUp; status != 0 {
+ notification <- i
+ log.Println("something on i =", i)
+ }
+ }
+ }
+ }()
+}
+
+func inotifyNetworkInterfaceChanges() error {
+ watcher, err := fsnotify.NewWatcher()
+ if err != nil {
+ return err
+ }
+ defer watcher.Close()
+
+ // Watch for network interface changes
+ err = watcher.Add("/sys/class/net")
+ if err != nil {
+ return err
+ }
+ for {
+ select {
+ case event := <-watcher.Events:
+ log.Println("inotifyNetworkInterfaceChanges() event =", event)
+ if event.Op&fsnotify.Create == fsnotify.Create {
+ // Do something on network interface creation
+ }
+ case err := <-watcher.Errors:
+ return err
+ }
+ }
+}
+
+func scanInterfaces() {
+ ifaces, _ := net.Interfaces()
+ for _, i := range ifaces {
+ log.Println(i)
+ addrs, _ := i.Addrs()
+ for _, addr := range addrs {
+ log.Println("\taddr =", addr)
+ switch v := addr.(type) {
+ case *net.IPNet:
+ log.Println("\t\taddr.(type) = *net.IPNet")
+ default:
+ log.Println("\t\taddr.(type) =", v)
+ }
+ }
+ }
+}