mirror of
https://github.com/SynologyOpenSource/synology-csi.git
synced 2026-08-19 11:36:33 +00:00
102 lines
2.2 KiB
Go
102 lines
2.2 KiB
Go
// Copyright 2021 Synology Inc.
|
|
|
|
package webapi
|
|
|
|
import (
|
|
"fmt"
|
|
"net/url"
|
|
"strings"
|
|
)
|
|
|
|
type DsmSysInfo struct {
|
|
Model string `json:"model"`
|
|
FirmwareVer string `json:"firmware_ver"`
|
|
Serial string `json:"serial"`
|
|
// type: network
|
|
Hostname string `json:"hostname"`
|
|
// type: define
|
|
SupportNvmeof string `json:"support_nvmeof"`
|
|
}
|
|
|
|
type NetworkInterface struct {
|
|
Ifname string `json:"ifname"`
|
|
Ip string `json:"ip"`
|
|
Mask string `json:"mask"`
|
|
Speed int `json:"speed"`
|
|
Status string `json:"status"`
|
|
Type string `json:"type"`
|
|
UseDhcp bool `json:"use_dhcp"`
|
|
}
|
|
|
|
func (dsm *DSM) FillSystemInfo() error {
|
|
info, err := dsm.DsmSystemInfoGet("define")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
dsm.SupportNvmeof = (info.SupportNvmeof == "yes")
|
|
|
|
info, err = dsm.DsmSystemInfoGet("network")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
dsm.Hostname = info.Hostname
|
|
|
|
info, err = dsm.DsmSystemInfoGet("")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
dsm.FirmwareVer = info.FirmwareVer
|
|
|
|
return nil
|
|
}
|
|
|
|
func (dsm *DSM) DsmSystemInfoGet(infoType string) (*DsmSysInfo, error) {
|
|
params := url.Values{}
|
|
params.Add("api", "SYNO.Core.System")
|
|
params.Add("method", "info")
|
|
params.Add("version", "1")
|
|
if infoType != "" {
|
|
params.Add("type", infoType)
|
|
}
|
|
|
|
resp, err := dsm.sendRequest("", &DsmSysInfo{}, params, "webapi/entry.cgi")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
dsmInfo, ok := resp.Data.(*DsmSysInfo)
|
|
if !ok {
|
|
return nil, fmt.Errorf("Failed to assert response to %T", &DsmSysInfo{})
|
|
}
|
|
|
|
return dsmInfo, nil
|
|
}
|
|
|
|
|
|
func (dsm *DSM) NetworkInterfaceList(relayNode string) ([]NetworkInterface, error) {
|
|
params := url.Values{}
|
|
params.Add("api", "SYNO.Core.Network.Interface")
|
|
params.Add("method", "list")
|
|
params.Add("version", "1")
|
|
|
|
if relayNode != "" {
|
|
params.Add("relay_node", relayNode)
|
|
}
|
|
|
|
ifaces := []NetworkInterface{}
|
|
validIfaces := []NetworkInterface{}
|
|
|
|
_, err := dsm.sendRequest("", &ifaces, params, "webapi/entry.cgi")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for _, iface := range ifaces {
|
|
if strings.Contains(iface.Ifname, "eth") || strings.Contains(iface.Ifname, "bond") {
|
|
validIfaces = append(validIfaces, iface)
|
|
}
|
|
}
|
|
|
|
return validIfaces, nil
|
|
}
|