net

    xiaoxiao2021-03-25  51

    /**  * 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.  *  * @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.  *  * @name_hlist: Device name hash chain, please keep it close to name[]  * @ifalias: SNMP alias  * @mem_end: Shared memory end  * @mem_start: Shared memory start  * @base_addr: Device I/O address  * @irq: Device IRQ number  *  * @carrier_changes: Stats to monitor carrier on<->off transitions  *  * @state: Generic network queuing layer state, see netdev_state_t  * @dev_list: The global list of network devices  * @napi_list: List entry used for polling NAPI devices  * @unreg_list: List entry  when we are unregistering the  * device; see the function unregister_netdev  * @close_list: List entry used when we are closing the device  * @ptype_all:     Device-specific packet handlers for all protocols  * @ptype_specific: Device-specific, protocol-specific packet handlers  *  * @adj_list: Directly linked devices, like slaves for bonding  * @all_adj_list: All linked devices, *including* neighbours  * @features: Currently active device features  * @hw_features: User-changeable features  *  * @wanted_features: User-requested features  * @vlan_features: Mask of features inheritable by VLAN devices  *  * @hw_enc_features: Mask of features inherited by encapsulating devices  * This field indicates what encapsulation  * offloads the hardware is capable of doing,  * and drivers will need to set them appropriately.  *  * @mpls_features: Mask of features inheritable by MPLS  *  * @ifindex: interface index  * @group: The group the device belongs to  *  * @stats: Statistics struct, which was left as a legacy, use  * rtnl_link_stats64 instead  *  * @rx_dropped: Dropped packets by core network,  * do not use this in drivers  * @tx_dropped: Dropped packets by core network,  * do not use this in drivers  * @rx_nohandler: nohandler dropped packets by core network on  * inactive devices, do not use this in drivers  *  * @wireless_handlers: List of functions to handle Wireless Extensions,  * instead of ioctl,  * see <net/iw_handler.h> for details.  * @wireless_data: Instance data managed by the core of wireless extensions  *  * @netdev_ops: Includes several pointers to callbacks,  * if one wants to override the ndo_*() functions  * @ethtool_ops: Management operations  * @ndisc_ops: Includes callbacks for different IPv6 neighbour  * discovery handling. Necessary for e.g. 6LoWPAN.  * @header_ops: Includes callbacks for creating,parsing,caching,etc  * of Layer 2 headers.  *  * @flags: Interface flags (a la BSD)  * @priv_flags: Like 'flags' but invisible to userspace,  * see if.h for the definitions  * @gflags: Global flags ( kept as legacy )  * @padded: How much padding added by alloc_netdev()  * @operstate: RFC2863 operstate  * @link_mode: Mapping policy to operstate  * @if_port: Selectable AUI, TP, ...  * @dma: DMA channel  * @mtu: Interface MTU value  * @type: Interface hardware type  * @hard_header_len: Maximum hardware header length.  *  * @needed_headroom: Extra headroom the hardware may need, but not in all  *  cases can this be guaranteed  * @needed_tailroom: Extra tailroom the hardware may need, but not in all  *  cases can this be guaranteed. Some cases also use  *  LL_MAX_HEADER instead to allocate the skb  *  * interface address info:  *  * @perm_addr: Permanent hw address  * @addr_assign_type: Hw address assignment type  * @addr_len: Hardware address length  * @neigh_priv_len: Used in neigh_alloc()  * @dev_id: Used to differentiate devices that share  * the same link layer address  * @dev_port: Used to differentiate devices that share  * the same function  * @addr_list_lock: XXX: need comments on this one  * @uc_promisc: Counter that indicates promiscuous mode  * has been enabled due to the need to listen to  * additional unicast addresses in a device that  * does not implement ndo_set_rx_mode()  * @uc: unicast mac addresses  * @mc: multicast mac addresses  * @dev_addrs: list of device hw addresses  * @queues_kset: Group of all Kobjects in the Tx and RX queues  * @promiscuity: Number of times the NIC is told to work in  * promiscuous mode; if it becomes 0 the NIC will  * exit promiscuous mode  * @allmulti: Counter, enables or disables allmulticast mode  *  * @vlan_info: VLAN info  * @dsa_ptr: dsa specific data  * @tipc_ptr: TIPC specific data  * @atalk_ptr: AppleTalk link  * @ip_ptr: IPv4 specific data  * @dn_ptr: DECnet specific data  * @ip6_ptr: IPv6 specific data  * @ax25_ptr: AX.25 specific data  * @ieee80211_ptr: IEEE 802.11 specific data, assign before registering  *  * @last_rx: Time of last Rx  * @dev_addr: Hw address (before bcast,  * because most packets are unicast)  *  * @_rx: Array of RX queues  * @num_rx_queues: Number of RX queues  * allocated at register_netdev() time  * @real_num_rx_queues: Number of RX queues currently active in device  *  * @rx_handler: handler for received packets  * @rx_handler_data: XXX: need comments on this one  * @ingress_queue: XXX: need comments on this one  * @broadcast: hw bcast address  *  * @rx_cpu_rmap: CPU reverse-mapping for RX completion interrupts,  * indexed by RX queue number. Assigned by driver.  * This must only be set if the ndo_rx_flow_steer  * operation is defined  * @index_hlist: Device index hash chain  *  * @_tx: Array of TX queues  * @num_tx_queues: Number of TX queues allocated at alloc_netdev_mq() time  * @real_num_tx_queues: Number of TX queues currently active in device  * @qdisc: Root qdisc from userspace point of view  * @tx_queue_len: Max frames per queue allowed  * @tx_global_lock: XXX: need comments on this one  *  * @xps_maps: XXX: need comments on this one  *  * @watchdog_timeo: Represents the timeout that is used by  * the watchdog (see dev_watchdog())  * @watchdog_timer: List of timers  *  * @pcpu_refcnt: Number of references to this device  * @todo_list: Delayed register/unregister  * @link_watch_list: XXX: need comments on this one  *  * @reg_state: Register/unregister state machine  * @dismantle: Device is going to be freed  * @rtnl_link_state: This enum represents the phases of creating  * a new link  *  * @destructor: Called from unregister,  * can be used to call free_netdev  * @npinfo: XXX: need comments on this one  * @nd_net: Network namespace this network device is inside  *  * @ml_priv: Mid-layer private  * @lstats: Loopback statistics  * @tstats: Tunnel statistics  * @dstats: Dummy statistics  * @vstats: Virtual ethernet statistics  *  * @garp_port: GARP  * @mrp_port: MRP  *  * @dev: Class/net/name entry  * @sysfs_groups: Space for optional device, statistics and wireless  * sysfs groups  *  * @sysfs_rx_queue_group: Space for optional per-rx queue attributes  * @rtnl_link_ops: Rtnl_link_ops  *  * @gso_max_size: Maximum size of generic segmentation offload  * @gso_max_segs: Maximum number of segments that can be passed to the  * NIC for GSO  *  * @dcbnl_ops: Data Center Bridging netlink ops  * @num_tc: Number of traffic classes in the net device  * @tc_to_txq: XXX: need comments on this one  * @prio_tc_map: XXX: need comments on this one  *  * @fcoe_ddp_xid: Max exchange id for FCoE LRO by ddp  *  * @priomap: XXX: need comments on this one  * @phydev: Physical device may attach itself  * for hardware timestamping  *  * @qdisc_tx_busylock: lockdep class annotating Qdisc->busylock spinlock  * @qdisc_running_key: lockdep class annotating Qdisc->running seqcount  *  * @proto_down: protocol port state information can be sent to the  * switch driver and used to set the phys state of the  * switch port.  *  * FIXME: cleanup struct net_device such that network protocol info  * moves out.  */ struct net_device { char name[IFNAMSIZ]; struct hlist_node name_hlist; char *ifalias; /* * I/O specific fields * FIXME: Merge these and struct ifmap into one */ unsigned long mem_end; unsigned long mem_start; unsigned long base_addr; int irq; atomic_t carrier_changes; /* * Some hardware also needs these fields (state,dev_list, * napi_list,unreg_list,close_list) but they are not * part of the usual set specified in Space.c. */ 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 { struct list_head upper; struct list_head lower; } adj_list; struct { struct list_head upper; struct list_head lower; } all_adj_list; netdev_features_t features; netdev_features_t hw_features; netdev_features_t wanted_features; netdev_features_t vlan_features; netdev_features_t hw_enc_features; netdev_features_t mpls_features; netdev_features_t gso_partial_features; int ifindex; int group; struct net_device_stats stats; atomic_long_t rx_dropped; atomic_long_t tx_dropped; atomic_long_t rx_nohandler; #ifdef CONFIG_WIRELESS_EXT const struct iw_handler_def *wireless_handlers; struct iw_public_data *wireless_data; #endif const struct net_device_ops *netdev_ops; const struct ethtool_ops *ethtool_ops; #ifdef CONFIG_NET_SWITCHDEV const struct switchdev_ops *switchdev_ops; #endif #ifdef CONFIG_NET_L3_MASTER_DEV const struct l3mdev_ops *l3mdev_ops; #endif #if IS_ENABLED(CONFIG_IPV6) const struct ndisc_ops *ndisc_ops; #endif const struct header_ops *header_ops; unsigned int flags; unsigned int priv_flags; unsigned short gflags; unsigned short padded; unsigned char operstate; unsigned char link_mode; unsigned char if_port; unsigned char dma; unsigned int mtu; unsigned short type; unsigned short hard_header_len; unsigned short needed_headroom; unsigned short needed_tailroom; /* Interface address info. */ unsigned char perm_addr[MAX_ADDR_LEN]; unsigned char addr_assign_type; unsigned char addr_len; unsigned short neigh_priv_len; unsigned short          dev_id; unsigned short          dev_port; spinlock_t addr_list_lock; unsigned char name_assign_type; bool uc_promisc; struct netdev_hw_addr_list uc; struct netdev_hw_addr_list mc; struct netdev_hw_addr_list dev_addrs; #ifdef CONFIG_SYSFS struct kset *queues_kset; #endif unsigned int promiscuity; unsigned int allmulti; /* Protocol-specific pointers */ #if IS_ENABLED(CONFIG_VLAN_8021Q) struct vlan_info __rcu *vlan_info; #endif #if IS_ENABLED(CONFIG_NET_DSA) struct dsa_switch_tree *dsa_ptr; #endif #if IS_ENABLED(CONFIG_TIPC) struct tipc_bearer __rcu *tipc_ptr; #endif void *atalk_ptr; struct in_device __rcu *ip_ptr; struct dn_dev __rcu     *dn_ptr; struct inet6_dev __rcu *ip6_ptr; void *ax25_ptr; struct wireless_dev *ieee80211_ptr; struct wpan_dev *ieee802154_ptr; #if IS_ENABLED(CONFIG_MPLS_ROUTING) struct mpls_dev __rcu *mpls_ptr; #endif /*  * Cache lines mostly used on receive path (including eth_type_trans())  */ unsigned long last_rx; /* Interface address info used in eth_type_trans() */ unsigned char *dev_addr; #ifdef CONFIG_SYSFS struct netdev_rx_queue *_rx; unsigned int num_rx_queues; unsigned int real_num_rx_queues; #endif unsigned long gro_flush_timeout; rx_handler_func_t __rcu *rx_handler; void __rcu *rx_handler_data; #ifdef CONFIG_NET_CLS_ACT struct tcf_proto __rcu  *ingress_cl_list; #endif struct netdev_queue __rcu *ingress_queue; #ifdef CONFIG_NETFILTER_INGRESS struct nf_hook_entry __rcu *nf_hooks_ingress; #endif unsigned char broadcast[MAX_ADDR_LEN]; #ifdef CONFIG_RFS_ACCEL struct cpu_rmap *rx_cpu_rmap; #endif struct hlist_node index_hlist; /*  * Cache lines mostly used on transmit path  */ struct netdev_queue *_tx ____cacheline_aligned_in_smp; unsigned int num_tx_queues; unsigned int real_num_tx_queues; struct Qdisc *qdisc; #ifdef CONFIG_NET_SCHED DECLARE_HASHTABLE (qdisc_hash, 4); #endif unsigned long tx_queue_len; spinlock_t tx_global_lock; int watchdog_timeo; #ifdef CONFIG_XPS struct xps_dev_maps __rcu *xps_maps; #endif #ifdef CONFIG_NET_CLS_ACT struct tcf_proto __rcu  *egress_cl_list; #endif /* These may be needed for future network-power-down code. */ struct timer_list watchdog_timer; int __percpu *pcpu_refcnt; struct list_head todo_list; struct list_head link_watch_list; enum { NETREG_UNINITIALIZED=0,       NETREG_REGISTERED, /* completed register_netdevice */       NETREG_UNREGISTERING, /* called unregister_netdevice */       NETREG_UNREGISTERED, /* completed unregister todo */       NETREG_RELEASED, /* called free_netdev */       NETREG_DUMMY, /* dummy device for NAPI poll */ } reg_state:8; bool dismantle; enum { RTNL_LINK_INITIALIZED, RTNL_LINK_INITIALIZING, } rtnl_link_state:16; void (*destructor)(struct net_device *dev); #ifdef CONFIG_NETPOLL struct netpoll_info __rcu *npinfo; #endif possible_net_t nd_net; /* mid-layer private */ union { void *ml_priv; struct pcpu_lstats __percpu *lstats; struct pcpu_sw_netstats __percpu *tstats; struct pcpu_dstats __percpu *dstats; struct pcpu_vstats __percpu *vstats; }; 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; /* for setting kernel sock attribute on TCP connection setup */ #define GSO_MAX_SIZE 65536 unsigned int gso_max_size; #define GSO_MAX_SEGS 65535 u16 gso_max_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; struct lock_class_key *qdisc_running_key; bool proto_down; };
    转载请注明原文地址: https://ju.6miu.com/read-37815.html

    最新回复(0)