7.3 驱动程序的设计和实现
7.3.1 DMA模式概述
当DMA controller(DMAC)得到DMA请求,它将要求得到CPU的数据总线。一旦CPU同意了DMAC的请求,DMAC就得到数据总线的控制权。然后根据DMA channel的设置,DMAC就将数据从源地址搬运到目的地。每次传输需要2个时钟周期,一个周期取数据,另一个额外的数据。
DMA接收包的过程
1.CPU首先初始化DMA controller(DMAC)
2.当CPU通过中断触发或polling方式得到一个包到达的消息。首先,CPU将从系统内存中分配空间,然后它将检查出端口状态。如果准备好,CPU就设置DMA相关寄存器(模式、transfer counter、chanel ready)。
3.CPU设置DMAC寄存器的传输方向参数。
4.当DMAC占据CPU的数据总线后,它就从ZL50408读取数据并且将数据写进系统内存。每个时刻,16-bit宽的数据块被传送。
5.当所有数据全部传输完以后,DMAC将数据总线重新交还给CPU。
DMA发送包过程
1.CPU初始化DMA controller(DMAC)
2.CPU检查入端口状态。如果准备好,就设置相关的DMA寄存器(模式、transfer counter、chanel ready)。否则,就发出发送失败消息。
3.CPU设置DMAC寄存器的传输方向参数。
4.当DMAC占据CPU的数据总线后,它就从系统内存读取数据并且将数据写入ZL50408。每个时刻,16-bit宽的数据块被传送。
5.当所有数据全部传输完以后,DMAC将数据总线重新交还给CPU。
7.3.2 ZL50408二层交换芯片概述
在物理层实现上,交换芯片ZL50408通过GMII接口与PHY芯片MT90224连接. 该GMII/PCS媒体访问控制(MAC)模块为FRAME引擎(Fe)的和外部的物理设备(PHY的)提供了必要的buffer和控制接口。ZL50408的GMAC实现了GMII和MII接口,从而实现了从10/100M到1G各种速率. 该GMAC的符合IEEE 802.3z规范。它能够运行在10 M/100M速率下的半或全双工模式与回压力/流量控制机制或1G全双工模式流量控制。此外,它在碰撞检测后会自动重传数据包。PHY的GMAC地址是01h和02h。对于光纤接口,ZL50408实现了物理编码子层接口(PCS)。PCS包括8B10B encoder和decoder,自动协商,及Ten Bit接口(TBI)。MPC8260通过控制ZL50408的内部相应的寄存器简介访问PHY寄存器。ZL50408提供了两种访问机制,一种是中断机制,一种是软件查询机制。
在数据链路层实现上,交换芯片ZL50408内部有一个地址解析逻辑,负责进行第二层交换。地址解析逻辑主要负责完成以下任务:
1) 对于目的MAC地址是单播地址的数据包,则找到其对应的出端口。
2) 对于目的MAC地址是广播或组播地址的数据包,或MAC表查找失败的数据包,则找到它对应的出端口集合。
3) 对于带VLAN标签的数据包,首先获取其VLAN tag。
4) 获取VLAN member之间的关系。
5) 当数据包的源MAC地址不在于ARL表中时,学习源MAC地址
6) 学习组播MAC地址,增加或删除静态单播MAC地址
收到数据包后,地址解析逻辑首先进行源地址查找,地址解析逻辑从数据包中提取源MAC地址和VLAN tag,如果当前数据包不带VLAN tag,则地址解析逻辑会依据收到该数据包的端口获得相应的VLAN tag和优先级加上标签。这样地址解析逻辑按照源地址+VLAN tag去搜寻ARL表,如果找不到,地址解析逻辑会进行源地址学习;如果找到了,会按照相应的设置执行相应的动作。
然后地址解析逻辑进行目的地址查找,对于单播的MAC地址,地址解析逻辑查找ARL表,对于组播MAC地址,地址解析逻辑ARL表。如果找到了,就可以获得出端口;如果找不到则将向所有VLAN tag对应的端口发送。
地址解析逻辑进行MAC地址学习。地址解析逻辑有三种MAC地址的学习方式:
1) 动态地址学习:当地址解析逻辑查找源地址失败后,地址解析逻辑会在ARL表中插入一条新的表项;如果源地址查找成功但对应端口发生了变化,这时会将这一表项的点卡号更新。
2) 静态地址学习:CPU可以向ARL表中插入静态地址项。但静态地址项无法因超时被交换芯片进行MAC表更新,只能在CPU的干预下被删除。
3) 组播地址学习:组播地址被保存在MULLTI-ARL表中。
7.3.2.1端口速率控制
在一个网络中,有时网卡会发生故障,这时网卡回向网络中高速发送一些单播数据包、广播数据包或组播数据包。在这种情况下,这些数据包会扩散到全网,进而导致整个网络瘫痪。ZL50408提供了数据包速率控制,可以分别对找不到目的地址的单播数据包、广播数据包进行速率控制。其具体实现见7.5节。

