- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux网络设备驱动程序培训教材
第9章 9.1.2 网络设备接口层 void (*tx_timeout)(struct net_device *dev); struct net_device_stats *(*get_stats)(struct net_device *dev); int (*set_config)(struct net_device *dev, struct ifmap *map); int (*do_ioctl)(struct net_device *dev, struct ifreq *ifr, int cmd); void (*set_multicast_list)(struct net_device *dev); 用来在传输数据包之前重建硬件头 数据包发送在超时时间内失败,这时该方法被调用。这个方法应该解决失败的问题并重新开始发送数据包 当应用程序需要获得接口的统计信息时,这个方法被调用 改变接口的配置。比如改变I/O端口和中断号等,现在的驱动程序通常无需该方法 实现设备自定义的ioctl命令 当设备的组播列表改变或设备标志改变时,该方法被调用 9.1.2 网络设备接口层 int (*set_mac_address)(struct net_device *dev, void *addr); int (*change_mtu)(struct net_device *dev, int new_mtu); int (*header_cache) (struct neighbour *neigh, struct hh_cache *hh); int (*hard_header_parse) (struct sk_buff *skb, unsigned char *haddr); int (*header_cache_update) (struct hh_cache *hh, struct net_device *dev, unsigned char *haddr); 如果接口支持MAC地址改变,则可以实现该函数 当接口的MTU改变时,该方法将被调用,负责做出相应的特定处理 根据ARP查询的结果填充hh_cache结构 在发生变化时,该方法更新hh_cache结构中的目的地址 从skb中包含的数据包中获得源地址,并将其复制到位于haddr的缓冲区中 9.2.1 网络设备的注册、注销 注册与注销函数 创建net_device 释放net_device int register_netdev(struct net_device *dev); void unregister_netdev(struct net_device *dev); struct net_device *alloc_netdev(int sizeof_priv, const char *name, void (*setup)(struct net_device*)); struct net_device *alloc_etherdev(int sizeof_priv); void free_netdev(struct net_device *dev); 9.2.1 网络设备的注册、注销 1 int xxx_init_module(void) 2 { 3 … 4 /*分配net_device结构体并对其成员赋值*/ 5 xxx_dev = alloc_netdev(sizeof(struct xxx_priv),“sn%d”, xxx_init); 6 if(xxx_dev == NULL) 7 …/*分配net_device失败*/ 8 9 /*注册net_device结构体*/ 10 if((result = register_netdev(xxx_dev))) 11 … 12 } 13 14 void xxx_cleanup(void) 15 { 16 … 17 /*注销net_device结构体*/ 18 unregister_netdev(xxx_dev); 19 /*释放net_device结构体*/ 20 free_netdev(xxx_dev); 21 } 9.3 网络设备的打开和释放 网络设备的打开函数完成如下工作: 使能设备使用的硬件资源,申请I/O区域、中断和DMA通道等。 调用Linux内核提供的netif_start_queue()函数,激活设备发送队列。 网络设备的关闭函数需要完成如下工作: 调用Linux内核提供的netif_stop_
文档评论(0)