《2022年网络设备支持接终版 .pdf》由会员分享,可在线阅读,更多相关《2022年网络设备支持接终版 .pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、网络设备支持驱动程序的支持函数名功能函数形成参数描述init_etherdev 注册以太网设备truct net_device * init_etherdev (struct net_device * dev, int sizeof_priv) dev 为要填 充 的以 太 网设 备 结构,或者要 分 配一 个 新的 结 构时为NULL ,sizeof_priv是 为这 个 以太 网 设备 要 分配 的 额外 私 有结 构 的大小。用 以太网 的通 用值填充这个结构的域。如果传递过来的dev为 NULL ,则构造一个新的结构, 包括大小为 sizeof_priv 的私有数据区。强制将这个私有数
2、据区在32字节(不是位)上对齐。dev_add_pack 增加数据包处理程序void dev_add_pack (struct packet_type * pt) pt为 数据 包 类型把 一个协 议处 理程序加到网络栈,把参数传递来的&packet_type 链接到内核链表中。dev_remove_pack 删除数据包处理程序void dev_remove_pack (struct packet_type * pt) pt为 数据 包 类型删除由dev_add_pack曾 加到 内核的 协议 处理程序。把&packet_type 从 内核链表中删除,一旦该函数返回, 这个结构还能再用。名师资
3、料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7 页 - - - - - - - - - _dev_get_by_name 根据名字找设备struct net_device * _dev_get_by_name (const char * name); name 为要 查 找的名字根 据名字 找到 一个接口。必须在RTNL 信号量或dev_base_lock 锁的支持下调用。 如果找到这个名字, 则返回指向设备的指针,如果没有找到, 则返回NULL 。引用计数器并没有增加,
4、因此调用 者必须 小心 地持有锁。dev_get_by_name 根据名字找设备struct net_device * dev_get_by_name (const char * name) name 为要 查 找的名字根 据名字 找到 一个接口。这个函数可以在 任何上 下文 中调用并持有自己的锁。返 回句柄 的引 用计数增加, 调用者必须在 其不使 用时 调用dev_put 释放它,如果没有匹配的名字,则返回 NULL 。dev_get 测试设备是否存在int dev_get (const char * name) name 为要 测 试的名字测试名字是否存在。如果找到则返回真。为 了确保
5、在测 试期间 名字不 被分 配或删除,调用者必须持有 rtnl 信号量。这个函 数主要 用来 与原来 的驱动 程序 保持兼容。_dev_get_by_index 根据索引找设备struct net_device * _dev_get_by_index (int ifinde x) ifindex为 设 备的索引根 据索引 搜索 一个接口。如果没有找到设备,则返回 NULL ,找 到则返 回指 向设备的指针。该设备的引用计数没有增加,因 此调用 者必 须小心地关注加锁,调用者 必 须 持 有RTNL 信号量或dev_base_lock 锁。名师资料总结 - - -精品资料欢迎下载 - - - -
6、 - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - dev_get_by_index 根据名字找设备struct net_device * dev_get_by_index (int ifinde x) ifindex为 设 备的索引根 据索引 搜索 一个接口。如果没有找到设备,则返回 NULL ,找 到则返 回指 向设备的指针。所返回设备的引用计数加1,因 此,在 用户 调用dev_put 释放设备之前,返回指针是安全的。dev_alloc_name 为设备分配一个名字int dev_
7、alloc_name (struct net_device * dev, const char * name) dev 为设备,name 为 格 式化 字 符串。传 递过来 一个 格式化字符串,例如ltd,该 函数试 图找 到一个合适的id。 设备较多时这是很低效的。调 用者必 须在 分配名 字和增 加设 备时持 有dev_base 或rtnl 锁,以避免重复。返 回所分 配的 单元号 或出错 返回 一个复数。dev_alloc 分配一个网络设备和名字struct net_device * dev_alloc (const char * name, int * err) name 为 格 式化
8、 字 符串,err 为指 向 错误 的 指针传 递过来 一个 格式化字符串,例如ltd,函 数给该 名字 分配一 个网络 设备 和空间。如果没有可用内存,则返回NULL 。如果分配成功,则名字被分配,指向设备的指针被返回。如果名字分配失败,则返回 NULL ,错误的原因放在err 指向的变量中返回。调用者必须 在做这 一切 时持有dev_base 或RTNL 锁,以避免重复分配名字。netdev_state_change 设备改变状态void netdev_state_change (struct net_device * dev) name 为 引 起通 告 的设备当 一个设 备状 态改变时
9、调用该函数。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - - - - - dev_load 装入一个网络模块void dev_load (const char * name) name 为 接 口的名字如 果网络 接口 不存在,并且进程具有合适的权限,则这个函数装入该模块。如果在 内核中 模块 的装入是不可用的,则装入 操作就 变为 空操作。dev_open 为使用而准备一个接口int dev_open (struct net_device
10、* dev) device 为要 打 开的设备以 从低层 到上 层的过程获得一个设备。设 备的私 有打 开函数被调用,然后多点传送链表被装入,最后设备被移到上层,并把 NETDEV_UP 信号发 送给网 络设 备的notifier chain 。在 一个活 动的 接口调 用该函 数只 能是个空操作。失败则返回 一个负 的错 误代码。dev_close 关闭一个接口int dev_close (struct net_device * dev) dev 为要关 闭 的设备这 个函数 把活 动的设备移到关闭状态。向网 络设备的notifier chain 发送一个NETDEV_GOING_DOWN
11、。然后把设备变为不活动状态,并最终向 notifier chain发 NETDEV_DOWN信号。register_netdevice_notifier 注册一个网络通告程序块int register_netdevice_notifier (struct notifier_block * nb) nb 为 通告程序当 网络设 备的 事件发生时, 注册一个要调用的通告程序。作为 参数传 递来 的通告 程序被 连接 到内核结构, 在其被注销前不能重新使用它。失 败则返 回一 个负的错误码。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - -
12、- 名师精心整理 - - - - - - - 第 4 页,共 7 页 - - - - - - - - - unregister_netdevice_notifier 注销一个网络通告块int unregister_netdevice_notifier (struct notifier_block * nb) nb 为 通告程序取消由register_netdevice_notifer 曾注册的一个通告程序。 把这个通告程 序从内 核结 构中解除,然后还可以重新使用它。失败则返回一个负的错误码。dev_queue_xmit 传送一个缓冲区int dev_queue_xmit (struct sk
13、_buff * skb) skb 为要传 送 的缓冲区为 了把缓 冲区 传送到一个网络设备,对缓冲区进行排队。调用 者必须 在调 用这个 函数前 设置 设备和优先级,并建立缓冲区。该函数也可以从中断中调用。失败返 回一个 负的 错误码。成功并不保证帧被传送, 因为也可能由 于拥塞 或流 量调整而撤销这个帧。netif_rx 把缓冲区传递到网络协议层void netif_rx (struct sk_buff * skb) skb 为要传 送 的缓冲区这 个函数 从设 备驱动 程序接 受一 个数据包,并为上层协议的 处理对 其进 行排队。该函数总能执行成功。在处理期间,可 能因为 拥塞 控制而取消
14、这个缓冲区。net_call_rx_atomic void net_call_rx_atomic(void(fn) (void) fn为 要调 用 的函数使 一个函 数的 调用就 协议层 而言 是原子的。register_gifconf 注册一个SIOCGIF 处理程序int register_gifconf (unsigned int famil y, gifconf_func_t * gifconf) family 为地址组,gifconf为 处 理程序注 册由地 址转 储例程决定的协议。当另一 个处理 程序 替代了 由参数 传递 过来的处理程序时,才能释放或重用后者。名师资料总结 - -
15、 -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 7 页 - - - - - - - - - netdev_set_master 建立主从对int netdev_set_master (struct net_device * slave, struct net_device * master) slave 为从设备,master为 主 设备。改 变从设 备的 主设备。传递 NULL 以中断连接。 调用者必须持有 RTNL 信号量。失 败返回 一个 负错误码。成功则调整引用计数,RTM_NEWL
16、INK发送给路由套接字,并且返回 0。dev_set_allmulti 更新设备上多个计数void dev_set_allmulti (struct net_device * dev, int inc) dev 为设备 , inc为 修 改者。把 接收的 所有 多点传 送帧增 加到 设备或从设备删除。当设备 上的引 用计 数依然大于 0 时,接口保持 着对所 有接 口的监听。一旦引用计数变为 0,设备回转到正常的过滤操作。负的 inc 值用来在释放所 有多点 传送 需要的 某个资 源时 减少其引用计数。dev_ioctl 网络设备的ioctl int dev_ioctl (unsigned i
17、nt cmd, void * arg) cmd为要 发 出的命令,arg 为用户 空 间指向ifreq结构 的 指针。向设备发布ioctl函数。这通常由用户空间 的系统 调用 接口调用,但有时也用作其他目的。返回值为一个正数,则表示从系统调用返回,为负数,则表示出错。dev_new_index 分配一个索引int dev_new_index ( void) 无为 新的设 备号 返回一 个合适 而唯 一的值。调用者必须持有rtnl 信号量以确保它返回唯一的值。netdev_finish_unregister 完成注册int netdev_finish_unregister (struct net
18、_device * dev) dev 为设备。撤 销或释 放一 个僵死的设备。成功返回0。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 7 页 - - - - - - - - - unregister_netdevice 从内核删除设备int unregister_netdevice (struct net_device * dev) dev 为设备。这 个函数 关闭 设备接 口并将 其从 内核表删除。成功返回0,失 败则返 回一 个负数。8390网卡ei_open 打
19、开初始化网板int ei_open (struct net_device * dev) dev 为要初 始 化的 网 络设备。尽 管很多 注册 的设备 在每次 启动 时仅仅需要设置一次,但这 个函数 在每 次打开 设备时 还彻 底重新设置每件事。ei_close 关闭网络设备int ei_close (struct net_device * dev) dev 为要关 闭 的网 络 设备。ei_open 的相反操作,在仅 仅在完成“ ifconfigdown ”时使用ei_interrupt 处理来自8390的中断void ei_interrupt (int ir q, void * dev_i
20、d, struct pt_regs * regs); irq为中断 号 ,dev_id为 指 向net_devicede 指针, regs没 有 使用。处 理以太 网接 口中断。我们通过网卡指定的函数从8390 取回数据包,并在网络栈触发它们。 如果需要,我们也处理传输的 完成并 激活 传输路径。我们也根据需要 更新计 数器 并处理其他的事务。ethdev_init 初始化8390设备结构的其余部分int ethdev_init (struct net_device * dev) dev 为要初 始 化的 网 络设 备 结构。初始化8390 设备结构的其余部分。不要用 _init () ,因为这也由基于8390 的模块驱动程序使用。NS8390_init 初始化8390硬件void NS8390_init (struct net_device * dev, int startp) dev 为要初 始 化的设备,startp 为布尔值,非 0启动芯 片 处理。必 须持以 锁才 能调用该函数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 7 页 - - - - - - - - -