7.3.2.2 802.1Q VLAN的支持
VLAN技术可以将一个较大的交换式网络划分为若干个逻辑上的虚拟网络,VLAN技术有如下三方面优势:
1) 虚拟工作组:相同VLAN内的成员可以在不同的地理位置
2) 限制广播包:通常广播数据包会扩散到整个网络,VLAN技术可以将广播限制在一个VLAN内部,而不扩散到其他VLAN中
3) 安全性:由于一个VLAN的广播包不会扩散到其他VLAN中,因此一个VLAN内的成员侦听不到其他VLAN的广播包。当VLAN间需要通信时,必须经过第三层路由。
IEEE 802.1Q定义了基于端口的VLAN,是目前交换式网络中应用最多的VLAN技术。为了能够在数据链路层从逻辑上划分局域网,IEEE 802.1Q在传统的以太网帧结构的source address与T/L之间加入一个4字节的VLAN tag。TPID字段用于表示该数据是一个带IEEE IEEE 802.1Q VLAN tag的数据帧。VLAN的实现见7.5.7节

7.3.2.3 端口镜像
端口镜像是指讲一个或多个端口的流量映射到一个控制端口,可用于网络系统调试,网络故障诊断等。该交换芯片能够支持丰富的端口镜像功能,功能包括:
1)只映射收到的数据包
2)只映射转发出去的数据包
3)映射所有CPU要进行的三层路由的数据包
4)可以通过包过滤功能进行映射

7.3.2.4 IEEE 802.1D生成树协议(STP)
生成树协议 Spanning Tree 定义在 IEEE 802.1D 中,是一种桥到桥的链路管理协议,它在防止产生自循环的基础上提供路径冗余。为使以太网更好地工作,两个工作站之间只能有一条活动路径。网络环路的发生有多种原因,最常见的一种是故意生成的冗余,万一一个链路或交换机失败,会有另一个链路或交换机替代。
STP是一种桥到桥的通信技术,提供发现网络物理环路的服务。该协议规定了网桥创建无环回loop-free逻辑拓朴结构的算法。换句话说,STP提供了一个生成整个第二层网络的无环回树结构。
生成树协议操作对终端站透明,也就是说,终端站并不知道它们自己是否连接在某单个局域网或多交换局域网中。当两个网桥相互连接在相同的由两台计算机组成的网络中时,生成树协议支持两网桥之间相互交换信息,这样只需要其中一个网桥处理两台计算机之间发送的信息。
桥接设备之间通过使用网桥协议数据单元(Bridge Protocol Data Unit,BPDU)交换各自状态信息。生成树协议通过发送 BPDU 信息为交换网络配置根交换和根端口,并为每个交换网路区段(switched segment)配置根端口和指定端口。
网桥中的生成树算法可以用来决定如何使用生成树协议,该算法的优点在于能够避免网桥环路,并确保在多路径情形下网桥能够选择一条最有效的路径。如果最佳路径选择失败,可以使用该算法重新计算网络路径并找出下一条最佳路径。
利用生成树算法可以决定网络路径(哪台计算机主机在哪个区段),并通过 BPDU 信息交换以上数据。该过程主要分为以下两个步骤:


