1.以太网接口
Net/3以太网设备驱动程序都遵循同样的设计。对于大多数Unix设备驱动程序来说,都是这样,因为写一个新接口卡的驱动
程序总是在一个已有的驱动程序的基础上修改而来的。下面我们简要地概述一下以太网的标准和一个以太网驱动程序的设
计。下图是一个IP分组的以太网封装。
我们所讨论的最初的以太网组帧的标准在1982年由Digital设备公司,intel公司以及施乐公司发布,并作为今天在TCP/IP网络
中最常使用的格式,另一个可选的格式是IEEE规定的802.2和802.3标准。
下图列举了以太网接口的数据结构和函数。
上图中,椭圆标识一个函数,方框标识数据结构,圆角方框标识一组函数。
1.1.leintr函数
我们从以太网帧的接收开始。现在,假设硬件已初始化并且系统已完成配置,当接口产生一个硬件中断时,leintr被调用。在
正常操作中,一个以太网接口接收发送到它的单播地址和以太网广播地址的帧。当一个完整的帧可用时,接口就产生一个
中断,并且内核调用leintr。
leintr检测硬件,并且如果有一个帧到达,就调用leread把这个帧从接口转移到一个mbuf中(用m_devget),如果硬件报告
一个帧已传输完成或发现一个差错,则leintr跟新相应的接口统计。复位这个硬件,并调用lestart来传输另一个帧。
所有以太网设备驱