%# -*- coding: utf-8-unix -*-

\chapter{FAST平台介绍与操作说明手册}
\label{app:openbox}

\subsection{FAST简介}

针对近年来关于工业控制网络创新技术、创新网络结构、时间敏感网络、SDN网络、FPGA硬件加速技术及下一代网络技术的研究需求，由国防科大与湖南新实共同发起的开源项目——FAST（FPGA Accelerated Switcing plaTform）于2016年创建。截止到目前，该开源项目已经服务全国多所高校和科研院所的网络教学实验建设和科研项目。

FAST开源项目的诞生与发展深受斯坦福大学Nick Mckeown教授在NetFPGA项目、OpenFlow项目和P4等项目的影响，其目标是为计算机网络的科研与教学提供一个开源和开放的软硬件全功能可编程交换平台。其主要特点如下：
\begin{enumerate}
\item  \textbf{FPGA：}FAST实现的核心载体是可编程FPGA，是用Verilog语言编程实现的硬件功能。FPGA的现场可编程特性为实现用户创新的网络架构、算法、实现机制提供了极大的灵活性，而且可以获得较高的性能，支持在实际网络中部署运行； 

\item  \textbf{Accelerated：}PGA实现的不是网络处理的全部功能，而是部分需要硬件加速的分组处理功能。FAST的核心是一套软硬件协同的分组处理模型，用户可以通过Verilog编程实现的硬件功能的加速，也可以在现有的FAST硬件平台的CPU上编程实现特定的分组处理功能； 

\item  \textbf{Switching：}AST面向的领域是网络交换领域，支持各种新型交换技术，如软件定义网络（SDN）、时间敏感网络（TSN）、网络安全一体化网络甚至是智能网卡的实现研究，而不是支持以人工智能（AI）为代表的应用加速；

\item  \textbf{plaTform：}与目前其他开源项目一样，FAST提供的是一个硬件平台无关的，支持用户通过软硬件编程实现其特定分组处理功能的环境。FAST通过提供标准的规范、开源的平台软硬件实现代码和demo应用，支持用户基于平台进行创新的应用开发和设备原型的快速实现。 
\end{enumerate}

\subsection{FAST架构}
FAST平台的架构是一种通用多核CPU加FPGA形态的网络处理架构。通常对处理性能要求较高的分组处理功能由FPGA实现，对处理性能要求较低，实现复杂的功能可由CPU实现。用户既可通过扩展FPGA硬件流水线功能也可以通过CPU上编程实现对分组交换功能的扩充。该平台架构主要由硬件逻辑和软件逻辑两部分组成，实现软硬件耦合通信与支持软硬件可编程的网络创新实验系统。其中硬件包括平台相关的数据IO和FAST硬件逻辑。软件部分包括通用操作系统与FAST软件逻辑。FAST软件逻辑包括软件开发环境和UA程序。该平台，不仅支持FAST的UA编程开发，同时也支持通用Socket APP的开发与运行。

FAST交换平台的实现不依赖特定的CPU与FPGA型号，但为了更好地提供交换功能扩充能力，保证软硬件协同分组处理的基本性能，FAST的交换平台必须具有如下两个特点：
\begin{enumerate}
   \item  \textbf{所有网络接口均与FPGA相连；}
   
进入交换平台的分组首先送FPGA处理，离开交换平台的分组最后由FPGA发出。这样有两个优点。一是交换平台可精确获取分组接收时间以及控制发送时间，实现类似1588透明时钟的控制，支持时间敏感交换；二是平台可以支持各种新型的分组格式，支持内容中心网络（ICN）等非IP交换。
   \item  \textbf{FPGA通过高带宽总线与CPU连接。}
   
与传统交换芯片通过低带宽的SPI总线、以太网或是单Lane的PCIE总线与控制CPU连接不同，FAST平台中FPGA通过高带宽的总线与CPU连接，提升软硬件协同分组处理的性能，支持通过CPU软件对数据平面处理功能进行扩展。 
\end{enumerate}


FAST交换平台的实现架构如图\ref{fig:a:ob_FAST-Ac}所示。
\begin{figure}[H]
\centering
\includegraphics[width=11cm]{FAST-Ac}
\caption{FAST平台实现架构图}
\label{fig:a:ob_FAST-Ac}
\end{figure}

平台硬件逻辑分为两部分：一部分是平台相关的外围接口和与平台CPU互联的高速总线接口逻辑，统称为FPGA OS。其主要实现平台相关,交换功能无关的分组处理，如网络接口的接收与发送、CPU的DMA引擎以及FPGA片外或片内实现的TCAM查表功能等；另一部分是用户模块逻辑UM，其主要实现交换相关的网络功能，每一个小的流水线模块称为硬件应用（HA），如分组解析、关键字提取、转发查表、动作执行和输出控制等。用户可在UM模块中扩展HA流水线实现不同的分组处理功能。

平台软件逻辑分为三部分：一是平台相关驱动，由厂商实现其具体平台的硬件数据IO驱动，一般包含PCIe驱动、DMA驱动和以太网驱动；二是FAST分组分派模块，主要实现内核应用模块、协议栈模块和用户应用（UA）和底层驱动的数据分派功能；三是FAST分组应用，主要包括在通过标准内核协议栈支持的通用SOCKET应用（CA）、内核编程开发的内核应用（KA）和基于FAST快速IO编程开发的用户应用。
     
FAST平台的分组处理功能分布在硬件HA和软件的KA、CA及UA，各功能模块之间的转发和连接关系可由模块的ID号与下一组模块ID号关联配置，实现分组数据在FAST平台的处理流水线模块排列如图\ref{fig:a:ob_FAST-Pkt-Proc}所示效果。
\begin{figure}[H]
\centering
\includegraphics[width=11cm]{FAST-Pkt-Proc}
\caption{FAST分组处理流水线排列图}
\label{fig:a:ob_FAST-Pkt-Proc}
\end{figure}

\subsection{平台应用}
由于FAST平台架构的特征，其应用开发可以是软件开发、硬件开发或软硬件结合开发，具体根据平台应用场景和用户具体需求而定。
FAST项目自创立至今，已经在传统网络应用、工业互联网和创新网络架构设计等方面得到了广泛应用。通过在不同领域的应用积累了大量网络教学实验案例，如网络协议分析与编程、协议攻击与防护、路由器系统设计与实现、SDN交换机设计与实现、网络高精度测量、时间敏感网络设计与实现、高性能网络IO和网络应用的硬件卸载加速等。

\subsection{平台使用}
FAST是一个与平台无关的开源架构，根据FAST原理和规范实现的CPU＋FPGA异构网络设备形态都属于FAST平台。FAST平台的CPU支持国产与非国产多种型号，FPGA也可以支持国产和非国产的多种型号。下面以下湖南新实的一款专业网络实验教学设备型号OpenBox-S4为例，说明如何使用FAST平台。
\subsubsection{搭建环境}
使用FAST平台开发和验证网络功能，需要搭建FAST环境。FAST环境包括以下三个部分：
\begin{enumerate}
\item \textbf{用户操作设备：}一般是一台标准的电脑，可以是台式机或笔记本，除了基本操作IO设备外，电脑还要求至少拥有一个网口或一个USB口。该设备供用户编辑和编译软硬件逻辑代码，通过网口或串口上传和下载逻辑程序和运行结果；
\item \textbf{FAST平台设备：}一台符合FAST规范的可编程网络开发平台。平台支持FAST开源示例应用，可供用户基于平台进行软硬件逻辑功能的二次开发。平台至少提供一个串口和一个管理网口，用于支持用户网络远程或本地串口线登录平台进行操作；
\item \textbf{网络测试主机：}测试主机一般为支持网络功能的主机或嵌入式小型设备，如笔记本或树莓派。根据实验内容的不同，需要的网络测试主机数量及主机网络配置各不相同，具体参考相应的实验案例内容要求。
\end{enumerate}

\subsubsection{FAST平台设备}
OpenBox-S4设备是一款严格遵照FAST原理与架构设计的通用多核CPU＋FPGA的软硬件全功能可编程网络开发平台。适合本科和研究生的计算机网络教学和新型网络交换机制的验证。

该设备采用Zynq-7000 SOC芯片，内嵌双核Cortex-A9 处理器，512MB DDR3内存；支持4个千兆以太网数据接口，1个千兆管理以太网接口和一个管理串口。设备外观与接口说明如图\ref{fig:a:ob_f01}和图\ref{fig:a:ob_f02}所示：

\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f01}
\caption{OpenBox-S4设备前端图}
\label{fig:a:ob_f01}
\end{figure}

\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f02}
\caption{OpenBox-S4设备后端图}
\label{fig:a:ob_f02}
\end{figure}

在实验过程中，测试主机设备通常连接在设备的数据接口位置，用户操作管理设备时通过管理网口或串口连接。

\subsubsection{登录设备平台}
\begin{enumerate}
\item 串口方式
\begin{enumerate}
\item 连接串口线；

设备使用标准USB口和Micro USB接口的线作为串口连接线，标准USB口连接在用户操作设备上，Mirco USB接口与设备对应串口连接。
\item 打开并配置串口工具。

在用户操作设备上打开串口工具，配置好相应串口参数后打开串口，即可通过串口管理设备。以putty为例，其配置参数如图\ref{fig:a:ob_f11}所示：
\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f11}
\caption{串口工具参数配置图}
\label{fig:a:ob_f11}
\end{figure}
\end{enumerate}

\item 管理网口方式
\begin{enumerate}
\item 连接网线；

使用一根RJ45端口的网线，分别连接在用户操作主机端与设备的管理网口（MGMT），网口出现指示灯闪烁说明连接正常。
\item 配置主机端IP信息。

通过网连接连接设备，必须确保用户操作主机与设备管理网口在相同的网段，如不记得管理网口的IP，可以通过串口方式查看。设备默认网段为192.168.50.0网段，故用户操作主机的IP地址配置信息参考如图\ref{fig:a:ob_f12}所示：
\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f12}
\caption{网口连接的主机IP配置图}
\label{fig:a:ob_f12}
\end{figure}
\end{enumerate}
\end{enumerate}

