1111// See the License for the specific language governing permissions and
1212// limitations under the License.
1313
14+ //go:build linux
1415// +build linux
1516
1617package sysfs
1718
1819import (
1920 "fmt"
2021 "io/ioutil"
22+ "net"
2123 "os"
2224 "path/filepath"
2325
@@ -26,36 +28,91 @@ import (
2628
2729const netclassPath = "class/net"
2830
31+ // NetClassBondAttrs contains info from files in /sys/class/net/<iface>/bonding
32+ // for a bonding controller interface (iface)
33+ type NetClassBondAttrs struct {
34+ ActiveDevice string // /sys/class/net/<iface>/bonding/active_slave
35+ AdActorKey uint16 // /sys/class/net/<iface>/bonding/ad_actor_key (Requires CAP_NET_ADMIN)
36+ AdActorSysPriority uint16 // /sys/class/net/<iface>/bonding/ad_actor_sys_prio (Requires CAP_NET_ADMIN)
37+ AdActorSystem net.HardwareAddr // /sys/class/net/<iface>/bonding/ad_actor_system (Requires CAP_NET_ADMIN)
38+ AdAggregator uint16 // /sys/class/net/<iface>/bonding/ad_aggregator
39+ AdNumPorts uint16 // /sys/class/net/<iface>/bonding/ad_num_ports
40+ AdPartnerKey uint16 // /sys/class/net/<iface>/bonding/ad_partner_key (Requires CAP_NET_ADMIN)
41+ AdPartnerMac net.HardwareAddr // /sys/class/net/<iface>/bonding/ad_partner_mac (Requires CAP_NET_ADMIN)
42+ AdSelect string // /sys/class/net/<iface>/bonding/ad_select
43+ AdUserPortKey uint16 // /sys/class/net/<iface>/bonding/ad_user_port_key (Requires CAP_NET_ADMIN)
44+ AllDevicesActive bool // /sys/class/net/<iface>/bonding/all_slaves_active
45+ ARPAllTargets string // /sys/class/net/<iface>/bonding/arp_all_targets
46+ ARPInterval int64 // /sys/class/net/<iface>/bonding/arp_interval
47+ ARPIPTarget net.IP // /sys/class/net/<iface>/bonding/arp_ip_target
48+ ARPValidate string // /sys/class/net/<iface>/bonding/arp_validate
49+ DownDelay int64 // /sys/class/net/<iface>/bonding/downdelay
50+ FailoverMac string // /sys/class/net/<iface>/bonding/failover_mac
51+ LACPRate string // /sys/class/net/<iface>/bonding/lacp_rate
52+ LPInterval int64 // /sys/class/net/<iface>/bonding/lp_interval
53+ MIIMon int64 // /sys/class/net/<iface>/bonding/miimon
54+ MIIStatus bool // /sys/class/net/<iface>/bonding/mii_status
55+ MinLinks uint64 // /sys/class/net/<iface>/bonding/min_links
56+ Mode string // /sys/class/net/<iface>/bonding/mode
57+ NumberGratuitousArp uint8 // /sys/class/net/<iface>/bonding/num_grat_arp
58+ NumberUnsolicitedNeighborAdvertisement uint8 // /sys/class/net/<iface>/bonding/num_unsol_na
59+ PacketsPerDevice int64 // /sys/class/net/<iface>/bonding/packets_per_slave
60+ PrimaryDevice string // /sys/class/net/<iface>/bonding/primary
61+ PrimaryReselect string // /sys/class/net/<iface>/bonding/primary_reselect
62+ DeviceQueueIDs map [string ]uint16 // /sys/class/net/<iface>/bonding/queue_id
63+ ResendIgmp int64 // /sys/class/net/<iface>/bonding/resend_igmp
64+ Devices string // /sys/class/net/<iface>/bonding/slaves
65+ TLBDynamicLB int64 // /sys/class/net/<iface>/bonding/tlb_dynamic_lb
66+ UpDelay int64 // /sys/class/net/<iface>/bonding/updelay
67+ UseCarrier int64 // /sys/class/net/<iface>/bonding/use_carrier
68+ TransmitHashPolicy string // /sys/class/net/<iface>/bonding/xmit_hash_policy
69+ }
70+
71+ // NetClassBondSlaveAttrs contains info from files in /sys/class/net/<iface>/bonding_slave
72+ // for a bonding device interface (iface)
73+ type NetClassBondDeviceAttrs struct {
74+ AdActorOperationalPortState uint8 // /sys/class/net/<iface>/bonding_slave/ad_actor_oper_port_state
75+ AdAggregatorId uint16 // /sys/class/net/<iface>/bonding_slave/ad_aggregator_id
76+ AdPartnerOperationalPortState uint16 // /sys/class/net/<iface>/bonding_slave/ad_partner_oper_port_state
77+ LinkFailureCount uint32 // /sys/class/net/<iface>/bonding_slave/link_failure_count
78+ MiiStatus bool // /sys/class/net/<iface>/bonding_slave/mii_status
79+ PermamentHWAddress net.HardwareAddr // /sys/class/net/<iface>/bonding_slave/perm_hwaddr
80+ QueueID uint16 // /sys/class/net/<iface>/bonding_slave/queue_id
81+ State uint8 // /sys/class/net/<iface>/bonding_slave/state
82+ }
83+
2984// NetClassIface contains info from files in /sys/class/net/<iface>
3085// for single interface (iface).
3186type NetClassIface struct {
32- Name string // Interface name
33- AddrAssignType * int64 // /sys/class/net/<iface>/addr_assign_type
34- AddrLen * int64 // /sys/class/net/<iface>/addr_len
35- Address string // /sys/class/net/<iface>/address
36- Broadcast string // /sys/class/net/<iface>/broadcast
37- Carrier * int64 // /sys/class/net/<iface>/carrier
38- CarrierChanges * int64 // /sys/class/net/<iface>/carrier_changes
39- CarrierUpCount * int64 // /sys/class/net/<iface>/carrier_up_count
40- CarrierDownCount * int64 // /sys/class/net/<iface>/carrier_down_count
41- DevID * int64 // /sys/class/net/<iface>/dev_id
42- Dormant * int64 // /sys/class/net/<iface>/dormant
43- Duplex string // /sys/class/net/<iface>/duplex
44- Flags * int64 // /sys/class/net/<iface>/flags
45- IfAlias string // /sys/class/net/<iface>/ifalias
46- IfIndex * int64 // /sys/class/net/<iface>/ifindex
47- IfLink * int64 // /sys/class/net/<iface>/iflink
48- LinkMode * int64 // /sys/class/net/<iface>/link_mode
49- MTU * int64 // /sys/class/net/<iface>/mtu
50- NameAssignType * int64 // /sys/class/net/<iface>/name_assign_type
51- NetDevGroup * int64 // /sys/class/net/<iface>/netdev_group
52- OperState string // /sys/class/net/<iface>/operstate
53- PhysPortID string // /sys/class/net/<iface>/phys_port_id
54- PhysPortName string // /sys/class/net/<iface>/phys_port_name
55- PhysSwitchID string // /sys/class/net/<iface>/phys_switch_id
56- Speed * int64 // /sys/class/net/<iface>/speed
57- TxQueueLen * int64 // /sys/class/net/<iface>/tx_queue_len
58- Type * int64 // /sys/class/net/<iface>/type
87+ Name string // Interface name
88+ AddrAssignType * int64 // /sys/class/net/<iface>/addr_assign_type
89+ AddrLen * int64 // /sys/class/net/<iface>/addr_len
90+ Address string // /sys/class/net/<iface>/address
91+ Broadcast string // /sys/class/net/<iface>/broadcast
92+ BondAttrs NetClassBondAttrs // /sys/class/net/<iface>/bonding
93+ BondDeviceAttrs NetClassBondDeviceAttrs // /sys/class/net/<iface>/bonding_slave
94+ Carrier * int64 // /sys/class/net/<iface>/carrier
95+ CarrierChanges * int64 // /sys/class/net/<iface>/carrier_changes
96+ CarrierUpCount * int64 // /sys/class/net/<iface>/carrier_up_count
97+ CarrierDownCount * int64 // /sys/class/net/<iface>/carrier_down_count
98+ DevID * int64 // /sys/class/net/<iface>/dev_id
99+ Dormant * int64 // /sys/class/net/<iface>/dormant
100+ Duplex string // /sys/class/net/<iface>/duplex
101+ Flags * int64 // /sys/class/net/<iface>/flags
102+ IfAlias string // /sys/class/net/<iface>/ifalias
103+ IfIndex * int64 // /sys/class/net/<iface>/ifindex
104+ IfLink * int64 // /sys/class/net/<iface>/iflink
105+ LinkMode * int64 // /sys/class/net/<iface>/link_mode
106+ MTU * int64 // /sys/class/net/<iface>/mtu
107+ NameAssignType * int64 // /sys/class/net/<iface>/name_assign_type
108+ NetDevGroup * int64 // /sys/class/net/<iface>/netdev_group
109+ OperState string // /sys/class/net/<iface>/operstate
110+ PhysPortID string // /sys/class/net/<iface>/phys_port_id
111+ PhysPortName string // /sys/class/net/<iface>/phys_port_name
112+ PhysSwitchID string // /sys/class/net/<iface>/phys_switch_id
113+ Speed * int64 // /sys/class/net/<iface>/speed
114+ TxQueueLen * int64 // /sys/class/net/<iface>/tx_queue_len
115+ Type * int64 // /sys/class/net/<iface>/type
59116}
60117
61118// NetClass is collection of info for every interface (iface) in /sys/class/net. The map keys
0 commit comments