Initial commit with not a whole lot of coverage.
This commit is contained in:
commit
75591bce97
17 changed files with 724 additions and 0 deletions
29
AccessPoint.go
Normal file
29
AccessPoint.go
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
package gonetworkmanager
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/godbus/dbus"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
AccessPointInterface = NetworkManagerInterface + ".AccessPoint"
|
||||||
|
|
||||||
|
AccessPointPropertySSID = AccessPointInterface + ".Ssid"
|
||||||
|
)
|
||||||
|
|
||||||
|
type AccessPoint interface {
|
||||||
|
// GetSSID returns the Service Set Identifier identifying the access point.
|
||||||
|
GetSSID() string
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewAccessPoint(objectPath dbus.ObjectPath) (AccessPoint, error) {
|
||||||
|
var a accessPoint
|
||||||
|
return &a, a.init(NetworkManagerInterface, objectPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
type accessPoint struct {
|
||||||
|
dbusBase
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *accessPoint) GetSSID() string {
|
||||||
|
return string(a.getSliceByteProperty(AccessPointPropertySSID))
|
||||||
|
}
|
4
ActiveConnection.go
Normal file
4
ActiveConnection.go
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
package gonetworkmanager
|
||||||
|
|
||||||
|
type ActiveConnection interface {
|
||||||
|
}
|
48
Connection.go
Normal file
48
Connection.go
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
package gonetworkmanager
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/godbus/dbus"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
ConnectionInterface = SettingsInterface + ".Connection"
|
||||||
|
|
||||||
|
ConnectionGetSettings = ConnectionInterface + ".GetSettings"
|
||||||
|
)
|
||||||
|
|
||||||
|
//type ConnectionSettings map[string]map[string]interface{}
|
||||||
|
type ConnectionSettings map[string]map[string]interface{}
|
||||||
|
|
||||||
|
type Connection interface {
|
||||||
|
// GetSettings gets the settings maps describing this network configuration.
|
||||||
|
// This will never include any secrets required for connection to the
|
||||||
|
// network, as those are often protected. Secrets must be requested
|
||||||
|
// separately using the GetSecrets() call.
|
||||||
|
GetSettings() ConnectionSettings
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewConnection(objectPath dbus.ObjectPath) (Connection, error) {
|
||||||
|
var c connection
|
||||||
|
return &c, c.init(NetworkManagerInterface, objectPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
type connection struct {
|
||||||
|
dbusBase
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *connection) GetSettings() ConnectionSettings {
|
||||||
|
var settings map[string]map[string]dbus.Variant
|
||||||
|
c.call(&settings, ConnectionGetSettings)
|
||||||
|
|
||||||
|
rv := make(ConnectionSettings)
|
||||||
|
|
||||||
|
for k1, v1 := range settings {
|
||||||
|
rv[k1] = make(map[string]interface{})
|
||||||
|
|
||||||
|
for k2, v2 := range v1 {
|
||||||
|
rv[k1][k2] = v2.Value()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return rv
|
||||||
|
}
|
101
Device.go
Normal file
101
Device.go
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
package gonetworkmanager
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/godbus/dbus"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
DeviceInterface = NetworkManagerInterface + ".Device"
|
||||||
|
|
||||||
|
DevicePropertyInterface = DeviceInterface + ".Interface"
|
||||||
|
DevicePropertyState = DeviceInterface + ".State"
|
||||||
|
DevicePropertyIP4Config = DeviceInterface + ".Ip4Config"
|
||||||
|
DevicePropertyDeviceType = DeviceInterface + ".DeviceType"
|
||||||
|
DevicePropertyAvailableConnections = DeviceInterface + ".AvailableConnections"
|
||||||
|
)
|
||||||
|
|
||||||
|
func DeviceFactory(objectPath dbus.ObjectPath) (Device, error) {
|
||||||
|
d, err := NewDevice(objectPath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch d.GetDeviceType() {
|
||||||
|
case NmDeviceTypeWifi:
|
||||||
|
return NewWirelessDevice(objectPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
return d, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type Device interface {
|
||||||
|
// GetInterface gets the name of the device's control (and often data)
|
||||||
|
// interface.
|
||||||
|
GetInterface() string
|
||||||
|
|
||||||
|
// GetState gets the current state of the device.
|
||||||
|
GetState() NmDeviceState
|
||||||
|
|
||||||
|
// GetIP4Config gets the Ip4Config object describing the configuration of the
|
||||||
|
// device. Only valid when the device is in the NM_DEVICE_STATE_ACTIVATED
|
||||||
|
// state.
|
||||||
|
GetIP4Config() IP4Config
|
||||||
|
|
||||||
|
// GetDeviceType gets the general type of the network device; ie Ethernet,
|
||||||
|
// WiFi, etc.
|
||||||
|
GetDeviceType() NmDeviceType
|
||||||
|
|
||||||
|
// GetAvailableConnections gets an array of object paths of every configured
|
||||||
|
// connection that is currently 'available' through this device.
|
||||||
|
GetAvailableConnections() []Connection
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewDevice(objectPath dbus.ObjectPath) (Device, error) {
|
||||||
|
var d device
|
||||||
|
return &d, d.init(NetworkManagerInterface, objectPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
type device struct {
|
||||||
|
dbusBase
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *device) GetInterface() string {
|
||||||
|
return d.getStringProperty(DevicePropertyInterface)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *device) GetState() NmDeviceState {
|
||||||
|
return NmDeviceState(d.getUint32Property(DevicePropertyState))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *device) GetIP4Config() IP4Config {
|
||||||
|
path := d.getObjectProperty(DevicePropertyIP4Config)
|
||||||
|
if path == "/" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
cfg, err := NewIP4Config(path)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return cfg
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *device) GetDeviceType() NmDeviceType {
|
||||||
|
return NmDeviceType(d.getUint32Property(DevicePropertyDeviceType))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *device) GetAvailableConnections() []Connection {
|
||||||
|
connPaths := d.getSliceObjectProperty(DevicePropertyAvailableConnections)
|
||||||
|
conns := make([]Connection, len(connPaths))
|
||||||
|
|
||||||
|
var err error
|
||||||
|
for i, path := range connPaths {
|
||||||
|
conns[i], err = NewConnection(path)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return conns
|
||||||
|
}
|
102
IP4Config.go
Normal file
102
IP4Config.go
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
package gonetworkmanager
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/godbus/dbus"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
IP4ConfigInterface = NetworkManagerInterface + ".IP4Config"
|
||||||
|
|
||||||
|
IP4ConfigPropertyAddresses = IP4ConfigInterface + ".Addresses"
|
||||||
|
IP4ConfigPropertyRoutes = IP4ConfigInterface + ".Routes"
|
||||||
|
IP4ConfigPropertyNameservers = IP4ConfigInterface + ".Nameservers"
|
||||||
|
IP4ConfigPropertyDomains = IP4ConfigInterface + ".Domains"
|
||||||
|
)
|
||||||
|
|
||||||
|
type IP4Address struct {
|
||||||
|
Address string
|
||||||
|
Prefix uint8
|
||||||
|
Gateway string
|
||||||
|
}
|
||||||
|
|
||||||
|
type IP4Route struct {
|
||||||
|
Route string
|
||||||
|
Prefix uint8
|
||||||
|
NextHop string
|
||||||
|
Metric uint8
|
||||||
|
}
|
||||||
|
|
||||||
|
type IP4Config interface {
|
||||||
|
// GetAddresses gets an array of tuples of IPv4 address/prefix/gateway. All 3
|
||||||
|
// elements of each tuple are in network byte order. Essentially: [(addr,
|
||||||
|
// prefix, gateway), (addr, prefix, gateway), ...]
|
||||||
|
GetAddresses() []IP4Address
|
||||||
|
|
||||||
|
// GetRoutes gets tuples of IPv4 route/prefix/next-hop/metric. All 4 elements
|
||||||
|
// of each tuple are in network byte order. 'route' and 'next hop' are IPv4
|
||||||
|
// addresses, while prefix and metric are simple unsigned integers.
|
||||||
|
// Essentially: [(route, prefix, next-hop, metric), (route, prefix, next-hop,
|
||||||
|
// metric), ...]
|
||||||
|
GetRoutes() []IP4Route
|
||||||
|
|
||||||
|
// GetNameservers gets the nameservers in use.
|
||||||
|
GetNameservers() []string
|
||||||
|
|
||||||
|
// GetDomains gets a list of domains this address belongs to.
|
||||||
|
GetDomains() []string
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewIP4Config(objectPath dbus.ObjectPath) (IP4Config, error) {
|
||||||
|
var c ip4Config
|
||||||
|
return &c, c.init(NetworkManagerInterface, objectPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
type ip4Config struct {
|
||||||
|
dbusBase
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ip4Config) GetAddresses() []IP4Address {
|
||||||
|
addresses := c.getSliceSliceUint32Property(IP4ConfigPropertyAddresses)
|
||||||
|
ret := make([]IP4Address, len(addresses))
|
||||||
|
|
||||||
|
for i, parts := range addresses {
|
||||||
|
ret[i] = IP4Address{
|
||||||
|
Address: ip4ToString(parts[0]),
|
||||||
|
Prefix: uint8(parts[1]),
|
||||||
|
Gateway: ip4ToString(parts[2]),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ip4Config) GetRoutes() []IP4Route {
|
||||||
|
routes := c.getSliceSliceUint32Property(IP4ConfigPropertyRoutes)
|
||||||
|
ret := make([]IP4Route, len(routes))
|
||||||
|
|
||||||
|
for i, parts := range routes {
|
||||||
|
ret[i] = IP4Route{
|
||||||
|
Route: ip4ToString(parts[0]),
|
||||||
|
Prefix: uint8(parts[1]),
|
||||||
|
NextHop: ip4ToString(parts[2]),
|
||||||
|
Metric: uint8(parts[3]),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ip4Config) GetNameservers() []string {
|
||||||
|
nameservers := c.getSliceUint32Property(IP4ConfigPropertyNameservers)
|
||||||
|
ret := make([]string, len(nameservers))
|
||||||
|
|
||||||
|
for i, ns := range nameservers {
|
||||||
|
ret[i] = ip4ToString(ns)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ip4Config) GetDomains() []string {
|
||||||
|
return c.getSliceStringProperty(IP4ConfigPropertyDomains)
|
||||||
|
}
|
21
LICENSE
Normal file
21
LICENSE
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2016 Bellerophon Mobile
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
54
NetworkManager.go
Normal file
54
NetworkManager.go
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
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))
|
||||||
|
}
|
10
README.md
Normal file
10
README.md
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
gonetworkmanager
|
||||||
|
================
|
||||||
|
|
||||||
|
Go D-Bus bindings for NetworkManager.
|
||||||
|
|
||||||
|
Currently tested with NetworkManager 0.9.8.10.
|
||||||
|
|
||||||
|
(https://godoc.org/github.com/BellerophonMobile/gonetworkmanager?status.svg)](https://godoc.org/github.com/BellerophonMobile/gonetworkmanager)
|
||||||
|
|
||||||
|
[NetworkManager 0.9 D-Bus Spec](https://developer.gnome.org/NetworkManager/0.9/spec.html)
|
5
Settings.go
Normal file
5
Settings.go
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
package gonetworkmanager
|
||||||
|
|
||||||
|
const (
|
||||||
|
SettingsInterface = NetworkManagerInterface + ".Settings"
|
||||||
|
)
|
47
WirelessDevice.go
Normal file
47
WirelessDevice.go
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
package gonetworkmanager
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/godbus/dbus"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
WirelessDeviceInterface = DeviceInterface + ".Wireless"
|
||||||
|
|
||||||
|
WirelessDeviceGetAccessPoints = WirelessDeviceInterface + ".GetAccessPoints"
|
||||||
|
)
|
||||||
|
|
||||||
|
type WirelessDevice interface {
|
||||||
|
Device
|
||||||
|
|
||||||
|
// GetAccessPoints gets the list of access points visible to this device.
|
||||||
|
// Note that this list does not include access points which hide their SSID.
|
||||||
|
// To retrieve a list of all access points (including hidden ones) use the
|
||||||
|
// GetAllAccessPoints() method.
|
||||||
|
GetAccessPoints() []AccessPoint
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewWirelessDevice(objectPath dbus.ObjectPath) (WirelessDevice, error) {
|
||||||
|
var d wirelessDevice
|
||||||
|
return &d, d.init(NetworkManagerInterface, objectPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
type wirelessDevice struct {
|
||||||
|
device
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *wirelessDevice) GetAccessPoints() []AccessPoint {
|
||||||
|
var apPaths []dbus.ObjectPath
|
||||||
|
|
||||||
|
d.call(&apPaths, WirelessDeviceGetAccessPoints)
|
||||||
|
aps := make([]AccessPoint, len(apPaths))
|
||||||
|
|
||||||
|
var err error
|
||||||
|
for i, path := range apPaths {
|
||||||
|
aps[i], err = NewAccessPoint(path)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return aps
|
||||||
|
}
|
67
enums.go
Normal file
67
enums.go
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
package gonetworkmanager
|
||||||
|
|
||||||
|
//go:generate stringer -type=NmConnectivity
|
||||||
|
type NmConnectivity uint32
|
||||||
|
|
||||||
|
const (
|
||||||
|
NmConnectivityUnknown NmConnectivity = 0
|
||||||
|
NmConnectivityNone NmConnectivity = 1
|
||||||
|
NmConnectivityPortal NmConnectivity = 2
|
||||||
|
NmConnectivityLimited NmConnectivity = 3
|
||||||
|
NmConnectivityFull NmConnectivity = 4
|
||||||
|
)
|
||||||
|
|
||||||
|
//go:generate stringer -type=NmState
|
||||||
|
type NmState uint32
|
||||||
|
|
||||||
|
const (
|
||||||
|
NmStateUnknown NmState = 0
|
||||||
|
NmStateAsleep NmState = 10
|
||||||
|
NmStateDisconnected NmState = 20
|
||||||
|
NmStateDisconnecting NmState = 30
|
||||||
|
NmStateConnecting NmState = 40
|
||||||
|
NmStateConnectedLocal NmState = 50
|
||||||
|
NmStateConnectedSite NmState = 60
|
||||||
|
NmStateConnectedGlobal NmState = 70
|
||||||
|
)
|
||||||
|
|
||||||
|
//go:generate stringer -type=NmDeviceState
|
||||||
|
type NmDeviceState uint32
|
||||||
|
|
||||||
|
const (
|
||||||
|
NmDeviceStateUnknown NmDeviceState = 0
|
||||||
|
NmDeviceStateUnmanaged NmDeviceState = 10
|
||||||
|
NmDeviceStateUnavailable NmDeviceState = 20
|
||||||
|
NmDeviceStateDisconnected NmDeviceState = 30
|
||||||
|
NmDeviceStatePrepare NmDeviceState = 40
|
||||||
|
NmDeviceStateConfig NmDeviceState = 50
|
||||||
|
NmDeviceStateNeed_auth NmDeviceState = 60
|
||||||
|
NmDeviceStateIp_config NmDeviceState = 70
|
||||||
|
NmDeviceStateIp_check NmDeviceState = 80
|
||||||
|
NmDeviceStateSecondaries NmDeviceState = 90
|
||||||
|
NmDeviceStateActivated NmDeviceState = 100
|
||||||
|
NmDeviceStateDeactivating NmDeviceState = 110
|
||||||
|
NmDeviceStateFailed NmDeviceState = 120
|
||||||
|
)
|
||||||
|
|
||||||
|
//go:generate stringer -type=NmDeviceType
|
||||||
|
type NmDeviceType uint32
|
||||||
|
|
||||||
|
const (
|
||||||
|
NmDeviceTypeUnknown NmDeviceType = 0
|
||||||
|
NmDeviceTypeEthernet NmDeviceType = 1
|
||||||
|
NmDeviceTypeWifi NmDeviceType = 2
|
||||||
|
NmDeviceTypeUnused1 NmDeviceType = 3
|
||||||
|
NmDeviceTypeUnused2 NmDeviceType = 4
|
||||||
|
NmDeviceTypeBt NmDeviceType = 5
|
||||||
|
NmDeviceTypeOlpcMesh NmDeviceType = 6
|
||||||
|
NmDeviceTypeWimax NmDeviceType = 7
|
||||||
|
NmDeviceTypeModem NmDeviceType = 8
|
||||||
|
NmDeviceTypeInfiniband NmDeviceType = 9
|
||||||
|
NmDeviceTypeBond NmDeviceType = 10
|
||||||
|
NmDeviceTypeVlan NmDeviceType = 11
|
||||||
|
NmDeviceTypeAdsl NmDeviceType = 12
|
||||||
|
NmDeviceTypeBridge NmDeviceType = 13
|
||||||
|
NmDeviceTypeGeneric NmDeviceType = 14
|
||||||
|
NmDeviceTypeTeam NmDeviceType = 15
|
||||||
|
)
|
9
errors.go
Normal file
9
errors.go
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
package gonetworkmanager
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
ErrVariantType = errors.New("unexpected variant type")
|
||||||
|
)
|
16
nmconnectivity_string.go
Normal file
16
nmconnectivity_string.go
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
// Code generated by "stringer -type=NmConnectivity"; DO NOT EDIT
|
||||||
|
|
||||||
|
package gonetworkmanager
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
const _NmConnectivity_name = "NmConnectivityUnknownNmConnectivityNoneNmConnectivityPortalNmConnectivityLimitedNmConnectivityFull"
|
||||||
|
|
||||||
|
var _NmConnectivity_index = [...]uint8{0, 21, 39, 59, 80, 98}
|
||||||
|
|
||||||
|
func (i NmConnectivity) String() string {
|
||||||
|
if i >= NmConnectivity(len(_NmConnectivity_index)-1) {
|
||||||
|
return fmt.Sprintf("NmConnectivity(%d)", i)
|
||||||
|
}
|
||||||
|
return _NmConnectivity_name[_NmConnectivity_index[i]:_NmConnectivity_index[i+1]]
|
||||||
|
}
|
30
nmdevicestate_string.go
Normal file
30
nmdevicestate_string.go
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
// Code generated by "stringer -type=NmDeviceState"; DO NOT EDIT
|
||||||
|
|
||||||
|
package gonetworkmanager
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
const _NmDeviceState_name = "NmDeviceStateUnknownNmDeviceStateUnmanagedNmDeviceStateUnavailableNmDeviceStateDisconnectedNmDeviceStatePrepareNmDeviceStateConfigNmDeviceStateNeed_authNmDeviceStateIp_configNmDeviceStateIp_checkNmDeviceStateSecondariesNmDeviceStateActivatedNmDeviceStateDeactivatingNmDeviceStateFailed"
|
||||||
|
|
||||||
|
var _NmDeviceState_map = map[NmDeviceState]string{
|
||||||
|
0: _NmDeviceState_name[0:20],
|
||||||
|
10: _NmDeviceState_name[20:42],
|
||||||
|
20: _NmDeviceState_name[42:66],
|
||||||
|
30: _NmDeviceState_name[66:91],
|
||||||
|
40: _NmDeviceState_name[91:111],
|
||||||
|
50: _NmDeviceState_name[111:130],
|
||||||
|
60: _NmDeviceState_name[130:152],
|
||||||
|
70: _NmDeviceState_name[152:174],
|
||||||
|
80: _NmDeviceState_name[174:195],
|
||||||
|
90: _NmDeviceState_name[195:219],
|
||||||
|
100: _NmDeviceState_name[219:241],
|
||||||
|
110: _NmDeviceState_name[241:266],
|
||||||
|
120: _NmDeviceState_name[266:285],
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i NmDeviceState) String() string {
|
||||||
|
if str, ok := _NmDeviceState_map[i]; ok {
|
||||||
|
return str
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("NmDeviceState(%d)", i)
|
||||||
|
}
|
16
nmdevicetype_string.go
Normal file
16
nmdevicetype_string.go
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
// Code generated by "stringer -type=NmDeviceType"; DO NOT EDIT
|
||||||
|
|
||||||
|
package gonetworkmanager
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
const _NmDeviceType_name = "NmDeviceTypeUnknownNmDeviceTypeEthernetNmDeviceTypeWifiNmDeviceTypeUnused1NmDeviceTypeUnused2NmDeviceTypeBtNmDeviceTypeOlpcMeshNmDeviceTypeWimaxNmDeviceTypeModemNmDeviceTypeInfinibandNmDeviceTypeBondNmDeviceTypeVlanNmDeviceTypeAdslNmDeviceTypeBridgeNmDeviceTypeGenericNmDeviceTypeTeam"
|
||||||
|
|
||||||
|
var _NmDeviceType_index = [...]uint16{0, 19, 39, 55, 74, 93, 107, 127, 144, 161, 183, 199, 215, 231, 249, 268, 284}
|
||||||
|
|
||||||
|
func (i NmDeviceType) String() string {
|
||||||
|
if i >= NmDeviceType(len(_NmDeviceType_index)-1) {
|
||||||
|
return fmt.Sprintf("NmDeviceType(%d)", i)
|
||||||
|
}
|
||||||
|
return _NmDeviceType_name[_NmDeviceType_index[i]:_NmDeviceType_index[i+1]]
|
||||||
|
}
|
50
nmstate_string.go
Normal file
50
nmstate_string.go
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
// Code generated by "stringer -type=NmState"; DO NOT EDIT
|
||||||
|
|
||||||
|
package gonetworkmanager
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
const (
|
||||||
|
_NmState_name_0 = "NmStateUnknown"
|
||||||
|
_NmState_name_1 = "NmStateAsleep"
|
||||||
|
_NmState_name_2 = "NmStateDisconnected"
|
||||||
|
_NmState_name_3 = "NmStateDisconnecting"
|
||||||
|
_NmState_name_4 = "NmStateConnecting"
|
||||||
|
_NmState_name_5 = "NmStateConnectedLocal"
|
||||||
|
_NmState_name_6 = "NmStateConnectedSite"
|
||||||
|
_NmState_name_7 = "NmStateConnectedGlobal"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
_NmState_index_0 = [...]uint8{0, 14}
|
||||||
|
_NmState_index_1 = [...]uint8{0, 13}
|
||||||
|
_NmState_index_2 = [...]uint8{0, 19}
|
||||||
|
_NmState_index_3 = [...]uint8{0, 20}
|
||||||
|
_NmState_index_4 = [...]uint8{0, 17}
|
||||||
|
_NmState_index_5 = [...]uint8{0, 21}
|
||||||
|
_NmState_index_6 = [...]uint8{0, 20}
|
||||||
|
_NmState_index_7 = [...]uint8{0, 22}
|
||||||
|
)
|
||||||
|
|
||||||
|
func (i NmState) String() string {
|
||||||
|
switch {
|
||||||
|
case i == 0:
|
||||||
|
return _NmState_name_0
|
||||||
|
case i == 10:
|
||||||
|
return _NmState_name_1
|
||||||
|
case i == 20:
|
||||||
|
return _NmState_name_2
|
||||||
|
case i == 30:
|
||||||
|
return _NmState_name_3
|
||||||
|
case i == 40:
|
||||||
|
return _NmState_name_4
|
||||||
|
case i == 50:
|
||||||
|
return _NmState_name_5
|
||||||
|
case i == 60:
|
||||||
|
return _NmState_name_6
|
||||||
|
case i == 70:
|
||||||
|
return _NmState_name_7
|
||||||
|
default:
|
||||||
|
return fmt.Sprintf("NmState(%d)", i)
|
||||||
|
}
|
||||||
|
}
|
115
utils.go
Normal file
115
utils.go
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
package gonetworkmanager
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/binary"
|
||||||
|
"net"
|
||||||
|
|
||||||
|
"github.com/godbus/dbus"
|
||||||
|
)
|
||||||
|
|
||||||
|
type dbusBase struct {
|
||||||
|
conn *dbus.Conn
|
||||||
|
obj dbus.BusObject
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *dbusBase) init(iface string, objectPath dbus.ObjectPath) error {
|
||||||
|
var err error
|
||||||
|
|
||||||
|
d.conn, err = dbus.SystemBus()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
d.obj = d.conn.Object(iface, objectPath)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *dbusBase) call(value interface{}, method string, args ...interface{}) {
|
||||||
|
err := d.callError(value, method, args...)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *dbusBase) callError(value interface{}, method string, args ...interface{}) error {
|
||||||
|
return d.obj.Call(method, 0, args...).Store(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *dbusBase) getProperty(iface string) interface{} {
|
||||||
|
variant, err := d.obj.GetProperty(iface)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return variant.Value()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *dbusBase) getObjectProperty(iface string) dbus.ObjectPath {
|
||||||
|
value, ok := d.getProperty(iface).(dbus.ObjectPath)
|
||||||
|
if !ok {
|
||||||
|
panic(ErrVariantType)
|
||||||
|
}
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *dbusBase) getSliceObjectProperty(iface string) []dbus.ObjectPath {
|
||||||
|
value, ok := d.getProperty(iface).([]dbus.ObjectPath)
|
||||||
|
if !ok {
|
||||||
|
panic(ErrVariantType)
|
||||||
|
}
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *dbusBase) getStringProperty(iface string) string {
|
||||||
|
value, ok := d.getProperty(iface).(string)
|
||||||
|
if !ok {
|
||||||
|
panic(ErrVariantType)
|
||||||
|
}
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *dbusBase) getSliceStringProperty(iface string) []string {
|
||||||
|
value, ok := d.getProperty(iface).([]string)
|
||||||
|
if !ok {
|
||||||
|
panic(ErrVariantType)
|
||||||
|
}
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *dbusBase) getUint32Property(iface string) uint32 {
|
||||||
|
value, ok := d.getProperty(iface).(uint32)
|
||||||
|
if !ok {
|
||||||
|
panic(ErrVariantType)
|
||||||
|
}
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *dbusBase) getSliceUint32Property(iface string) []uint32 {
|
||||||
|
value, ok := d.getProperty(iface).([]uint32)
|
||||||
|
if !ok {
|
||||||
|
panic(ErrVariantType)
|
||||||
|
}
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *dbusBase) getSliceSliceUint32Property(iface string) [][]uint32 {
|
||||||
|
value, ok := d.getProperty(iface).([][]uint32)
|
||||||
|
if !ok {
|
||||||
|
panic(ErrVariantType)
|
||||||
|
}
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *dbusBase) getSliceByteProperty(iface string) []byte {
|
||||||
|
value, ok := d.getProperty(iface).([]byte)
|
||||||
|
if !ok {
|
||||||
|
panic(ErrVariantType)
|
||||||
|
}
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
|
||||||
|
func ip4ToString(ip uint32) string {
|
||||||
|
bs := []byte{0, 0, 0, 0}
|
||||||
|
binary.LittleEndian.PutUint32(bs, ip)
|
||||||
|
return net.IP(bs).String()
|
||||||
|
}
|
Reference in a new issue