\subsubsection{测试二层交换功能}
\begin{enumerate}
\item 搭建二层交换拓扑


二层交换实验的两台测试主机可以随意连接到设备的数据接口位置（网口0到网口4均可）。测试主机的IP地址配置及连接拓扑如图\ref{fig:a:ob_f15}所示：
\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f15}
\caption{二层交换连接拓扑示意图}
\label{fig:a:ob_f15}
\end{figure}

\item 在OpenBox-S4上运行二层交换程序

　用串口或网线连接用户操作主机与设备，通过串口登录界面或网络登录界面控制设备，在界面终端输入命令：l2switch，如图\ref{fig:a:ob_f16}所示：

\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f16}
\caption{二层交换命令启动输出图}
\label{fig:a:ob_f16}
\end{figure}

\item 在PC两端进行PING测试

在主机B的CMD (命令提示符) 程序中。输入并执行命令ping 192.168.1.111 即可测试两台主机之间的联通性。测试结果如图\ref{fig:a:ob_f17}所示：

\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f17}
\caption{二端主机PING通结果图（二层交换）}
\label{fig:a:ob_f17}
\end{figure}

\end{enumerate}


\subsubsection{测试三层路由功能}
\begin{enumerate}
\item 搭建三层路由拓扑


三层路由实验的两台测试主机要根据主机端IP地址配置和网关配置，分别连接到主机对应网关的接口上。连错线会导致实现失败。测试主机的IP地址配置及连接拓扑如图\ref{fig:a:ob_f18}所示：
\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f18}
\caption{三层路由拓扑}
\label{fig:a:ob_f18}
\end{figure}

\item OpenBox-S4上运行三层路由程序

　用串口或网线连接用户操作主机与设备，通过串口登录界面或网络登录界面控制设备，在界面终端输入命令：l3router，如图\ref{fig:a:ob_f19}所示：

\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f19}
\caption{运行三层路由程序}
\label{fig:a:ob_f19}
\end{figure}

\item 在PC两端进行PING测试

在主机A的CMD (命令提示符) 程序中。输入并执行命令ping 192.168.2.119 即可测试跨路由功能。测试结果如图\ref{fig:a:ob_f20}所示：

\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f20}
\caption{端主机PING通结果图（三层路由）}
\label{fig:a:ob_f20}
\end{figure}

\end{enumerate}


\subsubsection{测试SDN交换功能}
\begin{enumerate}
\item 搭建SDN交换拓扑


SDN交换实验的两台测试主机可以随意连接到设备的数据接口位置（网口0到网口4均可），SDN控制器主机的网线一定要连接在设备的管理网口（MGMT）。控制器主机和测试主机的IP地址配置及连接拓扑如图\ref{fig:a:ob_f21}所示：
\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f21}
\caption{SDN交换拓扑}
\label{fig:a:ob_f21}
\end{figure}

\item 在SDN控制器主机中启动SDN控制器

　在终端命令行下输入 java –jar target/floodlight.jar，即启动floodlight控制器。如图\ref{fig:a:ob_f22}所示：

\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f22}
\caption{启动floodlight控制器}
\label{fig:a:ob_f22}
\end{figure}

\item 在设备平台上运行SDN交换程序

　在串口登录界面或网络登录界面输入命令：xofp -4 192.168.1.3 –i obx0,obx1,obx2,obx3 ， 连接Floodlight控制器。如图\ref{fig:a:ob_f23}所示：

\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f23}
\caption{运行SDN交换程序}
\label{fig:a:ob_f23}
\end{figure}

\item 访问floodlight控制器首页

　在控制器主机打开浏览器，在浏览器地址栏输入：127.0.0.1:8080/ui/index.html ，访问floodlight控制器首页。界面如图\ref{fig:a:ob_f24}所示：

\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f24}
\caption{访问floodlight控制器首页}
\label{fig:a:ob_f24}
\end{figure}

\item 在PC两端进行PING测试

在主机A的CMD (命令提示符) 程序中。输入并执行命令ping 192.168.2.119 即可测试两台主机之间的联通性。测试结果如图\ref{fig:a:ob_f25}所示：

\begin{figure}[H]
\centering
\includegraphics[width=11cm]{f25}
\caption{端主机PING通结果图（SDN交换）}
\label{fig:a:ob_f25}
\end{figure}

\end{enumerate}

\subsection{FAST开源社区}
由于FAST架构设计的独特优势，用户无需关心平台的分组网络IO、存储和加速方法，只专注于创新架构的设计和核心技术研究，极大的加快网络创新技术的落地与应用。来自全国的近100家的高校、科研院所和设备厂商单位都加入的FAST开源社区。FAST开源社区致力于网络领域的基础网络技术分析与实现，热门网络技术跟踪研究与原型实现和未来网络技术探索与研究。更多的网络前沿技术及FAST的实现方法以及FAST的编程开发方法请关注FAST社区公众号及相关服务网站。
\begin{figure}[H]
\centering
\includegraphics[width=5cm]{fast-w}
\caption{FAST公众号}
\label{fig:a:ob_fast-w}
\end{figure}
FAST官网：http://www.fastswitch.org
