日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【源码】net_device结构

發布時間:2023/12/31 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【源码】net_device结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

自己對TCP/IP內核有興趣,一直只是不慍不火的看著,沒什么頭緒,沒什么總結,想借著最近有想寫blog的精神,堅持一段時間,看看到底寫到什么程度。先分析結構體,再考慮下怎么寫初始化。

因為相應出書了,只看書而使自己忘記了看源碼本書,兩者互相看的話,可能效果更好。

目前沒找到更好的排版,只是湊合先這么著,找到更好的換。

http://www.oschina.net/code/explore/linux-2.6.36/include/linux/netdevice.h?? line778

/**
*??? 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.
*
*??? FIXME: cleanup struct net_device such that network protocol info
*??? moves out.
*/

struct net_device {

??? /**
???? * 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.
???? */
??? char??????????? name[IFNAMSIZ];

??? struct pm_qos_request_list pm_qos_req;

??? /** device name hash chain */
??? struct hlist_node??? name_hlist;
??? /** snmp alias */
??? char???????????? *ifalias;

??? /**
???? *??? I/O specific fields
???? *??? FIXME: Merge these and struct ifmap into one
???? */
??? unsigned long??????? mem_end;??? /** shared mem end??? */
??? unsigned long??????? mem_start;??? /** shared mem start??? 用于設備與內核溝通,訪問只在驅動層,較高分層不用關心*/
??? unsigned long??????? base_addr;??? /** device I/O address??? 設備內存映射到I/O內存的起始地址*/
??? unsigned int??????? irq;??????? /** device IRQ number? 與內核對話的中斷編號,可由多個設備共享? */

??? /**
???? *??? Some hardware also needs these fields, but they are not
???? *??? part of the usual set specified in Space.c.
???? */

??? unsigned char??????? if_port;??? /** Selectable AUI, TP,..*/
??? unsigned char??????? dma;??????? /** DMA channel???? 從內核獲取和釋放DMA通道,由ISA設備使用 */

??? unsigned long??????? state;

??? struct list_head??? dev_list;
??? struct list_head??? napi_list;
??? struct list_head??? unreg_list;

??? /** Net device features */
??? unsigned long??????? features;
#define NETIF_F_SG??????? 1??? /** Scatter/gather IO. */
#define NETIF_F_IP_CSUM??????? 2??? /** Can checksum TCP/UDP over IPv4. */
#define NETIF_F_NO_CSUM??????? 4??? /** Does not require checksum. F.e. loopack. */
#define NETIF_F_HW_CSUM??????? 8??? /** Can checksum all the packets. */
#define NETIF_F_IPV6_CSUM??? 16??? /** Can checksum TCP/UDP over IPV6 */
#define NETIF_F_HIGHDMA??????? 32??? /** Can DMA to high memory. */
#define NETIF_F_FRAGLIST??? 64??? /** Scatter/gather IO. */
#define NETIF_F_HW_VLAN_TX??? 128??? /** Transmit VLAN hw acceleration */
#define NETIF_F_HW_VLAN_RX??? 256??? /** Receive VLAN hw acceleration */
#define NETIF_F_HW_VLAN_FILTER??? 512??? /** Receive filtering on VLAN */
#define NETIF_F_VLAN_CHALLENGED??? 1024??? /** Device cannot handle VLAN packets */
#define NETIF_F_GSO??????? 2048??? /** Enable software GSO. */
#define NETIF_F_LLTX??????? 4096??? /** LockLess TX - deprecated. Please */
??????????????????? /** do not use LLTX in new drivers */
#define NETIF_F_NETNS_LOCAL??? 8192??? /** Does not change network namespaces */
#define NETIF_F_GRO??????? 16384??? /** Generic receive offload */
#define NETIF_F_LRO??????? 32768??? /** large receive offload */

/** the GSO_MASK reserves bits 16 through 23 */
#define NETIF_F_FCOE_CRC??? (1 << 24) /** FCoE CRC32 */
#define NETIF_F_SCTP_CSUM??? (1 << 25) /** SCTP checksum offload */
#define NETIF_F_FCOE_MTU??? (1 << 26) /** Supports max FCoE MTU, 2158 bytes*/
#define NETIF_F_NTUPLE??????? (1 << 27) /** N-tuple filters supported */
#define NETIF_F_RXHASH??????? (1 << 28) /** Receive hashing offload */

??? /** Segmentation offload features */
#define NETIF_F_GSO_SHIFT??? 16
#define NETIF_F_GSO_MASK??? 0x00ff0000
#define NETIF_F_TSO??????? (SKB_GSO_TCPV4 << NETIF_F_GSO_SHIFT)
#define NETIF_F_UFO??????? (SKB_GSO_UDP << NETIF_F_GSO_SHIFT)
#define NETIF_F_GSO_ROBUST??? (SKB_GSO_DODGY << NETIF_F_GSO_SHIFT)
#define NETIF_F_TSO_ECN??????? (SKB_GSO_TCP_ECN << NETIF_F_GSO_SHIFT)
#define NETIF_F_TSO6??????? (SKB_GSO_TCPV6 << NETIF_F_GSO_SHIFT)
#define NETIF_F_FSO??????? (SKB_GSO_FCOE << NETIF_F_GSO_SHIFT)

??? /** List of features with software fallbacks. */
#define NETIF_F_GSO_SOFTWARE??? (NETIF_F_TSO | NETIF_F_TSO_ECN | \
???????????????? NETIF_F_TSO6 | NETIF_F_UFO)

#define NETIF_F_GEN_CSUM??? (NETIF_F_NO_CSUM | NETIF_F_HW_CSUM)
#define NETIF_F_V4_CSUM??????? (NETIF_F_GEN_CSUM | NETIF_F_IP_CSUM)
#define NETIF_F_V6_CSUM??????? (NETIF_F_GEN_CSUM | NETIF_F_IPV6_CSUM)
#define NETIF_F_ALL_CSUM??? (NETIF_F_V4_CSUM | NETIF_F_V6_CSUM)

??? /**
???? * If one device supports one of these features, then enable them
???? * for all in netdev_increment_features.
???? */
#define NETIF_F_ONE_FOR_ALL??? (NETIF_F_GSO_SOFTWARE | NETIF_F_GSO_ROBUST | \
???????????????? NETIF_F_SG | NETIF_F_HIGHDMA |??????? \
???????????????? NETIF_F_FRAGLIST)

??? /** Interface index. Unique device identifier??? */
??? int??????????? ifindex;/*以dev_new_index注冊時分派給每個設備*/
??? int??????????? iflink; /*由(虛擬)隧道設備使用*/

??? struct net_device_stats??? stats;

#ifdef CONFIG_WIRELESS_EXT
??? /** List of functions to handle Wireless Extensions (instead of ioctl).
???? * See <net/iw_handler.h> for details. Jean II */
??? const struct iw_handler_def *??? wireless_handlers;
??? /** Instance data managed by the core of Wireless Extensions. */
??? struct iw_public_data *??? wireless_data;
#endif
??? /** Management operations */
??? const struct net_device_ops *netdev_ops;
??? const struct ethtool_ops *ethtool_ops; /**設置或取出不同設備參數的配置*/

??? /** Hardware header description */
??? const struct header_ops *header_ops;

??? unsigned int??????? flags;??? /** interface flags (a la BSD)??? */
??? unsigned short??????? gflags; /**標識可以通過ifconifg命令查看*/
??? unsigned short????????? priv_flags; /** Like 'flags' but invisible to userspace. 由VLAN和Bridge虛擬設備使用*/
??? unsigned short??????? padded;??? /** How much padding added by alloc_netdev() */

??? unsigned char??????? operstate; /** RFC2863 operstate */
??? unsigned char??????? link_mode; /** mapping policy to operstate */

??? unsigned int??????? mtu;??? /** interface MTU value???? 幀的最大尺寸? */
??? unsigned short??????? type;??? /** interface hardware type??? */
??? unsigned short??????? hard_header_len;??? /** hardware hdr length??? */

??? /** extra head- and tailroom the hardware may need, but not in all cases
???? * can this be guaranteed, especially tailroom. Some cases also use
???? * LL_MAX_HEADER instead to allocate the skb.
???? */
??? unsigned short??????? needed_headroom;
??? unsigned short??????? needed_tailroom;

??? struct net_device??? *master; /** Pointer to master device of a group,
????????????????????? * which this device is member of.
????????????????????? */

??? /** Interface address info. */
??? unsigned char??????? perm_addr[MAX_ADDR_LEN]; /** permanent hw address */
??? unsigned char??????? addr_assign_type; /** hw address assignment type */
??? unsigned char??????? addr_len;??? /** hardware address length??? */
??? unsigned short????????? dev_id;??????? /** for shared network cards */

??? spinlock_t??????? addr_list_lock;
??? struct netdev_hw_addr_list??? uc;??? /** Unicast mac addresses */
??? struct netdev_hw_addr_list??? mc;??? /** Multicast mac addresses */
??? int??????????? uc_promisc;
??? unsigned int??????? promiscuity;
??? unsigned int??????? allmulti;

??? /** Protocol specific pointers */
#ifdef CONFIG_NET_DSA
??? void??????????? *dsa_ptr;??? /** dsa specific data */
#endif
??? void???????????? *atalk_ptr;??? /** AppleTalk link???? */
??? void??????????? *ip_ptr;??? /** IPv4 specific data??? */
??? void??????????????????? *dn_ptr;??????? /** DECnet specific data */
??? void??????????????????? *ip6_ptr;?????? /** IPv6 specific data */
??? void??????????? *ec_ptr;??? /** Econet specific data??? */
??? void??????????? *ax25_ptr;??? /** AX.25 specific data */
??? struct wireless_dev??? *ieee80211_ptr;??? /** IEEE 802.11 specific data,
?????????????????????????? assign before registering */

