Add dbus Test

This commit is contained in:
Samuel Lorch 2023-04-08 23:06:09 +02:00
parent a737ac4d9d
commit f01ea3fdb7
7 changed files with 106 additions and 56 deletions

View file

@ -5,8 +5,23 @@ import (
"fmt"
"nfsense.net/nfsense/internal/definitions"
"nfsense.net/nfsense/internal/networkd/dbus"
)
type GetLinksResult struct {
Links []dbus.Link
}
func (f *Network) GetLinks(ctx context.Context, params struct{}) (GetLinksResult, error) {
links, err := dbus.GetLinks(*f.DbusConn)
if err != nil {
return GetLinksResult{}, fmt.Errorf("Getting Links: %w", err)
}
return GetLinksResult{
Links: links,
}, nil
}
type GetInterfacesResult struct {
Interfaces map[string]definitions.Interface
}

View file

@ -1,7 +1,11 @@
package network
import "nfsense.net/nfsense/internal/config"
import (
"github.com/godbus/dbus/v5"
"nfsense.net/nfsense/internal/config"
)
type Network struct {
ConfigManager *config.ConfigManager
DbusConn *dbus.Conn
}

View file

@ -0,0 +1,48 @@
package dbus
import (
"fmt"
"github.com/godbus/dbus/v5"
"golang.org/x/exp/slog"
)
type Link struct {
Name string `json:"name"`
CarrierState string `json:"carrier_state"`
OperationalState string `json:"operational_state"`
}
func GetLinks(dbusConn dbus.Conn) ([]Link, error) {
managerObj := dbusConn.Object("org.freedesktop.network1", dbus.ObjectPath("/org/freedesktop/network1"))
var links [][]any
err := managerObj.Call("org.freedesktop.network1.Manager.ListLinks", 0).Store(&links)
if err != nil {
return nil, fmt.Errorf("Calling ListLinks %w", err)
}
slog.Info("Dbus Result", "links", links)
result := []Link{}
for _, link := range links {
name := link[1].(string)
path := link[2].(string)
linkObj := dbusConn.Object("org.freedesktop.network1", dbus.ObjectPath(path))
carrierState, err := linkObj.GetProperty("CarrierState")
if err != nil {
return nil, fmt.Errorf("GetProperty CarrierState %w", err)
}
operationalState, err := linkObj.GetProperty("OperationalState")
if err != nil {
return nil, fmt.Errorf("GetProperty OperationalState %w", err)
}
result = append(result, Link{
Name: name,
CarrierState: carrierState.String(),
OperationalState: operationalState.String(),
})
}
return result, nil
}