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;
  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 list_head ptype_all;
  struct list_head ptype_specific;
  struct {unnamed_struct};
  struct garp_port __rcu * garp_port;
  struct mrp_port __rcu * mrp_port;
  struct device dev;
  const struct attribute_group * sysfs_groups;
  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;
  const struct dcbnl_rtnl_ops * dcbnl_ops;
  u8 num_tc;
  struct netdev_tc_txq tc_to_txq;
  u8 prio_tc_map;
  unsigned int fcoe_ddp_xid;
  struct netprio_map __rcu * priomap;
  struct phy_device * phydev;
  struct lock_class_key * qdisc_tx_busylock;
  struct lock_class_key * qdisc_running_key;
  bool proto_down;


char name

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.

struct hlist_node name_hlist

Device name hash chain, please keep it close to name[]

char * ifalias

SNMP alias

unsigned long mem_end

Shared memory end

unsigned long mem_start

Shared memory start

unsigned long base_addr

Device I/O address

int irq

Device IRQ number

atomic_t carrier_changes

Stats to monitor carrier on<->off transitions

unsigned long state

Generic network queuing layer state, see netdev_state_t

struct list_head dev_list

The global list of network devices

struct list_head napi_list

List entry used for polling NAPI devices

struct list_head unreg_list

List entry when we are unregistering the device; see the function unregister_netdev

struct list_head close_list

List entry used when we are closing the device

struct list_head ptype_all

Device-specific packet handlers for all protocols

struct list_head ptype_specific

Device-specific, protocol-specific packet handlers

struct {unnamed_struct}


struct garp_port __rcu * garp_port


struct mrp_port __rcu * mrp_port


struct device dev

Class/net/name entry

const struct attribute_group * sysfs_groups

Space for optional device, statistics and wireless sysfs groups

const struct attribute_group * sysfs_rx_queue_group

Space for optional per-rx queue attributes

const struct rtnl_link_ops * rtnl_link_ops


unsigned int gso_max_size

Maximum size of generic segmentation offload

u16 gso_max_segs

Maximum number of segments that can be passed to the NIC for GSO

const struct dcbnl_rtnl_ops * dcbnl_ops

Data Center Bridging netlink ops

u8 num_tc

Number of traffic classes in the net device

struct netdev_tc_txq tc_to_txq

XXX: need comments on this one

u8 prio_tc_map

XXX: need comments on this one

unsigned int fcoe_ddp_xid

Max exchange id for FCoE LRO by ddp

struct netprio_map __rcu * priomap

XXX: need comments on this one

struct phy_device * phydev

Physical device may attach itself for hardware timestamping

struct lock_class_key * qdisc_tx_busylock

lockdep class annotating Qdisc->busylock spinlock

struct lock_class_key * qdisc_running_key

lockdep class annotating Qdisc->running seqcount

bool proto_down

protocol port state information can be sent to the switch driver and used to set the phys state of the switch port.


interface address info:

FIXME: cleanup struct net_device such that network protocol info moves out.