• 产品与解决方案
  • 行业解决方案
  • 服务
  • 支持
  • 合作伙伴
  • 新华三人才研学中心
  • 关于我们

17-OpenFlow配置指导

目录

01-OpenFlow配置

本章节下载 01-OpenFlow配置  (385.18 KB)

docurl=/cn/Service/Document_Software/Document_Center/Routers/Catalog/SR_Router/SR8800-F/Configure/Operation_Manual/H3C_SR8800-F_CG-R7655PXX-6W761/17/201708/1025851_30005_0.htm

01-OpenFlow配置

  录

1 OpenFlow

1.1 OpenFlow简介

1.1.1 OpenFlow网络构成

1.1.2 OpenFlow Switch类型

1.1.3 OpenFlow接口

1.1.4 OpenFlow实例

1.1.5 OpenFlow流表

1.1.6 Group Table

1.1.7 Meter Table

1.1.8 OpenFlow channel

1.1.9 协议规范

1.2 OpenFlow配置限制和指导

1.3 OpenFlow配置任务简介

1.4 配置OpenFlow实例

1.4.1 创建OpenFlow实例

1.4.2 配置OpenFlow实例作用域

1.4.3 配置流表ID

1.4.4 配置控制器模式

1.4.5 配置Extensibility表的流表项的最大个数

1.4.6 配置带内管理VLAN

1.4.7 配置禁止MAC地址学习

1.4.8 配置Datapath ID

1.4.9 配置SSL服务器

1.4.10 配置缺省的table miss动作

1.4.11 配置禁止上送Controller的端口类型

1.4.12 激活OpenFlow实例

1.4.13 配置OpenFlow实例绑定接口

1.4.14 配置接口绑定OpenFlow实例

1.5 配置连接Controller

1.5.1 Controller角色简介

1.5.2 配置主连接

1.5.3 配置辅助连接

1.5.4 配置连接中断模式

1.6 配置OpenFlow定时器

1.7 配置支持动态MAC地址

1.8 配置允许ARP报文修改OpenFlow ARP表项

1.9 刷新OpenFlow实例下所有MAC-IP表的三层表项

1.10 配置OpenFlow报文的DSCP值

1.11 开启OpenFlow连接备份功能

1.12 配置允许聚合成员端口出现在控制器下发的流表中

1.13 OpenFlow显示和维护

1.14 OpenFlow典型配置举例

1.14.1 VLAN类型OpenFlow典型配置举例

1.14.2 接口类型OpenFlow典型配置举例

1.15 附录 A 应用限制

1.15.1 Flow Entry的限制

1.15.2 Action List和Action Set整合的限制

1.15.3 Packet Out的处理限制

1.15.4 Packet in的处理限制

1.15.5 Flow Mod的限制

1.16 附录 B MAC-IP流表

1.16.1 MAC-IP流表支持能力

1.16.2 MAC-IP流表的限制

1.16.3 MAC-IP流表的Table Miss

1.16.4 Dynamic aware

1.16.5 MAC-IP Table与Extensibility Table的配合

1.17 附录 C Ingress-vlan流表和Egress-vlan流表

1.17.1 Ingress-vlan流表支持能力

1.17.2 Egress-vlan流表支持能力

 


1 OpenFlow

1.1  OpenFlow简介

OpenFlow是SDN(Software Defined Network,软件定义网络)架构中定义的一个控制器与转发层之间的通信接口标准。OpenFlow允许控制器直接访问和操作网络设备的转发平面,这些网络设备可能是物理上的,也可能是虚拟的。

OpenFlow的思想是分离控制平面和数据平面,二者之间使用标准的协议通信;数据平面采用基于流的方式进行转发。

1.1.1  OpenFlow网络构成

OpenFlow网络由OpenFlow设备(Switch)和控制器(Controller)通过安全通道(OpenFlow channel)组成,如图1-1所示。Switch与Controller通过TLS或者TCP建立安全通道,进行OpenFlow消息交互,实现表项下发、查询以及状态上报等功能。下文如果没有特殊说明,交换机指的就是OpenFlow设备。

图1-1 OpenFlow网络组成

 

1.1.2  OpenFlow Switch类型

OpenFlow Switch有下面两种:

·     OpenFlow-Only Switch:仅支持OpenFlow转发。

·     OpenFlow-Hybrid Switch:既支持OpenFlow转发,也支持正常转发。本设备即属于OpenFlow-Hybrid Switch类型。

1.1.3  OpenFlow接口

OpenFlow接口有下面三类:

·     物理接口:比如以太网接口。可以作为入接口和出接口。

·     逻辑接口:比如聚合接口、Tunnel接口等。可以作为入接口和出接口。

·     保留接口:由转发动作定义的接口,实现OpenFlow转发功能。除Any接口外,其他接口都可以作为出接口,仅Controller和Local可以作为入接口。具体类型请参见表1-1

表1-1 保留接口类型

类型

入端口

出端口

说明

ALL

不支持

支持

报文从所有接口发送

Controller

支持

支持

报文上送控制器

Table

不支持

不支持

报文重新进入流表进行匹配

In Port

不支持

支持

报文从入接口转发

Any

不支持

支持

接口通配描述,不能作为入接口以及出接口

Local

支持

支持

报文上送本地CPU

Normal

不支持

支持

报文正常转发

Flood

不支持

支持

报文广播发送

 

1.1.4  OpenFlow实例

OpenFlow支持多实例。每个OpenFlow实例可以单独连接控制器,相当于一台独立的交换机,根据控制器下发的流表项指导流量转发。下文如果没有特殊说明,交换机指的就是一个OpenFlow实例。

1. 实例划分

OpenFlow实例有以下类型:

·     全局实例:对所有流量进行处理。

·     VLAN实例:配置VLAN内的流量根据OpenFlow流表项转发,其它VLAN内的流量进行正常转发。

·     接口实例:配置接口的流量根据OpenFlow流表项转发,其它接口的流量进行正常转发。

2. 实例激活

