80 lines
1.7 KiB
Go
80 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 (
|
|
"fmt"
|
|
)
|
|
|
|
type NICCapability struct {
|
|
Name string `json:"name"`
|
|
IsEnabled bool `json:"is_enabled"`
|
|
CanEnable bool `json:"can_enable"`
|
|
}
|
|
|
|
type NIC struct {
|
|
Name string `json:"name"`
|
|
MacAddress string `json:"mac_address"`
|
|
IsVirtual bool `json:"is_virtual"`
|
|
Capabilities []*NICCapability `json:"capabilities"`
|
|
// TODO(jaypipes): Add PCI field for accessing PCI device information
|
|
// PCI *PCIDevice `json:"pci"`
|
|
}
|
|
|
|
func (n *NIC) String() string {
|
|
isVirtualStr := ""
|
|
if n.IsVirtual {
|
|
isVirtualStr = " (virtual)"
|
|
}
|
|
return fmt.Sprintf(
|
|
"%s%s",
|
|
n.Name,
|
|
isVirtualStr,
|
|
)
|
|
}
|
|
|
|
type NetworkInfo struct {
|
|
NICs []*NIC `json:"nics"`
|
|
}
|
|
|
|
func Network(opts ...*WithOption) (*NetworkInfo, error) {
|
|
mergeOpts := mergeOptions(opts...)
|
|
ctx := &context{
|
|
chroot: *mergeOpts.Chroot,
|
|
}
|
|
info := &NetworkInfo{}
|
|
if err := ctx.netFillInfo(info); err != nil {
|
|
return nil, err
|
|
}
|
|
return info, nil
|
|
}
|
|
|
|
func (i *NetworkInfo) String() string {
|
|
return fmt.Sprintf(
|
|
"net (%d NICs)",
|
|
len(i.NICs),
|
|
)
|
|
}
|
|
|
|
// simple private struct used to encapsulate net information in a
|
|
// top-level "net" YAML/JSON map/object key
|
|
type netPrinter struct {
|
|
Info *NetworkInfo `json:"network"`
|
|
}
|
|
|
|
// YAMLString returns a string with the net information formatted as YAML
|
|
// under a top-level "net:" key
|
|
func (i *NetworkInfo) YAMLString() string {
|
|
return safeYAML(netPrinter{i})
|
|
}
|
|
|
|
// JSONString returns a string with the net information formatted as JSON
|
|
// under a top-level "net:" key
|
|
func (i *NetworkInfo) JSONString(indent bool) string {
|
|
return safeJSON(netPrinter{i}, indent)
|
|
}
|