11
11
// See the License for the specific language governing permissions and
12
12
// limitations under the License.
13
13
14
+ //go:build linux
14
15
// +build linux
15
16
16
17
package sysfs
17
18
18
19
import (
19
20
"fmt"
20
21
"io/ioutil"
22
+ "net"
21
23
"os"
22
24
"path/filepath"
23
25
@@ -26,36 +28,91 @@ import (
26
28
27
29
const netclassPath = "class/net"
28
30
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
+
29
84
// NetClassIface contains info from files in /sys/class/net/<iface>
30
85
// for single interface (iface).
31
86
type 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
59
116
}
60
117
61
118
// NetClass is collection of info for every interface (iface) in /sys/class/net. The map keys
0 commit comments