




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 这是我在学习中做的一个笔记文档,仅供大家参考 目录 目录 1 第一章 背景 2 第二章 理论基础 3 2.1 软件定义网络 SDN.3 2.2 openflow 网络架构 4 2.2.1 openflow 交换机 .4 2.2.2 openflow 控制器 8 2.2.3 openflow 虚拟化 8 2.3 安全通道 .9 2.3.1 OF 协议 .9 2.3.2 建立连接 10 2.3.3 连接中断 11 2.3.4 加密 11 2.3.5 生成树 11 第三章 实验环境搭建 11 3.1 安装 open vswitch 12 3.1.1 安装 KVM .12 3.1.2 安装 Openvswitch13 3.1.3 配置网桥 14 3.2 安装 NOX 网络操作系统及 GUI15 3.2.1 安装 NOX 15 3.2.2 安装 NOX-GUI16 3.3 环境测试 .16 3.1.1 总体拓扑图展示 16 3.3.2 运行 controller .16 3.3.3 配置 open vswitch .17 3.3.4 测试 open switch 与 controller 是否连通 18 3.3.5 启动 GUI 监测 .19 第四章 Open Flow 分析 .19 4.1 重要的数据结构 .19 4.1.1 of 协议头 19 4.1.2 交换机端口状态 .21 4.1.3 流匹配结构 21 4.1.4 行为结构 22 4.1.5 流表操作 .22 2 4.1.6 表统计信息 23 4.1.7 端口统计 23 4.1.8 数据包进入 24 4.1.9 发送数据包 24 4.1.10 流表删除 25 4.2 openflow 设备定义以及基本操作 25 4.3 OpenFow 数据通路分析 .28 第五章 NOX 分析 .30 5.1 事件 .30 5.1.1 事件概念 30 5.1.2 核心事件列表 30 5.2 组件 .31 5.2.1 组件的概念 31 5.2.2 基于 python 的组件实现原理 .31 5.2.3 流表创建实现原理 32 5.2.4 组件的基本架构 32 第六章 python 组件实例 33 6.1 实例一解析 packet_in 数据包 33 6.2 实例二数据通路重定向 33 第七章 GUI 组件实例 .36 7.1 GUI 简介 .36 7.2 NOX-GUI 实现原理 36 7.2.1 SNMP 协议简介 .36 7.2.2 open vswitch SNMP 实现 .36 7.2.3 NOX SNMP 实现 36 第一章 背景 斯坦福大学的研究者于 2008 年提出 OpenFlow 技术,并逐渐推广 SDN 概念。OpenFlow 作为 SDN 的原型实现方式,代表了 SDN 控制转发分离架 构的技术实现。随着 SDN 技术得到认可,从严格定义上来讲,OpenFlow 指 的是 SDN 控制平面和数据平面之间多种通信协议之一,但实际上,OpenFlow 以其良好的灵活性、规范性已经被看作 SDN 通信协议事实上的标准,类似于 TCP/IP 协议作为互联网的通信标准 3 OpenFlow 最初是为校园网络研究人员设计其创新网络架构提供真实的实验 平台,随后,McKeown 等研究者开始推广 SDN 概念,并引起学术界和产业 界广泛关注。SDN 将网络配置平面从嵌入式结点中独立出来,以开放软件模式 的控制平面替代了传统基于系统嵌入的控制平面,由软件驱动的中央控制结点 来自动化控制整个网络。OpenFlow 初步实现了 SDN 的原型设计思想,推动了 SDN 技术的快速发展,简化了网络的配置模式,增加了网络控制权的开放性,在 某种程度上符合未来互联网的发展需求,也是目前 SDN 最通用的实现方式。 基于 OpenFlow 的 SDN 技术,通过软件平台来打造弹性化的可控互联网,在 给网络的发展带来巨大冲击的同时,也为未来互联网的发展提供了一种新的解 决思路。 可以看出,基于 OpenFlow 的 SDN 技术打破了传统网络的分布式架 构,颠覆了传统网络的运行模式,在实现方式上与上述文献的要求不完全相同, 在面临类似挑战时还需要满足新的技术和市场需求,目前,学术界和产业界已 经展开大量研究来寻找解决方案。 第二章 理论基础 2.1 软件定义网络 SDN 软件定义网络(英语:Software-defined networking,缩写为 SDN),一种 网络虚拟化(Network virtualization)技术,由美国史丹佛大学 Clean State 提出。 利用 OpenFlow 协定,把路由器的控制平面(control plane)从数据平面(data plane)中分离出来,以软件方式实做。这个架构可以让网络管理员,在不更动 4 硬件装置的前提下,以中央控制方式,用程式重新规划网络,为控制网络流量 提供了新的方去,也提供了核心网络及应用创新的良好平台。 2.2 openflow 网络架构 OpenFlow 网络由 OpenFlow 交换机、FlowVisor 和 Controller 三部分组成。 OpenFlow 交换机进行数据层的转发;FlowVisor 对网络进行虚拟化; Controller 对网络进行集中控制,实现控制层的功能。如下图所示: 2.2.1 openflow 交换机 OpenFlow 交换机由流表、安全通 道和 OpenFlow 协议三部分组成。 OpenFlow 交换机是整个 OpenFlow 网络 的核心部件,主要管理数据层的转 发。OpenFlow 交换机接收到数据包后,首先在本地的流表上查找转发目标端口, 如果没有匹配,则把数据包转发给 Controller,由控制层决定转发端口。 流表 流表包括包头域(header fileds,匹配包头多个域)、活动计数器 (counters)、0 个或多个执行行动(actions)如图二所示。对每一个包进行查 找,如果匹配则执行相关策略,否则通过安全通道将包转发到控制器,控制器 来决策相关行为。流表项可以将包转发到一个或者多个接口。 Head Fileds Counter Actions 图二:流表 包头域包括 12 个域,如图三所示,包括:进入接口,Ethernet 源地址、 目标地址、类型,vlan id,vlan 优先级,IP 源地址、目标地址、协议、IP ToS 位,TCP/UDP 目标端口、源端口。每一个域包括一个确定值或者所有值 (any),更准确的匹配可以通过掩码实现。 Ingres s Port Ether Sourc Ethe r Ether Type Vla n Vlan Priorit IP sr IP ds IP proto IP Tos TCP/UDP src TCP/UDP Dst 5 e Dst id y c t bits Port Port 图三:包头域 计数器可以针对每张表、每个流、每个端口、每个队列来维护。用来统计 流量的一些信息,例如活动表项、查找次数、发送包数等。统计信息所需要的 计数器如图四所示: 每个表项对应到 0 个或者多个行动,如果没有转发行动,则默认丢弃。多 个行动的执行需要依照优先级顺序依次进行。但对包的发送不保证顺序。另外 交换机可以对不支持的行动返回错误(unspported flow error)。 行动可以分为两种类型:必备行动(Required Actions)和可选行动 (Optional Actions),必备行动是默认支持的,交换机需要通知控制器它支持 的可选行动。 必备行动-转发(Forward) ALL 转发到所有出口(不包括入口) CONTROLLER 封装并转发给控制器 LOCAL 转发给本地网络栈 TABLE 对要发出的包执行流表中的行动 IN_PORT 从入口发出 必备行动-丢弃(Drop ) 没有明确指明处理行动的表项,所匹配的所有网包默认丢弃。 可选行动-转发 NORMAL 按照传统交换机的 2 层或 3 层进行转发处理。 FLOOD 通过最小生成树从出口泛洪发出,注意不包括入口。 可选行动-入队(Enqueue) 将包转发到绑定到某个端口的队列中。 可选行动-修改域(Modify-field) 修改包头内容。 Counter Bits Per Table Active Entries 32 Packet Lookups 64 Per Flow Received Packets 64 6 Received Bytes 64 Durations(seconds) 32 Per Port Received Packets 64 Transmitted Packets 64 Received Bytes 64 Transmitted Bytes 64 Received Drops 64 Transmit Drops 64 Received Errors 64 Transmit Drops 64 Receive Frame Alignment Errors 64 Receive Overrun Errors 64 Receive CRC Errors 64 Collisions 64 Per Queue Transmit Packets 64 Transmit Bytes 64 Transmit Overrun Errors 64 图四:信息统计计数器 流表匹配 每个包按照优先级依次去匹配流表中表项,匹配包的优先级最高的表项即 为匹配结果。一旦匹配成功,对应的计数器将更新;如果没能找到匹配的表项, 则转发给控制器。整体流程参见图五,具体包头解析匹配过程见图六。 7 图五:整体匹配流程 8 图六: 包头解析的匹配流程 9 2.2.2 openflow 控制器 OpenFlow 实现了数据层和控制层的分离,其中 OpenFlow 交换机进行数据 层的转发,而 Controller 实现了控制层的功能。Controller 通过 OpenFlow 协议 这个标准接口对 OpenFlow 交换机中的流表进行控制,从而实现对整个网络进 行集中控制。Controller 的这一切功能都要通过运行 NOX 来实现,因此 NOX 就像是 OpenFlow 网络的操作系统。 NOX 主要功能包括两部分,一是针对下层的 SDN 交换机(例如 of 交换 机)作为控制器,解析交换机行为和进行管理操作;一是针对上层网络管理 app 开发者,作为一个抽象层(操作系统)提供易用的开发接口。针对这两部 分功能,NOX 的开发模型主要包括两个部分。 一是集中的编程模型。开发者不需要关心网络的实际架构,部署在单一节 点上的 NOX 管理网络中的所有交换设备,解析后呈现给开发者。在开发者看 来整个网络就好像一台单独的机器一样,有统一的资源分配和接口管理。 二是抽象的开发模型。应用程序开发需要面向的是 NOX 提供的高层接口, 而不是底层。例如,应用面向的是用户、机器名,但不面向 IP 地址、MAC 地 址等。正如计算机操作系统本身并不实现复杂的各种软件功能,NOX 本身并 不完成对网络管理任务,而是通过在其上运行的各种“应用”(Application) 来实现具体的管理任务。 2.2.3 openflow 虚拟化 类比计算机的虚拟化,FlowVisor 就是位于硬件结构元件和软件之间的网络 虚拟层。FlowVisor 允许多个控制同时控制一台 OpenFlow 交换机,但是每个控 制器仅仅可以控制经过这个 OpenFlow 交换机的某一个 虚拟网络(即 slice)。 因此通过 FlowVisor 建立的试验平台可以在不影响商业流的转发速度的情况下, 允许多个网络试验在不同的虚拟网络上同时进行。FlowVisor 与一般的商用交换 机是兼容的,而不需要使用 FPGA 和网络处理器等可编程硬件。 10 2.3 安全通道 安全通道用来连接交换机和控制器,所有安全通道必须遵守 of 协议。控制 器可以配置、管理交换机、接收交换机的事件信息,并通过交换机发出网包等。 2.3.1 OF 协议 of 协议支持三种消息类型:controller-to-switch ,asynchronous (异步)和 symmetric(对称),每一类消息又有多个子消息类型。controller-to-switch 消 息由控制器发起,用来管理或获取 switch 状态;asynchronous 消息由 switch 发起,用来将网络事件或交换机状态变化更新到控制器;symmetric 消息可由 交换机或控制器发起。 controllertoswitch 消息 由控制器(controller )发起,可能需要或不需要来自交换机的应答消息。 包括 Features、Configuration、Modify-state、Read-state、Send-packet、Barrier 等。 Features 在建立传输层安全会话(Transport Layer Security Session)的时候,控制器 发送 feature 请求消息给交换机,交换机需要应答自身支持的功能。 Configuration 控制器设置或查询交换机上的配置信息。交换机仅需要应答查询消息。 Modify-state 控制器管理交换机流表项和端口状态等。 Read-state 控制器向交换机请求一些诸如流、网包等统计信息。 Send-packet 控制器通过交换机指定端口发出网包。 Barrier 控制器确保消息依赖满足,或接收完成操作的通知。 asynchronous 消息 11 asynchronous 不需要控制器请求发起,主要用于交换机向控制器通知 状态变化等事件信息。主要消息包括 Packet-in、Flow-removed、Port- status、Error 等。 Packet-in 交换机收到一个网包,在流表中没有匹配项,则发送 Packet-in 消息给控制 器。如果交换机缓存足够多,网包被临时放在缓存中,网包的部分内容(默认 128 字节)和在交换机缓存中的的序号也一同发给控制器;如果交换机缓存不 足以存储网包,则将整个网包作为消息的附带内容发给控制器。 Flow-removed 交换机中的流表项因为超时或修改等原因被删除掉,会触发 Flow-removed 消息。 Port-status 交换机端口状态发生变化时(例如 down 掉),触发 Port-status 消息。 Error 交换机通过 Error 消息来通知控制器发生的问题。 symmetric 消息 symmetric 消息也不必通过请求建立,包括 Hello、Echo、Vendor 等。 Hello 交换机和控制器用来建立连接。 Echo 交换机和控制器均可以向对方发出 Echo 消息,接收者则需要回复 Echo reply。该消息用来测量延迟、是否连接保持等。 Vendor 交换机提供额外的附加信息功能。为未来版本预留。 2.3.2 建立连接 通过安全通道建立连接,所有流量都不经过交换机流表检查。因此交换机 必须将安全通道认为是本地链接。今后版本中将介绍动态发现控制器的协议。 当 of 连接建立起来后,两边必须先发送 OFPT_HELLO 消息给对方,该消 息携带支持的最高协议版本号,接受方将采用双方都支持的最低协议版本进行 通信。一旦发现两者拥有共同支持的协议版本, 则连接建立, 否则发送 12 OFPT_ERROR 消息( 类型为 OFPET_HELLO_FAILED,代码为 OFPHFC_COMPATIBLE),描述失败原因,并终止连接。 2.3.3 连接中断 当连接发生异常时,交换机应尝试连接备份的控制器。当多次尝试均失败 后,交换机将进入紧急模式,并重置所有的 TCP 连接。此时,所有包将匹配指 定的紧急模式表项,其他所有正常表项将从流表中删除。此外,当交换机刚启 动时,默认进入紧急模式。 2.3.4 加密 安全通道采用 TLS(Transport Layer Security)连接加密。当交换机启 动时,尝试连接到控制器的 6633 TCP 端口。双方通过交换证书进行认证。因 此,每个交换机至少需配置两个证书,一个是用来认证控制器,一个用来向控 制器发出认证。 2.3.5 生成树 交换机可以选择支持802.1D 生成树协议。如果支持,所有相关包在查找流 表之前应该 先在本地进行传统处理。支持生成树协议的交换机在 OFPT_FEATURES_REPLY 消息的compabilities 域需要设置OFPC_STP 位,并 且需要在所有的物理端口均支持生成树协议, 但无需在虚拟端口支持。生成树协议会设置端口状态,来限制发到 OFP_FLOOD 的网包仅被转发到生成树指定的端口。需要注意指定出口的转发 或OFP_ALL 的网包会忽略生成树指定的端口状态,按照规则设置端口转发。 如果交换机不支持802.1D 生成树协议,则必须允许控制器指定泛洪时的端口状 态。 13 第三章 实验环境搭建 3.1 安装 open vswitch 3.1.1 安装 KVM KVM 是一种类型 2 虚拟机管理程序,这意味着它在操作系统里面运行。一 些流行的类型虚拟机管理程序包括 Xen 和 VirtualBox。虚拟机管理程序(如 IBM 的 z/VM 和 VMWare ESXi)则可以直接在裸机上运行,不需要什么操作系统。 1、安装准备。 首先检查 CPU 是否支持安装 KVM:英特尔 VT 或 AMD-V 处理器才支持 安装虚拟机,可用以下命令查看: $ egrep -o (vmx|svm) /proc/cpuinfo 若输出为以下信息则表明该 CPU 支持安装 KVM。 vmx vmx 然后在 bios 里面到高级选项里面开启虚拟,即将 Virtualization technology(或者是 Vanderpool technology)改为 enable。 2、安装 KVM。 在终端输入以下命令:$ sudo apt-get install qemu-kvm libvirt-bin virt- manager bridge-utils, 其中:virt-manager 为 GUI 管理窗口,bridge-utils:用于网 络桥接。 3、安装测试 A、执行下面的命令看 KVM 是否安装成功: $ kvm ok 若输出信息为:INFO: /dev/kvm exists KVM acceleration can be used 则 kvm 已成功安装。 B、验证 KVM 内核是否加载成功: $ lsmod | grep kvm 输出为: kvm_intel 47162 0 14 kvm 317577 1 kvm_intel 若 KVM 内核没加载执行下面命令加载: $ sudo modprobe kvm $ sudo modprobe kvm-intel ( or kvm-amd ) C、证实 KVM 正常运行 $ virsh -c qemu:/system list 将输出: Id Name State 如果提示你没权限操作,则需要将当前操作账户添加进 libvirtd 组,命 令为: $ sudo usermod -G libvirtd -a fdc 3.1.2 安装 Openvswitch 使用 Ubuntu 12.04 下用 Openvswitch 源码编译安装。 1.在 Openvswitch 官网下载最新的 Open vSwitch 源代码包,我们用的是 Open vSwitch 1.10.0 版本。 2.下载完后用以下命令解压: $ tar xvf openvswitch-1.7.0.tar.gz 3.进入解压后目录输入以下命令配置 Open vSwitch 工程,生成 Makefile 文 件。 $./configure -with-linux=/lib/modules/uname -r/build with- linux:生成内核模式的 Open vSwitch 时需指定的内核源码编译目 录 指定 Open vSwitch 的安装位置加参数: prefix=/ 如有其他问题可参考源码根目录下的帮助文件:INSTALL.Linux 4.编译、链接、生成和安装 Open vSwitch,命令如下,make install 目录只 安装 Open vSwitch 除内核模块外的其他所有模块,如 ovs-vsctl、ovs- vswitchd、ovs-ofctl 等。 $ make $ make install 5.卸载原有虚拟网桥模块,命令如下,如果 Xend 正常启动,将自动加载 linux 虚拟网桥模块 bridge.ko。 15 $ rmmod bridge 如果无法卸载,可用“lsmod”命令查看已加载的依赖于 bridge 的内核模块, 并用“rmmod 模块名”卸载,常见的无法卸载的情况可通过预先执行下面两条 命令解决。 $ /etc/init.d/iptables stop $ rmmod xt_physdev 6.加载 OpenvSwitch 内核模块 openvswitch_mod.ko 和 linux 虚拟网桥兼容模 块 brcompat_mod.ko。 $ insmod datapath/linux/openvswitch.ko $ insmod datapath/linux/brcompat.ko 7.根据 ovsdb 模板 vswitch.ovsschema 创建 ovsdb 数据库 ovs- vswitchd.conf.db,用于存储虚拟交换机的配置信息,只需第一次运行 Open vSwitch 时创建。 $ ovsdb-tool create /usr/local/etc/ovs-vswitchd.conf.db /home/open/openvswitch-1.10.0/vswitchd/vswitch.ovsschema 8.启动 ovsdb 数据库服务器,Open vSwitch 虚拟网桥模块将通过 ovsdb- server 获得虚拟交换机配置信息,“detach ”表示以后台方式运行, ovsdb- server 其他参数请参考 “ovsdb-server help”。 $ ovsdb-server /usr/local/etc/ovs-vswitchd.conf.db - remote=punix:/usr/local/var/run/openvswitch/db.sock - remote=db:Open_vSwitch,manager_options -private-key=db:SSL,private_key -certificate=db:SSL,certificate -bootstrap-ca-cert=db:SSL,ca_cert -detach 9.初始化 Open vSwitch 控制接口,以便用 ovs-vsctl 管理配置虚拟交换机。 $ ovs-vsctl no-wait init 10.启动 Open vSwitch 用户态模块,unix:后的文件为 socket 文件,为 ovsdb-server 监听的 socket 文件。 $ ovs-vswitchd unix:/usr/local/var/run/openvswitch/db.sock -detach 11.启动 linux 原有虚拟网桥兼容模块用户态组件 ovs-brcompatd,该模块必 须在 ovsdb-server 和 ovs-vswitchd 启动后才能启动。 $ ovs-brcompatd -pidfile -detach 12.Openvswitch 安装成功,可对其进行配置了。 16 3.1.3 配置网桥 1. 添加网桥 br0 $ ovs-vsctl add-br br0 2. 激活网桥 br0 $ ifconfig br0 up 3. 配置网桥 br0 的 ip 地址 $ ifconfig br0 00 4. 把添加物理网卡 eth0 $ ovs-vsctl add-port br0 eth0 5. 连接 Controller $ ovs-vsctl set-controller br0 tcp:0:6633 6. 查看配置 $ ovs-vsctl show 3.2 安装 NOX 网络操作系统及 GUI 3.2.1 安装 NOX Nox 网络操作系统的安装步骤如下,注意平台为 Ubuntu 11.10。 1. 安装 nox 网络操作系统一些数据包和依赖库。 $ cd /etc/apt/sources.list.d $ sudo wget /downloads/debian/nox.list $ sudo apt-get update $ udo apt-get install nox-dependencies 2. 获取 nox 的源码。 $ git clone git://noxrepo/nox-classic 17 注意这里我们选取的 nox 版本是 nox-classic,因为这个版本中已经 有了 gui 组件,能为以后的实验提供帮助。 3. 检验 nox 版本。 $ cd nox-classic $ git checkout -b destiny remotes/origin/destiny 4. 编译和安装 nox $ sudo ./boot.sh $ mkdir build $ cd build $ sudo /configure $ sudo make 5. 检验是否成功安装。 $ ./nox_core -h 3.2.2 安装 NOX-GUI 因 nox 源码中已包含了 gui 组件,我们只需安装 gui 运行需要的依赖关系即 可。 输入以下命令安装依赖库: $ sudo apt-get install python-qt4-sql 检测 gui 是否能成功运行可通过以下步骤完成: 1. 在/ nox-classic/build/src 目录下启动 nox 并监听端口 6633 的信息。 $ ./nox_core v i ptcp:6633 monitoring 2. 在/ nox-classic /src 目录下启动 gui。 $ ./nox-gui.py 即可启动 GUI 界面。 18 3.3 环境测试 3.1.1 总体拓扑图展示 3.3.2 运行 controller $./nox_core -v -i ptcp:6633 monitoring 显示如下信息表示 nox 正常运行 19 3.3.3 配置 open vswitch 1、运行 open vswitch $ service openvswitch-switch restart 显示如下信息表示 open switch 正常运行 2、配置网桥 $ ovs-vsctl add-br br0 $ ovs-vsctl add-port br0 eth0 $ ifconfig br0 netmask $ ifconfig 显示有 br0网关表示已经完全配置好 3、链接 controller $ ovs-vsctl set-controller br0 tcp::6633 $ ovs-vsctl show 显示如下信息表示完全配置正确 20 3.3.4 测试 open switch 与 controller 是否连通 在这里如果 controller 和 open vswitch 已经可以连通了。如果你关闭 controller 的监听程序,open vswitch 和 controller 可以相互 ping 通。 如图: 3.3.5 启动 GUI 监测 $ ./nox-gui.py 会显示如下界面图。在这里我只接入了一个 openvswitch,所以在右侧中会 有一个接入该网络的节点显示图。 21 第四章 Open Flow 分析 4.1 重要的数据结构 4.1.1 of 协议头 数据结构如下。 /* Header on all OpenFlow packets. */ struct ofp_header uint8_t version; /* An OpenFlow version number, e.g. OFP10_VERSION. */ uint8_t type; /* One of the OFPT_ constants. */ ovs_be16 length; /* Length including this ofp_header. */ ovs_be32 xid; /* Transaction id associated with this packet. Replies use the same id as was in the request to facilitate pairing. */ 22 ; Type 用来标明消息类型。可能的消息类型包括 标明消息长度。 Type 用来标明消息类型。可能的消息类型包括 enum ofp_type /* Immutable messages. */ OFPT_HELLO, /* Symmetric message */ OFPT_ERROR, /* Symmetric message */ OFPT_ECHO_REQUEST, /* Symmetric message */ OFPT_ECHO_REPLY, /* Symmetric message */ OFPT_VENDOR, /* Symmetric message */ /* Switch configuration messages. */ OFPT_FEATURES_REQUEST, /* Controller/switch message */ OFPT_FEATURES_REPLY, /* Controller/switch message */ OFPT_GET_CONFIG_REQUEST, /* Controller/switch message */ OFPT_GET_CONFIG_REPLY, /* Controller/switch message */ OFPT_SET_CONFIG, /* Controller/switch message */ /* Asynchronous messages. */ OFPT_PACKET_IN, /* Async message */ OFPT_FLOW_REMOVED, /* Async message */ OFPT_PORT_STATUS, /* Async message */ /* Controller command messages. */ OFPT_PACKET_OUT, /* Controller/switch message */ OFPT_FLOW_MOD, /* Controller/switch message */ OFPT_PORT_MOD, /* Controller/switch message */ /* Statistics messages. */ OFPT_STATS_REQUEST, /* Controller/switch message */ OFPT_STATS_REPLY, /* Controller/switch message */ /* Barrier messages. */ OFPT_BARRIER_REQUEST, /* Controller/switch message */ OFPT_BARRIER_REPLY, /* Controller/switch message */ /* Queue Configuration messages. */ OFPT_QUEUE_GET_CONFIG_REQUEST, /* Controller/switch message */ OFPT_QUEUE_GET_CONFIG_REPLY /* Controller/switch message */ ; 4.1.2 交换机端口状态 端口状态数据结构: struct netdev_stats 23 uint64_t rx_packets; /* Total packets received. */ uint64_t tx_packets; /* Total packets transmitted. */ uint64_t rx_bytes; /* Total bytes received. */ uint64_t tx_bytes; /* Total bytes transmitted. */ uint64_t rx_errors; /* Bad packets received. */ uint64_t tx_errors; /* Packet transmit problems. */ uint64_t rx_dropped; /* No buffer space. */ uint64_t tx_dropped; /* No buffer space. */ uint64_t multicast; /* Multicast packets received. */ uint64_t collisions; /* Detailed receive errors. */ uint64_t rx_length_errors; uint64_t rx_over_errors; /* Receiver ring buff overflow. */ uint64_t rx_crc_errors; /* Recved pkt with crc error. */ uint64_t rx_frame_errors; /* Recvd frame alignment error. */ uint64_t rx_fifo_errors; /* Recvr fifo overrun . */ uint64_t rx_missed_errors; /* Receiver missed packet. */ /* Detailed transmit errors. */ uint64_t tx_aborted_errors; uint64_t tx_carrier_errors; uint64_t tx_fifo_errors; uint64_t tx_heartbeat_errors; uint64_t tx_window_errors; ; 4.1.3 流匹配结构 /* Fields to match against flows */ struct ofp10_match ovs_be32 wildcards; /* Wildcard fields. */ ovs_be16 in_port; /* Input switch port. */ uint8_t dl_srcOFP_ETH_ALEN; /* Ethernet source address. */ uint8_t dl_dstOFP_ETH_ALEN; /* Ethernet destination address. */ ovs_be16 dl_vlan; /* Input VLAN. */ uint8_t dl_vlan_pcp; /* Input VLAN priority. */ uint8_t pad11; /* Align to 64-bits. */ ovs_be16 dl_type; /* Ethernet frame type. */ uint8_t nw_tos; /* IP ToS (DSCP field, 6 bits). */ uint8_t nw_proto; /* IP protocol or lower 8 bits of ARP opcode. */ 24 uint8_t pad22; /* Align to 64-bits. */ ovs_be32 nw_src; /* IP source address. */ ovs_be32 nw_dst; /* IP destination address. */ ovs_be16 tp_src; /* TCP/UDP source port. */ ovs_be16 tp_dst; /* TCP/UDP destination port. */ ; 4.1.4 行为结构 enum ofp10_action_type OFPAT10_OUTPUT, /* Output to switch port. */ OFPAT10_SET_VLAN_VID, /* Set the 802.1q VLAN id. */ OFPAT10_SET_VLAN_PCP, /* Set the 802.1q priority. */ OFPAT10_STRIP_VLAN, /* Strip the 802.1q header. */ OFPAT10_SET_DL_SRC, /* Ethernet source address. */ OFPAT10_SET_DL_DST, /* Ethernet destination address. */ OFPAT10_SET_NW_SRC, /* IP source address. */ OFPAT10_SET_NW_DST, /* IP destination address. */ OFPAT10_SET_NW_TOS, /* IP ToS (DSCP field, 6 bits). */ OFPAT10_SET_TP_SRC, /* TCP/UDP source port. */ OFPAT10_SET_TP_DST, /* TCP/UDP destination port. */ OFPAT10_ENQUEUE, /* Output to queue. */ OFPAT10_VENDOR = 0xffff ; 4.1.5 流表操作 enum ofp_flow_mod_command OFPFC_ADD, /* New flow. */ OFPFC_MODIFY, /* Modify all matching flows. */ OFPFC_MODIFY_STRICT, /* Modify entry strictly matching wildcards */ OFPFC_DELETE, /* Delete all matching flows. */ OFPFC_DELETE_STRICT /* Strictly match wildcards and priority. */ ; 25 4.1.6 表统计信息 /* Body of reply to OFPST_TABLE request. */ struct ofp10_table_stats uint8_t table_id; /* Identifier of table. Lower numbered tables are consulted first. */ uint8_t pad3; /* Align to 32-bits. */ char nameOFP_MAX_TABLE_NAME_LEN; ovs_be32 wildcards; /* Bitmap of OFPFW10_* wildcards that are supported by the table. */ ovs_be32 max_entries; /* Max number of entries supported. */ ovs_be32 active_count; /* Number of active entries. */ ovs_32aligned_be64 lookup_count; /* # of packets looked up in table. */ ovs_32aligned_be64 matched_count; /* Number of packets that hit table. */ ; 4.1.7 端口统计 /* Body of reply to OFPST_PORT request. If a counter is unsupported, set * the field to all ones. */ struct ofp10_port_stats ovs_be16 port_no; uint8_t pad6; /* Align to 64-bits. */ ovs_32aligned_be64 rx_packets; /* Number of received packets. */ ovs_32aligned_be64 tx_packets; /* Number of transmitted packets. */ ovs_32aligned_be64 rx_bytes; /* Number of received bytes. */ ovs_32aligned_be64 tx_bytes; /* Number of transmitted bytes. */ ovs_32aligned_be64 rx_dropped; /* Number of packets dropped by RX. */ ovs_32aligned_be64 tx_dropped; /* Number of packets dropped by TX. */ ovs_32aligned_be64 rx_errors; /* Number of receive errors. This is a super-set of receive errors and should be great than or equal to the sum
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论