diff --git a/book/instructions.tex b/book/instructions.tex index bcd3883..9a9b820 100644 --- a/book/instructions.tex +++ b/book/instructions.tex @@ -110,13 +110,13 @@ \graphicspath{{../figure/appendixes/ensp/}} \input{../data/appendix/ensp} -% 可编程网络平台-操作手册 +% FAST平台介绍与操作说明手册 \graphicspath{{../figure/appendixes/openbox/}} \input{../data/appendix/openbox} % FAST软件编程入门指南 -\graphicspath{{../figure/appendixes/fast/}} -\input{../data/appendix/fast} +% \graphicspath{{../figure/appendixes/fast/}} +% \input{../data/appendix/fast} \backmatter %====================================================================== diff --git a/data/appendix/openbox.tex b/data/appendix/openbox.tex index 275283c..a0d80ef 100644 --- a/data/appendix/openbox.tex +++ b/data/appendix/openbox.tex @@ -1,214 +1,145 @@ %# -*- coding: utf-8-unix -*- -\chapter{可编程网络平台-操作手册} +\chapter{FAST平台介绍与操作说明手册} \label{app:openbox} \subsection{FAST简介} -针对近年来关于工业控制网络创新技术、创新网络结构、时间敏感网络、SDN网络、FPGA硬件加速技术及下一代网络技术的研究需求,由国防科大与湖南新实共同发起的开源项目——FAST(FPGA Accelerated Switcing plaTform)于2016年创建。截止到目前,该开源项目已经服务全国多所高校和科研院所的网络实验建设和科研项目。 +针对近年来关于工业控制网络创新技术、创新网络结构、时间敏感网络、SDN网络、FPGA硬件加速技术及下一代网络技术的研究需求,由国防科大与湖南新实共同发起的开源项目——FAST(FPGA Accelerated Switcing plaTform)于2016年创建。截止到目前,该开源项目已经服务全国多所高校和科研院所的网络教学实验建设和科研项目。 -FAST平台的架构是一种通用多核CPU加FPGA形态的网络处理架构,该平台架构主要由硬件逻辑和软件逻辑两部分组成,实现软硬件耦合通信与支持软硬件可编程的网络创新实验系统。其中硬件包括平台相关的数据IO和FAST硬件逻辑。软件部分包括通用操作系统与FAST软件逻辑。FAST软件逻辑包括软件开发环境和UA程序。该平台,不仅支持FAST的UA编程开发,同时也支持通用APP的开发与运行。 - -\subsection{设备简介} - -OpenBox-S4是一款软硬件全功能可编程网络实验平台的具体型号产品,该产品基于多核CPU加FPGA异构模型的FAST处理架构实现,软件在CPU上使用C语言编程,硬件在FPGA芯片上使用Verilog语言编程。全系统根据FAST架构搭建其软硬件基础运行环境,内部软硬件用户逻辑支持所有FAST架构开发的应用、标准的网络协议栈与通用网络应用。平台软硬件逻辑代码开源免费,支持用户二次开发。 +FAST开源项目的诞生与发展深受斯坦福大学Nick Mckeown教授在NetFPGA项目、OpenFlow项目和P4等项目的影响,其目标是为计算机网络的科研与教学提供一个开源和开放的软硬件全功能可编程交换平台。其主要特点如下: +\begin{enumerate} +\item \textbf{FPGA:}FAST实现的核心载体是可编程FPGA,是用Verilog语言编程实现的硬件功能。FPGA的现场可编程特性为实现用户创新的网络架构、算法、实现机制提供了极大的灵活性,而且可以获得较高的性能,支持在实际网络中部署运行; -\subsection{设备上电检测} -用户拿到设备后,首先做个简单的上电测试,以确保硬件平台可以正常工作。 +\item \textbf{Accelerated:}PGA实现的不是网络处理的全部功能,而是部分需要硬件加速的分组处理功能。FAST的核心是一套软硬件协同的分组处理模型,用户可以通过Verilog编程实现的硬件功能的加速,也可以在现有的FAST硬件平台的CPU上编程实现特定的分组处理功能; -\subsubsection{设备外部接口及其配件说明} -\begin{enumerate} -\item 设备外观与接口,正面如下图所示: - - \begin{figure}[!htp] - \centering - \includegraphics[width=11cm]{f01} - \caption{正面外部接口} - \label{fig:a:ob_f01} - \end{figure} - -\item 设备外观与接口,背面如下图所示: - - \begin{figure}[!htp] - \centering - \includegraphics[width=11cm]{f02} - \caption{背面外部接口} - \label{fig:a:ob_f02} - \end{figure} - -\item 12V-1A电源线,如下图所示: - - \begin{figure}[!htp] - \centering - \includegraphics[width=11cm]{f03} - \caption{设备电源线} - \label{fig:a:ob_f03} - \end{figure} - -\item 串口线,如下图所示: - - \begin{figure}[!htp] - \centering - \includegraphics[width=11cm]{f04} - \caption{设备串口线} - \label{fig:a:ob_f04} - \end{figure} - -\item 设备烧录线,如下图所示: - - \begin{figure}[!htp] - \centering - \includegraphics[width=11cm]{f05} - \caption{设备烧录线} - \label{fig:a:ob_f05} - \end{figure} +\item \textbf{Switching:}AST面向的领域是网络交换领域,支持各种新型交换技术,如软件定义网络(SDN)、时间敏感网络(TSN)、网络安全一体化网络甚至是智能网卡的实现研究,而不是支持以人工智能(AI)为代表的应用加速; +\item \textbf{plaTform:}与目前其他开源项目一样,FAST提供的是一个硬件平台无关的,支持用户通过软硬件编程实现其特定分组处理功能的环境。FAST通过提供标准的规范、开源的平台软硬件实现代码和demo应用,支持用户基于平台进行创新的应用开发和设备原型的快速实现。 \end{enumerate} -\subsubsection{检测准备} +\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 物品准备 - - \begin{table}[!htp] - \small - \centering - \caption{所需物品列表} - \label{tab:a:openbox_items} - \begin{tabular}{|c|c|} \hline - \heiti 测试项 & \heiti 所需物品 \\ \hline - 上电检测 & 一台设备及电源\\ \hline - 串口检测 & 一台设备及电源、一台电脑、一个micro usb 串口线\\ \hline - 管理网口(MGMT) & 一台设备及电源、一台电脑、一个网线\\ \hline - \end{tabular} - \end{table} + \item \textbf{所有网络接口均与FPGA相连;} + +进入交换平台的分组首先送FPGA处理,离开交换平台的分组最后由FPGA发出。这样有两个优点。一是交换平台可精确获取分组接收时间以及控制发送时间,实现类似1588透明时钟的控制,支持时间敏感交换;二是平台可以支持各种新型的分组格式,支持内容中心网络(ICN)等非IP交换。 + \item \textbf{FPGA通过高带宽总线与CPU连接。} + +与传统交换芯片通过低带宽的SPI总线、以太网或是单Lane的PCIE总线与控制CPU连接不同,FAST平台中FPGA通过高带宽的总线与CPU连接,提升软硬件协同分组处理的性能,支持通过CPU软件对数据平面处理功能进行扩展。 \end{enumerate} -\subsubsection{上电检测} -\begin{enumerate} -\item 连接电源,将电源开关拨到ON(向右); -\item 观察电源指示灯变化情况; -\item 电源开关拨到ON(向右)后,CFG电源指示灯会亮一下; - - \begin{figure}[!htp] - \centering - \includegraphics[width=11cm]{f06} - \caption{电源指示灯(刚接入电源)} - \label{fig:a:ob_f06} - \end{figure} -\item CFG电源指示灯过几秒后就灭了; - -\begin{figure}[!htp] + +FAST交换平台的实现架构如图\ref{fig:a:ob_FAST-Ac}所示。 +\begin{figure}[H] \centering -\includegraphics[width=11cm]{f07} -\caption{电源指示灯(系统配置)} -\label{fig:a:ob_f07} +\includegraphics[width=11cm]{FAST-Ac} +\caption{FAST平台实现架构图} +\label{fig:a:ob_FAST-Ac} \end{figure} -\item 等待15秒左右,RUN电源指示灯常亮。 +平台硬件逻辑分为两部分:一部分是平台相关的外围接口和与平台CPU互联的高速总线接口逻辑,统称为FPGA OS。其主要实现平台相关,交换功能无关的分组处理,如网络接口的接收与发送、CPU的DMA引擎以及FPGA片外或片内实现的TCAM查表功能等;另一部分是用户模块逻辑UM,其主要实现交换相关的网络功能,每一个小的流水线模块称为硬件应用(HA),如分组解析、关键字提取、转发查表、动作执行和输出控制等。用户可在UM模块中扩展HA流水线实现不同的分组处理功能。 -\begin{figure}[!htp] +平台软件逻辑分为三部分:一是平台相关驱动,由厂商实现其具体平台的硬件数据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]{f08} -\caption{电源指示灯(系统运行)} -\label{fig:a:ob_f08} +\includegraphics[width=11cm]{FAST-Pkt-Proc} +\caption{FAST分组处理流水线排列图} +\label{fig:a:ob_FAST-Pkt-Proc} \end{figure} -\end{enumerate} -\subsubsection{串口检测} +\subsection{平台应用} +由于FAST平台架构的特征,其应用开发可以是软件开发、硬件开发或软硬件结合开发,具体根据平台应用场景和用户具体需求而定。 +FAST项目自创立至今,已经在传统网络应用、工业互联网和创新网络架构设计等方面得到了广泛应用。通过在不同领域的应用积累了大量网络教学实验案例,如网络协议分析与编程、协议攻击与防护、路由器系统设计与实现、SDN交换机设计与实现、网络高精度测量、时间敏感网络设计与实现、高性能网络IO和网络应用的硬件卸载加速等。 + +\subsection{平台使用} +FAST是一个与平台无关的开源架构,根据FAST原理和规范实现的CPU+FPGA异构网络设备形态都属于FAST平台。FAST平台的CPU支持国产与非国产多种型号,FPGA也可以支持国产和非国产的多种型号。下面以下湖南新实的一款专业网络实验教学设备型号OpenBox-S4为例,说明如何使用FAST平台。 +\subsubsection{搭建环境} +使用FAST平台开发和验证网络功能,需要搭建FAST环境。FAST环境包括以下三个部分: \begin{enumerate} -\item 确保micro usb串口线连接到设备上,并且设备已上电; -\item 确保调试电脑已安装了PUTTY串口终端工具,PUTTY软件包以及详细安装教程请自行搜索; -\item 确保调试电脑已安装了CP2102驱动,CP2102驱动包以及详细安装教程请自行搜索; -\item 电脑的设备管理器,查看设备的COM口数值。(如下图,设备的COM口数值为COM3,不同的电脑显示的COM口数值会不同)。 +\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}[!htp] +\begin{figure}[H] \centering -\includegraphics[width=11cm]{f09} -\caption{查看设备的COM口数值} -\label{fig:a:ob_f09} +\includegraphics[width=11cm]{f02} +\caption{OpenBox-S4设备后端图} +\label{fig:a:ob_f02} \end{figure} -\item 打开PUTTY工具界面; +在实验过程中,测试主机设备通常连接在设备的数据接口位置,用户操作管理设备时通过管理网口或串口连接。 + +\subsubsection{登录设备平台} +\begin{enumerate} +\item 串口方式 \begin{enumerate} +\item 连接串口线; +设备使用标准USB口和Micro USB接口的线作为串口连接线,标准USB口连接在用户操作设备上,Mirco USB接口与设备对应串口连接。 +\item 打开并配置串口工具。 -\item 先点击右边Connection type位置的serial选项; -\begin{figure}[!htp] -\centering -\includegraphics[width=11cm]{f10} -\caption{putty软件界面} -\label{fig:a:ob_f10} -\end{figure} -\item 点击左边category栏的 serial标签; -\item 在Serial line to connect to 栏,填写设备管理器中看到的COM数值; -\item 在Speed栏,填写串口的波特率为115200; -\item 在 Data bits栏。填写数据位宽为8; -\item 在Flow control栏,选择None。 -\item 如下所示,调试电脑的COM数值为COM3,所以serial line栏填写为COM3。 -(不同电脑的COM数值可能不同,请填写实际的COM数值) - -\begin{figure}[!htp] +在用户操作设备上打开串口工具,配置好相应串口参数后打开串口,即可通过串口管理设备。以putty为例,其配置参数如图\ref{fig:a:ob_f11}所示: +\begin{figure}[H] \centering \includegraphics[width=11cm]{f11} -\caption{putty软件串口配置参数} +\caption{串口工具参数配置图} \label{fig:a:ob_f11} \end{figure} \end{enumerate} -\item 点击 open ,进入设备系统,则串口测试OK。 -\end{enumerate} - -\subsubsection{管理网口检测} +\item 管理网口方式 \begin{enumerate} -\item 使用一根网线,将调试电脑与设备的管理网口连接; -\item 设备管理网口的默认ip地址为:192.168.50.5,所以需要将调试电脑的ip地址设置成与设备管理网口的ip地址在同一个网段下(也就是192.168.50.0网段); -\item 在调试电脑的 控制面板->网络和Internet->网络设备中。点击以太网->属性->internet协议版本4(TCP/IPV4),进行ip地址的配置。如下所示: +\item 连接网线; + +使用一根RJ45端口的网线,分别连接在用户操作主机端与设备的管理网口(MGMT),网口出现指示灯闪烁说明连接正常。 +\item 配置主机端IP信息。 -\begin{figure}[!htp] +通过网连接连接设备,必须确保用户操作主机与设备管理网口在相同的网段,如不记得管理网口的IP,可以通过串口方式查看。设备默认网段为192.168.50.0网段,故用户操作主机的IP地址配置信息参考如图\ref{fig:a:ob_f12}所示: +\begin{figure}[H] \centering \includegraphics[width=11cm]{f12} -\caption{配置以太网的IP地址} +\caption{网口连接的主机IP配置图} \label{fig:a:ob_f12} \end{figure} -\item 在调试电脑的 控制面板>系统和安全>Windows Defender 防火墙>自定义设置中。关闭调试电脑的防火墙功能; - -\begin{figure}[!htp] -\centering -\includegraphics[width=11cm]{f13} -\caption{关闭防火墙功能} -\label{fig:a:ob_f13} -\end{figure} -\item 在调试电脑的CMD终端下,使用ping命令能正常与管理网口通讯,则说明管理网络工作正常。 - -\begin{figure}[!htp] -\centering -\includegraphics[width=11cm]{f14} -\caption{ping命令测试网络连通性} -\label{fig:a:ob_f14} -\end{figure} - \end{enumerate} - - -\subsection{搭建环境} +\end{enumerate} \subsubsection{测试二层交换功能} \begin{enumerate} \item 搭建二层交换拓扑 -\begin{figure}[!htp] + +二层交换实验的两台测试主机可以随意连接到设备的数据接口位置(网口0到网口4均可)。测试主机的IP地址配置及连接拓扑如图\ref{fig:a:ob_f15}所示: +\begin{figure}[H] \centering \includegraphics[width=11cm]{f15} \caption{二层交换连接拓扑示意图} \label{fig:a:ob_f15} \end{figure} -其中主机A的IP地址设置为192.168.1.111,主机B的IP地址设置为192.168.1.119。 \item 在OpenBox-S4上运行二层交换程序 - 在串口登录界面或网络登录界面输入命令:l2switch,如下图所示: + 用串口或网线连接用户操作主机与设备,通过串口登录界面或网络登录界面控制设备,在界面终端输入命令:l2switch,如图\ref{fig:a:ob_f16}所示: -\begin{figure}[!htp] +\begin{figure}[H] \centering \includegraphics[width=11cm]{f16} \caption{二层交换命令启动输出图} @@ -217,9 +148,9 @@ OpenBox-S4是一款软硬件全功能可编程网络实验平台的具体型号 \item 在PC两端进行PING测试 -在主机B的CMD (命令提示符) 程序中。输入并执行命令ping 192.168.1.111 即可测试两台主机之间的联通性。测试结果如下所示: +在主机B的CMD (命令提示符) 程序中。输入并执行命令ping 192.168.1.111 即可测试两台主机之间的联通性。测试结果如图\ref{fig:a:ob_f17}所示: -\begin{figure}[!htp] +\begin{figure}[H] \centering \includegraphics[width=11cm]{f17} \caption{二端主机PING通结果图(二层交换)} @@ -233,19 +164,20 @@ OpenBox-S4是一款软硬件全功能可编程网络实验平台的具体型号 \begin{enumerate} \item 搭建三层路由拓扑 -\begin{figure}[!htp] + +三层路由实验的两台测试主机要根据主机端IP地址配置和网关配置,分别连接到主机对应网关的接口上。连错线会导致实现失败。测试主机的IP地址配置及连接拓扑如图\ref{fig:a:ob_f18}所示: +\begin{figure}[H] \centering \includegraphics[width=11cm]{f18} \caption{三层路由拓扑} \label{fig:a:ob_f18} \end{figure} -其中主机A的IP地址设置为192.168.0.111,主机B的IP地址设置为192.168.2.119。 \item OpenBox-S4上运行三层路由程序 - 在串口登录界面或网络登录界面输入命令:l3router,如下图所示: + 用串口或网线连接用户操作主机与设备,通过串口登录界面或网络登录界面控制设备,在界面终端输入命令:l3router,如图\ref{fig:a:ob_f19}所示: -\begin{figure}[!htp] +\begin{figure}[H] \centering \includegraphics[width=11cm]{f19} \caption{运行三层路由程序} @@ -254,9 +186,9 @@ OpenBox-S4是一款软硬件全功能可编程网络实验平台的具体型号 \item 在PC两端进行PING测试 -在主机A的CMD (命令提示符) 程序中。输入并执行命令ping 192.168.2.119 即可测试跨路由功能。测试结果如下所示: +在主机A的CMD (命令提示符) 程序中。输入并执行命令ping 192.168.2.119 即可测试跨路由功能。测试结果如图\ref{fig:a:ob_f20}所示: -\begin{figure}[!htp] +\begin{figure}[H] \centering \includegraphics[width=11cm]{f20} \caption{端主机PING通结果图(三层路由)} @@ -270,30 +202,31 @@ OpenBox-S4是一款软硬件全功能可编程网络实验平台的具体型号 \begin{enumerate} \item 搭建SDN交换拓扑 -\begin{figure}[!htp] + +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} -其中主机A的IP地址设置为192.168.2.111,主机B的IP地址设置为192.168.2.119。 -\item 在192.168.1.3的主机中启动SDN控制器 +\item 在SDN控制器主机中启动SDN控制器 - 在终端命令行下输入 java –jar target/floodlight.jar,即启动floodlight控制器。如下所示: + 在终端命令行下输入 java –jar target/floodlight.jar,即启动floodlight控制器。如图\ref{fig:a:ob_f22}所示: -\begin{figure}[!htp] +\begin{figure}[H] \centering \includegraphics[width=11cm]{f22} \caption{启动floodlight控制器} \label{fig:a:ob_f22} \end{figure} -\item 在可编程网络平台上运行SDN交换程序 +\item 在设备平台上运行SDN交换程序 - 在串口登录界面或网络登录界面输入命令:xofp -4 192.168.1.3 –i obx0,obx1,obx2,obx3 , 连接Floodlight控制器。如下所示: + 在串口登录界面或网络登录界面输入命令:xofp -4 192.168.1.3 –i obx0,obx1,obx2,obx3 , 连接Floodlight控制器。如图\ref{fig:a:ob_f23}所示: -\begin{figure}[!htp] +\begin{figure}[H] \centering \includegraphics[width=11cm]{f23} \caption{运行SDN交换程序} @@ -302,9 +235,9 @@ OpenBox-S4是一款软硬件全功能可编程网络实验平台的具体型号 \item 访问floodlight控制器首页 - 在控制器主机打开浏览器,在浏览器地址栏输入:127.0.0.1:8080/ui/index.html ,访问floodlight控制器首页。界面如下所示: + 在控制器主机打开浏览器,在浏览器地址栏输入:127.0.0.1:8080/ui/index.html ,访问floodlight控制器首页。界面如图\ref{fig:a:ob_f24}所示: -\begin{figure}[!htp] +\begin{figure}[H] \centering \includegraphics[width=11cm]{f24} \caption{访问floodlight控制器首页} @@ -313,9 +246,9 @@ OpenBox-S4是一款软硬件全功能可编程网络实验平台的具体型号 \item 在PC两端进行PING测试 -在主机A的CMD (命令提示符) 程序中。输入并执行命令ping 192.168.2.119 即可测试两台主机之间的联通性。测试结果如下所示: +在主机A的CMD (命令提示符) 程序中。输入并执行命令ping 192.168.2.119 即可测试两台主机之间的联通性。测试结果如图\ref{fig:a:ob_f25}所示: -\begin{figure}[!htp] +\begin{figure}[H] \centering \includegraphics[width=11cm]{f25} \caption{端主机PING通结果图(SDN交换)} @@ -324,5 +257,12 @@ OpenBox-S4是一款软硬件全功能可编程网络实验平台的具体型号 \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 diff --git a/data/ch_router-openbox/preface.tex b/data/ch_router-openbox/preface.tex index e6c8f10..81eb2eb 100644 --- a/data/ch_router-openbox/preface.tex +++ b/data/ch_router-openbox/preface.tex @@ -5,7 +5,6 @@ 本单元实验使学生能初步使用可编程网络设备开发平台进行路由器基本功能的设计与实现,通过程序来实现路由器中最基本的三个功能:包括二层交换功能、三层路由功能及组网功能。深入理解路由器的基本工作原理与分组处理流程,从而培养学生对网络设备使用和研发的能力。 -可编程网络设备开发平台是一款基于FAST架构的软硬件(软件在CPU上使用C语言编程,硬件在FPGA芯片上使用Verilog语言编程)全可编程的网络实验教学平台,平台的软硬件逻辑代码开源免费,支持用户二次开发。其基本使用方法与编程开发方法见附录\ref{app:openbox}:《可编程网络平台-操作手册》 -和附录\ref{app:fast}:《FAST编程-入门指南》。 -可编程网络设备开发平台的具体设备型号为OpenBox-S4,在案例文档中简称为“可编程网络平台”,在实验图中的图标LOGO为FAST,节点名称为OpenBox-S4。 +可编程网络设备开发平台是一款基于FAST架构的软硬件(软件在CPU上使用C语言编程,硬件在FPGA芯片上使用Verilog语言编程)全可编程的网络实验教学平台,平台的软硬件逻辑代码开源免费,支持用户二次开发。其基本使用方法见附录\ref{app:openbox}:《FAST平台介绍与操作说明手册》。 +基于FAST架构的可编程网络设备开发平台的具体设备型号为OpenBox-S4,在案例文档中简称为“可编程网络平台”,在实验图中的图标LOGO为FAST,节点名称为OpenBox-S4。 diff --git a/data/ch_router-openbox/sec_networking.tex b/data/ch_router-openbox/sec_networking.tex index de453ed..17035ba 100644 --- a/data/ch_router-openbox/sec_networking.tex +++ b/data/ch_router-openbox/sec_networking.tex @@ -64,8 +64,9 @@ \end{code} \item Quagga启动配置 - \begin{code}[console] - root@HNXS-FAST:/home/hnxs# vim /etc/quagga/daemons + + 修改Quagga的启动模块配置文件:/etc/quagga/daemons,主要内容如下: + \begin{code}[text] zebra=yes bgpd=no ospfd= yes @@ -79,93 +80,43 @@ 将上述文件内容中的3个no修改为yes,表示启动该功能模块。 \item RIP协议启动配置 - \begin{code}[console] - root@HNXS:/home/hnxs# vim /etc/quagga/ripd.conf - \end{code} - - ripd.conf配置文件示例如下: + + 修改RIP协议模块配置文件:/etc/quagga/ripd.conf,在空行处添加网段信息与邻居信息。原文件其他所有内容均无需修改。ripd.conf添加内容如下: \begin{code}[text] - ! -*- rip -*- - ! - ! RIPd sample configuration file - ! - ! $Id: ripd.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $ - ! - hostname ripd - password zebra - ! - ! debug rip events - ! debug rip packet - ! - router rip - ! network 11.0.0.0/8 - ! network eth0 - ! route 10.0.0.0/8 - ! distribute-list private-only in eth0 + network obx0 network obx1 network obx2 network obx3 neighbor 192.168.3.1 - ! - !access-list private-only permit 10.0.0.0/8 - !access-list private-only deny any - ! - !log file /var/log/quagga/ripd.log - ! - log stdout + \end{code} 上述文件是S4-A路由器的rip配置文件,另一台配置文件与上述基本相同,只是其neighbor的地址是192.168.3.2。这两台路由器是通过S4-A的一个端口(IP为192.168.3.1,故其neighbor为192.168.3.2)和S4-B的一个端口(IP为192.168.3.2)连接。 \item OSPF协议启动配置 - \begin{code}[console] - root@HNXS:/home/hnxs# vim /etc/quagga/ospfd.conf - \end{code} - - ospfd.conf配置文件示例如下: + + 修改OSPF协议模块配置文件:/etc/quagga/ospfd.conf,添加网段与ID信息。原文件其他所有内容均无需修改。ospfd.conf添加内容如下: \begin{code}[text] - ! -*- ospf -*- - ! - ! OSPFd sample configuration file - ! - ! - hostname ospfd - password zebra - !enable password please-set-at-here - ! - !router ospf - ! network 192.168.1.0/24 area 0 - ! + ospf router-id 192.168.3.1 network 192.168.0.0/24 area 0 network 192.168.1.0/24 area 0 network 192.168.2.0/24 area 0 network 192.168.3.0/24 area 0 - log stdout + \end{code} - 上述为S4-A路由器的配置文件,另一台路由器配置文件为: + 上述为S4-A路由器的配置文件,另一台路由器配置文件添加内容如下: \begin{code}[text] - ! -*- ospf -*- - ! - ! OSPFd sample configuration file - ! - ! - hostname ospfd - password zebra - !enable password please-set-at-here - ! - !router ospf - ! network 192.168.1.0/24 area 0 - ! + ospf router-id 192.168.3.2 network 192.168.4.0/24 area 0 network 192.168.5.0/24 area 0 network 192.168.6.0/24 area 0 network 192.168.3.0/24 area 0 - log stdout + \end{code} \end{itemize} @@ -182,6 +133,8 @@ \begin{code}[console] root@HNXS-FAST:/mnt/openbox# route -n + \end{code} + \begin{code}[text] Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 obx0 diff --git a/data/ch_router-openbox/sec_router.tex b/data/ch_router-openbox/sec_router.tex index a3f0aa4..5e8f64e 100644 --- a/data/ch_router-openbox/sec_router.tex +++ b/data/ch_router-openbox/sec_router.tex @@ -24,7 +24,7 @@ \subsubsection{系统路由验证} -请参考附录\ref{app:openbox}:《可编程网络平台-操作手册》完成。 +请参考附录\ref{app:openbox}:《FAST平台介绍与操作说明手册》完成。 \subsubsection{三层路由器工作原理} 三层路由器工作于OSI模型的第3层(网络层),根据网络层中的目的IP地址进行查表,获得分组转发的下一跳输出端口及下一跳的IP地址。更新IP层的ttl值与checksum值,并在输出端口对二层数据进行重新封装二层数据后转发。路由器还具备ARP响应与请求功能,支持响应请求自己IP的MAC信息与请求路由下一跳IP的MAC信息。 @@ -64,11 +64,12 @@ \subsubsection{系统路由验证} \begin{enumerate} - \item 登录可编程网络平台,启动系统自带三层路由器命令,系统输出如下信息说明已正常启动且进入工作模式。 + \item 登录可编程网络平台,启动系统自带三层路由器命令,系统输出如下信息说明已正常启动且进入工作模式,已省略部分模块输出信息。 \begin{code}[console] root@HNXS-FAST:/mnt/openbox# l3router - 部分模块输出信息省略… + \end{code} + \begin{code}[text] fastU->REG Version:20180827,OpenBox HW Version:2030200722 FAST UA REG->from pid:907,state:21,mid:132 fastU->Register UA to FAST Kernel! Wait Reply...... diff --git a/data/ch_router-openbox/sec_switch.tex b/data/ch_router-openbox/sec_switch.tex index 6c38d6f..f0b120c 100644 --- a/data/ch_router-openbox/sec_switch.tex +++ b/data/ch_router-openbox/sec_switch.tex @@ -24,7 +24,7 @@ \subsubsection{平台基本使用} -请参考附录\ref{app:openbox}:《可编程网络平台-操作手册》完成。 +请参考附录\ref{app:openbox}:《FAST平台介绍与操作说明手册》完成。 \subsubsection{二层交换工作原理} @@ -66,10 +66,12 @@ \subsubsection{平台搭建与系统交换验证} \begin{enumerate} - \item 请参考附录\ref{app:openbox}:《可编程网络平台-操作手册》完成; + \item 请参考附录\ref{app:openbox}:《FAST平台介绍与操作说明手册》完成; \item 在串口登录界面输入如下命令,启动系统自带二层交换机命令。系统输出如下信息说明已正常启动且进入工作模式。 \begin{code}[console] root@HNXS-FAST:/mnt/openbox# l2switch + \end{code} + \begin{code}[text] fastU->REG Version:20180827,OpenBox HW Version:2030200722 FAST UA REG->from pid:902,state:21,mid:129 fastU->Register UA to FAST Kernel! Wait Reply...... @@ -127,7 +129,7 @@ \begin{enumerate} \item 运行自己的二层交换机程序,验证交换机的功能; - \begin{code}[console] + \begin{code}[text] root@HNXS-FAST:/home/hnxs/l2switch# ./user_l2switch fastU->REG Version:20180827,OpenBox HW Version:2030200722 FAST UA REG->from pid:902,state:21,mid:129 @@ -137,12 +139,12 @@ Create nm08_mac_aging thread OK! aging[0]->invalid mac:0 fastU->fast_ua_recv...... - 后面打印以学生代码为准…… + // 后面打印以学生代码为准…… \end{code} 运行当前目录下用户的可执行文件,必须在前面加上”./” \item 二层交换机正常工作后,显示如下信息; - \begin{code}[console] + \begin{code}[text] root@HNXS-FAST:/mnt/openbox# l2switch fastU->REG Version:20180827,OpenBox HW Version:2030200722 FAST UA REG->from pid:902,state:21,mid:129 diff --git a/data/ch_sdn-openbox/sec_ns.tex b/data/ch_sdn-openbox/sec_ns.tex index 1aca305..261c473 100644 --- a/data/ch_sdn-openbox/sec_ns.tex +++ b/data/ch_sdn-openbox/sec_ns.tex @@ -92,6 +92,8 @@ \item 测试测量平台与被测量主机间的连接性,在测量平台\texttt{ping 192.168.1.111}; \begin{code}[console] root@HNXS-FAST:/home/hnxs/ams# ping 192.168.1.111 + \end{code} + \begin{code}[text] PING 192.168.1.111 (192.168.1.111) 56(84) bytes of data. 64 bytes from 192.168.1.111: icmp_seq=1 ttl=64 time=1.57 ms 64 bytes from 192.168.1.111: icmp_seq=2 ttl=64 time=1.60 ms @@ -105,6 +107,8 @@ \item 运行AMS测量命令,测量服务器RTT的命令如下: \begin{code}[console] root@HNXS-FAST:/home/hnxs/ams# ams 192.168.1.111 5 70 1000000000 + \end{code} + \begin{code}[text] fastU->REG Version:20180827,OpenBox HW Version:2030200722 FAST UA REG->from pid:1068,state:21,mid:131 fastU->Register UA to FAST Kernel! Wait Reply...... @@ -129,6 +133,8 @@ \item 测试两个测量平台之间的实时网络带宽; \begin{code}[console] root@HNXS-FAST:/home/hnxs/ams# ams 192.168.1.111 5 100 0 + \end{code} + \begin{code}[text] fastU->REG Version:20180827,OpenBox HW Version:2030200722 FAST UA REG->from pid:1068,state:21,mid:131 fastU->Register UA to FAST Kernel! Wait Reply...... @@ -141,7 +147,6 @@ 测试之前,要在此链路中间增加一个背景流,使用iperf的UDP流大小为600Mbps, 系统给测试主机发送5个100字节大小的ping报文出去,默认间隔为1秒。 - \item 观察带宽测试结果; \begin{code}[text] AMS ID PKT_SIZE BW(bps) @@ -155,6 +160,8 @@ \item 测量网线传输延时; \begin{code}[console] root@HNXS-FAST:/home/hnxs/ams# ams + \end{code} + \begin{code}[text] fastU->REG Version:20180827,OpenBox HW Version:2030200722 FAST UA REG->from pid:1068,state:21,mid:131 fastU->Register UA to FAST Kernel! Wait Reply...... diff --git a/data/ch_sdn-openbox/sec_sdn.tex b/data/ch_sdn-openbox/sec_sdn.tex index 36d7810..e692e7f 100644 --- a/data/ch_sdn-openbox/sec_sdn.tex +++ b/data/ch_sdn-openbox/sec_sdn.tex @@ -53,8 +53,7 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层 并发送OFP\_HELLO消息用以确认双方都支持的OFP协议版本信息; \item \textbf{查询或设置数据:} 控制器通过OpenFlow的具体消息协议查询或设置交换机其他相关功能的数据, - 如OFPT\_HELLO、OFPT\_ECHO\_REQUEST、OFPT\_PACKET\_IN、OFPT\_PACKET\_OUT、 - OFPT\_FLOW\_MOD、OFPT\_PORT\_MOD、OFPMP\_DESC、OFPMP\_FLOW、OFPMP\_PORT\_STATS等; + 如OFPT\_HELLO、OFPT\_ECHO\_REQUEST、OFPT\_PACKET\_IN、OFPMP\_DESC、OFPT\_PACKET\_OUT、OFPT\_FLOW\_MOD、OFPT\_PORT\_MOD、OFPMP\_FLOW、OFPMP\_PORT\_STATS等; \item \textbf{处理转发分组:}当交换机接收到一个数据转发分组时, 提取分组数据中的相关字段组成查表关键字,然后在本地进行流表匹配。 如果匹配成功,则根据流表的动作处理该分组,如从其他端口转发出去; @@ -78,8 +77,8 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层 \begin{itemize} \item 可编程网络平台一个,测试主机两台, - SDN控制器(安装SDN控制器软件Floodlight)一台。 - 网络配置及连接拓扑如图\ref{fig:c:sdn-ob_sdn-topo}所示; + SDN控制器(安装SDN控制器软件Floodlight)一台。控制器主机没有两个网口时,中间加一个普通交换机; + \item 测试主机与控制器主机的网络配置及连接拓扑如图\ref{fig:c:sdn-ob_sdn-topo}所示; \item 串口线一根,网线三根; \item SDN交换机框架开发源代码、流表配置Python脚本。 \end{itemize} @@ -96,7 +95,7 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层 \subsubsection{编译运行SDN交换机,验证交换机基本功能;} -请参考附录\ref{app:openbox}:《可编程网络平台-操作手册》完成。 +请参考附录\ref{app:openbox}:《FAST平台介绍与操作说明手册》完成。 \subsubsection{基于SDN交换机源码,选择实现自己的协议功能;} @@ -107,7 +106,6 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层 { int oftype = ofpbuf->header.type; - SHOW_FUN(0); LOG_DBG("ofpbuf->header.type=%d\n",ofpbuf->header.type); switch(oftype) { @@ -141,6 +139,8 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层 \item 运行SDN交换机,交换机正常工作后输出如下: \begin{code}[console] root@HNXS-FAST:/home/hnxs/sdn# ./ user_openflow -4 192.168.1.3 -i obx0,obx1,obx2,obx3 + \end{code} + \begin{code}[text] fastU->REG Version:20180827,OpenBox HW Version:2030200722 port_name:eth0,port:0 port_name:obx0,port:0 @@ -163,7 +163,7 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层 \end{code} \item 查看控制器界面基本信息,在浏览器打开控制器WEB网站http://192.168.1.3/ui/index.html,控制界面如图\ref{fig:c:sdn-ob_sdn-main}所示: - \begin{figure}[!htp] + \begin{figure}[H] \centering \includegraphics[width=12cm]{sdn-main} \caption{SDN主界面信息} @@ -171,7 +171,7 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层 \end{figure} \item 查看连接交换机信息,如图\ref{fig:c:sdn-ob_sdn-switch}所示: - \begin{figure}[!htp] + \begin{figure}[H] \centering \includegraphics[width=12cm]{sdn-switch} \caption{SDN交换机信息} @@ -179,7 +179,7 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层 \end{figure} \item 查看连接测试主机信息,SDN主机及连接信息如图\ref{fig:c:sdn-ob_sdn-host}所示: - \begin{figure}[!htp] + \begin{figure}[H] \centering \includegraphics[width=12cm]{sdn-host} \caption{SDN主机信息} @@ -187,7 +187,7 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层 \end{figure} \item 查看端口状态与计数信息与流表信息,端口与流表信息如图\ref{fig:c:sdn-ob_port-flowtable}所示: - \begin{figure}[!htp] + \begin{figure}[H] \centering \includegraphics[width=12cm]{port-flowtable} \caption{端口状态与流表计数信息} @@ -195,7 +195,7 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层 \end{figure} \item 查看网络拓扑信息,网络拓扑信息如图\ref{fig:c:sdn-ob_sdn-test-topo}所示: - \begin{figure}[!htp] + \begin{figure}[H] \centering \includegraphics[width=12cm]{sdn-test-topo} \caption{SDN网络拓扑信息} @@ -206,7 +206,7 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层 \subsubsection{在测试主机ping的前后,分别观察流表变化;} \begin{enumerate} \item ping之前的流表信息为空,如图\ref{fig:c:sdn-ob_empty-flowtable}所示: - \begin{figure}[!htp] + \begin{figure}[H] \centering \includegraphics[width=12cm]{empty-flowtable} \caption{空流表信息} @@ -214,7 +214,7 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层 \end{figure} \item ping之后的流表信息,如图\ref{fig:c:sdn-ob_flowtable-ping}所示: - \begin{figure}[!htp] + \begin{figure}[H] \centering \includegraphics[width=12cm]{flowtable-ping} \caption{ping通后流表信息} @@ -227,8 +227,10 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层 \subsubsection{使用REST API接口查询交换机的相关功能数据;} \begin{enumerate} \item 查询交换机基本信息 + + 使用curl命令和对应的REST API地址查询交换机的对应信息。在命令行终端输入如下命令,即可查询返回交换机的基本信息数据内容。 \begin{code}[console] - # curl http://192.168.1.3:8080/wm/core/switch/00:00:00:0a:00:00:08:01/desc/json + # curl http://192.168.1.3:8080/wm/core/switch/all/desc/json \end{code} \begin{code}[json] { @@ -244,9 +246,9 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层 \end{code} \item 查询端口计数信息 \begin{code}[console] - # curl http://192.168.1.3:8080/wm/core/switch/00:00:00:0a:00:00:08:01/port/json + # curl http://192.168.1.3:8080/wm/core/switch/all/port/json \end{code} - \begin{code}[javascript] + \begin{code}[json] { "port_reply": [{ "version": "OF_13", @@ -267,41 +269,20 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层 "duration_sec": "4294966827", "duration_nsec": "573987" }, - // 此处省略其他多个类似端口的统计信息 + ] }] - } + } \end{code} + 端口计数统计信息返回的内容中只摘取显示了一个端口的数据显示,其他端口数据内容已经省略。 + \item 查询交换机流表信息 \begin{code}[console] - # curl http://192.168.1.3:8080/wm/core/switch/00:00:00:0a:00:00:08:01/flow/json + # curl http://192.168.1.3:8080/wm/core/switch/all/flow/json \end{code} - \begin{code}[javascript] + \begin{code}[json] { "flows": [{ - "version": "OF_13", - "cookie": "9007199254740992", - "table_id": "0x0", - "packet_count": "5", - "byte_count": "571392", - "duration_sec": "0", - "duration_nsec": "0", - "priority": "1", - "idle_timeout_s": "5", - "hard_timeout_s": "0", - "flags": [], - "match": { - "in_port": "1", - "eth_dst": "b8:27:eb:c1:d1:39", - "eth_src": "b8:27:eb:d8:83:20", - "eth_type": "0x806" - }, - "instructions": { - "instruction_apply_actions": { - "actions": "output=3" - } - } - }, { "version": "OF_13", "cookie": "9007199271518208", "table_id": "0x0", @@ -326,57 +307,21 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层 "actions": "output=1" } } - }, - // 此处省略其他几条流表的信息 + }, ] } \end{code} + 交换机流表信息返回的内容中只摘取显示了一条流表的数据显示,其他流表数据内容已经省略。 \end{enumerate} \subsubsection{修改Python脚本,手动配置流表,观察测试主机的通信变化;} \begin{enumerate} \item 修改流表脚本,使其转发端口错误; - \begin{code}[console] - #vim openflow_flow-test.py - \end{code} - \begin{code}[python] - import httplib - import json - - class StaticFlowPusher(object): - def __init__(self, server): - self.server = server - - def get(self, data): - ret = self.rest_call({}, 'GET') - return json.loads(ret[2]) - - def set(self, data): - ret = self.rest_call(data, 'POST') - return ret[0] == 200 - - def remove(self, objtype, data): - ret = self.rest_call(data, 'DELETE') - return ret[0] == 200 - - def rest_call(self, data, action): - path = '/wm/staticflowpusher/json' - headers = { - 'Content-type': 'application/json', - 'Accept': 'application/json', - } - body = json.dumps(data) - conn = httplib.HTTPConnection(self.server, 8080) - conn.request(action, path, body, headers) - response = conn.getresponse() - ret = (response.status, response.reason, response.read()) - print ret - conn.close() - return ret - - pusher = StaticFlowPusher('192.168.1.3') + +修改openflow\_flow-test.py,主要修改其流表定义内容,其他位置代码无需修改。流表定义内容如下: + \begin{code}[python] flowbe0 = { 'switch':"00:00:00:0a:00:00:08:01", "table":"0", @@ -406,10 +351,7 @@ SDN将传统的紧耦合网络设备拆分成了应用、控制和转发三层 "ipv4_src":"192.168.2.119", #sip "ipv4_dst":"192.168.2.111", #dip "actions":"output=2" #执行动作,输出端口为2 - } - - pusher.set(flowbe0) - pusher.set(flowbe1) + } \end{code} \item 重启SDN控制器,并停止测试主机的ping操作; \item 配置用户流表,脚本执行命令如下: diff --git a/data/ch_sdn-openbox/sec_topo.tex b/data/ch_sdn-openbox/sec_topo.tex index 20035f4..8b5d4ad 100644 --- a/data/ch_sdn-openbox/sec_topo.tex +++ b/data/ch_sdn-openbox/sec_topo.tex @@ -71,7 +71,7 @@ SDN交换机使用LLDP链路探测协议主要是通过PACKET\_OUT消息发送LL \item SDN交换机框架源码。 \end{itemize} -\begin{figure}[!ht] +\begin{figure}[H] \centering \includegraphics[width=10cm]{openflow-topo} \caption{OpenFlow拓扑测量实验拓扑图} @@ -84,7 +84,7 @@ SDN交换机使用LLDP链路探测协议主要是通过PACKET\_OUT消息发送LL \begin{enumerate} \item 运行SDN交换机; - 请参考附录\ref{app:openbox}:《可编程网络平台-操作手册》完成。 + 请参考附录\ref{app:openbox}:《FAST平台介绍与操作说明手册》完成。 \item 基于SDN交换机开源代码,在端口分组接收回调函数中添加相应逻辑; \begin{code}[c] int port_recv_callback(int inport,struct fast_packet *pkt,int pkt_len)