76 lines
2.1 KiB
Go
76 lines
2.1 KiB
Go
package gonetworkmanager
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
"github.com/godbus/dbus/v5"
|
|
)
|
|
|
|
const (
|
|
DeviceBridgeInterface = DeviceInterface + ".Bridge"
|
|
|
|
// Properties
|
|
DeviceBridgePropertyHwAddress = DeviceBridgeInterface + ".HwAddress" // readable s
|
|
DeviceBridgePropertySlaves = DeviceBridgeInterface + ".Slaves" // readable as
|
|
DeviceBridgePropertyCarrier = DeviceBridgeInterface + ".Carrier" // readable b
|
|
)
|
|
|
|
type DeviceBridge interface {
|
|
Device
|
|
|
|
// GetPropertyHwAddress Active hardware address of the device.
|
|
GetPropertyHwAddress() (string, error)
|
|
|
|
// GetPropertySlaves Array of paths of enslaved and active devices.
|
|
// DEPRECATED. Use the "Ports" property in "org.freedesktop.NetworkManager.Device" instead which exists since version NetworkManager 1.34.0.
|
|
GetPropertySlaves() ([]Device, error)
|
|
|
|
// GetPropertyCarrier Indicates whether the physical carrier is found (e.g. whether a cable is plugged in or not).
|
|
// DEPRECATED: check for the "carrier" flag in the "InterfaceFlags" property on the "org.freedesktop.NetworkManager.Device" interface.
|
|
GetPropertyCarrier() (bool, error)
|
|
}
|
|
|
|
func NewDeviceBridge(objectPath dbus.ObjectPath) (DeviceBridge, error) {
|
|
var d deviceBridge
|
|
return &d, d.init(NetworkManagerInterface, objectPath)
|
|
}
|
|
|
|
type deviceBridge struct {
|
|
device
|
|
}
|
|
|
|
func (d *deviceBridge) GetPropertyHwAddress() (string, error) {
|
|
return d.getStringProperty(DeviceBridgePropertyHwAddress)
|
|
}
|
|
|
|
func (d *deviceBridge) GetPropertySlaves() ([]Device, error) {
|
|
paths, err := d.getSliceObjectProperty(DeviceBridgePropertySlaves)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
devices := make([]Device, len(paths))
|
|
for i, path := range paths {
|
|
devices[i], err = DeviceFactory(path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
return devices, nil
|
|
}
|
|
|
|
func (d *deviceBridge) GetPropertyCarrier() (bool, error) {
|
|
return d.getBoolProperty(DeviceBridgePropertyCarrier)
|
|
}
|
|
|
|
func (d *deviceBridge) MarshalJSON() ([]byte, error) {
|
|
m, err := d.device.marshalMap()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
m["HwAddress"], _ = d.GetPropertyHwAddress()
|
|
m["Slaves"], _ = d.GetPropertySlaves()
|
|
m["Carrier"], _ = d.GetPropertyCarrier()
|
|
return json.Marshal(m)
|
|
}
|