OpenFlow需要将设备的支持能力、当前的接口信息等设备信息上报给控制器后,控制器才能够下发流表项指导转发。

在配置更改的情况下,需要重新激活实例使配置生效。激活配置后,OpenFlow实例会与所有控制器断开连接,然后重新进行连接。

3. 实例所属接口

OpenFlow协议规定需要将接口信息上报给控制器,这些接口包括物理接口、逻辑接口以及保留接口中的Local。

对于通过VLAN划分作用范围的OpenFlow实例,当且仅当接口所属VLAN完全包含了OpenFlow配置的映射VLAN后,该接口才是此OpenFlow实例的接口,可以被上报到控制器。如果配置了loosen模式,只要接口所在VLAN与实例配置VLAN存在交集,接口就属于OpenFlow实例。

1.1.5  OpenFlow流表

OpenFlow通过流表(Flow Table)来匹配和处理报文,在同一个流表中按流表项的优先级进行先后匹配。一台交换机上可以包含一个或者多个流表。

1. 流表类型

流表类型如下:

·     MAC-IP流表:通过MAC地址表和FIB表实现。只能匹配目的MAC地址、VLAN以及目的IP地址,动作也仅支持修改目的MAC地址、VLAN、TUNNEL ID以及指定出接口。具体请参见1.16  附录 B MAC-IP流表

·     Extensibility流表:扩展流表,使用ACL实现。可以匹配报文的源MAC地址、源IP地址、目的IP地址、报文优先级、TCP源端口、TCP目的端口等。

2. 流表项组成

图1-2 流表项结构

 

流表项如2. 所示:

·     Match Fields:匹配规则。可以匹配入接口、报文头等字段。

·     Priority:优先级。定义流表项之间的匹配顺序,优先级高的先匹配。

·     Counters:统计计数。统计有多少个报文和字节匹配到该流表项(不包括上送控制器的报文)。MAC-IP流表项不支持统计计数功能。

·     Instructions:动作指令集。定义匹配到该流表项的报文需要进行的处理。流表项动作指令集是对动作进行操作,流表项的动作有两种执行类型:

¡     动作集(Action Set):一系列动作的组合,不会立刻修改报文内容,直到报文不再需要进入下一级流表,动作集里每种动作仅能存在一个,并且按照表1-2从上到下的顺序执行。

¡     动作序列(Action List):需要立即执行的一系列动作,其动作内容与Action Set相同,但是会立即修改报文的内容,其效果是累加的,并且执行顺序是按照下发的顺序执行的。

表1-2 动作指令集定义

Instruction

处理

Meter

对匹配到流表项的报文进行限速

Apply-Actions

立即执行动作序列中的动作

Clear-Actions

清除动作集中的所有动作

Write-Actions

更改动作集中的所有动作

Write-Metadata

不支持

Goto-Table

不支持

 

具体动作类型如表1-3所示。

表1-3 动作类型(1.3.1版本)

动作名称

可选/必选

描述

Output

必选

Output动作转发报文到特定的OpenFlow端口,比如物理端口,逻辑端口以及OpenFlow保留端口

Drop

必选

并没有直接的动作来代表Drop,当动作集中不含有Output指令时,报文会被丢弃。通常来说空指令集,空动作集或者执行清空动作集后,报文会被丢弃

Group

必选

将报文转交给指定的Group处理,该动作的确切含义由Group的类型定义

Set-Queue

可选

Set-Queue动作为报文指定队列ID。当报文被转发到特定端口时,队列ID通常被用于基本QoS

Push-Tag/Pop-Tag

可选

Push-Tag和Pop-Tag动作适用于VLAN头、MPLS头、PBB头(802.1AH)

Set-Field

可选

Set-Field动作可以识别报文字段的类型,并且可以修改该字段的值。Set-Field 动作通常只适用于最外层的字段(比如当内外层均有VLAN tag时,该动作只修改最外层的VLAN Tag)

Change-TTL

可选

Change-TTL动作可以改变报文中IPv4的TTL,IPv6的Hop Limit或者MPLS的TTL。同样,Change-TTL也只适用于最外层的字段。该动作可以设置TTL(TTL必须已经存在)、减少TTL、TTL值拷贝(inwards/outwards)

 

·     Timeouts:超时时间。包括了idle time和hard time。

¡     idle time:在idle time时间内,如果没有报文匹配到该流表项,则此流表项被删除(上送控制器的报文即使匹配了流表项,也不会更新该表项的idle time)。

¡     hard time:在hard time时间超时后,无论是否有报文匹配到该流表项,此流表项都会被删除

·     Cookie:控制器下发的流表项的标识。

3. 流表处理流程

说明

目前本设备仅支持匹配一次流表,不存在多个流表的处理过程。

 

图1-3所示,当报文进入交换机后,必须从流表ID最小的流表开始依次匹配;流表可以按次序从小到大越级跳转,但不能从某一流表向前跳转至流表ID更小的流表。一旦在某个流表匹配到后,会更新此报文的动作集(允许被下一级流表覆盖),到了最后一个流表后,所有的动作会被执行,此时报文的内容会被修改,指定出接口进行转发。如果在某个流表处理时,处理指令包含Action List,则报文的一份拷贝立即执行Action List而不需要在最后一个流表处理结束后再执行。

图1-3 OpenFlow转发示意图

 

4. Table Miss表项

每个流表都包含一个Table Miss流表项,该表项用于定义在流表中没有匹配的报文的处理方式,该表项的匹配域为通配,即匹配任何报文,优先级为0,动作指令与正常表项相同。

1.1.6  Group Table

Group Table由Group表项组成,Group表项被流表项所引用,提供额外的报文转发功能。

图1-4 Group表项结构

 

·     Group Identifier:Group ID,用于识别Group,32bits。

·     Group Type:Group类型。

¡     All:执行所有动作桶,用于组播或者广播。

¡     Select:自动选择一个动作桶执行。

¡     Indirect:始终执行固定的动作桶。

¡     Fast failover:始终执行第一个活跃的动作桶。

