从控制功能方面考虑,对上要把每一种可能的逻辑操作映射成硬件操作;对下要能够和多个设备通信 。上层应用包括系统维护、路由软件、网管软件;下层设备包括处理引擎和端口 。控制功能的具体实现和硬件平台有关 。考虑到多种应用可能同时操作一个硬件设备,一种应用也可能同时操作多个设备,在实现时必须考虑到对于多并发操作的支持 。
基于上述考虑,中间层由控制卡驱动模块和若干网络驱动实例组成 。在图2(a,b)中分别给出了传统路由器的结构与驱动方式以及本文所提出的中间层所处的位置与驱动方式 。
控制卡驱动模块作为中间层的核心,维护控制卡上所有的端口、内存映射、中断和循环缓冲队列资源 。它实现了数据通道和控制通道 。对下直接驱动控制卡、与各个端口、处理引擎通信;对上,一方面通过内核调用陷阱方式提供控制通道接口;另一方面向虚拟网络驱动实例提供数据通道接口 。虚拟网络驱动实例在操作系统内核为各个物理端口实现网络驱动实例 。它们工作在控制卡驱动模块的基础上,并不直接控制硬件,故称为虚拟网络驱动实例 。虚拟网络驱动实例封装控制卡驱动模块提供的数据传输功能,并为内核和上层软件提供与普通网络驱动实例相同的调用接口 。下面分别给出数据通道和控制通道的实现方案 。
2.1 数据通道的功能与实现
虚拟网络驱动实例和物理端口是一一对应的 。内核数据收发的功能包括3个方面:
(1)发往某虚拟网络驱动实例的数据包应该由其对应端口输出;
(2)这个端口所收到的包也通过该虚拟网络驱动实例向系统内核提交;
(3)中间层也可以对虚拟网络驱动实例进行流控操作,以避免因拥塞导致数据丢失 。
注重到图2(b)中的交换结构以定长信元交换数据,其格式如图3所示,其中信元头占4字节,包括处理引擎号和端口号域 。对于收/发信元,处理引擎号和端口号分别为该信元的源端口的和目的端口的对应值 。
根据图2(b)所示的系统结构可知:由处理引擎号和端口号可以确定端口的物理位置 。控制卡驱动模块在其内部的驱动信息数组中维护虚拟网络驱动实例和端口之间的对应关系 。
发送数据时,虚拟网络驱动实例从内核网络部分获取待发送的数据,偕同指向该实例自己的指针一起提交给控制卡驱动模块 。一方面,控制卡驱动模块通过这个指针可以对虚拟网络驱动实例进行流控设置;另一方面,控制卡驱动模块根据虚拟网络驱动实例指针查驱动信息表得到目标端口物理位置信息,包括处理引擎号和端口号 。端口物理位置信息将被填充到所有用来承载待发送数据包的信元头中 。控制卡驱动模块通过控制卡把信元送到交换结构,而交换结构和处理引擎分别根据处理引擎号和端口号将信元转发到到目标端口 。最后端口从接收到的信元中恢复出原始数据发出 。
接收数据时,端口也会将数据拆分到若干信元中逐级上传 。考虑到交换结构的循环优先机制,一个数据包上传的过程可能被来自其他端口的数据抢断 。所以控制卡驱动模块对于接收到的信元按源端口位置信息(包括处理引擎号和端口号)保存到不同的缓冲区中 。当接收到该数据包相关的全部信元,控制驱动模块即可重组该数据,并根据源端口位置信息查驱动信息表以得到指向该端口对应虚拟网络驱动实例的指针,进而激活该虚拟网络驱动实例接收数据 。虚拟网络驱动实例从控制卡驱动模块中获取数据后,按照网络驱动的常规方式调用netif-rx接口向内核提交数据 。数据收发实现结构如图4所示 。
推荐阅读
- 上海贝尔阿尔卡特7670路由交换平台 版本2.2
- CISCO路由器与交换机口令回复步骤
- 波长交换路由器的特点和应用
- MPLS VPN 路由器与交换机选购指南
- 基于软交换路由技术的探讨
- 如何用交换路由器提升宽带差异服务
- 三层交换机和路由器的区别
- 浅谈多层交换路由器中的架构演进
- MPLS交换路由器的设计与实现
- 什么是定向流量包和通用流量包