works against gocui
Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
parent
dae59705a1
commit
ec75161b68
1
net.go
1
net.go
|
@ -4,7 +4,6 @@ package main
|
||||||
import (
|
import (
|
||||||
"net"
|
"net"
|
||||||
"strings"
|
"strings"
|
||||||
// "git.wit.org/wit/gui"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var DEBUGNET bool = false
|
var DEBUGNET bool = false
|
||||||
|
|
66
netlink.go
66
netlink.go
|
@ -1,66 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
// examples of what ifconfig does
|
|
||||||
// example of AF_NETLINK change:
|
|
||||||
// https://stackoverflow.com/questions/579783/how-to-detect-ip-address-change-programmatically-in-linux/2353441#2353441
|
|
||||||
// from that page, a link to watch for any ip event:
|
|
||||||
// https://github.com/angt/ipevent/blob/master/ipevent.c
|
|
||||||
|
|
||||||
// https://github.com/mdlayher/talks : Linux, Netlink, and Go in 7 minutes or less! (GopherCon 2018, lightning talk)
|
|
||||||
|
|
||||||
/*
|
|
||||||
c example from ipevent.c :
|
|
||||||
int fd = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
|
|
||||||
|
|
||||||
struct sockaddr_nl snl = {
|
|
||||||
.nl_family = AF_NETLINK,
|
|
||||||
.nl_groups = RTMGRP_IPV4_IFADDR | RTMGRP_IPV6_IFADDR,
|
|
||||||
};
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
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
|
|
||||||
}
|
|
||||||
*/
|
|
Loading…
Reference in New Issue