IP4Config (new API) methods implementation

This commit is contained in:
Christian Müller 2019-05-17 17:55:50 +02:00
parent e5777e2fd1
commit 053b71438e
2 changed files with 63 additions and 8 deletions

View file

@ -2,7 +2,6 @@ package gonetworkmanager
import (
"encoding/json"
"github.com/godbus/dbus"
)
@ -50,7 +49,7 @@ type IP4RouteData struct {
Prefix uint8
NextHop string
Metric uint8
AdditionalAttributes []string
AdditionalAttributes map[string]string
}
type IP4NameserverData struct {
@ -126,7 +125,18 @@ func (c *ip4Config) GetAddresses() []IP4Address {
}
func (c *ip4Config) GetAddressData() []IP4AddressData {
return []IP4AddressData{}
addresses := c.getSliceMapStringVariantProperty(IP4ConfigPropertyAddressData)
ret := make([]IP4AddressData, len(addresses))
for i, address := range addresses {
prefix := address["prefix"].Value().(uint32)
ret[i] = IP4AddressData{
Address: address["address"].Value().(string),
Prefix: uint8(prefix),
}
}
return ret
}
func (c *ip4Config) GetGateway() string {
@ -151,7 +161,33 @@ func (c *ip4Config) GetRoutes() []IP4Route {
}
func (c *ip4Config) GetRouteData() []IP4RouteData {
return []IP4RouteData{}
routesData := c.getSliceMapStringVariantProperty(IP4ConfigPropertyRouteData)
routes := make([]IP4RouteData, len(routesData))
for _, routeData := range routesData {
route := IP4RouteData{}
for routeDataAttributeName, routeDataAttribute := range routeData {
switch routeDataAttributeName {
case "dest":
route.Destination = routeDataAttribute.Value().(string)
case "prefix":
prefix, _ := routeDataAttribute.Value().(uint32)
route.Prefix = uint8(prefix)
case "next-hop":
route.NextHop = routeDataAttribute.Value().(string)
case "metric":
metric := routeDataAttribute.Value().(uint32)
route.Metric = uint8(metric)
default:
route.AdditionalAttributes[routeDataAttributeName] = routeDataAttribute.String()
}
}
routes = append(routes, route)
}
return routes
}
// Deprecated: use GetNameserverData
@ -167,7 +203,18 @@ func (c *ip4Config) GetNameservers() []string {
}
func (c *ip4Config) GetNameserverData() []IP4NameserverData {
return []IP4NameserverData{}
nameserversData := c.getSliceMapStringVariantProperty(IP4ConfigPropertyNameserverData)
nameservers := make([]IP4NameserverData, len(nameserversData))
for _, nameserverData := range nameserversData {
nameserver := IP4NameserverData{
Address: nameserverData["address"].Value().(string),
}
nameservers = append(nameservers, nameserver)
}
return nameservers
}
func (c *ip4Config) GetDomains() []string {
@ -192,9 +239,9 @@ func (c *ip4Config) GetWinsServerData() []string {
func (c *ip4Config) MarshalJSON() ([]byte, error) {
return json.Marshal(map[string]interface{}{
"Addresses": c.GetAddresses(),
"Routes": c.GetRoutes(),
"Nameservers": c.GetNameservers(),
"Addresses": c.GetAddressData(),
"Routes": c.GetRouteData(),
"Nameservers": c.GetNameserverData(),
"Domains": c.GetDomains(),
})
}

View file

@ -148,6 +148,14 @@ func (d *dbusBase) getSliceSliceUint32Property(iface string) [][]uint32 {
return value
}
func (d *dbusBase) getSliceMapStringVariantProperty(iface string) []map[string]dbus.Variant {
value, ok := d.getProperty(iface).([]map[string]dbus.Variant)
if !ok {
panic(makeErrVariantType(iface))
}
return value
}
func (d *dbusBase) getSliceByteProperty(iface string) []byte {
value, ok := d.getProperty(iface).([]byte)
if !ok {