diff options
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 69 |
1 files changed, 69 insertions, 0 deletions
@@ -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) + } + } + } +} |