/**
* Cache line mostly used on receive path (including eth_type_trans())
*/
??? unsigned long??????? last_rx;??? /** Time of last Rx??? */
??? /** Interface address info used in eth_type_trans() */
??? unsigned char??????? *dev_addr;??? /** hw address, (before bcast
?????????????????????????? because most packets are
?????????????????????????? unicast) */

??? struct netdev_hw_addr_list??? dev_addrs; /** list of device
????????????????????????????? hw addresses */

??? unsigned char??????? broadcast[MAX_ADDR_LEN];??? /** hw bcast add??? */

#ifdef CONFIG_RPS
??? struct kset??????? *queues_kset;

??? struct netdev_rx_queue??? *_rx;

??? /** Number of RX queues allocated at alloc_netdev_mq() time? */
??? unsigned int??????? num_rx_queues;
#endif

??? struct netdev_queue??? rx_queue;
??? rx_handler_func_t??? *rx_handler;
??? void??????????? *rx_handler_data;

??? struct netdev_queue??? *_tx ____cacheline_aligned_in_smp;

??? /** Number of TX queues allocated at alloc_netdev_mq() time? */
??? unsigned int??????? num_tx_queues;

??? /** Number of TX queues currently active in device? */
??? unsigned int??????? real_num_tx_queues;

??? /** root qdisc from userspace point of view */
??? struct Qdisc??????? *qdisc;

??? unsigned long??????? tx_queue_len;??? /** Max frames per queue allowed */
??? spinlock_t??????? tx_global_lock;
/**
* One part is mostly used on xmit path (device)
*/
??? /** These may be needed for future network-power-down code. */

??? /**
???? * trans_start here is expensive for high speed devices on SMP,
???? * please use netdev_queue->trans_start instead.
???? */
??? unsigned long??????? trans_start;??? /** Time (in jiffies) of last Tx??? */

??? int??????????? watchdog_timeo; /** used by dev_watchdog() */
??? struct timer_list??? watchdog_timer;

??? /** Number of references to this device */
??? atomic_t??????? refcnt ____cacheline_aligned_in_smp;

??? /** delayed register/unregister */
??? struct list_head??? todo_list;
??? /** device index hash chain */
??? struct hlist_node??? index_hlist;

??? struct list_head??? link_watch_list;

??? /** register/unregister state machine */
??? 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:16;

??? enum {
??????? RTNL_LINK_INITIALIZED,
??????? RTNL_LINK_INITIALIZING,
??? } rtnl_link_state:16;

??? /** Called from unregister, can be used to call free_netdev */
??? void (*destructor)(struct net_device *dev);

#ifdef CONFIG_NETPOLL
??? struct netpoll_info??? *npinfo;
#endif

#ifdef CONFIG_NET_NS
??? /** Network namespace this network device is inside */
??? struct net??????? *nd_net;
#endif

??? /** mid-layer private */
??? void??????????? *ml_priv;

??? /** GARP */
??? struct garp_port??? *garp_port;

??? /** class/net/name entry */
??? struct device??????? dev;
??? /** space for optional device, statistics, and wireless sysfs groups */
??? const struct attribute_group *sysfs_groups[4];

??? /** rtnetlink link ops */
??? const struct rtnl_link_ops *rtnl_link_ops;

??? /** VLAN feature mask */
??? unsigned long vlan_features;

??? /** for setting kernel sock attribute on TCP connection setup */
#define GSO_MAX_SIZE??????? 65536
??? unsigned int??????? gso_max_size;

#ifdef CONFIG_DCB
??? /** Data Center Bridging netlink ops */
??? const struct dcbnl_rtnl_ops *dcbnl_ops;
#endif

#if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE)
??? /** max exchange id for FCoE LRO by ddp */
??? unsigned int??????? fcoe_ddp_xid;
#endif
??? /** n-tuple filter list attached to this device */
??? struct ethtool_rx_ntuple_list ethtool_ntuple_list;

??? /** phy device may attach itself for hardware timestamping */
??? struct phy_device *phydev;
};

?

?

?

參考資料:{應該以這兩本為主了,網上資料用來完善}

《深入理解Linux網絡技術內幕》

《LDD》

?

PS:這幾個網頁資料先錄下,沒看完

http://wenku.baidu.com/view/f6d0cd4469eae009581bece5.html###

http://blog.21ic.com/user1/1066/archives/2007/40728.html

http://blog.csdn.net/smallnew198705/article/details/5489346

http://blog.sina.com.cn/s/blog_5ceeb9ea0100wzxj.html

http://oss.org.cn/kernel-book/ldd3/ch17s03.html

轉載于:https://my.oschina.net/wolflion/blog/90896

總結

以上是生活随笔為你收集整理的【源码】net_device结构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。