免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1555 | 回复: 0
打印 上一主题 下一主题

struct net_device 详解3 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-25 16:11 |只看该作者 |倒序浏览

               
1
推荐
/*
* 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
  * the interface.
  */
char   name[IFNAMSIZ]; 不必多说,就是ifconfig
后面的第一个参数

/* device name hash chain */
struct
hlist_node name_hlist;
/*
  * 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; 做什么用呢?估计是内核维护

/* The
device initialization function. Called only once. */
int   (*init)(struct
net_device *dev);
/* ------- Fields preinitialized in Space.c finish here ------- */
/* Net device features */
unsigned
long  features;
#define NETIF_F_SG  1 /* Scatter/gather IO.
*/
#define NETIF_F_IP_CSUM  2 /* Can checksum only 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_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 */
/* Segmentation offload features */
#define
NETIF_F_GSO_SHIFT 16
#define NETIF_F_GSO_MASK 0xffff0000
#define
NETIF_F_TSO  (SKB_GSO_TCPV4 struct net_device_stats*
(*get_stats)(struct net_device *dev);
struct
net_device_stats stats; 网卡发送包的个数等等,ifconfig
eth0看到的东西就是啦

#ifdef CONFIG_WIRELESS_EXT
/* List of functions to handle Wireless
Extensions (instead of ioctl).
  * See  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
const struct
ethtool_ops *ethtool_ops;

/*
  * This marks the end of the "visible" part of the structure.
All
  * fields hereafter are internal to the system, and may change at
  *
will (read: may be cleaned up at will).
  */
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 */
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 dev_mc_list *mc_list; /* Multicast mac
addresses */
int   mc_count; /* Number of installed
mcasts */
int   promiscuity;
int   allmulti;
/* Protocol specific pointers */

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())
*/
struct list_head poll_list
____cacheline_aligned_in_smp;
     /* Link to poll list */
int   (*poll) (struct net_device *dev, int
*quota);
int   quota;
int   weight;
unsigned long  last_rx; /* Time
of last Rx */
/* Interface address info used in eth_type_trans()
*/
unsigned char  dev_addr[MAX_ADDR_LEN]; /* hw address, (before bcast
       because most packets are unicast) */
unsigned char  broadcast[MAX_ADDR_LEN]; /* hw bcast add */
/*
* Cache line mostly used on queue transmit path (qdisc)
*/
/*
device queue lock */
spinlock_t  queue_lock
____cacheline_aligned_in_smp;
struct Qdisc  *qdisc;
struct
Qdisc  *qdisc_sleeping;
struct list_head qdisc_list;
unsigned
long  tx_queue_len; /* Max frames per queue allowed */
/* Partially transmitted GSO packet. */
struct sk_buff  *gso_skb;
/* ingress path synchronizer */
spinlock_t  ingress_lock;
struct
Qdisc  *qdisc_ingress;
/*
* One part is mostly used on xmit path (device)
*/
/*
hard_start_xmit synchronizer */
spinlock_t  _xmit_lock
____cacheline_aligned_in_smp;
/* cpu id of processor entered to
hard_start_xmit or -1,
    if nobody entered there.
  
*/
int   xmit_lock_owner;
void   *priv; /* pointer to private
data */
int   (*hard_start_xmit)
(struct sk_buff *skb,
          struct net_device
*dev);
/* These may be needed for future network-power-down
code. */
unsigned long  trans_start; /* Time (in jiffies) of last Tx */
int   watchdog_timeo; /* used by dev_watchdog() */
struct
timer_list watchdog_timer;

/*
* refcnt is a very hot point, so align it on SMP
*/
/* 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 */
}
reg_state;
/* Called after device is detached from network.
*/
void   (*uninit)(struct net_device *dev);
/* Called after last user
reference disappears. */
void   (*destructor)(struct net_device *dev);
/* Pointers to interface service routines. */
int   (*open)(struct net_device
*dev);
int   (*stop)(struct net_device *dev);
#define
HAVE_NETDEV_POLL
int   (*hard_header)
(struct sk_buff *skb,
      struct net_device *dev,
      unsigned short
type,
      void *daddr,
      void *saddr,
      unsigned
len);
int   (*rebuild_header)(struct sk_buff
*skb);
#define HAVE_MULTICAST   
void   (*set_multicast_list)(struct net_device
*dev);
#define HAVE_SET_MAC_ADDR     
int   (*set_mac_address)(struct net_device
*dev,
         void *addr);
#define
HAVE_PRIVATE_IOCTL
int   (*do_ioctl)(struct net_device *dev,
         
struct ifreq *ifr, int cmd);
#define
HAVE_SET_CONFIG
int   (*set_config)(struct net_device *dev,
           
struct ifmap *map);
#define
HAVE_HEADER_CACHE
int   (*hard_header_cache)(struct neighbour
*neigh,
           struct hh_cache
*hh);
void   (*header_cache_update)(struct hh_cache *hh,
            
struct net_device *dev,
             unsigned char *  haddr);
#define
HAVE_CHANGE_MTU
int   (*change_mtu)(struct net_device *dev, int
new_mtu);

#define HAVE_TX_TIMEOUT
void   (*tx_timeout) (struct net_device
*dev);

void   (*vlan_rx_register)(struct net_device *dev,
          struct
vlan_group *grp);
void   (*vlan_rx_add_vid)(struct net_device
*dev,
         unsigned short vid);
void   (*vlan_rx_kill_vid)(struct
net_device *dev,
          unsigned short vid);
int   (*hard_header_parse)(struct sk_buff *skb,
           unsigned char
*haddr);
int   (*neigh_setup)(struct net_device *dev, struct neigh_parms
*);
#ifdef CONFIG_NETPOLL
struct
netpoll_info *npinfo;
#endif
#ifdef
CONFIG_NET_POLL_CONTROLLER
void                    (*poll_controller)(struct
net_device *dev);
#endif
/* bridge stuff */
struct net_bridge_port *br_port;
/* class/net/name entry */
struct device  dev;
/* space for
optional statistics and wireless sysfs groups */
struct attribute_group  
*sysfs_groups[3];
};
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/98073/showart_1977282.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP