66 lines
1.7 KiB
Go
66 lines
1.7 KiB
Go
// Use and distribution licensed under the Apache license version 2.
|
|
//
|
|
// See the COPYING file in the root project directory for full text.
|
|
//
|
|
|
|
package ghw
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/StackExchange/wmi"
|
|
)
|
|
|
|
const wqlNetworkAdapter = "SELECT Description, DeviceID, Index, InterfaceIndex, MACAddress, Manufacturer, Name, NetConnectionID, ProductName, ServiceName FROM Win32_NetworkAdapter"
|
|
|
|
type win32NetworkAdapter struct {
|
|
Description *string
|
|
DeviceID *string
|
|
Index *uint32
|
|
InterfaceIndex *uint32
|
|
MACAddress *string
|
|
Manufacturer *string
|
|
Name *string
|
|
NetConnectionID *string
|
|
ProductName *string
|
|
ServiceName *string
|
|
}
|
|
|
|
func (ctx *context) netFillInfo(info *NetworkInfo) error {
|
|
// Getting info from WMI
|
|
var win32NetDescriptions []win32NetworkAdapter
|
|
if err := wmi.Query(wqlNetworkAdapter, &win32NetDescriptions); err != nil {
|
|
return err
|
|
}
|
|
|
|
info.NICs = ctx.nics(win32NetDescriptions)
|
|
return nil
|
|
}
|
|
|
|
func (ctx *context) nics(win32NetDescriptions []win32NetworkAdapter) []*NIC {
|
|
// Converting into standard structures
|
|
nics := make([]*NIC, 0)
|
|
for _, nicDescription := range win32NetDescriptions {
|
|
nic := &NIC{
|
|
Name: ctx.netDeviceName(nicDescription),
|
|
MacAddress: *nicDescription.MACAddress,
|
|
IsVirtual: false,
|
|
Capabilities: []*NICCapability{},
|
|
}
|
|
// Appenging NIC to NICs
|
|
nics = append(nics, nic)
|
|
}
|
|
|
|
return nics
|
|
}
|
|
|
|
func (ctx *context) netDeviceName(description win32NetworkAdapter) string {
|
|
var name string
|
|
if strings.TrimSpace(*description.NetConnectionID) != "" {
|
|
name = *description.NetConnectionID + " - " + *description.Description
|
|
} else {
|
|
name = *description.Description
|
|
}
|
|
return name
|
|
}
|