结构体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};



原创粉丝点击