·     Counters:当报文被Group处理时,更新计数器。

·     Action Buckets:一个由动作桶组成的有序列表。每个动作桶由许多动作组成。

1.1.7  Meter Table

Meter Table由Meter表项组成,Meter表项被流表项所引用,为所有引用Meter表项的流表项提供报文限速的功能。

图1-5 Meter表项结构

 

·     Meter Identifier:Meter ID,用于识别meter,32bits。

·     Meter Bands:一个Meter表项可以包含一个或者多个Meter Bands,每个Meter Band定义了速率以及动作。当报文的速率超过了某些Meter Band,根据这些Meter Band中速率最大的那个定义的动作进行处理。

·     Counters:当报文被Meter处理时,更新计数器。

图1-6 Meter Bands结构

 

·     Band Type:Band类型,定义报文如何处理。为可选,可使用丢弃(drop),即报文高于该速率会被丢弃;以及重新标记DSCP(dscp remark)。

·     Rate:Meter用于选择Band的最低速率,即报文速率高于该速率并最接近该速率,该Band将被应用。

·     Counters:当Band处理报文时,更新计数器。

·     Type Specific arguments:某些Band含有的特定参数。

1.1.8  OpenFlow channel

交换机与控制器通过TLS或者TCP建立Channel,进行OpenFlow消息交互,实现表项下发、查询以及状态上报等功能。

OpenFlow协议中定义了三种消息类型Controller to Switch消息、异步消息和同步消息,每种报文类型都有很多子类型。

1. Controller to Switch消息

Controller to Switch消息是指由控制器产生并发送到交换机,用来查询交换机的消息,可以不需要交换机响应。这些消息主要由控制器用来对交换机进行状态查询和修改配置等操作。

表1-4 Controller to Switch消息

子类型

描述

Features

用于控制器发送请求来了解交换机的能力,交换机必须回应该报文

Configuration

用于控制器设置,查询交换机的配置,交换机只有在控制器查询时回应

Modify-State

用于管理交换机的状态,如流表项和端口状态。该命令主要用于增加、删除、修改、交换机内的流表表项,组表表项以及交换机端口的属性

Multipart

用于控制器收集交换机各方面的信息,例如当前配置,统计信息等

Packet-Out

用于通过交换机特定端口发送报文,这些报文可以通过Packet-In消息触发,也可以通过控制器直接发送。通常Packet-Out消息包含整个之前接收到的Packet-In消息所携带的报文或者buffer ID(用于指示存储在交换机内的特定报文)。这个消息需要包含一个动作列表,当交换机收到该动作列表后会对Packet-Out消息所携带的报文执行该动作列表。如果动作列表为空,Packet-Out消息所携带的报文将被交换机丢弃

Barrier

用于确认之前下发动作是否成功。控制器发送Barrier请求消息,当交换机确认之前下发的流表等操作都已经成功时会回复Barrier应答消息

Role-Request

用于设定或查询OpenFlow channel的角色。通常用于交换机和多个控制器相连的情况

Asynchronous-Configuration

控制器使用该报文设定异步消息过滤器来接收其只希望接收到的异步消息报文,或者向交换机查询该过滤器。通常用于交换机和多个控制器相连的情况

 

2. 异步(Asynchronous)消息

异步(Asynchronous)消息是由交换机发送给控制器,用来通知交换机上发生的某些异步事件的消息。例如,当某一条规则因为超时而被删除时,交换机将自动发送一条Flow-Removed消息通知控制器,以方便控制器作出相应的操作,如重新设置相关规则等。

表1-5 异步消息

子类型

描述

Packet-In

转移报文的控制权到控制器。对于所有通过匹配流表项或者Table Miss后转发到保留端口Controller端口的报文均要通过Packet-in消息送到控制器。也有部分其他流程,如TTL检查等,也需要通过该消息和控制器交互。Packet-In既可以携带报文,也可以通过在交换机内部设置报文的Buffer来仅携带报文头以及其Buffer ID传输给控制器。控制器在接收到Packet-In消息后会对其接收到的报文或者报文头和Buffer ID进行处理,并发回Packet-out消息通知交换机如何处理该报文

Flow-Removed

通知控制器将某个流表项从流表的移除。通常该消息在控制器发送删除流表项的消息或者流表项的两个定时器其中之一超时时产生

Port-Status

通知控制器端口状态或设置的改变

Error

通知控制器交换机出现的问题或错误

 

3. 对称(Symmetric)消息

对称(Symmetric)消息,就是双向对称的消息,主要用来建立连接和检测对方是否在线等。

表1-6 对称消息

子类型

描述

Hello

当连接启动时交换机和控制器会发送Hello交互

Echo

用于验证控制器与交换机之间连接的存活,控制器和交换机都会发送Echo request/reply消息,而且对于接受到的Echo request消息必须能返回Echo reply消息。也可用于测量控制器与交换机之间链路的延迟和带宽

Experimenter

为将来新加入的特性预留的消息

 

1.1.9  协议规范

·     OpenFlow Switch Specification Version 1.3.3

1.2  OpenFlow配置限制和指导

目前,仅CSPEX单板支持OpenFlow功能。

1.3  OpenFlow配置任务简介

表1-7 OpenFlow配置任务简介

配置任务

说明

详细配置

配置OpenFlow实例

创建OpenFlow实例

必选

1.4.1 

配置OpenFlow实例作用域

必选

1.4.2 

配置流表ID

可选

1.4.3 

配置控制器模式

可选

1.4.4 

配置Extensibility表的流表项的最大个数

可选

1.4.5 

配置带内管理VLAN

可选

1.4.6 

配置禁止MAC地址学习

可选

1.4.7 

配置Datapath ID

可选

1.4.8 

配置SSL服务器

可选

1.4.9 

配置缺省的table miss动作

可选

1.4.10 

配置禁止上送Controller的端口类型

可选

1.4.11 

激活OpenFlow实例

必选

1.4.12 

配置OpenFlow实例绑定接口

可选

1.4.13 

配置接口绑定OpenFlow实例

可选

1.4.14 

配置连接控制器

配置主连接

必选

1.5.2 

配置辅助连接

可选

1.5.3 

配置连接中断模式

可选

1.5.4 

配置OpenFlow定时器

可选

1.6 

配置支持动态MAC地址

可选

1.7 

配置允许ARP报文修改OpenFlow ARP表项

可选

1.8 

刷新OpenFlow实例下所有MAC-IP表的三层表项

可选

1.9 

配置OpenFlow报文的DSCP值

可选

1.10 

开启OpenFlow连接备份功能

可选

1.11 

配置允许聚合成员端口出现在控制器下发的流表中

可选

1.12 

 

1.4  配置OpenFlow实例

1.4.1  创建OpenFlow实例

表1-8 创建OpenFlow实例

操作

命令

说明

进入系统视图

system-view

-

创建OpenFlow实例,并进入OpenFlow实例视图

openflow instance instance-id

缺省情况下,不存在OpenFlow实例

(可选)配置OpenFlow实例描述

description text

缺省情况下,未配置OpenFlow实例的描述信息

 

1.4.2  配置OpenFlow实例作用域

不同实例下配置的对应VLAN不允许有交集,否则会造成一个VLAN在多个实例中,流量无法正确处理。

如果配置的对应VLAN不存在,在激活实例后,不存在的VLAN会自动创建。

如果同一个接口所属VLAN被分配到不同OpenFlow实例,在收到控制器下发的某些接口状态消息时,会出现后者覆盖前者的情况。

配置VLAN对应的VLAN接口下不允许配置BFD MAD检测功能,该功能的相关内容请参见“虚拟化技术配置指导”中的“IRF”。

表1-9 配置OpenFlow实例作用域

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置OpenFlow实例的类型

classification { global | port | vlan vlan-id [ mask vlan-mask ] [ loosen ] }

缺省情况下,未配置OpenFlow实例的类型

 

1.4.3  配置流表ID

OpenFlow实例中可以配置多个流表。

1. 配置限制和指导

用户激活实例之前配置当前实例将要使用的流表类型以及与之对应的流表ID。

一个OpenFlow实例最多仅支持配置一个MAC-IP表和一个Extensibility表

多次执行本命令,最后一次执行的命令生效。

如果同时配置Extensibility流表和MAC-IP流表,要求输入的Extensibility流表ID要大于MAC-IP流表ID。

2. 配置步骤

表1-10 配置流表ID

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置流表ID

flow-table { extensibility extensibility-table-id | mac-ip mac-ip-table-id } *

缺省情况下,实例包含了一个Extensibility流表,流表ID为0

 

1.4.4  配置控制器模式

支持两种模式与控制器建立连接。

·     Single模式:同一时刻,仅与一个控制器建立连接,配置的多个控制器之间互为备份。当且仅当当前的连接断开后,交换机会连接下一个控制器,直到连接成功。

·     Multiple模式:同一时刻,允许与多个控制器建立连接。交换机会连接配置的所有控制器,在与某个控制器连接失败或者断开连接后,在重连时间间隔后重新与之进行连接,直到连接成功。

表1-11 配置控制器模式

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置实例内的多个控制器的连接模式

controller mode { multiple | single }

缺省情况下,连接模式为Multiple

 

1.4.5  配置Extensibility表的流表项的最大个数

在OpenFlow实例中允许定义Extensibility流表支持的表项最大值,当控制器下发的流表表项个数超过最大值的时候,向控制器返回失败。

本配置是针对单个Extensibility流表的,当存在多个Extensibility流表时,每个流表都单独受此配置限制。

表1-12 配置Extensibility表的流表项的最大个数

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置Extensibility表的流表项的最大个数

flow-entry max-limit limit-value

缺省情况下,Extensibility表的流表项的最大个数为64000

 

1.4.6  配置带内管理VLAN

在OpenFlow实例中允许配置带内管理VLAN,这些VLAN中流量是正常转发的,用于OpenFlow设备与控制器建立安全通道。

带内管理VLAN中配置的VLAN必须是OpenFlow实例配置的对应VLAN的子集。

配置带内管理VLAN后,这些VLAN内的流量不再是OpenFlow转发,而是进行正常转发,并且仅在带内管理VLAN的接口不属于OpenFlow接口。

表1-13 配置带内管理VLAN

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置带内管理VLAN

in-band management vlan { vlan-id [ to vlan-id ] } &<1-10>

缺省情况下,未配置带内管理VLAN

 

1.4.7  配置禁止MAC地址学习

配置该功能后,OpenFlow实例配置的VLAN上MAC地址学习的功能被禁止。

带内管理VLAN中配置的VLAN不受该功能限制。

表1-14 配置禁止MAC地址学习

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置禁止MAC地址学习

mac-learning forbidden

缺省情况下,实例配置的VLAN上允许MAC地址学习

 

1.4.8  配置Datapath ID

Datapath ID用来在唯一标识交换机(OpenFlow实例),不同交换机(OpenFlow实例)的Datapath ID不能相同,配置时请注意。

表1-15 配置Datapath ID

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置Datapath ID

datapath-id id

缺省情况下,OpenFlow实例的Datapath ID由实例ID与设备桥MAC组成,其中前16个比特为实例ID,后48个比特为设备桥MAC

 

1.4.9  配置SSL服务器

OpenFlow实例启动SSL服务器之后,SSL客户端可以连接SSL服务器,并使用这个连接的通道完成OpenFlow协议的通信。

没有启动SSL服务器时,设备作为TCP/SSL客户端主动连接控制器(SSL服务器,需要相应配置);启动SSL服务器之后,设备作为SSL服务器端被动等待控制器(SSL客户端)连接。

关于SSL的介绍和基本功能配置,请参见“安全配置指导”中的“SSL”。

表1-16 配置SSL服务器

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置SSL服务器

listening port port-number ssl ssl-policy-name

缺省情况下,未配置SSL服务器

不能通过重复执行本命令修改OpenFlow实例启动的SSL服务器。如需修改,请先通过undo listening port命令删除OpenFlow实例启动的SSL服务器, 再执行listening port命令重新启动SSL服务器

 

1.4.10  配置缺省的table miss动作

缺省情况下,当激活实例后,该实例下所有流表的缺省table miss动作为丢弃,并且该实例内的所有协议报文均会被丢弃。如果配置了本命令,则实例下所有流表的缺省table miss动作为走正常二三层转发。

表1-17 配置缺省的table miss动作

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置缺省的table miss动作

default table-miss permit

缺省情况下,缺省的table miss动作为丢弃

 

1.4.11  配置禁止上送Controller的端口类型

配置该功能后,交换机不再向控制器上送对应三层以太网接口、三层聚合接口或VLAN接口的信息。

表1-18 配置禁止端口上送

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置禁止上送Controller的端口类型

forbidden port { l3-physical-interface | vlan-interface } *

缺省情况下,所有接口都上送Controller

 

1.4.12  激活OpenFlow实例

此功能用于激活实例。如果实例已经与控制器建立了连接,此时修改了实例基本能力配置并重新激活,交换机会断开与所有控制器的连接,清除已经下发的流表,根据当前的配置更新OpenFlow实例的能力集,重新与控制器建立连接。

表1-19 激活OpenFlow实例

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

激活OpenFlow实例

active instance

缺省情况下,未激活OpenFlow实例

 

1.4.13  配置OpenFlow实例绑定接口

说明

OpenFlow实例必须配置为接口模式。

 

表1-20 配置OpenFlow实例绑定接口

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置OpenFlow实例绑定接口

port interface-type interface-number [ to interface-type interface-number ]

缺省情况下,OpenFlow实例未绑定接口

 

1.4.14  配置接口绑定OpenFlow实例

说明

OpenFlow实例必须配置为接口模式。

 

表1-21 配置接口绑定OpenFlow实例

操作

命令

说明

进入系统视图

system-view

-

进入接口视图

interface interface-type interface-number

-

配置接口绑定OpenFlow实例

openflow-instance instance-id

缺省情况下,接口未绑定OpenFlow实例

 

1.5  配置连接Controller

1.5.1  Controller角色简介

一个OpenFlow交换机可以与多个Controller建立连接,初始连接时,多个Controller的角色相同,权限相同,Controller可以通过OpenFlow消息设置本Controller的角色,各种角色的权限如表1-22所示。

表1-22 Controller角色

角色

权限

Master

处于该角色的Controller拥有全部权限,可以下发流表项,查询统计信息,接收设备上报的状态信息,在多个Controller中仅能有一个Controller是Master角色

Equal

处于该角色的Controller同样拥有全部权限,相对于Master角色,唯一不同的是可以有多个Controller处于Equal角色

Slave

处于该角色的Controller仅拥有部分权限,Controller to switch消息中不能下发流表项,Group表项以及Meter表项,不允许修改接口配置和设备配置,不允许执行Packet Out操作。异步消息中,缺省情况下设备不会上送Flow Remove消息和Packet In消息,仅能上送接口状态变化消息,但是异步消息的上送能力可以通过Controller的设置异步消息进行修改

 

1.5.2  配置主连接

交换机可以连接多个控制器,但仅允许与每个控制器建立一个主连接,一般用于控制消息的处理(下发流表项、获取数据、信息上报等),需要使用TCP/SSL保持可靠的连接。

如果交换机与控制器之间存在多条路由可达,当交换机进行主备倒换时或者重启后,希望通过原来的路由重新建立连接,而不是新选择的路由,此时可以通过配置交换机与控制器连接的源IP地址来实现。

表1-23 配置主连接

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置主连接

controller controller-id address { ip ipv4-address | ipv6 ipv6-address } [ port port-number ] [ local address { ip local-ipv4-address | ipv6 local-ipv6-address } [ port local-port- number ] ] [ ssl ssl-policy-name ] [ vrf vrf-name ]

缺省情况下,不存在主连接

建议控制器的IP地址使用单播地址,否则交换机和控制器之间可能无法建立连接

建议源IP地址使用单播地址,且该IP地址是OpenFlow实例下一个端口的IP地址,否则交换机和控制器之间可能无法建立连接

 

1.5.3  配置辅助连接

OpenFlow通道可以由一个主连接和多个辅助连接组成。辅助连接用于提高控制器和OpenFlow交换机的通信能力。辅助连接的目的地址和接口号可以和主连接不一致。

辅助连接命令行和主连接命令行不做额外的检查处理。如果配置冲突,辅助连接将无法建立。

地址或接口号未指定时,和主连接一致。

表1-24 配置辅助连接

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置实例辅助连接

controller id auxiliary auxiliary-id transport { tcp | udp | ssl ssl-policy-name } [ address { ip ipv4-address | ipv6 ipv6-address } ] [ port port-number ]

缺省情况下,不存在辅助连接

 

1.5.4  配置连接中断模式

一旦交换机与所有控制器断开连接,则交换机必须进入连接中断模式,模式分为两种:

·     Secure模式:连接断开后,交换机根据流表项转发。不主动删除控制器下发的表项,而是等待表项超时后进行删除,一旦连接建立成功,未超时的表项依然存在。

·     Standalone模式:连接断开后,交换机正常转发。

如果交换机与控制器重新连接成功,则继续作为OpenFlow设备根据流表项进行转发。

表1-25 配置连接中断模式

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置连接中断模式

fail-open mode { secure | standalone }

缺省情况下,OpenFlow实例建立时,缺省为Secure模式,且为该实例下发Table Miss表项(动作为drop)

 

1.6  配置OpenFlow定时器

控制器和交换机都会发送Echo request/reply报文,用于验证连接是否正常。

连接检测定时器用来定义发送Echo request报文时间间隔,当超过三次Echo request报文发送并且没有收到Echo reply报文,则交换机与控制器的连接断开。

重连定时器用来定义OpenFlow实例与控制器断开连接后下次开始重新连接的时间。

