ovs实现的几种openflow扩展消息
前言
openflow是一个标准的交换机配置协议,主要用于SDN控制面下发流表给交换机设备。openflow支持很多厂家的交换机,包括硬件白牌交换机,以及openvswitch。
openflow协议定义了一系列标准的行为,是所有交换机都需要支持的,但是也定义了一些可扩展的行为,由各交换机厂家自己去实现。openflow使用“experiment” 类型来描述可扩展的消息,各交换机厂家将自己定义的可扩展消息包含在“experiment” 类型的openflow消息总。
本文所描述的是openvswitch实现的一些Openflow 1.3 扩展消息,它们基于 “experiment” 类型的openflow消息。
"experiment"消息的格式如下:
http://flowgrammable.org/static/media/uploads/msgs/experimenter_1_2.png
Experiment消息头部包含2个字段,这2个字段分别是下面的表格所示。
- ExperimenterId = 0x00002320,表示 Nirica 公司开发 Openvswitch时实现的可扩展消息。
- ExpType定义了具体的消息类型。
接下来具体介绍下几种的不同Experiment消息类型和其消息内容。
设置 Controller ID 消息
其消息类型ExpType = 20。
其消息体内容就是 Controller Id,类型是 uint16。
设置 Packet In format 消息
ExpType = 16。
消息体格式为:
Packet In format 字段的取值如下,支持 User Data 的是 NXPIF_NXT_PACKET_IN2:
NXPIF_STANDARD NxPacketInFormat = 0 /* OFPT_PACKET_IN for this OpenFlow version. */NXPIF_NXT_PACKET_IN NxPacketInFormat = 1 /* NXT_PACKET_IN (since OVS v1.1). */NXPIF_NXT_PACKET_IN2 NxPacketInFormat = 2 /* NXT_PACKET_IN2 (since OVS v2.6). */
NXM Packet In 2 消息
这个消息是Openvswitch支持的扩展Packet in消息,可以携带 用户自定义的 User Data,用于实现和 Controller 的一些交互。OVN中有用到UserData。
其消息类型为ExpType = 30。
消息体内容为 Openflow 属性数组,数组的每个元素都是一个Openflow属性。
其消息体内容格式如下:
属性是一个TLV格式的结构体,其格式为:
学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂
更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,久学习,或点击这里加qun免费
领取,关注我持续更新哦! !
Type 有如下几种取值:
/* Packet. */NXPINT_PACKET = 0 /* Raw packet data. */NXPINT_FULL_LEN = 1 /* ovs_be32: Full packet len, if truncated. */NXPINT_BUFFER_ID = 2 /* ovs_be32: Buffer ID, if buffered. *//* Information about the flow that triggered the packet-in. */NXPINT_TABLE_ID = 3 /* uint8_t: Table ID. */NXPINT_COOKIE = 4 /* ovs_be64: Flow cookie. *//* Other. */NXPINT_REASON = 5 /* uint8_t, one of OFPR_*. */NXPINT_METADATA = 6 /* NXM or OXM for metadata fields. */NXPINT_USERDATA = 7 /* From NXAST_CONTROLLER2 userdata. */NXPINT_CONTINUATION = 8 /* Private data for continuing processing. */
length 是Type + Length + Value 的字节数,不包括 Pad。一般头部 Type + Length = 4。对于 experimenter ofpproperty,头部长度是 = 12。
每个struct ofpproperty 占用的内存大小是 8 字节的整数倍,所以内容后面可能存在一定长度的 pad,内容为0。pad 的长度是 length 取整到8的整数倍之后减去 length 的结果。
补充下 Type = NXPINT_METADATA 的格式:
这种 Type 里面存储的数据是 flow 的 match 部分。ovs 支持 可扩展格式的 match,在 ovs 不支持可扩展 match 的时候,nirica 自己定义了一种可扩展 match 结构体格式 叫 nxm_match,后面 openflow 基于 nirica 的成果也定义出了可扩展的 match 格式叫 oxm_match。
现在我们使用的openflow 1.3,所以里面表达的是oxm_match。
NXPINT_METADATA 对应的内容也是一系列 类似TLV格式的结构体:
头部内容
头部的格式为:
+ ::
+
+ +----------------------------------+---------------+--+------------------+
+ | oxm_class | oxm_field |hm| oxm_length |
+ +----------------------------------+---------------+--+------------------+
+
+ The oxm_class value of OFPXMC_NXM_0 or OFPXMC_NXM_1 can be used an
+ OpenFlow 1.2+ message to use a Nicira 'nxm_field' otherwise standard
+ OpenFlow fields are used when the oxm_class has a value of
+ OFPXMC_OPENFLOW_BASIC.
oxm_length为内容的字节数。 对于match中的in_port栏位,oxm_class = 0, oxm_field = 0, hm = 0.
参考资料
[ovs-dev,v1] doc: Added OVS Nicira Extension documentpatchwork.ozlabs.org/patch/1145870/
原文链接:https://zhuanlan.zhihu.com/p/96850032
ovs实现的几种openflow扩展消息相关推荐
- 环信3.0自定义扩展消息
最近公司项目需要用到环信,早就听说过环信文档写的比较坑,继承过后才发现哪里是坑,简直是无底洞... 项目需求是这样的,菜单中有一个房源按钮,点击后弹出房源信息列表,点击列表中的Item将此条Item的 ...
- OpenFlow Flow-Mod消息学习
实验教程 任务内容 1. 熟悉Flow-Mod消息触发场景. 2. 掌握Flow-Mod消息格式和常用字段含义. 任务环境 设备名称 软件环境(镜像) 硬件环境 控制器 RYU4.7.0桌面版 CPU ...
- 一种基于扩展反电动势的永磁同步电机无位置控制算法,全部C语言 编写,含有矢量控制大部分功能(弱磁,解耦,过调制,死区补偿等)
一种基于扩展反电动势的永磁同步电机无位置控制算法,全部C语言 编写,含有矢量控制大部分功能(弱磁,解耦,过调制,死区补偿等) 为了方便学习和工作,该产品结合S-Function进行仿真,且属于量产产品 ...
- 单片机按键连接方法总结(五种按键扩展方案详细介绍)
http://blog.sina.com.cn/s/blog_634771fd0100hd1h.html 单片机在各种领域运用相当广泛,而作为人机交流的按键设计也有很多种.不同的设计方法,有着不同的优 ...
- usb扩展坞同时接键盘鼠标_一种带有扩展坞功能的一体式键鼠的制作方法
一种带有扩展坞功能的一体式键鼠的制作方法 [技术领域] [0001]本实用新型涉及加固计算机技术领域,具体涉及一种带有扩展坞功能的一体式键 ea啦O [背景技术] [0002]随着加固计算机技术的不断 ...
- Android接入环信扩展消息显示头像、昵称
Android环信官方集成文档:http://docs.easemob.com/im/200androidclientintegration/10androidsdkimport 我在项目里集成环信时 ...
- Spring注解@Qualifier的详细用法你知道几种「扩展点实战系列」- 第444篇
历史文章(文章累计440+) <国内最全的Spring Boot系列之一> <国内最全的Spring Boot系列之二> <国内最全的Spring Boot系列之三> ...
- 小程序消息主动推送php,微信小程序有几种推送消息的方式
微信小程序有5种推送消息的方式,分别为:1.小票机订单提醒,实现对商家的消息提醒:2.短信提醒:3.模板消息,各种动态可及时掌握:4.公众号订单提醒:5.消息主动推送,商家主动出击.推销自己的最好手段 ...
- 一种自动反射消息类型的 Google Protobuf 网络传输方案
陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice t.sina.com.cn/giantchen 这篇文章要解决的问题是:在接收到 protobuf 数据 ...
最新文章
- 什么是数据结构,为什么我们需要数据结构?
- Airflow 中文文档:Lineage
- 宇宙第一 IDE Visual Studio 2019 支持 C++ 和 Python 了!
- 设计模式之十一:创建模式(Builder Pattern)
- java线程池需要shutdown吗_公用线程池要不要shutdown?
- C#三层架构详细解剖
- win7旗舰版6l打印机咋安驱动_打印机安装不了,教您解决打印机驱动安装不了
- No service of type FactoryLoggingManagerInternal available in ProjectScopeServices.
- 计算机图形学入门(十六)-光线追踪(渲染方程)
- Oralce Autovue Web Server (Servlet)启动异常
- java毕业设计毕业论文答辩管理系统Mybatis+系统+数据库+调试部署
- 用python画箱体图
- 森笔记app软件 开发记录
- Linux命令 rm -rf报错 mv无效选项 --‘r‘
- 2022-2028全球与中国夹层升降机市场现状及未来发展趋势
- Clickhouse Kafka Engin参数记录
- github代码clone加速
- NVT SDK开关机LOGO替换实践
- P14-统计英语文章出现最多的英语单词
- 分享几个精美的个人简历模板,非常不错的简历,docx格式的可直接修改。