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,6 +28,59 @@ 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 {
@@ -34,6 +89,8 @@ type NetClassIface struct {
3489 AddrLen * int64 // /sys/class/net/<iface>/addr_len
3590 Address string // /sys/class/net/<iface>/address
3691 Broadcast string // /sys/class/net/<iface>/broadcast
92+ BondAttrs NetClassBondAttrs
93+ BondDeviceAttrs NetClassBondDeviceAttrs
3794 Carrier * int64 // /sys/class/net/<iface>/carrier
3895 CarrierChanges * int64 // /sys/class/net/<iface>/carrier_changes
3996 CarrierUpCount * int64 // /sys/class/net/<iface>/carrier_up_count
0 commit comments