表1-26 配置OpenFlow定时器

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置连接检测定时器

controller echo-request interval interval

缺省情况下,发送Echo request报文的时间间隔为5秒

配置重连定时器

controller connect interval interval

缺省情况下,OpenFlow实例与控制器重连尝试的时间间隔为60秒

 

1.7  配置支持动态MAC地址

此功能仅在支持MAC-IP流表情况下,决定是否支持控制器在查询或者删除流表项时包含动态MAC地址。

表1-27 配置支持动态MAC地址

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置支持动态MAC地址

mac-ip dynamic-mac aware

缺省情况下,不支持动态MAC地址,即忽略控制器下发的此类消息

 

1.8  配置允许ARP报文修改OpenFlow ARP表项

配置本功能后,OpenFlow ARP表项可以被动态ARP表项覆盖,即允许ARP报文修改OpenFlow ARP表项。本功能仅支持MAC-IP流表。

表1-28 配置允许ARP报文修改OpenFlow ARP表项

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置允许ARP报文修改OpenFlow ARP表项

precedence dynamic arp

缺省情况下,不允许ARP报文修改OpenFlow ARP表项

 

1.9  刷新OpenFlow实例下所有MAC-IP表的三层表项

某些情况下,MAC-IP表的三层表项会被覆盖,此时需要手工执行本命令刷新MAC-IP表,重新从控制器获取新的三层表项。

表1-29 刷新OpenFlow实例下所有MAC-IP表的三层表项

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

刷新OpenFlow实例下所有MAC-IP表的三层表项

refresh ip-flow

-

 

1.10  配置OpenFlow报文的DSCP值

配置本功能后,可以根据实际需求修改OpenFlow报文的DSCP值。

表1-30 配置OpenFlow报文的DSCP值

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置OpenFlow报文的DSCP值

tcp dscp dscp-value

缺省情况下,OpenFlow报文的DSCP值为10

 

1.11  开启OpenFlow连接备份功能

本功能只在基于TCP的OpenFlow连接上有效。

本功能通过备份OpenFlow连接信息,使设备在发生主备倒换时保持OpenFlow连接。

表1-31 开启OpenFlow连接备份功能

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

开启OpenFlow连接备份功能

tcp-connection backup

缺省情况下,OpenFlow连接备份功能处于开启状态

 

1.12  配置允许聚合成员端口出现在控制器下发的流表中

配置本功能后,允许聚合成员端口出现在控制器下发的流表中。

表1-32 配置允许聚合成员端口出现在控制器下发的流表中

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

允许聚合成员端口出现在控制器下发的流表中

permit-port-type member-port

缺省情况下,聚合成员端口不会出现在控制器下发的流表中

 

1.13  OpenFlow显示和维护

在完成上述配置后,在任意视图下执行display命令可以显示配置后OpenFlow的运行情况。

表1-33 OpenFlow显示和维护

操作

命令

显示OpenFlow实例的详细信息

display openflow instance [ instance-id ]

显示OpenFlow实例的流表信息

display openflow instance instance-id flow-table [ table-id ]

显示OpenFlow实例的控制器信息

display openflow instance instance-id { controller [ controller-id ] | listened }

显示OpenFlow实例的Group信息

display openflow instance instance-id group [ group-id ]

显示OpenFlow实例的Meter信息

display openflow instance instance-id meter [ meter-id ]

显示OpenFlow实例的概要信息

display openflow summary

显示OpenFlow实例的辅助连接信息和收发的报文统计信息等

display openflow instance instance-id auxiliary [ controller-id [ auxiliary auxiliary-id ] ]

清除控制器发送和接收报文的统计计数

reset openflow instance instance-id { controller [ controller-id ] | listened } statistics

 

1.14  OpenFlow典型配置举例

1.14.1  VLAN类型OpenFlow典型配置举例

1. 组网需求

·     创建OpenFlow实例1,把VLAN 4092和4093映射到OpenFlow实例中1,并激活实例。

·     配置OpenFlow实例1连接的控制器,用来控制Device上的流量转发。

2. 组网图

图1-7 VLAN类型OpenFlow配置组网图

 

3. 配置步骤

(1)     配置VLAN

# 创建VLAN 4092和4093。

<Device> system-view

[Device] vlan 4092

[Device-vlan4092] quit

[Device] vlan 4093

[Device-vlan4093] quit

(2)     创建实例并映射VLAN

[Device] openflow instance 1

[Device-of-inst-1] classification vlan 4092 mask 4094

(3)     配置控制器1的IP地址为192.168.49.49,并激活实例

[Device-of-inst-1] controller 1 address ip 192.168.49.49

[Device-of-inst-1] active instance

4. 验证配置

# 显示实例详细信息。

[Device-of-inst-1] display openflow instance 1

Instance 1 information:

 

Configuration information:

 Description   : --

 Active status : Active

 Inactive configuration:

  None

 Active configuration:

  Classification VLAN, total VLANs(2)

   4092-4093

  In-band management VLAN, total VLANs(0)

   Empty VLAN

  Connect mode: Multiple

  Mac-address learning: Enabled

  TCP DSCP value: 10

  Flow table:

   Table ID(type): 0(Extensibility), count: 0

  Flow-entry max-limit: 65535

  Datapath ID: 0x0064001122000101

  Default table-miss: Permit

  Forbidden port: VLAN interface

  Qinq Network: Disabled

  TCP connection backup: Enabled

Port information:

 GigabitEthernet1/1/3

Active channel information:

 Controller 1 IP address: 192.168.49.49 port: 6633

1.14.2  接口类型OpenFlow典型配置举例

1. 组网需求

·     创建OpenFlow实例1,把接口GigabitEthernet1/1/1和GigabitEthernet1/1/2映射到OpenFlow实例中1,并激活实例。

·     配置OpenFlow实例1连接的控制器,用来控制Device上的流量转发。

2. 组网图

图1-8 接口类型OpenFlow配置组网图

3. 配置步骤

(1)     创建OpenFlow实例并配置按接口划分该实例、以及OpenFlow对应的接口。

