150 lines
5.4 KiB
Go
150 lines
5.4 KiB
Go
package gonetworkmanager
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
"github.com/godbus/dbus/v5"
|
|
)
|
|
|
|
const (
|
|
DeviceIpTunnelInterface = DeviceInterface + ".IPTunnel"
|
|
|
|
// Properties
|
|
DeviceIpTunnelPropertyHwAddress = DeviceIpTunnelInterface + "HwAddress" // readable s
|
|
DeviceIpTunnelPropertyMode = DeviceIpTunnelInterface + ".Mode" // readable u
|
|
DeviceIpTunnelPropertyParent = DeviceIpTunnelInterface + ".Parent" // readable o
|
|
DeviceIpTunnelPropertyLocal = DeviceIpTunnelInterface + ".Local" // readable s
|
|
DeviceIpTunnelPropertyRemote = DeviceIpTunnelInterface + ".Remote" // readable s
|
|
DeviceIpTunnelPropertyTtl = DeviceIpTunnelInterface + ".Ttl" // readable y
|
|
DeviceIpTunnelPropertyTos = DeviceIpTunnelInterface + ".Tos" // readable y
|
|
DeviceIpTunnelPropertyPathMtuDiscovery = DeviceIpTunnelInterface + ".PathMtuDiscovery" // readable b
|
|
DeviceIpTunnelPropertyInputKey = DeviceIpTunnelInterface + ".InputKey" // readable s
|
|
DeviceIpTunnelPropertyOutputKey = DeviceIpTunnelInterface + ".OutputKey" // readable s
|
|
DeviceIpTunnelPropertyEncapsulationLimit = DeviceIpTunnelInterface + ".EncapsulationLimit" // readable y
|
|
DeviceIpTunnelPropertyFlowLabel = DeviceIpTunnelInterface + ".FlowLabel" // readable u
|
|
DeviceIpTunnelPropertyFlags = DeviceIpTunnelInterface + ".Flags" // readable u
|
|
|
|
)
|
|
|
|
type DeviceIpTunnel interface {
|
|
Device
|
|
|
|
// GetPropertyMode The tunneling mode
|
|
GetPropertyMode() (uint32, error)
|
|
|
|
// GetPropertyParent The object path of the parent device.
|
|
GetPropertyParent() (Device, error)
|
|
|
|
// GetPropertyLocal The local endpoint of the tunnel.
|
|
GetPropertyLocal() (string, error)
|
|
|
|
// GetPropertyRemote The remote endpoint of the tunnel.
|
|
GetPropertyRemote() (string, error)
|
|
|
|
// GetPropertyTtl The TTL assigned to tunneled packets. 0 is a special value meaning that packets inherit the TTL value
|
|
GetPropertyTtl() (uint8, error)
|
|
|
|
// GetPropertyTos The type of service (IPv4) or traffic class (IPv6) assigned to tunneled packets.
|
|
GetPropertyTos() (uint8, error)
|
|
|
|
// GetPropertyPathMtuDiscovery Whether path MTU discovery is enabled on this tunnel.
|
|
GetPropertyPathMtuDiscovery() (bool, error)
|
|
|
|
// GetPropertyInputKey The key used for incoming packets.
|
|
GetPropertyInputKey() (string, error)
|
|
|
|
// GetPropertyOutputKey The key used for outgoing packets.
|
|
GetPropertyOutputKey() (string, error)
|
|
|
|
// GetPropertyEncapsulationLimit How many additional levels of encapsulation are permitted to be prepended to packets. This property applies only to IPv6 tunnels.
|
|
GetPropertyEncapsulationLimit() (uint8, error)
|
|
|
|
// GetPropertyFlowLabel The flow label to assign to tunnel packets. This property applies only to IPv6 tunnels.
|
|
GetPropertyFlowLabel() (uint32, error)
|
|
|
|
// GetPropertyFlags Tunnel flags.
|
|
GetPropertyFlags() (uint32, error)
|
|
}
|
|
|
|
func NewDeviceIpTunnel(objectPath dbus.ObjectPath) (DeviceIpTunnel, error) {
|
|
var d deviceIpTunnel
|
|
return &d, d.init(NetworkManagerInterface, objectPath)
|
|
}
|
|
|
|
type deviceIpTunnel struct {
|
|
device
|
|
}
|
|
|
|
func (d *deviceIpTunnel) GetPropertyMode() (uint32, error) {
|
|
return d.getUint32Property(DeviceIpTunnelPropertyMode)
|
|
}
|
|
|
|
func (d *deviceIpTunnel) GetPropertyParent() (Device, error) {
|
|
path, err := d.getObjectProperty(DeviceIpTunnelPropertyParent)
|
|
if err != nil || path == "/" {
|
|
return nil, err
|
|
}
|
|
|
|
return DeviceFactory(path)
|
|
}
|
|
|
|
func (d *deviceIpTunnel) GetPropertyLocal() (string, error) {
|
|
return d.getStringProperty(DeviceIpTunnelPropertyLocal)
|
|
}
|
|
|
|
func (d *deviceIpTunnel) GetPropertyRemote() (string, error) {
|
|
return d.getStringProperty(DeviceIpTunnelPropertyRemote)
|
|
}
|
|
|
|
func (d *deviceIpTunnel) GetPropertyTtl() (uint8, error) {
|
|
return d.getUint8Property(DeviceIpTunnelPropertyTtl)
|
|
}
|
|
|
|
func (d *deviceIpTunnel) GetPropertyTos() (uint8, error) {
|
|
return d.getUint8Property(DeviceIpTunnelPropertyTos)
|
|
}
|
|
|
|
func (d *deviceIpTunnel) GetPropertyPathMtuDiscovery() (bool, error) {
|
|
return d.getBoolProperty(DeviceIpTunnelPropertyPathMtuDiscovery)
|
|
}
|
|
|
|
func (d *deviceIpTunnel) GetPropertyInputKey() (string, error) {
|
|
return d.getStringProperty(DeviceIpTunnelPropertyInputKey)
|
|
}
|
|
|
|
func (d *deviceIpTunnel) GetPropertyOutputKey() (string, error) {
|
|
return d.getStringProperty(DeviceIpTunnelPropertyOutputKey)
|
|
}
|
|
|
|
func (d *deviceIpTunnel) GetPropertyEncapsulationLimit() (uint8, error) {
|
|
return d.getUint8Property(DeviceIpTunnelPropertyEncapsulationLimit)
|
|
}
|
|
|
|
func (d *deviceIpTunnel) GetPropertyFlowLabel() (uint32, error) {
|
|
return d.getUint32Property(DeviceIpTunnelPropertyFlowLabel)
|
|
}
|
|
|
|
func (d *deviceIpTunnel) GetPropertyFlags() (uint32, error) {
|
|
return d.getUint32Property(DeviceIpTunnelPropertyFlags)
|
|
}
|
|
|
|
func (d *deviceIpTunnel) MarshalJSON() ([]uint8, error) {
|
|
m, err := d.device.marshalMap()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
m["Mode"], _ = d.GetPropertyMode()
|
|
m["Parent"], _ = d.GetPropertyParent()
|
|
m["Local"], _ = d.GetPropertyLocal()
|
|
m["Remote"], _ = d.GetPropertyRemote()
|
|
m["Ttl"], _ = d.GetPropertyTtl()
|
|
m["Tos"], _ = d.GetPropertyTos()
|
|
m["PathMtuDiscovery"], _ = d.GetPropertyPathMtuDiscovery()
|
|
m["InputKey"], _ = d.GetPropertyInputKey()
|
|
m["OutputKey"], _ = d.GetPropertyOutputKey()
|
|
m["EncapsulationLimit"], _ = d.GetPropertyEncapsulationLimit()
|
|
m["FlowLabel"], _ = d.GetPropertyFlowLabel()
|
|
m["Flags"], _ = d.GetPropertyFlags()
|
|
return json.Marshal(m)
|
|
}
|