---
title: OVS开放编程
description: "OVS 开放编程支持外部开发者基于华为DPU卡的OVS业务进行扩展定制，外部开发者可以在OVS的match-actions（匹配-动作，一种广泛应用于网络数据平面编程的核心处理范式）机制上，实现自定义报文解析、自定义流表、流表key/action和自定义pipeline能力。"
url: https://www.hikunpeng.com/document/detail/zh/flexda/devguide/dpak_dev0005.html
sourcePath: /source/zh/flexda/devguide/dpak_dev0005.html
indexId: 5e0f4de7d4764159cc80792fa233fd28daff43e007e3fc2b1d9b3a68d751be3f44
---
# OVS开放编程

#### 应用场景

OVS 开放编程支持外部开发者基于华为DPU卡的OVS业务进行扩展定制，外部开发者可以在OVS的match-actions（匹配-动作，一种广泛应用于网络数据平面编程的核心处理范式）机制上，实现自定义报文解析、自定义流表、流表key/action和自定义pipeline能力。


#### 实现原理

OVS 开放可编程，底层依托OVS提供的match-actions业务逻辑，支持报文转发处理的pipeline构建。

OVS开放编程，在match-actions的底层运行逻辑基础上，开放自定义报文解析、自定义流表（含key/action逻辑）。同时提供JUMP逻辑，支持开发者将多个match-actions单元组织成一个pipeline，来表达更加复杂的报文处理转发逻辑，理论上可以实现对报文转发处理范畴内的任意操作，具有扩展性。

图1 编译流程

DSL 提供了源代码到源代码的方式，将DSL翻译成微码C语言，再经过微码编译器完成C语言到 FlexDA 固件二进制的编译工作，根据微码数据面开放编程接口将用户自定义微码插入数据面执行逻辑中。

DSL翻译过程中，还产生了hydrainfo文件，该文件类似P4（一种网络设备的特定领域语言）的p4info.txt文件，是用DSL编写的数据面程序向控制面提供的流表信息接口，主要用于控制面对数据面下发流表时，定义流表的key组成元组信息、可选的action列表及其相关的action data。

在用户控制面软件为开源或定制OpenVSwitch的场景下，编程框架提供简易的OVS控制面编程能力。用户可以通过引入hydrainfo文件，实现编程框架提供的控制面钩子函数（在软件框架中预置的、允许用户在特定处理阶段插入自定义代码的接口函数）并生成动态链接库的方式，自定义与数据面用户自定义微码匹配的流表下发逻辑。详情可参见控制面开发简要步骤。
