LDD3学习笔记(20):网络驱动

简介:  #include 定义 struct net_device 和 struct net_device_stats 的头文件, 包含了几个其他网络驱动需要的头文件.
 

#include <linux/netdevice.h>

定义 struct net_device 和 struct net_device_stats 的头文件包含了几个其他网络驱动需要的头

文件.

struct net_device *alloc_netdev(int sizeof_priv, char *name, void (*setup)(struct net_device *);

struct net_device *alloc_etherdev(int sizeof_priv);

void free_netdev(struct net_device *dev);

分配和释放 net_device 结构的函数

int register_netdev(struct net_device *dev);

void unregister_netdev(struct net_device *dev);

注册和注销一个网络设备.

void *netdev_priv(struct net_device *dev);

获取网络设备结构的驱动私有区域的指针的函数.

struct net_device_stats;

持有设备统计的结构.

netif_start_queue(struct net_device *dev);

netif_stop_queue(struct net_device *dev);

netif_wake_queue(struct net_device *dev);

控制传送给驱动来发送的报文的函数没有报文被传送直到 netif_start_queue 被调用

netif_stop_queue 挂起发送, netif_wake_queue 重启队列并刺探网络层重启发送报文.

skb_shinfo(struct sk_buff *skb);

宏定义提供对报文缓存的"shared info"部分的存取.

void netif_rx(struct sk_buff *skb);

调用来通知内核一个报文已经收到并且封装到一个 socket 缓存中的函数.

void netif_rx_schedule(dev);

来告诉内核报文可用并且应当启动查询接口它只是被 NAPI 兼容的驱动使用.

int netif_receive_skb(struct sk_buff *skb);

void netif_rx_complete(struct net_device *dev);

应当只被 NAPI 兼容的驱动使用. netif_receive_skb 是对于 netif_rx 的 NAPI 对等函数它递交一个报文给内核当一个 NAPI 兼容的驱动已耗尽接收报文的供应它应当重开中断并且调用 netif_rx_complete 来停止查询.

#include <linux/if.h>

由 netdevice.h 包含这个文件声明接口标志( IFF_ 宏定义 )和 struct ifmap, 它在网络驱动的 ioctl 实现中有重要地位.

void netif_carrier_off(struct net_device *dev);

void netif_carrier_on(struct net_device *dev);

int netif_carrier_ok(struct net_device *dev);

前 个函数可用来告知内核是否接口上有载波信号. netif_carrier_ok 测试载波状态如同在设备结构中反映的.

#include <linux/if_ether.h>

ETH_ALEN

ETH_P_IP

struct ethhdr;

由 netdevice.h 包含, if_ether.h 定义所有的 ETH_ 宏定义用来代表字节长度例如地址长度 )以及网络协议(例如 IP). 它也定义 ethhdr 结构.

#include <linux/skbuff.h>

struct sk_buff 和相关结构的定义以及几个操作缓存的内联函数这个头文件由 netdevice.h 包含.

struct sk_buff *alloc_skb(unsigned int len, int priority);

struct sk_buff *dev_alloc_skb(unsigned int len);

void kfree_skb(struct sk_buff *skb);

void dev_kfree_skb(struct sk_buff *skb);

void dev_kfree_skb_irq(struct sk_buff *skb);

void dev_kfree_skb_any(struct sk_buff *skb);

处理 socket 缓存的分配和释放的函数通常驱动应当使用 dev_ 变体其意图就是此目的.

unsigned char *skb_put(struct sk_buff *skb, int len);

unsigned char *__skb_put(struct sk_buff *skb, int len);

unsigned char *skb_push(struct sk_buff *skb, int len);

unsigned char *__skb_push(struct sk_buff *skb, int len);

添加数据到一个 skb 的函数; skb_put 在 skb 的尾部放置数据而 skb_push 放在开始正常版本进行检查以确保有足够的空间双下划线版本不进行检查.

int skb_headroom(struct sk_buff *skb);

int skb_tailroom(struct sk_buff *skb);

void skb_reserve(struct sk_buff *skb, int len);

进行 skb 中的空间管理的函数. skb_headroom 和 skb_tailroom 说明在开始和结尾分别有多少空间可用. skb_reserve 可用来保留空间在一个必须为空的 skb 开始.

unsigned char *skb_pull(struct sk_buff *skb, int len);

skb_pull "去除数据从一个 skb, 通过调整内部指针.

int skb_is_nonlinear(struct sk_buff *skb);

如果这个 skb 是为发散/汇聚 I/O 分隔为几个片函数返回一个真值.

int skb_headlen(struct sk_buff *skb);

返回 skb 的第一个片的长度由 skb->data 指向.

void *kmap_skb_frag(skb_frag_t *frag);

void kunmap_skb_frag(void *vaddr);

提供对非线性 skb 中的片直接存取的函数.

#include <linux/etherdevice.h>

void ether_setup(struct net_device *dev);

为以太网驱动设置大部分方法为通用实现的函数它还设置 dev->flags 和安排下一个可用的 

ethx 给 dev->name, 如果名子的第一个字符是一个空格或者 NULL 字符.

unsigned short eth_type_trans(struct sk_buff *skb, struct net_device *dev);

当一个以太网接口收到一个报文这个函数被调用来设置 skb->pkt_type. 返回值是一个协议号通常存储于 skb->protocol.

