49 lines
1012 B
Go
49 lines
1012 B
Go
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
|
|
}
|
|
*/
|