结构体net_device在2.6.31中函数接口的改动
来源:互联网 发布:mac不小心删除了文件 编辑:程序博客网 时间:2024/05/29 16:22
struct net_device在2.6.31中删减了很多,其函数接口用一个struct net_device_ops封装成一个独立的结构体,其结构如下:
struct net_device_ops { int (*ndo_init)(struct net_device *dev); void (*ndo_uninit)(struct net_device *dev); int (*ndo_open)(struct net_device *dev); int (*ndo_stop)(struct net_device *dev); int (*ndo_start_xmit) (struct sk_buff *skb, struct net_device *dev); u16 (*ndo_select_queue)(struct net_device *dev, struct sk_buff *skb);#define HAVE_CHANGE_RX_FLAGS void (*ndo_change_rx_flags)(struct net_device *dev, int flags);#define HAVE_SET_RX_MODE void (*ndo_set_rx_mode)(struct net_device *dev);#define HAVE_MULTICAST void (*ndo_set_multicast_list)(struct net_device *dev);#define HAVE_SET_MAC_ADDR int (*ndo_set_mac_address)(struct net_device *dev, void *addr);#define HAVE_VALIDATE_ADDR int (*ndo_validate_addr)(struct net_device *dev);#define HAVE_PRIVATE_IOCTL int (*ndo_do_ioctl)(struct net_device *dev, struct ifreq *ifr, int cmd);#define HAVE_SET_CONFIG int (*ndo_set_config)(struct net_device *dev, struct ifmap *map);#define HAVE_CHANGE_MTU int (*ndo_change_mtu)(struct net_device *dev, int new_mtu); int (*ndo_neigh_setup)(struct net_device *dev, struct neigh_parms *);#define HAVE_TX_TIMEOUT void (*ndo_tx_timeout) (struct net_device *dev); struct net_device_stats* (*ndo_get_stats)(struct net_device *dev); void (*ndo_vlan_rx_register)(struct net_device *dev, struct vlan_group *grp); void (*ndo_vlan_rx_add_vid)(struct net_device *dev, unsigned short vid); void (*ndo_vlan_rx_kill_vid)(struct net_device *dev, unsigned short vid);#ifdef CONFIG_NET_POLL_CONTROLLER#define HAVE_NETDEV_POLL void (*ndo_poll_controller)(struct net_device *dev);#endif#if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE) int (*ndo_fcoe_ddp_setup)(struct net_device *dev, u16 xid, struct scatterlist *sgl, unsigned int sgc); int (*ndo_fcoe_ddp_done)(struct net_device *dev, u16 xid);#endif};
不难发现,很多原来的结构前面都在原来的基础上增加一个前缀ndo_,其原来的struct net_device结构体变为:
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 * the interface. */ char name[IFNAMSIZ]; /* 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 */ 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 */ unsigned long state; struct list_head dev_list; struct list_head napi_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 */ /* 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)#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; 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; unsigned short priv_flags; /* Like 'flags' but invisible to userspace. */ unsigned short padded; /* How much padding added by alloc_netdev() */ unsigned char operstate; /* RFC2863 operstate */ unsigned char link_mode; /* mapping policy to operstate */ unsigned 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_len; /* hardware address length */ unsigned short dev_id; /* for shared network cards */ struct netdev_hw_addr_list uc; /* Secondary unicast mac addresses */ int uc_promisc; spinlock_t addr_list_lock; struct dev_addr_list *mc_list; /* Multicast mac addresses */ int mc_count; /* Number of installed mcasts */ 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 */ struct netdev_queue rx_queue; 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; 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 net_device *link_watch_next; /* 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; /* 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; /* bridge stuff */ struct net_bridge_port *br_port; /* macvlan */ struct macvlan_port *macvlan_port; /* GARP */ struct garp_port *garp_port; /* class/net/name entry */ struct device dev; /* space for optional statistics and wireless sysfs groups */ struct attribute_group *sysfs_groups[3]; /* 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 */ 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};
- 结构体net_device在2.6.31中函数接口的改动
- net_device结构体及其相关的操作函数
- net_device 结构的详情
- net_device结构体
- 网络驱动移植之net_device结构体及其相关的操作函数
- 网络驱动移植之net_device结构体及其相关的操作函数
- struct net_device结构体解析
- 网络设备结构体net_device介绍
- net_device结构
- net_device 结构
- 结构体 net_device常用成员分析
- struct net_device网络设备结构体详解
- symbian中CSmsSettings几个函数的改动
- python3中map函数的改动
- python2.x中函数在python3.x中的改动方法
- python2.x中函数在python3.x中的改动方法
- net_device结构理解
- net_device 结构分析
- 初学者如何用日语自我介绍
- 要配一台新的电脑
- WEB安全测试
- 2010年中国IT行业的十大案件
- 每天的工作
- 结构体net_device在2.6.31中函数接口的改动
- org.hibernate.hql.ast.QuerySyntaxError错误
- 推荐系列文章
- Makefile好助手:pkgconfig
- 云计算介绍之中国云计算元年
- Objective-C语法快速参考--(入门)
- SSH 无密码登录
- 在CSDN安家了。o(∩_∩)o 哈哈
- 基于bluez or socketcan等 程序编译时注意事项