前言

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 document​patchwork.ozlabs.org/patch/1145870/

原文链接:https://zhuanlan.zhihu.com/p/96850032

ovs实现的几种openflow扩展消息相关推荐

  1. 环信3.0自定义扩展消息

    最近公司项目需要用到环信,早就听说过环信文档写的比较坑,继承过后才发现哪里是坑,简直是无底洞... 项目需求是这样的,菜单中有一个房源按钮,点击后弹出房源信息列表,点击列表中的Item将此条Item的 ...

  2. OpenFlow Flow-Mod消息学习

    实验教程 任务内容 1. 熟悉Flow-Mod消息触发场景. 2. 掌握Flow-Mod消息格式和常用字段含义. 任务环境 设备名称 软件环境(镜像) 硬件环境 控制器 RYU4.7.0桌面版 CPU ...

  3. 一种基于扩展反电动势的永磁同步电机无位置控制算法,全部C语言 编写,含有矢量控制大部分功能(弱磁,解耦,过调制,死区补偿等)

    一种基于扩展反电动势的永磁同步电机无位置控制算法,全部C语言 编写,含有矢量控制大部分功能(弱磁,解耦,过调制,死区补偿等) 为了方便学习和工作,该产品结合S-Function进行仿真,且属于量产产品 ...

  4. 单片机按键连接方法总结(五种按键扩展方案详细介绍)

    http://blog.sina.com.cn/s/blog_634771fd0100hd1h.html 单片机在各种领域运用相当广泛,而作为人机交流的按键设计也有很多种.不同的设计方法,有着不同的优 ...

  5. usb扩展坞同时接键盘鼠标_一种带有扩展坞功能的一体式键鼠的制作方法

    一种带有扩展坞功能的一体式键鼠的制作方法 [技术领域] [0001]本实用新型涉及加固计算机技术领域,具体涉及一种带有扩展坞功能的一体式键 ea啦O [背景技术] [0002]随着加固计算机技术的不断 ...

  6. Android接入环信扩展消息显示头像、昵称

    Android环信官方集成文档:http://docs.easemob.com/im/200androidclientintegration/10androidsdkimport 我在项目里集成环信时 ...

  7. Spring注解@Qualifier的详细用法你知道几种「扩展点实战系列」- 第444篇

    历史文章(文章累计440+) <国内最全的Spring Boot系列之一> <国内最全的Spring Boot系列之二> <国内最全的Spring Boot系列之三> ...

  8. 小程序消息主动推送php,微信小程序有几种推送消息的方式

    微信小程序有5种推送消息的方式,分别为:1.小票机订单提醒,实现对商家的消息提醒:2.短信提醒:3.模板消息,各种动态可及时掌握:4.公众号订单提醒:5.消息主动推送,商家主动出击.推销自己的最好手段 ...

  9. 一种自动反射消息类型的 Google Protobuf 网络传输方案

    陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice  t.sina.com.cn/giantchen 这篇文章要解决的问题是:在接收到 protobuf 数据 ...

最新文章

  1. 什么是数据结构,为什么我们需要数据结构?
  2. Airflow 中文文档:Lineage
  3. 宇宙第一 IDE Visual Studio 2019 支持 C++ 和 Python 了!
  4. 设计模式之十一:创建模式(Builder Pattern)
  5. java线程池需要shutdown吗_公用线程池要不要shutdown?
  6. C#三层架构详细解剖
  7. win7旗舰版6l打印机咋安驱动_打印机安装不了,教您解决打印机驱动安装不了
  8. No service of type FactoryLoggingManagerInternal available in ProjectScopeServices.
  9. 计算机图形学入门(十六)-光线追踪(渲染方程)
  10. Oralce Autovue Web Server (Servlet)启动异常
  11. java毕业设计毕业论文答辩管理系统Mybatis+系统+数据库+调试部署
  12. 用python画箱体图
  13. 森笔记app软件 开发记录
  14. Linux命令 rm -rf报错 mv无效选项 --‘r‘
  15. 2022-2028全球与中国夹层升降机市场现状及未来发展趋势
  16. Clickhouse Kafka Engin参数记录
  17. github代码clone加速
  18. NVT SDK开关机LOGO替换实践
  19. P14-统计英语文章出现最多的英语单词
  20. 分享几个精美的个人简历模板,非常不错的简历,docx格式的可直接修改。

热门文章

  1. 微信小程序接口安全优化(AES加密)
  2. 打折与优惠券哪个对消费者更具吸引力? 穆利堂推荐
  3. 虹科案例 | 2016年 Komatsu 138US负载下发动机抖动
  4. 解决PyCharm下载Python第三方库时速度慢的问题
  5. 基于朴素贝叶斯的图像分类
  6. python输出10以内的素数,并写出合数的因子
  7. Dubbo、Spring Cloud和kubernetes该如何选型?
  8. 基于Stm32的充电桩系统
  9. 【C语言入门】编写程序,输入ASCII,输出相应字符。
  10. Godsend(博弈)