博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
net_device
阅读量:4153 次
发布时间:2019-05-25

本文共 13798 字,大约阅读时间需要 45 分钟。

/**
 *	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 
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;};
 

转载地址:http://kzhti.baihongyu.com/

你可能感兴趣的文章
文件隐藏
查看>>
两个linux内核rootkit--之二:adore-ng
查看>>
两个linux内核rootkit--之一:enyelkm
查看>>
关于linux栈的一个深层次的问题
查看>>
rootkit related
查看>>
配置文件的重要性------轻化操作
查看>>
又是缓存惹的祸!!!
查看>>
为什么要实现程序指令和程序数据的分离?
查看>>
我对C++ string和length方法的一个长期误解------从protobuf序列化说起(没处理好会引起数据丢失、反序列化失败哦!)
查看>>
一起来看看protobuf中容易引起bug的一个细节
查看>>
无protobuf协议情况下的反序列化------貌似无解, 其实有解!
查看>>
make -n(仅列出命令, 但不会执行)用于调试makefile
查看>>
makefile中“-“符号的使用
查看>>
go语言如何从终端逐行读取数据?------用bufio包
查看>>
go的值类型和引用类型------重要的概念
查看>>
求二叉树中结点的最大值(所有结点的值都是正整数)
查看>>
用go的flag包来解析命令行参数
查看>>
来玩下go的http get
查看>>
队列和栈的本质区别
查看>>
matlab中inline的用法
查看>>