54 lines
1.2 KiB
Go
54 lines
1.2 KiB
Go
package gonetworkmanager
|
|
|
|
import (
|
|
"github.com/godbus/dbus"
|
|
)
|
|
|
|
const (
|
|
NetworkManagerInterface = "org.freedesktop.NetworkManager"
|
|
NetworkManagerObjectPath = "/org/freedesktop/NetworkManager"
|
|
|
|
NetworkManagerGetDevices = NetworkManagerInterface + ".GetDevices"
|
|
NetworkManagerPropertyState = NetworkManagerInterface + ".state"
|
|
)
|
|
|
|
type NetworkManager interface {
|
|
|
|
// GetDevices gets the list of network devices.
|
|
GetDevices() []Device
|
|
|
|
// GetState returns the overall networking state as determined by the
|
|
// NetworkManager daemon, based on the state of network devices under it's
|
|
// management.
|
|
GetState() NmState
|
|
}
|
|
|
|
func NewNetworkManager() (NetworkManager, error) {
|
|
var nm networkManager
|
|
return &nm, nm.init(NetworkManagerInterface, NetworkManagerObjectPath)
|
|
}
|
|
|
|
type networkManager struct {
|
|
dbusBase
|
|
}
|
|
|
|
func (n *networkManager) GetDevices() []Device {
|
|
var devicePaths []dbus.ObjectPath
|
|
|
|
n.call(&devicePaths, NetworkManagerGetDevices)
|
|
devices := make([]Device, len(devicePaths))
|
|
|
|
var err error
|
|
for i, path := range devicePaths {
|
|
devices[i], err = DeviceFactory(path)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
return devices
|
|
}
|
|
|
|
func (n *networkManager) GetState() NmState {
|
|
return NmState(n.getUint32Property(NetworkManagerPropertyState))
|
|
}
|