<Device> system-view

[Device] openflow instance 1

[Device-of-inst-1] classification port

(2)     配置控制器1的IP地址为192.168.49.49,并激活实例

[Device-of-inst-1] controller 1 address ip 192.168.49.49

[Device-of-inst-1] active instance

(3)     配置OpenFlow对应的接口。

[Device-of-inst-1] port gigabitethernet 1/1/1 to gigabitethernet 1/1/2

4. 验证配置

# 显示实例详细信息。

[Device-of-inst-1] display openflow instance 1

Instance 1 information:

 

Configuration information:

 Description   : : --

 Active status : Active

 Inactive configuration:

  None

 Active configuration:

  Classification: Port

  In-band management VLAN, total VLANs(0)

   Empty VLAN

  Connect mode: Multiple

  MAC address learning: Enabled

  TCP DSCP value: 10

  Flow table:

   Table ID(type): 0(Extensibility), count: 0

  Flow-entry max-limit: 65535

  Datapath ID: 0x00017e91a6b70100

  Default table-miss: Drop

  Forbidden port: None

  Qinq Network: Disabled

  TCP connection backup: Enabled

Port information:

 GigabitEthernet1/1/1

 GigabitEthernet1/1/2

Active channel information:

 Controller 1 IP address: 192.168.49.49 port: 6633

1.15  附录 A 应用限制

1.15.1  Flow Entry的限制

1. 匹配的限制

在使用VLAN划分OpenFlow实例的情况下,对VLAN的匹配存在一定的限制。

表1-34 VLAN匹配项列表

VLAN

MASK

匹配的报文

-

-

匹配在OpenFlow实例VLAN内的所有报文

0

-

匹配无VLAN tag的报文,但是入接口的PVID必须是在OpenFlow实例内

0

有值

不支持

有效VLAN

-/有值

不支持

0x1000

-/非0x1000的值

不支持

0x1000

0x1000

匹配有VLAN tag的报文,但是该VLAN tag必须在OpenFlow实例内

有效VLAN

| 0x1000

-/有值

根据VLAN+MASK进行匹配,前提是VLAN+MASK必须在OpenFlow实例内

其它

其它

不支持

 

2. Instruction的限制

不支持Action List中包含多个Output的情况,仅支持一个Output时,请参见1.15.2 

1.15.2  Action List和Action Set整合的限制

OpenFlow Switch设备整合Action Set和Action List为Action Set,其整合原则如下。

1. 非Output Action

Action List和Action Set中的Action(除Output和Group外)如果不存在冲突,则全部保留为Action Set;如果存在冲突,则以Action Set的动作替换Action List中的动作(其原因是Action List要执行在Action Set之前)。

2. Output Action

·     当Action List和Action Set中都存在一个Output的Action时,Action List中的Output发送的报文不会对报文进行任何修改,其执行顺序最优,Action Set中的Ouput会执行Action List和Action Set中的所有修改。

·     当Action List和Action Set中仅存在一个Output的Action时,该Output为报文出接口,执行顺序按照Action Set的顺序。

·     当Action List中存在一个Output的Action,Action Set中存在一个Group的Action(Output的Action存在与否都可以)时,Action List中的Output发送的报文不会对报文进行任何修改,Group在Action Set中。

·     其它情况,不支持。

1.15.3  Packet Out的处理限制

1. 入接口限制

在Packet out消息中Output为Normal、Local、In port或To Controller时,入接口只能是设备上的物理接口或者逻辑接口,不能是OpenFlow保留口。

2. Buffer ID和报文内容同时存在的处理

在Packet Out消息中如果同时存在Buffer ID和报文,OpenFlow Switch只会获取Buffer ID对应的缓存报文进行处理,忽略消息中携带的报文。

3. 无VLAN Tag报文的处理

如果Packet Out消息中的报文没有VLAN tag,则OpenFlow Switch将入接口的PVID做为报文所在的VLAN进行转发处理。

·     如果入接口不是设备上的接口,且Output是设备上的接口,则使用出接口的PVID发送。

·     如果入接口不是设备上的接口,且Output是保留口Flood和All,请参见4. 的处理。

4. 出接口限制

Packet Out中指定的Output为保留口的Flood和All时的处理机制。

(1)     出接口为Flood的情况

·     Packet Out的报文携带VLAN tag,则报文在该VLAN内广播。

·     Packet Out的报文没有携带VLAN tag,但是入接口是OpenFlow Swtich上的接口,则报文在入接口的PVID内广播。

·     Packet Out的报文没有携带VLAN tag,并且入接口是Controller,则报文在所有OpenFlow接口发送一份。

(2)     出接口为All的情况

·     Packet Out的报文携带VLAN tag,则报文在该VLAN内广播。

·     Packet Out的报文没有携带VLAN tag,无论入接口是什么接口,报文都在所有OpenFlow接口发送一份。

1.15.4  Packet in的处理限制

1. 报文VLAN tag处理

对于Packet in消息中的报文:

·     上送时如果其VLAN tag与该报文入接口的PVID相同,那么该报文的VLAN tag会被删除。

·     上送时如果其VLAN tag与该报文入接口的PVID不同,那么该报文的VLAN tag不会被删除。

2. 报文缓存限制

·     对于上送原因是No Match的报文支持缓存,缓存大小是1K个报文。

·     对于其它上送原因的报文不支持缓存,整个报文都会被上送,并且Cookie是全F。

1.15.5  Flow Mod的限制

1. Table Miss表项的添加、修改和删除

·     Switch在激活后缺省会生成Table Miss表项,其动作是Drop,此表项不能被Controller通过Modify的动作修改,不能被Controller通过Mulipart消息查询到,仅能由Controller通过Add进行添加Table Miss的动作进行修改。

·     Table Miss表项仅能通过严格匹配进行修改和删除,在非严格匹配的情况下,即使匹配项是通配也不能够操作Table Miss表项。

·     Table Miss表项被删除后,会生成缺省的Table Miss表项,其动作是Drop。

