struct net_device — The DEVICE structure. Actually, this whole structure is a big mistake. It mixes I/O data with strictly “high-level” data, and it has to know about almost every data structure used in the INET module.
struct net_device { char name[IFNAMSIZ]; struct hlist_node name_hlist; char * ifalias; unsigned long mem_end; unsigned long mem_start; unsigned long base_addr; int irq; atomic_t carrier_changes; unsigned long state; struct list_head dev_list; struct list_head napi_list; struct list_head unreg_list; struct list_head close_list; struct {unnamed_struct}; struct garp_port __rcu * garp_port; struct mrp_port __rcu * mrp_port; struct device dev; const struct attribute_group * sysfs_groups[4]; const struct attribute_group * sysfs_rx_queue_group; const struct rtnl_link_ops * rtnl_link_ops; #define GSO_MAX_SIZE 65536 unsigned int gso_max_size; #define GSO_MAX_SEGS 65535 u16 gso_max_segs; u16 gso_min_segs; #ifdef CONFIG_DCB const struct dcbnl_rtnl_ops * dcbnl_ops; #endif u8 num_tc; struct netdev_tc_txq tc_to_txq[TC_MAX_QUEUE]; u8 prio_tc_map[TC_BITMASK + 1]; #if IS_ENABLED(CONFIG_FCOE) unsigned int fcoe_ddp_xid; #endif #if IS_ENABLED(CONFIG_CGROUP_NET_PRIO) struct netprio_map __rcu * priomap; #endif struct phy_device * phydev; struct lock_class_key * qdisc_tx_busylock; };
This is the first field of the “visible” part of this structure (i.e. as seen by users in the “Space.c” file). It is the name of the interface.
Device name hash chain, please keep it close to name[]
SNMP alias
Shared memory end
Shared memory start
Device I/O address
Device IRQ number
Stats to monitor carrier on<->off transitions
Generic network queuing layer state, see netdev_state_t
The global list of network devices
List entry, that is used for polling napi devices
List entry, that is used, when we are unregistering the device, see the function unregister_netdev
List entry, that is used, when we are closing the device
anonymous
GARP
MRP
Class/net/name entry
Space for optional device, statistics and wireless sysfs groups
Space for optional per-rx queue attributes
Rtnl_link_ops
Maximum size of generic segmentation offload
Maximum number of segments that can be passed to the NIC for GSO
Minimum number of segments that can be passed to the NIC for GSO
Data Center Bridging netlink ops
Number of traffic classes in the net device
XXX: need comments on this one
need comments on this one
Max exchange id for FCoE LRO by ddp
XXX: need comments on this one
Physical device may attach itself for hardware timestamping
XXX: need comments on this one