标题：netmagic
简 介
NetMagic是国防科学技术大学计算机学院网络与信息安全研究所面向下一代互联网络创新体系结构研究设计NetMagic集锦(9张)的一款网络创新加速的开放式实验平台。该平台采用开源开放的设计思想和模块可重用的设计理念，通过提供高可用的基本功能模块及良定义的标准接口，有效减轻用户的系统设计、实现及验证工作，减少网络创新开发周期，用于有效打破传统商业网络设备的封闭性束缚，缩短网络技术科研创新周期。NetMagic采用大容量FPGA与商用以太网交换芯片相结合的新型体系结构，可提供高端口密度报文线速转发能力和逻辑可重构能力，从而有效支持新型网络协议和报文处理机制的快速实现和部署。该平台可广泛用于网络科研和教学活动。
NetMagic 平台设计特点主要体现在：1)基于部分可编程交换机体系结构设计，为用户提供丰富灵活的工作模式；2)通过将用户逻辑与通用报文处理逻辑分离并提供良定义接口，可有效简化用户逻辑设计工作；3)通过通用的基于以太网的NetMagic 访问控制协议NMAC，为平台管理提供良好兼容性和可移植性；4)通过提供高速扩展接口，有效支持控制及处理能力的扩展。  NetMagic平台 实物图
研发背景
当前，三网融合、物联网、云计算以及IPv6过渡等概念和技术的提出和兴起，一方面有力推动了下一代互联网（Next Generation Internet，NGI）及相关技术的研究和发展，另一方面也对网络技术，尤其是互联网技术的创新带来了前所未有的压力和挑战。大量成熟商用网络设备及协议的部署在有力推动互联网普及应用的同时，其封闭性也为网络技术创新带来不可忽视的障碍。出于知识产权及安全性考虑，传统商用网络设备（路由器、交换机等）通常采用封闭式设备形态。新功能的集成被设备生产厂商严格控制，以防代码泄漏或设备的可靠性及可用性受到损害。第三方难以获得授权，无法在商用平台上展开技术创新和新功能的集成、测试及验证工作。网络技术研究者提出的各种新型协议和机制也难以在真实网络中部署和实验，网络技术创新正面临严峻的瓶颈。
为此，基于Emulab的网络安全试验设备DETER、提供良定义的抽象模型的OpenFlow交换机、网络科研教学评估板NetFPGA等平台相继推出，然而，这些平台在可靠性、扩展性、依耐性以及逻辑开发难度等方面存在一定限制。为了解决这些问题，研究者开发了一款开放式高扩展性的网络实验平台——NetMagic。
应用领域
NetMagic平台具有硬件可重构性和软件控制可编程性的特点，内部的计算存储模块以及丰富的功能扩展接口为该平台提供了必要的计算存储能力支持。NetMagic实验平台独特的结构设计和丰富的功能支持使得其可适用于很多领域，例如网络教学、网络科研、专用网络建设等。
在网络教学方面，NetMagic实验平台提供了丰富的开放式硬件构件和软件模块等基础资源，并基于上述资源实现以太网交换机、IPv4路由器、Openflow交换机等参考设计，使用NetMagic实验平台可以使学生们避免浪费精力在复杂而繁琐的实验平台搭建上。基于该平台，学生可以了解网络报文的基本处理流程，掌握网络系统报文处理机制和协议工作原理。NetMagic平台为用户自定义逻辑（UM）的集成提供了良定义的接口，学生可以在NetMagic预置的基本数据通路等模块的基础上，快速高效地将自己的核心网络处理业务集成和部署在NetMagic平台中，实现例如标准以太网交换机UM、路由器转发引擎UM、Openflow分组处理UM等网络处理功能，从而加深对网络设备内部工作原理的理解，从而有效提高学生网络技术创新能力和工程实践能力。
在网络创新研究方面，NetMagic实验平台通过“部分可编程交换机系统”专利设计提供了强大的可重构特性和线速报文转发能力。NetMagic平台通用可编程逻辑加商用高速交换芯片的独特设计结构，一方面为大规模真实实验环境构建提供有效支撑，另一方面则在新型网络协议、业务和服务的快速部署提供了支持。通过简洁良定义的控制协议和接口，研究人员可以通过外部控制器控制NetMagic对网络报文流的处理行为。此外，NetMagic实验平台还提供了计算存储扩展能力，使得研究人员可以在实验节点上部署更加丰富的网络管理、处理和计算业务及服务。
目前，基于NetMagic实验平台已经实现和正在开展很多前沿的网络创新技术研究。国家“973计划”的“大规模流媒体传输”正是基于该实验平台进行了新型传输协议功能实现，有效验证了其中流量检测、负载均衡、数据转发控制等创新技术；国家“863计划”的“可重构路由器构件组研制”也基于NetMagic平台进行了业务处理子系统的原型系统构建和实验；国家“863计划”紧急启动项目“三网融合演进技术与系统研究”也拟采用NetMagic平台作为构建网络演示验证环境的核心平台，评价、验证及展示各子课题的创新型研究成果。NetMagic平台为网络技术创新提供快速原型系统部署和大容量高性能的报文转发能力，是一个理想的网络技术创新实验平台。
基本结构
NetMagic平台采用新型部分可编程交换机体系结构  NetMagic基本结构技术设计实现，将商用以太网交换芯片和大容量FPGA有机结合，可提供高端口密度下报文线速交换转发能力，提供丰富的工作模式配置，有效支持用户自定义报文处理逻辑集成。此外，通用的管理控制接口则使NetMagic避免平台相关性可能导致的兼容性和可移植性问题。NetMagic运行时以报文转发为基础，内部并不含CPU，自身无法运行任何操作系统，对于某些相对简单固定的应用，通过FPGA编程时的一些设定，可以完成预定任务。除此之外对于某些复杂灵活的应用，还需要一台外部主机对它进行配置。我们自主开发了一套NMAC协议，通过以太网报文的形式传到FPGA的管理配置接口，然后由FPGA对这些命令和配置报文进行解析，改变NetMagic的转发行为。4.1 硬件处理流程NetMagic以一片中等规模FPGA为核心，称之为MagicFPGA。NetMagic08外设4个RJ45电口和4个SERDES光口。为了可以对报文进行重组，NetMagic08还设计了一片512Mb的DDR2 SDRAM进行报文缓存。报文从某个端口进入FPGA，根据转发规则决定是否将报文送入DDR2缓存，或者决定报文从哪个端口输出。转发规则由外部控制主机通过NMAC协议进行配置。  UM与CDP输入控制时序图4.2 软件处理流程NetMagic的软件处理依靠NMAC协议进行，NMAC协议是NeMagic管理模块和外部控制主机之间的一种访问控制协议，提供双方通信机制并定义相关的规范。和NetMagic24平台类似，NetMagic08平台也是以一片MagicFPGA为核心，完成报文的查表转发和相同配置管理。MagicFPGA内部的管理模块负责基于NMAC协议与外部控制主机建立连接，并对管理报文中的命令进行解析，转换为总线命令，完成对NetMagic平台中功能模块控制以及存储器管理等工作。在Netmagic08平台中，管理配置接口使用静态MAC地址和IP地址，在平台初始化时将MAC地址和IP地址烧入硬件中，可以通过硬件编程进行修改。4.3 MagicFPGA工作模式MagicFPGA是NetMagic平台实现可定制报文处理功能的核心，其主要为用户提供可重构报文交换模块和平台无关的管理接口，如图3所示。为有效简化用户自定义报文处理功能的开发实现，可重构交换模块预置通用数据通路（Common Data Path，CDP）功能，负责提供报文的接收、发送、复制等基本通用处理原语，并在对存储器接口等复杂逻辑进行封装的基础上，为用户模块（User Module，UM）提供清晰的良定义接口。基于NetMagic平台开发时，用户仅需专注于UM中自定义逻辑的实现，而不必考虑网络接口、数据缓冲、平台管理等其它复杂逻辑的实现。
使用技巧
5.1 UM的总体结构用户模块User Module简称UM，是MagicFPGA中用户可自行开发的唯一模块，其它模块的硬件代码和功能已经固定。图4 表明了NetMagic08平台上的MagicFPGA中用户模块UM和其它模块的关系。虽然NetMagic平台的硬件代码是全部公开的，理论上用户可以修改全部代码，但对于初学者，我们建议只修改UM中的代码功能。UM通过相关接口与CDP、管理模块和DDR2控制器相连。UM与CDP之间的接口分为输入控制接口和输出控制接口，主要是接收和发送数据报文，完成数据报文的传输；UM与管理模块之间的接口主要通过NMAC协议软件对UM内部寄存器或内嵌RAM表进行访问控制；UM与DDR2控制器之间的接口完成片外DDR2 SDRAM中的缓冲报文和其它数据的访问。DDR2片外存储器的访问相对来说比较复杂，初学者可以先不掌握。
CDP的输入控制模块和输出控制模块之间还有一个输入输出缓冲FIFO，可以直接将报文从输入控制模块旁路到输出控制模块，而不经过UM。UM与各个模块之间的接口功信号定义和时序关系在下面的小节中将详细介绍。用户可以根据需要，实例化必需的接口，设计出自己的UM。对于最简单的报文转发和路由查找等应用，用户只需要实例化与UM与CDP之间的接口和与管理模块之间的接口。5.2 UM的引脚说明UM与MagicFPGA内部其它模块的接口信号定义如表1所示。主要列出了与CDP、管理模块和DR2控制器的引脚信号名称及相关说明。其中，表1中的信号方向是相对UM而言。表1 UM与相连模块的引脚信号列表
在NetMagic24上此位对应一个外部百兆管理端口，在NetMagic08上这个端口不再保留了，而是任选一个物理端口作为管理端口，因此此位保留。5.3 UM报文处理流程UM和CDP紧密相连，直接面对CDP的输入控制模块和输出控制模块。CDP的输入控制模块将报文同时往两个方向复制：CDP输入输出FIFO和UM。UM一边接收报文，一边提取报文的关键字，生成规则信息。规则信息在报文尾到达前生成完毕，然后等待CDP输出控制模块的许可，即看到CDP的规则FIFO有空闲空间时（um2cdp_rule_usedw<5'd30），将规则信息送往CDP的输出控制模块。
CDP的输出控制模块解析UM送来的规则信息，根据规则信息的最高位决定从哪条路径读取报文。由于规则信息是在报文尾到达时送往CDP输出控制模块的，所以一旦输出控制模块解析完规则信息并决定转发报文时，一定有一个完整的报文在等待着它，这个报文要么在CDP输入输出FIFO中，要么在UM中。剩下的事情就很简单了，CDP输出控制模块一边解析规则信息，一边转发报文。报文具体送往哪几个端口由规则信息指定。
回头再看看MagicFPGA的工作模式，可以知道，无论哪种模式，都需要UM产生相应的规则信息。即使处于旁路处理模式，也需要UM产生规则信息，告诉CDP输出控制模块如何转发报文。因此旁路可处理模式并不意味着用户可以不做任何事情，这是本文需要提醒用户注意的。规则是一个更接近软件的概念，实际上UM在产生规则信息的时候也遵循了这个原则，规则可以由MagicFPGA静态产生，也可以由软件通过NMAC协议动态配置，这与NetMagic平台倡导的开放可重构的理念是相吻合的。5.4 UM接口时序关系下面，对各个模块之间的时序关系作一介绍，具体内容技术论坛有详细呈现，如有需要，可以移步至相关资料社区阅读参考。
5.4.1 输入控制模块
当UM模块资源空闲，有能力从CDP接收一个新的报文时，则给CDP输入控制模块一个发送使能信号cdp2um_tx_enable。从5.3节可知，CDP输入控制模块获得该使能信号后，同时向UM和输入输出FIFO发送139位宽的报文数据cdp2um_data，并发送一个报文有效信号cdp2um_data_valid，此信号表明了报文的开始、中间和结束。UM一旦获得了报文的头部，就可以取消使能信号cdp2um_tx_enable，直到报文接收完毕。输入控制模块给UM的报文是连续的。当一个报文发送结束后，UM可以重新产生发送使能信号，进行下一个报文的上传，如此循环操作。具体操作步骤如下：
UM发送请求报文使能信号cdp2um_tx_enable为高；CDP输入控制模块收到cdp2um_tx_enable时，检测是否有一个完整报文等待发送，若有，则把cdp2um_data_valid信号置高，同时连续发送数据；若没有，CDP输入控制模块等待，cdp2um_tx_enable一直为高；其中，当UM检测到cdp2um_data_valid信号为高时，取消使能信号（置cdp2um_tx_enable为低）；当一个报文发送结束后，CDP输入控制模块置cdp2um_data_valid信号为低，此时，如果UM再需要报文数据时，需要重新置cdp2um_tx_enable为高，如此循环。
5.4.2 输出控制模块
UM向CDP输出控制发送匹配规则和相应的报文数据，具体操作步骤如下：
UM接收到一个报文尾，且规则FIFO有剩余空间时，将规则写信号um2cdp_rule_wrreq置高一拍，同时把匹配规则发送给CDP输出控制模块；CDP输出控制模块将规则信息存到一个规则FIFO中，然后根据下游的资源情况从FIFO中读取规则信息，根据规则中的定义（bit[29]），判断该规则绑定的报文是来自UM或是输入输出缓冲FIFO。所谓下游的资源情况是指下游的状态机处于空闲状态，有能力读取和发送一个新的报文。如果绑定为输入输出控制FIFO（bit[29]为1），则从输入输出缓冲FIFO中读出一个报文；如果是绑定自UM（bit[29]为0），则给UM一个数据发送使能信号um2cdp_tx_enable；UM检测到um2cdp_tx_enable为高时，则把um2cdp_data_valid信号置高，连续发送报文给CDP输出控制模块；报文发送结束后UM置um2cdp_data_valid信号为低，同时等待下一次操作。
5.4.3 UM与管理模块
管理模块把解析后的命令及数据发送给UM。UM获得命令及数据后，对相应的地址空间进行读写操作。如果为读操作，则UM需要向管理模块返回从相应地址中读出的数据及应答信号；如果为写操作，则UM完成写操作后，只需返回应答信号即可。因此，根据UM获得的读写两种操作命令，UM与管理模块之间的接口时序关系也分为read和write两种。管理模块与UM之间读操作步骤：
管理模块输出读请求、地址；管理模块24ns之后输出地址锁存信号ale。高有效；管理模块24ns之后撤掉地址锁存信号；UM检测到ale的下降沿，采样地址并判断。如果为自己的地址空间则继续往下执行。如果不为自己的地址空间则不继续往下执行而是等待下一次操作。管理模块24ns之后撤掉读地址，输出片选。低有效；UM检测到片选信号为0，进行读操作、返回读数据data_out，等数据稳定之后将ack_n信号置0；管理模块检测到ack_n信号为0，采样数据data_out，撤掉片选、读请求；UM检测到片选信号为1，撤掉ack_n信号；管理模块检测到ack_n变为1，可以发起下一次操作。 管理模块与UM之间写操作步骤：
管理模块输出写请求、地址；管理模块24ns之后输出地址锁存信号。高有效；管理模块24ns之后撤掉地址锁存信号；UM检测到ale的下降沿，采样地址并判断。如果为自己的地址空间则继续往下执行。如果不为自己的地址空间则不继续往下执行而是等待下一次操作；管理模块24ns之后撤掉写地址，输出写数据；管理模块24ns之后输出片选。低有效；UM检测到片选信号为0，进行写操作，写操作完成之后将ack_n置0；管理模块检测到ack_n信号为0，撤掉片选、请求；UM检测到片选信号为1之后，撤掉ack_n；管理模块检测到ack_n信号变为1之后，可以发起下一次操作。
5.4.4 DDR2控制器时序
UM与DDR2_CTRL之间的操作包括读操作和写操作。当UM模块检测到um2ddr_ready为高时（即DDR2准备完毕时），才能向DDR2发送操作命令。
写操作时，用户将需要存储的数据写入数据FIFO（um2ddr_data_fifo）之后再将命令、首地址及偏移量写入命令FIFO（um2ddr_command_fifo）。
读操作时，用户将命令、首地址及偏移量写入命令FIFO（um2ddr_command_fifo）。DDR2_CTRL将读出的数据写入数据FIFO（ddr2um_data_fifo）之后再将返回的数据信息写入命令FIFO（ddr2um_command_fifo）。UM检测ddr2um_valid_empty信号为0时，表示有数据返回，读取命令FIFO（ddr2um_command_fifo）和数据FIFO（ddr2um_data_fifo）取出结果。
DDR2接口控制器是用Altera的IP核实现的，由于这部分的功能比较复杂，建议用户将资源更多地用在对本文转发的处理上，因此UM与DDR2接口控制器之间的接口时序图本文尚未提供，有兴趣的读者可以参阅网站上的相关资料和Altera的文档。5.5 UM内部寄存器定义UM内部寄存器是NetMagic平台中MagicFPGA寄存器的一部分。NetMagic系统地址空间分配如表2；UM内部寄存器空间的分配如表3；UM标识寄存器地址空间分配如表4；用户可以通过NMAC协议，发送报文对CDP各个寄存器进行读取，从而达到读取端口状态的目的。UM标识寄存器均为32位宽，具体定义如表5；用户可以根据实际RAM表的大小，确定内嵌RAM表地址具体需要多少位。如果26位地址也不能满足设计时，可以构造内嵌链表进行扩充。  UM内部寄存器地址空间分配表5.6 MagicFPGA数据格式CDP及UM的内部报文数据宽度都是139位，其中低16个字节为报文数据，高11位为带外控制信息。CDP和UM中的各个功能模块可以根据带外控制信息对报文进行判断，以确定处理方式。同时，因为报文全部为以太网格式报文，所以最少为64个字节，即四拍数据，不会出现首尾同拍的情况。
说明：
头尾标识[138:136]：
101：报文头部；
100：报文中间数据；
110：报文尾部；
其余保留。
输入端口号port_num[131:128]：为4位通道号（仅在报文头标识），对应MagicFPGA中的8个物理端口，序号为0-7。序号8-15保留。有效字节数Vbyte[135:132]：仅在报文尾部有效，头部和中间默认16个字节全部有效。1111：16个字节全部有效；
1110：最高15个字节有效；
1101：最高14个字节有效；
依次类推；
0000：最高1个字节有效。