Files
scrutiny/vendor/github.com/jaypipes/ghw/net.go
T
2020-08-21 06:31:48 +00:00

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)
}