2. 普通表项的添加、修改和删除

·     在非严格匹配的情况下,不支持通过match域为通配修改所有普通流表项。

1.16  附录 B MAC-IP流表

OpenFlow Switch支持两种类型的Flow Table,MAC-IP类型和Extensibility类型。允许通过命令行指定Table ID,Flow Table会根据Table ID进行排序。Flow Table需要重新激活后才能生效。

MAC-IP流表是使用MAC地址表项和路由表项实现Flow Table;Extensibility表使用ACL实现Flow Table。

1.16.1  MAC-IP流表支持能力

必选的能力是Controller下发时必须携带的匹配或者动作项,可选能力是下发时可携带可不携带,如果不携带的话由Switch添加缺省的匹配或者动作项。

二层表项使用MAC地址表实现,其支持能力如表1-35所示。

表1-35 MAC-IP流表二层表项支持能力

支持项

能力

必选匹配项

·     VLAN

·     单播目的MAC地址

可选匹配项

必选动作项

指定出接口

可选动作项

 

三层表项使用路由表实现,其支持能力如表1-36所示。

表1-36 MAC-IP流表三层表项支持能力

支持项

能力

必选匹配项

·     VLAN

·     单播目的IP地址

·     单播目的MAC地址(必须是匹配VLAN对应的VLAN接口的MAC地址)

可选匹配项

必选动作项

·     指定出接口

·     修改VLAN

·     修改目的MAC地址

可选动作项

·     TTL减1

 

1.16.2  MAC-IP流表的限制

MAC-IP流表的Flow Entry有一定的限制,Controller需要遵循这些限制下发表项,否则可能会造成转发错误。

二层表项的限制如表1-37所示。

表1-37 MAC-IP流表二层表项限制

表项类型

限制

匹配项限制

目的MAC地址不是本机MAC地址

动作项限制

出接口属于匹配的VLAN

 

三层表项的限制如表1-38所示。

表1-38 MAC-IP流表三层表项限制

表项类型

限制

匹配项限制

·     匹配的VLAN所对应的VLAN接口UP

·     目的MAC地址是匹配VLAN对应的VLAN接口的MAC地址

·     目的IP地址不是本机IP地址

动作项限制

·     指定出接口属于目的VLAN

·     目的MAC地址不是本机MAC地址

 

说明

三层表项能够下发的前提是匹配VLAN所对应的VLAN接口存在并且处于UP状态,且VLAN接口会做为OpenFlow接口上报(包括了VLAN接口的链路状态和MAC地址),在VLAN接口删除时同时也会上报给Controller,需要由Controller删除对应的三层流表项,因此需要Controller保证三层表项的正确性,Switch端不对三层表项的匹配项限制进行检查。

 

1.16.3  MAC-IP流表的Table Miss

MAC-IP流表的Table Miss支持下列Output Action:

·     Drop:丢弃报文;

·     Controller:报文上送Controller;

·     Normal:报文正常转发。

1.16.4  Dynamic aware

在支持MAC-IP流表的情况下,Switch支持Controller获取和删除动态MAC地址表项。

Controller可以通过指定VLAN、单个MAC或者单个MAC与VLAN来获取和删除动态MAC地址表项。

1.16.5  MAC-IP Table与Extensibility Table的配合

Extensibility表和MAC-IP表配合时:

·     当Extensibility表中的Output动作不是Normal时,MAC-IP表不会生效,所有动作根据Extensibility表进行处理;

·     当Extensibility表中的Output动作是Normal时,Output动作根据MAC-IP表进行处理,其余动作根据Extensibility表进行处理。

1.17  附录 C Ingress-vlan流表和Egress-vlan流表

1.17.1  Ingress-vlan流表支持能力

必选能力是控制器下发流表时必须携带的匹配项或者动作项;可选能力是可携带可不携带,如果不携带就由设备赋予缺省内容。

表1-39 Ingress-vlan流表支持能力

支持项

能力

必选匹配项

·     input-port

·     vlan

可选匹配项

必选动作

·     Apply-Actions

·     Push-Tag

·     Set-Field (VLAN)

可选动作

·     Output (normal)

 

对于动作中的Push-Tag和Set-Field (VLAN),需要使用Apply-Actions指令。两个动作需要配合使用,配合原则如下所述:

·     Push-Tag + Set-Field (value1)表示增加一个VLAN tag,值为value1;

·     Set-Field (value1) + Push-Tag + Set-Field (value2)表示修改原报文VLAN tag为value1,并且增加一层VLAN tag,值为value2;

·     Push-Tag + Set-Field (value1) + Push-Tag + Set-Field (value2)表示增加两层VLAN tag,第一层值为value1,第二层值为value 2。

1.17.2  Egress-vlan流表支持能力

表1-40 Egress-vlan流表支持能力

支持项

能力

必选匹配项

·     egress port扩展匹配项

·     vlan

可选匹配项

·     inner vlan扩展匹配项

必选动作

·     Apply-Actions

·     Pop-Tag

·     Set-Field (VLAN)

可选动作

·     Output (normal)

 

Egress-vlan流表仅作用于双层VLAN tag报文。egress port扩展匹配项用来指定出接口,inner vlan扩展匹配项用来匹配内层VLAN,基本匹配项vlan用来匹配外层VLAN。这两个扩展匹配域所用的实验者ID均为H3C,即0xFE2,同时,egress port和inner vlan两个私有匹配域值为47和48。下发此种流表项的控制器需要对应实验者ID和扩展匹配域进行开发,以适配此功能。

对于动作中的Pop-Tag和Set-Field (VLAN),需要使用Apply-Actions指令。两个动作需要配合使用,配合原则如下所述:

·     Pop-Tag表示从报文中剥离外层VLAN tag;

·     Pop-Tag + Pop-Tag表示从报文中剥离两个VLAN tag;

·     Pop-Tag + Set-Field (value)表示先从报文中剥离一个VLAN,然后修改没有剥离的VLAN的值为value。

 

不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!

新华三官网
联系我们