网络驱动开发:从数据传输到多播处理及兼容性考量
1. I/O 控制与数据交互
在网络驱动开发中,ifr指针指向内核空间的一个地址,该地址保存着用户传递的结构体副本。当do_ioctl函数返回后,这个结构体又会被复制回用户空间。这意味着驱动程序可以利用私有命令来接收和返回数据。
设备特定命令可以选择使用struct ifreq中的字段,不过这些字段已有标准化的含义,驱动程序很难根据自身需求对其进行调整。其中,ifr_data字段是一个caddr_t类型的指针,专门用于满足设备特定的需求。驱动程序和调用其ioctl命令的程序需要就ifr_data的使用达成一致。例如,pppstats就使用设备特定命令从 PPP 接口驱动程序中获取信息。
需要注意的是,plip实现对ifr_data的使用是错误的,不能将其作为ioctl实现的示例。
2. 统计信息获取
驱动程序需要实现的最后一个方法是get_stats,该方法返回一个指向设备统计信息的指针。其实现相对简单,以下是一个示例:
struct net_device_stats *snull_stats(struct net_d