#include <linux/sockios.h>

SIOCDEVPRIVATE 

前 16 个 ioctl 命令每个驱动可为它们自己的私有用途而实现所有的网络 ioctl 命令都在 sockios.h 中定义.

#include <linux/mii.h>

struct mii_if_info;

声明和一个结构支持实现 MII 标准的设备的驱动.

#include <linux/ethtool.h>

struct ethtool_ops;

声明和结构使得设备与 ethtool 工具一起工作.

目录
相关文章
|
11天前
|
Ubuntu 网络安全 图形学
Ubuntu学习笔记(二):ubuntu20.04解决右上角网络图标激活失败或者消失,无法连接有线问题。
在Ubuntu 20.04系统中解决网络图标消失和无法连接有线网络问题的方法,其中第三种方法通过检查并确保Windows防火墙中相关服务开启后成功恢复了网络连接。
75 0
Ubuntu学习笔记(二):ubuntu20.04解决右上角网络图标激活失败或者消失,无法连接有线问题。
|
14天前
|
机器学习/深度学习 数据采集 人工智能
未来的守护神:AI驱动的网络安全之盾,如何用智慧的光芒驱散网络黑暗势力?揭秘高科技防御系统背后的惊天秘密!
【10月更文挑战第3天】随着网络技术的发展,网络安全问题日益严峻,传统防御手段已显不足。本文探讨了构建AI驱动的自适应网络安全防御系统的必要性及其关键环节:数据采集、行为分析、威胁识别、响应决策和执行。通过Python库(如scapy、scikit-learn和TensorFlow)的应用实例,展示了如何利用AI技术提升网络安全防护水平。这种系统能够实时监控、智能分析并自动化响应,显著提高防护效率与准确性,为数字世界提供更强大的安全保障。
34 2
|
4月前
|
存储 算法 网络虚拟化
【计算机网络】学习笔记,第三篇:数据链路层
现在的光纤宽带接入 FTTx 都要使用 PPPoE 的方式进行接入。在 PPPoE 弹出的窗口中键入在网络运营商购买的用户名和密码,就可以进行宽带上网了 利用 ADSL 进行宽带上网时,从用户个人电脑到家中的 ADSL 调制解调器之间,也是使用 RJ-45 和 5 类线(即以太网使用的网线)进行连接的,并且也是使用 PPPoE 弹出的窗口进行拨号连接的
73 5
|
9天前
|
机器学习/深度学习 数据可视化 Linux
Seaborn可视化学习笔记(一):可视化神经网络权重分布情况
这篇文章是关于如何使用Seaborn库来可视化神经网络权重分布的教程,包括函数信息、测试代码和实际应用示例。
19 0
|
2月前
|
机器学习/深度学习 数据采集 人工智能
未来的守护神:AI驱动的网络安全之盾,如何用智慧的光芒驱散网络黑暗势力?揭秘高科技防御系统背后的惊天秘密!
【8月更文挑战第13天】随着网络技术的发展,网络安全问题愈发严峻,传统防御手段已显乏力。本文探讨构建AI驱动的自适应网络安全防御系统,该系统能自动调整策略应对未知威胁。通过数据采集、行为分析、威胁识别及响应决策等环节,利用Python工具如Scapy、scikit-learn和TensorFlow实现网络流量监控、异常检测及自动化响应,从而提升网络安全防护的效率和准确性。随着AI技术的进步,未来的网络安全防御将更加智能和自动化。
48 6
|
2月前
|
机器学习/深度学习 自然语言处理 并行计算
【深度学习+面经】Transformer 网络学习笔记
Transformer模型的核心概念、优缺点以及在多个领域的应用,并提供了针对Transformer架构的面试问题及答案。
122 2
|
2月前
|
Windows
Windows 映射网络驱动器及删除-此网格连接不存在
Windows 映射网络驱动器及删除-此网格连接不存在
241 0
|
4月前
|
Linux 数据安全/隐私保护 Windows
linux 搭建cloudreve win映射网络驱动器WebDav
linux 搭建cloudreve win映射网络驱动器WebDav
140 2
|
3月前
|
Windows
Win10或Win11更新补丁后导致360随身wifi提示USB设备驱动异常,创建Wifi网络失败
Win10或Win11更新补丁后导致360随身wifi提示USB设备驱动异常,创建Wifi网络失败
783 0
|
5月前
|
人工智能 自然语言处理 安全
构建未来:AI驱动的自适应网络安全防御系统提升软件测试效率:自动化与持续集成的实践之路
【5月更文挑战第30天】 在数字化时代,网络安全已成为维护信息完整性、保障用户隐私和企业持续运营的关键。传统的安全防御手段,如防火墙和入侵检测系统,面对日益复杂的网络攻击已显得力不从心。本文提出了一种基于人工智能(AI)技术的自适应网络安全防御系统,该系统能够实时分析网络流量,自动识别潜在威胁,并动态调整防御策略以应对未知攻击。通过深度学习算法和自然语言处理技术的结合,系统不仅能够提高检测速度和准确性,还能自主学习和适应新型攻击模式,从而显著提升网络安全防御的效率和智能化水平。 【5月更文挑战第30天】 在快速迭代的软件开发周期中,传统的手动测试方法已不再适应现代高效交付的要求。本文探讨了如