Skip to content

Commit 23a31a1

Browse files
committed
Add structures for interface bonding information
Update net_class.go with new structures to handle bonding driver information References: torvalds/linux/drivers/net/bonding/bond_sysfs.c torvalds/linux/drivers/net/bonding/bond_sysfs_slave.c torvalds/linux/include/net/bonding.h torvalds/linux/include/net/bond_options.h torvalds/linux/include/net/bond_3ad.h Signed-off-by: Brandon Ewing <brandon.ewing@warningg.com>
1 parent 5f46783 commit 23a31a1

File tree

1 file changed

+84
-27
lines changed

1 file changed

+84
-27
lines changed

sysfs/net_class.go

Lines changed: 84 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,15 @@
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

1617
package sysfs
1718

1819
import (
1920
"fmt"
2021
"io/ioutil"
22+
"net"
2123
"os"
2224
"path/filepath"
2325

@@ -26,36 +28,91 @@ import (
2628

2729
const 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).
3186
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
59116
}
60117

61118
// NetClass is collection of info for every interface (iface) in /sys/class/net. The map keys

0 commit comments

Comments
 (0)