|
Open vSwitch CI |
70cc8f |
diff --git a/NEWS b/NEWS
|
|
Open vSwitch CI |
1ce680 |
index 2e5356c5cd..c670cf8f35 100644
|
|
Open vSwitch CI |
70cc8f |
--- a/NEWS
|
|
Open vSwitch CI |
70cc8f |
+++ b/NEWS
|
|
Open vSwitch CI |
1ce680 |
@@ -1,3 +1,6 @@
|
|
Open vSwitch CI |
039fb7 |
+v3.5.1 - xx xxx xxxx
|
|
Open vSwitch CI |
039fb7 |
+--------------------
|
|
Open vSwitch CI |
039fb7 |
+
|
|
Open vSwitch CI |
1ce680 |
v3.5.0 - 17 Feb 2025
|
|
Open vSwitch CI |
70cc8f |
--------------------
|
|
Open vSwitch CI |
70cc8f |
- The limit on the number of fields for address prefix tracking in flow
|
|
Open vSwitch CI |
70cc8f |
diff --git a/configure.ac b/configure.ac
|
|
Open vSwitch CI |
1ce680 |
index 2b19888775..60122e4913 100644
|
|
Open vSwitch CI |
70cc8f |
--- a/configure.ac
|
|
Open vSwitch CI |
70cc8f |
+++ b/configure.ac
|
|
Open vSwitch CI |
70cc8f |
@@ -13,7 +13,7 @@
|
|
Open vSwitch CI |
70cc8f |
# limitations under the License.
|
|
Open vSwitch CI |
70cc8f |
|
|
Open vSwitch CI |
70cc8f |
AC_PREREQ(2.63)
|
|
Open vSwitch CI |
1ce680 |
-AC_INIT(openvswitch, 3.5.0, bugs@openvswitch.org)
|
|
Open vSwitch CI |
039fb7 |
+AC_INIT(openvswitch, 3.5.1, bugs@openvswitch.org)
|
|
Open vSwitch CI |
70cc8f |
AC_CONFIG_SRCDIR([vswitchd/ovs-vswitchd.c])
|
|
Open vSwitch CI |
70cc8f |
AC_CONFIG_MACRO_DIR([m4])
|
|
Open vSwitch CI |
70cc8f |
AC_CONFIG_AUX_DIR([build-aux])
|
|
Open vSwitch CI |
70cc8f |
diff --git a/debian/changelog b/debian/changelog
|
|
Open vSwitch CI |
1ce680 |
index 1ba7afbf40..ad638cc44f 100644
|
|
Open vSwitch CI |
70cc8f |
--- a/debian/changelog
|
|
Open vSwitch CI |
70cc8f |
+++ b/debian/changelog
|
|
Open vSwitch CI |
1ce680 |
@@ -1,3 +1,9 @@
|
|
Open vSwitch CI |
039fb7 |
+openvswitch (3.5.1-1) unstable; urgency=low
|
|
Open vSwitch CI |
039fb7 |
+ [ Open vSwitch team ]
|
|
Open vSwitch CI |
039fb7 |
+ * New upstream version
|
|
Open vSwitch CI |
039fb7 |
+
|
|
Open vSwitch CI |
039fb7 |
+ -- Open vSwitch team <dev@openvswitch.org> Mon, 17 Feb 2025 13:13:23 +0100
|
|
Open vSwitch CI |
039fb7 |
+
|
|
Open vSwitch CI |
1ce680 |
openvswitch (3.5.0-1) unstable; urgency=low
|
|
Open vSwitch CI |
70cc8f |
|
|
Open vSwitch CI |
70cc8f |
* New upstream version
|
|
Open vSwitch CI |
811847 |
diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
|
|
Open vSwitch CI |
811847 |
index e59ff17ade..d9962765f1 100644
|
|
Open vSwitch CI |
811847 |
--- a/ofproto/ofproto-dpif-xlate.c
|
|
Open vSwitch CI |
811847 |
+++ b/ofproto/ofproto-dpif-xlate.c
|
|
Open vSwitch CI |
811847 |
@@ -3925,9 +3925,9 @@ native_tunnel_output(struct xlate_ctx *ctx, const struct xport *xport,
|
|
Open vSwitch CI |
811847 |
"sending %s request",
|
|
Open vSwitch CI |
811847 |
buf_dip6, out_dev->xbridge->name, d_ip ? "ARP" : "ND");
|
|
Open vSwitch CI |
811847 |
|
|
Open vSwitch CI |
811847 |
- err = ovs_router_get_netdev_source_address(&d_ip6,
|
|
Open vSwitch CI |
811847 |
- out_dev->xbridge->name,
|
|
Open vSwitch CI |
811847 |
- &nh_s_ip6);
|
|
Open vSwitch CI |
811847 |
+ err = ovs_router_get_netdev_source_address(
|
|
Open vSwitch CI |
811847 |
+ &d_ip6, netdev_get_name(out_dev->netdev), &nh_s_ip6);
|
|
Open vSwitch CI |
811847 |
+
|
|
Open vSwitch CI |
811847 |
if (err) {
|
|
Open vSwitch CI |
811847 |
nh_s_ip6 = s_ip6;
|
|
Open vSwitch CI |
811847 |
}
|
|
Open vSwitch CI |
0325f3 |
diff --git a/python/ovs/db/idl.py b/python/ovs/db/idl.py
|
|
Open vSwitch CI |
0325f3 |
index c8cc543465..384428c3fc 100644
|
|
Open vSwitch CI |
0325f3 |
--- a/python/ovs/db/idl.py
|
|
Open vSwitch CI |
0325f3 |
+++ b/python/ovs/db/idl.py
|
|
Open vSwitch CI |
0325f3 |
@@ -1731,7 +1731,7 @@ class Transaction(object):
|
|
Open vSwitch CI |
0325f3 |
and ovs.ovsuuid.is_valid_string(json[1])):
|
|
Open vSwitch CI |
0325f3 |
uuid = ovs.ovsuuid.from_string(json[1])
|
|
Open vSwitch CI |
0325f3 |
row = self._txn_rows.get(uuid, None)
|
|
Open vSwitch CI |
0325f3 |
- if row and row._data is None:
|
|
Open vSwitch CI |
0325f3 |
+ if row and row._data is None and not row._persist_uuid:
|
|
Open vSwitch CI |
0325f3 |
return ["named-uuid", _uuid_name_from_uuid(uuid)]
|
|
Open vSwitch CI |
0325f3 |
else:
|
|
Open vSwitch CI |
0325f3 |
return [self._substitute_uuids(elem) for elem in json]
|
|
Open vSwitch CI |
0325f3 |
@@ -1856,7 +1856,7 @@ class Transaction(object):
|
|
Open vSwitch CI |
0325f3 |
else:
|
|
Open vSwitch CI |
0325f3 |
# Let ovsdb-server decide whether to really delete it.
|
|
Open vSwitch CI |
0325f3 |
pass
|
|
Open vSwitch CI |
0325f3 |
- elif row._changes:
|
|
Open vSwitch CI |
0325f3 |
+ else:
|
|
Open vSwitch CI |
0325f3 |
op = {"table": row._table.name}
|
|
Open vSwitch CI |
0325f3 |
if row._data is None:
|
|
Open vSwitch CI |
0325f3 |
op["op"] = "insert"
|
|
Open vSwitch CI |
0325f3 |
diff --git a/tests/ovsdb-idl.at b/tests/ovsdb-idl.at
|
|
Open vSwitch CI |
0325f3 |
index f9f79f1941..bac6bf2764 100644
|
|
Open vSwitch CI |
0325f3 |
--- a/tests/ovsdb-idl.at
|
|
Open vSwitch CI |
0325f3 |
+++ b/tests/ovsdb-idl.at
|
|
Open vSwitch CI |
0325f3 |
@@ -494,6 +494,15 @@ OVSDB_CHECK_IDL([simple idl, writing via IDL with unicode],
|
|
Open vSwitch CI |
0325f3 |
003: done
|
|
Open vSwitch CI |
0325f3 |
]])
|
|
Open vSwitch CI |
0325f3 |
|
|
Open vSwitch CI |
0325f3 |
+OVSDB_CHECK_IDL([simple idl, inserting without modifying a column, insert_no_columns_changed],
|
|
Open vSwitch CI |
0325f3 |
+ [],
|
|
Open vSwitch CI |
0325f3 |
+ [['insert_no_columns_changed']],
|
|
Open vSwitch CI |
0325f3 |
+ [[000: empty
|
|
Open vSwitch CI |
0325f3 |
+001: commit, status=success
|
|
Open vSwitch CI |
0325f3 |
+002: table simple: i=0 r=0 b=false s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
|
|
Open vSwitch CI |
0325f3 |
+003: done
|
|
Open vSwitch CI |
0325f3 |
+]])
|
|
Open vSwitch CI |
0325f3 |
+
|
|
Open vSwitch CI |
0325f3 |
m4_define([OVSDB_CHECK_IDL_PY_WITH_EXPOUT],
|
|
Open vSwitch CI |
0325f3 |
[AT_SETUP([ovsdb-idl - $1 - Python3])
|
|
Open vSwitch CI |
0325f3 |
AT_KEYWORDS([ovsdb server idl positive Python $5])
|
|
Open vSwitch CI |
0325f3 |
@@ -2817,7 +2826,7 @@ m4_define([OVSDB_CHECK_IDL_PERS_UUID_INSERT_C],
|
|
Open vSwitch CI |
0325f3 |
[0], [stdout], [stderr])
|
|
Open vSwitch CI |
0325f3 |
AT_CHECK([sort stdout],
|
|
Open vSwitch CI |
0325f3 |
[0], [$3])
|
|
Open vSwitch CI |
0325f3 |
- AT_CHECK([grep $4 stderr], [0], [ignore])
|
|
Open vSwitch CI |
0325f3 |
+ m4_if([$4], [], [], [AT_CHECK([grep $4 stderr], [0], [ignore])])
|
|
Open vSwitch CI |
0325f3 |
OVSDB_SERVER_SHUTDOWN
|
|
Open vSwitch CI |
0325f3 |
AT_CLEANUP])
|
|
Open vSwitch CI |
0325f3 |
|
|
Open vSwitch CI |
0325f3 |
@@ -2829,7 +2838,7 @@ m4_define([OVSDB_CHECK_IDL_PERS_UUID_INSERT_PY],
|
|
Open vSwitch CI |
0325f3 |
[0], [stdout], [stderr])
|
|
Open vSwitch CI |
0325f3 |
AT_CHECK([sort stdout],
|
|
Open vSwitch CI |
0325f3 |
[0], [$3])
|
|
Open vSwitch CI |
0325f3 |
- AT_CHECK([grep $4 stderr], [0], [ignore])
|
|
Open vSwitch CI |
0325f3 |
+ m4_if([$4], [], [], [AT_CHECK([grep $4 stderr], [0], [ignore])])
|
|
Open vSwitch CI |
0325f3 |
OVSDB_SERVER_SHUTDOWN
|
|
Open vSwitch CI |
0325f3 |
AT_CLEANUP])
|
|
Open vSwitch CI |
0325f3 |
|
|
Open vSwitch CI |
0325f3 |
@@ -2867,6 +2876,14 @@ OVSDB_CHECK_IDL_PERS_UUID_INSERT([simple idl, persistent uuid insert],
|
|
Open vSwitch CI |
0325f3 |
]],
|
|
Open vSwitch CI |
0325f3 |
[['This UUID would duplicate a UUID already present within the table or deleted within the same transaction']])
|
|
Open vSwitch CI |
0325f3 |
|
|
Open vSwitch CI |
0325f3 |
+OVSDB_CHECK_IDL_PERS_UUID_INSERT([simple idl, persistent uuid insert uref],
|
|
Open vSwitch CI |
0325f3 |
+ [['insert_uuid_uref d7f2845f-2e8d-46a9-8330-f6d0b7d2ca36 689420a0-515b-4c0f-8eba-7ad59a344b54']],
|
|
Open vSwitch CI |
0325f3 |
+ [[000: empty
|
|
Open vSwitch CI |
0325f3 |
+001: commit, status=success
|
|
Open vSwitch CI |
0325f3 |
+002: table simple3: name= uset=[] uref=[689420a0-515b-4c0f-8eba-7ad59a344b54] uuid=d7f2845f-2e8d-46a9-8330-f6d0b7d2ca36
|
|
Open vSwitch CI |
0325f3 |
+002: table simple4: name= uuid=689420a0-515b-4c0f-8eba-7ad59a344b54
|
|
Open vSwitch CI |
0325f3 |
+003: done
|
|
Open vSwitch CI |
0325f3 |
+]])
|
|
Open vSwitch CI |
0325f3 |
|
|
Open vSwitch CI |
0325f3 |
OVSDB_CHECK_IDL_PY([simple idl, python, add_op],
|
|
Open vSwitch CI |
0325f3 |
[],
|
|
Open vSwitch CI |
0325f3 |
diff --git a/tests/test-ovsdb.c b/tests/test-ovsdb.c
|
|
Open vSwitch CI |
0325f3 |
index 710341b655..8011850fdf 100644
|
|
Open vSwitch CI |
0325f3 |
--- a/tests/test-ovsdb.c
|
|
Open vSwitch CI |
0325f3 |
+++ b/tests/test-ovsdb.c
|
|
Open vSwitch CI |
0325f3 |
@@ -2451,6 +2451,10 @@ idl_set(struct ovsdb_idl *idl, char *commands, int step)
|
|
Open vSwitch CI |
0325f3 |
struct ovsdb_idl_txn *txn;
|
|
Open vSwitch CI |
0325f3 |
enum ovsdb_idl_txn_status status;
|
|
Open vSwitch CI |
0325f3 |
bool increment = false;
|
|
Open vSwitch CI |
0325f3 |
+ /* FIXME: ovsdb_idl_check_consistency() doesn't currently handle refs added
|
|
Open vSwitch CI |
0325f3 |
+ * in the same txn, so if any op does this, we need to skip the check until
|
|
Open vSwitch CI |
0325f3 |
+ * that is fixed. */
|
|
Open vSwitch CI |
0325f3 |
+ bool skip_pre_commit_consistency_check = false;
|
|
Open vSwitch CI |
0325f3 |
|
|
Open vSwitch CI |
0325f3 |
txn = ovsdb_idl_txn_create(idl);
|
|
Open vSwitch CI |
0325f3 |
ovsdb_idl_check_consistency(idl);
|
|
Open vSwitch CI |
0325f3 |
@@ -2502,6 +2506,8 @@ idl_set(struct ovsdb_idl *idl, char *commands, int step)
|
|
Open vSwitch CI |
0325f3 |
|
|
Open vSwitch CI |
0325f3 |
s = idltest_simple_insert(txn);
|
|
Open vSwitch CI |
0325f3 |
idltest_simple_set_i(s, atoi(arg1));
|
|
Open vSwitch CI |
0325f3 |
+ } else if (!strcmp(name, "insert_no_columns_changed")) {
|
|
Open vSwitch CI |
0325f3 |
+ idltest_simple_insert(txn);
|
|
Open vSwitch CI |
0325f3 |
} else if (!strcmp(name, "insert_uuid")) {
|
|
Open vSwitch CI |
0325f3 |
struct idltest_simple *s;
|
|
Open vSwitch CI |
0325f3 |
|
|
Open vSwitch CI |
0325f3 |
@@ -2515,6 +2521,26 @@ idl_set(struct ovsdb_idl *idl, char *commands, int step)
|
|
Open vSwitch CI |
0325f3 |
}
|
|
Open vSwitch CI |
0325f3 |
s = idltest_simple_insert_persist_uuid(txn, &s_uuid);
|
|
Open vSwitch CI |
0325f3 |
idltest_simple_set_i(s, atoi(arg2));
|
|
Open vSwitch CI |
0325f3 |
+ } else if (!strcmp(name, "insert_uuid_uref")) {
|
|
Open vSwitch CI |
0325f3 |
+ struct idltest_simple3 *s3;
|
|
Open vSwitch CI |
0325f3 |
+ struct idltest_simple4 *s4;
|
|
Open vSwitch CI |
0325f3 |
+
|
|
Open vSwitch CI |
0325f3 |
+ if (!arg1 || !arg2) {
|
|
Open vSwitch CI |
0325f3 |
+ ovs_fatal(0,
|
|
Open vSwitch CI |
0325f3 |
+ "\"insert_uuid_uref\" command requires 2 arguments");
|
|
Open vSwitch CI |
0325f3 |
+ }
|
|
Open vSwitch CI |
0325f3 |
+
|
|
Open vSwitch CI |
0325f3 |
+ struct uuid s3_uuid;
|
|
Open vSwitch CI |
0325f3 |
+ struct uuid s4_uuid;
|
|
Open vSwitch CI |
0325f3 |
+ if (!uuid_from_string(&s3_uuid, arg1) ||
|
|
Open vSwitch CI |
0325f3 |
+ !uuid_from_string(&s4_uuid, arg2)) {
|
|
Open vSwitch CI |
0325f3 |
+ ovs_fatal(
|
|
Open vSwitch CI |
0325f3 |
+ 0, "\"insert_uuid_uref\" command requires 2 valid uuids");
|
|
Open vSwitch CI |
0325f3 |
+ }
|
|
Open vSwitch CI |
0325f3 |
+ s4 = idltest_simple4_insert_persist_uuid(txn, &s4_uuid);
|
|
Open vSwitch CI |
0325f3 |
+ s3 = idltest_simple3_insert_persist_uuid(txn, &s3_uuid);
|
|
Open vSwitch CI |
0325f3 |
+ idltest_simple3_set_uref(s3, &s4, 1);
|
|
Open vSwitch CI |
0325f3 |
+ skip_pre_commit_consistency_check = true;
|
|
Open vSwitch CI |
0325f3 |
} else if (!strcmp(name, "delete")) {
|
|
Open vSwitch CI |
0325f3 |
const struct idltest_simple *s;
|
|
Open vSwitch CI |
0325f3 |
|
|
Open vSwitch CI |
0325f3 |
@@ -2583,7 +2609,9 @@ idl_set(struct ovsdb_idl *idl, char *commands, int step)
|
|
Open vSwitch CI |
0325f3 |
} else {
|
|
Open vSwitch CI |
0325f3 |
ovs_fatal(0, "unknown command %s", name);
|
|
Open vSwitch CI |
0325f3 |
}
|
|
Open vSwitch CI |
0325f3 |
- ovsdb_idl_check_consistency(idl);
|
|
Open vSwitch CI |
0325f3 |
+ if (!skip_pre_commit_consistency_check) {
|
|
Open vSwitch CI |
0325f3 |
+ ovsdb_idl_check_consistency(idl);
|
|
Open vSwitch CI |
0325f3 |
+ }
|
|
Open vSwitch CI |
0325f3 |
}
|
|
Open vSwitch CI |
0325f3 |
|
|
Open vSwitch CI |
0325f3 |
status = ovsdb_idl_txn_commit_block(txn);
|
|
Open vSwitch CI |
0325f3 |
diff --git a/tests/test-ovsdb.py b/tests/test-ovsdb.py
|
|
Open vSwitch CI |
0325f3 |
index 57fc1d4497..b690b4f076 100644
|
|
Open vSwitch CI |
0325f3 |
--- a/tests/test-ovsdb.py
|
|
Open vSwitch CI |
0325f3 |
+++ b/tests/test-ovsdb.py
|
|
Open vSwitch CI |
0325f3 |
@@ -508,6 +508,8 @@ def idl_set(idl, commands, step):
|
|
Open vSwitch CI |
0325f3 |
|
|
Open vSwitch CI |
0325f3 |
s = txn.insert(idl.tables["simple"])
|
|
Open vSwitch CI |
0325f3 |
s.i = int(args[0])
|
|
Open vSwitch CI |
0325f3 |
+ elif name == "insert_no_columns_changed":
|
|
Open vSwitch CI |
0325f3 |
+ txn.insert(idl.tables["simple"])
|
|
Open vSwitch CI |
0325f3 |
elif name == "insert_uuid":
|
|
Open vSwitch CI |
0325f3 |
if len(args) != 2:
|
|
Open vSwitch CI |
0325f3 |
sys.stderr.write('"set" command requires 2 argument\n')
|
|
Open vSwitch CI |
0325f3 |
@@ -516,6 +518,17 @@ def idl_set(idl, commands, step):
|
|
Open vSwitch CI |
0325f3 |
s = txn.insert(idl.tables["simple"], new_uuid=uuid.UUID(args[0]),
|
|
Open vSwitch CI |
0325f3 |
persist_uuid=True)
|
|
Open vSwitch CI |
0325f3 |
s.i = int(args[1])
|
|
Open vSwitch CI |
0325f3 |
+ elif name == "insert_uuid_uref":
|
|
Open vSwitch CI |
0325f3 |
+ if len(args) != 2:
|
|
Open vSwitch CI |
0325f3 |
+ sys.stderr.write('"set" command requires 2 argument\n')
|
|
Open vSwitch CI |
0325f3 |
+ sys.exit(1)
|
|
Open vSwitch CI |
0325f3 |
+
|
|
Open vSwitch CI |
0325f3 |
+ s4 = txn.insert(idl.tables["simple4"], new_uuid=uuid.UUID(args[1]),
|
|
Open vSwitch CI |
0325f3 |
+ persist_uuid=True)
|
|
Open vSwitch CI |
0325f3 |
+ s3 = txn.insert(idl.tables["simple3"], new_uuid=uuid.UUID(args[0]),
|
|
Open vSwitch CI |
0325f3 |
+ persist_uuid=True)
|
|
Open vSwitch CI |
0325f3 |
+ s3.uref = s4
|
|
Open vSwitch CI |
0325f3 |
+
|
|
Open vSwitch CI |
0325f3 |
elif name == "add_op":
|
|
Open vSwitch CI |
0325f3 |
if len(args) != 1:
|
|
Open vSwitch CI |
0325f3 |
sys.stderr.write('"add_op" command requires 1 argument\n')
|
|
Open vSwitch CI |
70cc8f |
diff --git a/dpdk/VERSION b/dpdk/VERSION
|
|
Open vSwitch CI |
70cc8f |
index 0a492611a0..9e2934aa34 100644
|
|
Open vSwitch CI |
70cc8f |
--- a/dpdk/VERSION
|
|
Open vSwitch CI |
70cc8f |
+++ b/dpdk/VERSION
|
|
Open vSwitch CI |
70cc8f |
@@ -1 +1 @@
|
|
Open vSwitch CI |
70cc8f |
-24.11.0
|
|
Open vSwitch CI |
70cc8f |
+24.11.1
|
|
Open vSwitch CI |
70cc8f |
diff --git a/dpdk/doc/guides/rel_notes/release_24_11.rst b/dpdk/doc/guides/rel_notes/release_24_11.rst
|
|
Open vSwitch CI |
70cc8f |
index 8486cd986f..f9df63141e 100644
|
|
Open vSwitch CI |
70cc8f |
--- a/dpdk/doc/guides/rel_notes/release_24_11.rst
|
|
Open vSwitch CI |
70cc8f |
+++ b/dpdk/doc/guides/rel_notes/release_24_11.rst
|
|
Open vSwitch CI |
70cc8f |
@@ -616,3 +616,22 @@ Tested Platforms
|
|
Open vSwitch CI |
70cc8f |
* Firmware version: 2.14, 0x8000028c
|
|
Open vSwitch CI |
70cc8f |
* Device id (pf): 8086:125b
|
|
Open vSwitch CI |
70cc8f |
* Driver version(in-tree): 6.8.0-45-generic (Ubuntu24.04.1)(igc)
|
|
Open vSwitch CI |
70cc8f |
+
|
|
Open vSwitch CI |
70cc8f |
+24.11.1 Release Notes
|
|
Open vSwitch CI |
70cc8f |
+---------------------
|
|
Open vSwitch CI |
70cc8f |
+
|
|
Open vSwitch CI |
70cc8f |
+
|
|
Open vSwitch CI |
70cc8f |
+24.11.1 Fixes
|
|
Open vSwitch CI |
70cc8f |
+~~~~~~~~~~~~~
|
|
Open vSwitch CI |
70cc8f |
+
|
|
Open vSwitch CI |
70cc8f |
+* net/virtio: fix Rx checksum calculation
|
|
Open vSwitch CI |
70cc8f |
+
|
|
Open vSwitch CI |
70cc8f |
+24.11.1 Validation
|
|
Open vSwitch CI |
70cc8f |
+~~~~~~~~~~~~~~~~~~
|
|
Open vSwitch CI |
70cc8f |
+
|
|
Open vSwitch CI |
70cc8f |
+* Tested by Red Hat validation team
|
|
Open vSwitch CI |
70cc8f |
+
|
|
Open vSwitch CI |
70cc8f |
+24.11.1 Known Issues
|
|
Open vSwitch CI |
70cc8f |
+~~~~~~~~~~~~~~~~~~~~
|
|
Open vSwitch CI |
70cc8f |
+
|
|
Open vSwitch CI |
70cc8f |
+* DPDK 24.11.1 contains DPDK 24.11 plus the fix for CVE-2024-11614 only
|
|
Open vSwitch CI |
c49a4a |
diff --git a/dpdk/kernel/linux/uapi/linux/vduse.h b/dpdk/kernel/linux/uapi/linux/vduse.h
|
|
Open vSwitch CI |
c49a4a |
new file mode 100644
|
|
Open vSwitch CI |
c49a4a |
index 0000000000..11bd48c72c
|
|
Open vSwitch CI |
c49a4a |
--- /dev/null
|
|
Open vSwitch CI |
c49a4a |
+++ b/dpdk/kernel/linux/uapi/linux/vduse.h
|
|
Open vSwitch CI |
c49a4a |
@@ -0,0 +1,353 @@
|
|
Open vSwitch CI |
c49a4a |
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
|
Open vSwitch CI |
c49a4a |
+#ifndef _UAPI_VDUSE_H_
|
|
Open vSwitch CI |
c49a4a |
+#define _UAPI_VDUSE_H_
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+#include <linux/types.h>
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_BASE 0x81
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/* The ioctls for control device (/dev/vduse/control) */
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_API_VERSION 0
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/*
|
|
Open vSwitch CI |
c49a4a |
+ * Get the version of VDUSE API that kernel supported (VDUSE_API_VERSION).
|
|
Open vSwitch CI |
c49a4a |
+ * This is used for future extension.
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_GET_API_VERSION _IOR(VDUSE_BASE, 0x00, __u64)
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/* Set the version of VDUSE API that userspace supported. */
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_SET_API_VERSION _IOW(VDUSE_BASE, 0x01, __u64)
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/**
|
|
Open vSwitch CI |
c49a4a |
+ * struct vduse_dev_config - basic configuration of a VDUSE device
|
|
Open vSwitch CI |
c49a4a |
+ * @name: VDUSE device name, needs to be NUL terminated
|
|
Open vSwitch CI |
c49a4a |
+ * @vendor_id: virtio vendor id
|
|
Open vSwitch CI |
c49a4a |
+ * @device_id: virtio device id
|
|
Open vSwitch CI |
c49a4a |
+ * @features: virtio features
|
|
Open vSwitch CI |
c49a4a |
+ * @vq_num: the number of virtqueues
|
|
Open vSwitch CI |
c49a4a |
+ * @vq_align: the allocation alignment of virtqueue's metadata
|
|
Open vSwitch CI |
c49a4a |
+ * @reserved: for future use, needs to be initialized to zero
|
|
Open vSwitch CI |
c49a4a |
+ * @config_size: the size of the configuration space
|
|
Open vSwitch CI |
c49a4a |
+ * @config: the buffer of the configuration space
|
|
Open vSwitch CI |
c49a4a |
+ *
|
|
Open vSwitch CI |
c49a4a |
+ * Structure used by VDUSE_CREATE_DEV ioctl to create VDUSE device.
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+struct vduse_dev_config {
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_NAME_MAX 256
|
|
Open vSwitch CI |
c49a4a |
+ char name[VDUSE_NAME_MAX];
|
|
Open vSwitch CI |
c49a4a |
+ __u32 vendor_id;
|
|
Open vSwitch CI |
c49a4a |
+ __u32 device_id;
|
|
Open vSwitch CI |
c49a4a |
+ __u64 features;
|
|
Open vSwitch CI |
c49a4a |
+ __u32 vq_num;
|
|
Open vSwitch CI |
c49a4a |
+ __u32 vq_align;
|
|
Open vSwitch CI |
c49a4a |
+ __u32 reserved[13];
|
|
Open vSwitch CI |
c49a4a |
+ __u32 config_size;
|
|
Open vSwitch CI |
c49a4a |
+ __u8 config[];
|
|
Open vSwitch CI |
c49a4a |
+};
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/* Create a VDUSE device which is represented by a char device (/dev/vduse/$NAME) */
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_CREATE_DEV _IOW(VDUSE_BASE, 0x02, struct vduse_dev_config)
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/*
|
|
Open vSwitch CI |
c49a4a |
+ * Destroy a VDUSE device. Make sure there are no more references
|
|
Open vSwitch CI |
c49a4a |
+ * to the char device (/dev/vduse/$NAME).
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_DESTROY_DEV _IOW(VDUSE_BASE, 0x03, char[VDUSE_NAME_MAX])
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/* The ioctls for VDUSE device (/dev/vduse/$NAME) */
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/**
|
|
Open vSwitch CI |
c49a4a |
+ * struct vduse_iotlb_entry - entry of IOTLB to describe one IOVA region [start, last]
|
|
Open vSwitch CI |
c49a4a |
+ * @offset: the mmap offset on returned file descriptor
|
|
Open vSwitch CI |
c49a4a |
+ * @start: start of the IOVA region
|
|
Open vSwitch CI |
c49a4a |
+ * @last: last of the IOVA region
|
|
Open vSwitch CI |
c49a4a |
+ * @perm: access permission of the IOVA region
|
|
Open vSwitch CI |
c49a4a |
+ *
|
|
Open vSwitch CI |
c49a4a |
+ * Structure used by VDUSE_IOTLB_GET_FD ioctl to find an overlapped IOVA region.
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+struct vduse_iotlb_entry {
|
|
Open vSwitch CI |
c49a4a |
+ __u64 offset;
|
|
Open vSwitch CI |
c49a4a |
+ __u64 start;
|
|
Open vSwitch CI |
c49a4a |
+ __u64 last;
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_ACCESS_RO 0x1
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_ACCESS_WO 0x2
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_ACCESS_RW 0x3
|
|
Open vSwitch CI |
c49a4a |
+ __u8 perm;
|
|
Open vSwitch CI |
c49a4a |
+};
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/*
|
|
Open vSwitch CI |
c49a4a |
+ * Find the first IOVA region that overlaps with the range [start, last]
|
|
Open vSwitch CI |
c49a4a |
+ * and return the corresponding file descriptor. Return -EINVAL means the
|
|
Open vSwitch CI |
c49a4a |
+ * IOVA region doesn't exist. Caller should set start and last fields.
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_IOTLB_GET_FD _IOWR(VDUSE_BASE, 0x10, struct vduse_iotlb_entry)
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/*
|
|
Open vSwitch CI |
c49a4a |
+ * Get the negotiated virtio features. It's a subset of the features in
|
|
Open vSwitch CI |
c49a4a |
+ * struct vduse_dev_config which can be accepted by virtio driver. It's
|
|
Open vSwitch CI |
c49a4a |
+ * only valid after FEATURES_OK status bit is set.
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_DEV_GET_FEATURES _IOR(VDUSE_BASE, 0x11, __u64)
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/**
|
|
Open vSwitch CI |
c49a4a |
+ * struct vduse_config_data - data used to update configuration space
|
|
Open vSwitch CI |
c49a4a |
+ * @offset: the offset from the beginning of configuration space
|
|
Open vSwitch CI |
c49a4a |
+ * @length: the length to write to configuration space
|
|
Open vSwitch CI |
c49a4a |
+ * @buffer: the buffer used to write from
|
|
Open vSwitch CI |
c49a4a |
+ *
|
|
Open vSwitch CI |
c49a4a |
+ * Structure used by VDUSE_DEV_SET_CONFIG ioctl to update device
|
|
Open vSwitch CI |
c49a4a |
+ * configuration space.
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+struct vduse_config_data {
|
|
Open vSwitch CI |
c49a4a |
+ __u32 offset;
|
|
Open vSwitch CI |
c49a4a |
+ __u32 length;
|
|
Open vSwitch CI |
c49a4a |
+ __u8 buffer[];
|
|
Open vSwitch CI |
c49a4a |
+};
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/* Set device configuration space */
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_DEV_SET_CONFIG _IOW(VDUSE_BASE, 0x12, struct vduse_config_data)
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/*
|
|
Open vSwitch CI |
c49a4a |
+ * Inject a config interrupt. It's usually used to notify virtio driver
|
|
Open vSwitch CI |
c49a4a |
+ * that device configuration space has changed.
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_DEV_INJECT_CONFIG_IRQ _IO(VDUSE_BASE, 0x13)
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/**
|
|
Open vSwitch CI |
c49a4a |
+ * struct vduse_vq_config - basic configuration of a virtqueue
|
|
Open vSwitch CI |
c49a4a |
+ * @index: virtqueue index
|
|
Open vSwitch CI |
c49a4a |
+ * @max_size: the max size of virtqueue
|
|
Open vSwitch CI |
c49a4a |
+ * @reserved: for future use, needs to be initialized to zero
|
|
Open vSwitch CI |
c49a4a |
+ *
|
|
Open vSwitch CI |
c49a4a |
+ * Structure used by VDUSE_VQ_SETUP ioctl to setup a virtqueue.
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+struct vduse_vq_config {
|
|
Open vSwitch CI |
c49a4a |
+ __u32 index;
|
|
Open vSwitch CI |
c49a4a |
+ __u16 max_size;
|
|
Open vSwitch CI |
c49a4a |
+ __u16 reserved[13];
|
|
Open vSwitch CI |
c49a4a |
+};
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/*
|
|
Open vSwitch CI |
c49a4a |
+ * Setup the specified virtqueue. Make sure all virtqueues have been
|
|
Open vSwitch CI |
c49a4a |
+ * configured before the device is attached to vDPA bus.
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_VQ_SETUP _IOW(VDUSE_BASE, 0x14, struct vduse_vq_config)
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/**
|
|
Open vSwitch CI |
c49a4a |
+ * struct vduse_vq_state_split - split virtqueue state
|
|
Open vSwitch CI |
c49a4a |
+ * @avail_index: available index
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+struct vduse_vq_state_split {
|
|
Open vSwitch CI |
c49a4a |
+ __u16 avail_index;
|
|
Open vSwitch CI |
c49a4a |
+};
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/**
|
|
Open vSwitch CI |
c49a4a |
+ * struct vduse_vq_state_packed - packed virtqueue state
|
|
Open vSwitch CI |
c49a4a |
+ * @last_avail_counter: last driver ring wrap counter observed by device
|
|
Open vSwitch CI |
c49a4a |
+ * @last_avail_idx: device available index
|
|
Open vSwitch CI |
c49a4a |
+ * @last_used_counter: device ring wrap counter
|
|
Open vSwitch CI |
c49a4a |
+ * @last_used_idx: used index
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+struct vduse_vq_state_packed {
|
|
Open vSwitch CI |
c49a4a |
+ __u16 last_avail_counter;
|
|
Open vSwitch CI |
c49a4a |
+ __u16 last_avail_idx;
|
|
Open vSwitch CI |
c49a4a |
+ __u16 last_used_counter;
|
|
Open vSwitch CI |
c49a4a |
+ __u16 last_used_idx;
|
|
Open vSwitch CI |
c49a4a |
+};
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/**
|
|
Open vSwitch CI |
c49a4a |
+ * struct vduse_vq_info - information of a virtqueue
|
|
Open vSwitch CI |
c49a4a |
+ * @index: virtqueue index
|
|
Open vSwitch CI |
c49a4a |
+ * @num: the size of virtqueue
|
|
Open vSwitch CI |
c49a4a |
+ * @desc_addr: address of desc area
|
|
Open vSwitch CI |
c49a4a |
+ * @driver_addr: address of driver area
|
|
Open vSwitch CI |
c49a4a |
+ * @device_addr: address of device area
|
|
Open vSwitch CI |
c49a4a |
+ * @split: split virtqueue state
|
|
Open vSwitch CI |
c49a4a |
+ * @packed: packed virtqueue state
|
|
Open vSwitch CI |
c49a4a |
+ * @ready: ready status of virtqueue
|
|
Open vSwitch CI |
c49a4a |
+ *
|
|
Open vSwitch CI |
c49a4a |
+ * Structure used by VDUSE_VQ_GET_INFO ioctl to get virtqueue's information.
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+struct vduse_vq_info {
|
|
Open vSwitch CI |
c49a4a |
+ __u32 index;
|
|
Open vSwitch CI |
c49a4a |
+ __u32 num;
|
|
Open vSwitch CI |
c49a4a |
+ __u64 desc_addr;
|
|
Open vSwitch CI |
c49a4a |
+ __u64 driver_addr;
|
|
Open vSwitch CI |
c49a4a |
+ __u64 device_addr;
|
|
Open vSwitch CI |
c49a4a |
+ union {
|
|
Open vSwitch CI |
c49a4a |
+ struct vduse_vq_state_split split;
|
|
Open vSwitch CI |
c49a4a |
+ struct vduse_vq_state_packed packed;
|
|
Open vSwitch CI |
c49a4a |
+ };
|
|
Open vSwitch CI |
c49a4a |
+ __u8 ready;
|
|
Open vSwitch CI |
c49a4a |
+};
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/* Get the specified virtqueue's information. Caller should set index field. */
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_VQ_GET_INFO _IOWR(VDUSE_BASE, 0x15, struct vduse_vq_info)
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/**
|
|
Open vSwitch CI |
c49a4a |
+ * struct vduse_vq_eventfd - eventfd configuration for a virtqueue
|
|
Open vSwitch CI |
c49a4a |
+ * @index: virtqueue index
|
|
Open vSwitch CI |
c49a4a |
+ * @fd: eventfd, -1 means de-assigning the eventfd
|
|
Open vSwitch CI |
c49a4a |
+ *
|
|
Open vSwitch CI |
c49a4a |
+ * Structure used by VDUSE_VQ_SETUP_KICKFD ioctl to setup kick eventfd.
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+struct vduse_vq_eventfd {
|
|
Open vSwitch CI |
c49a4a |
+ __u32 index;
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_EVENTFD_DEASSIGN -1
|
|
Open vSwitch CI |
c49a4a |
+ int fd;
|
|
Open vSwitch CI |
c49a4a |
+};
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/*
|
|
Open vSwitch CI |
c49a4a |
+ * Setup kick eventfd for specified virtqueue. The kick eventfd is used
|
|
Open vSwitch CI |
c49a4a |
+ * by VDUSE kernel module to notify userspace to consume the avail vring.
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_VQ_SETUP_KICKFD _IOW(VDUSE_BASE, 0x16, struct vduse_vq_eventfd)
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/*
|
|
Open vSwitch CI |
c49a4a |
+ * Inject an interrupt for specific virtqueue. It's used to notify virtio driver
|
|
Open vSwitch CI |
c49a4a |
+ * to consume the used vring.
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_VQ_INJECT_IRQ _IOW(VDUSE_BASE, 0x17, __u32)
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/**
|
|
Open vSwitch CI |
c49a4a |
+ * struct vduse_iova_umem - userspace memory configuration for one IOVA region
|
|
Open vSwitch CI |
c49a4a |
+ * @uaddr: start address of userspace memory, it must be aligned to page size
|
|
Open vSwitch CI |
c49a4a |
+ * @iova: start of the IOVA region
|
|
Open vSwitch CI |
c49a4a |
+ * @size: size of the IOVA region
|
|
Open vSwitch CI |
c49a4a |
+ * @reserved: for future use, needs to be initialized to zero
|
|
Open vSwitch CI |
c49a4a |
+ *
|
|
Open vSwitch CI |
c49a4a |
+ * Structure used by VDUSE_IOTLB_REG_UMEM and VDUSE_IOTLB_DEREG_UMEM
|
|
Open vSwitch CI |
c49a4a |
+ * ioctls to register/de-register userspace memory for IOVA regions
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+struct vduse_iova_umem {
|
|
Open vSwitch CI |
c49a4a |
+ __u64 uaddr;
|
|
Open vSwitch CI |
c49a4a |
+ __u64 iova;
|
|
Open vSwitch CI |
c49a4a |
+ __u64 size;
|
|
Open vSwitch CI |
c49a4a |
+ __u64 reserved[3];
|
|
Open vSwitch CI |
c49a4a |
+};
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/* Register userspace memory for IOVA regions */
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_IOTLB_REG_UMEM _IOW(VDUSE_BASE, 0x18, struct vduse_iova_umem)
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/* De-register the userspace memory. Caller should set iova and size field. */
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_IOTLB_DEREG_UMEM _IOW(VDUSE_BASE, 0x19, struct vduse_iova_umem)
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/**
|
|
Open vSwitch CI |
c49a4a |
+ * struct vduse_iova_info - information of one IOVA region
|
|
Open vSwitch CI |
c49a4a |
+ * @start: start of the IOVA region
|
|
Open vSwitch CI |
c49a4a |
+ * @last: last of the IOVA region
|
|
Open vSwitch CI |
c49a4a |
+ * @capability: capability of the IOVA regsion
|
|
Open vSwitch CI |
c49a4a |
+ * @reserved: for future use, needs to be initialized to zero
|
|
Open vSwitch CI |
c49a4a |
+ *
|
|
Open vSwitch CI |
c49a4a |
+ * Structure used by VDUSE_IOTLB_GET_INFO ioctl to get information of
|
|
Open vSwitch CI |
c49a4a |
+ * one IOVA region.
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+struct vduse_iova_info {
|
|
Open vSwitch CI |
c49a4a |
+ __u64 start;
|
|
Open vSwitch CI |
c49a4a |
+ __u64 last;
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_IOVA_CAP_UMEM (1 << 0)
|
|
Open vSwitch CI |
c49a4a |
+ __u64 capability;
|
|
Open vSwitch CI |
c49a4a |
+ __u64 reserved[3];
|
|
Open vSwitch CI |
c49a4a |
+};
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/*
|
|
Open vSwitch CI |
c49a4a |
+ * Find the first IOVA region that overlaps with the range [start, last]
|
|
Open vSwitch CI |
c49a4a |
+ * and return some information on it. Caller should set start and last fields.
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_IOTLB_GET_INFO _IOWR(VDUSE_BASE, 0x1a, struct vduse_iova_info)
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/* The control messages definition for read(2)/write(2) on /dev/vduse/$NAME */
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/**
|
|
Open vSwitch CI |
c49a4a |
+ * enum vduse_req_type - request type
|
|
Open vSwitch CI |
c49a4a |
+ * @VDUSE_GET_VQ_STATE: get the state for specified virtqueue from userspace
|
|
Open vSwitch CI |
c49a4a |
+ * @VDUSE_SET_STATUS: set the device status
|
|
Open vSwitch CI |
c49a4a |
+ * @VDUSE_UPDATE_IOTLB: Notify userspace to update the memory mapping for
|
|
Open vSwitch CI |
c49a4a |
+ * specified IOVA range via VDUSE_IOTLB_GET_FD ioctl
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+enum vduse_req_type {
|
|
Open vSwitch CI |
c49a4a |
+ VDUSE_GET_VQ_STATE,
|
|
Open vSwitch CI |
c49a4a |
+ VDUSE_SET_STATUS,
|
|
Open vSwitch CI |
c49a4a |
+ VDUSE_UPDATE_IOTLB,
|
|
Open vSwitch CI |
c49a4a |
+};
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/**
|
|
Open vSwitch CI |
c49a4a |
+ * struct vduse_vq_state - virtqueue state
|
|
Open vSwitch CI |
c49a4a |
+ * @index: virtqueue index
|
|
Open vSwitch CI |
c49a4a |
+ * @split: split virtqueue state
|
|
Open vSwitch CI |
c49a4a |
+ * @packed: packed virtqueue state
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+struct vduse_vq_state {
|
|
Open vSwitch CI |
c49a4a |
+ __u32 index;
|
|
Open vSwitch CI |
c49a4a |
+ union {
|
|
Open vSwitch CI |
c49a4a |
+ struct vduse_vq_state_split split;
|
|
Open vSwitch CI |
c49a4a |
+ struct vduse_vq_state_packed packed;
|
|
Open vSwitch CI |
c49a4a |
+ };
|
|
Open vSwitch CI |
c49a4a |
+};
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/**
|
|
Open vSwitch CI |
c49a4a |
+ * struct vduse_dev_status - device status
|
|
Open vSwitch CI |
c49a4a |
+ * @status: device status
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+struct vduse_dev_status {
|
|
Open vSwitch CI |
c49a4a |
+ __u8 status;
|
|
Open vSwitch CI |
c49a4a |
+};
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/**
|
|
Open vSwitch CI |
c49a4a |
+ * struct vduse_iova_range - IOVA range [start, last]
|
|
Open vSwitch CI |
c49a4a |
+ * @start: start of the IOVA range
|
|
Open vSwitch CI |
c49a4a |
+ * @last: last of the IOVA range
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+struct vduse_iova_range {
|
|
Open vSwitch CI |
c49a4a |
+ __u64 start;
|
|
Open vSwitch CI |
c49a4a |
+ __u64 last;
|
|
Open vSwitch CI |
c49a4a |
+};
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/**
|
|
Open vSwitch CI |
c49a4a |
+ * struct vduse_dev_request - control request
|
|
Open vSwitch CI |
c49a4a |
+ * @type: request type
|
|
Open vSwitch CI |
c49a4a |
+ * @request_id: request id
|
|
Open vSwitch CI |
c49a4a |
+ * @reserved: for future use
|
|
Open vSwitch CI |
c49a4a |
+ * @vq_state: virtqueue state, only index field is available
|
|
Open vSwitch CI |
c49a4a |
+ * @s: device status
|
|
Open vSwitch CI |
c49a4a |
+ * @iova: IOVA range for updating
|
|
Open vSwitch CI |
c49a4a |
+ * @padding: padding
|
|
Open vSwitch CI |
c49a4a |
+ *
|
|
Open vSwitch CI |
c49a4a |
+ * Structure used by read(2) on /dev/vduse/$NAME.
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+struct vduse_dev_request {
|
|
Open vSwitch CI |
c49a4a |
+ __u32 type;
|
|
Open vSwitch CI |
c49a4a |
+ __u32 request_id;
|
|
Open vSwitch CI |
c49a4a |
+ __u32 reserved[4];
|
|
Open vSwitch CI |
c49a4a |
+ union {
|
|
Open vSwitch CI |
c49a4a |
+ struct vduse_vq_state vq_state;
|
|
Open vSwitch CI |
c49a4a |
+ struct vduse_dev_status s;
|
|
Open vSwitch CI |
c49a4a |
+ struct vduse_iova_range iova;
|
|
Open vSwitch CI |
c49a4a |
+ __u32 padding[32];
|
|
Open vSwitch CI |
c49a4a |
+ };
|
|
Open vSwitch CI |
c49a4a |
+};
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+/**
|
|
Open vSwitch CI |
c49a4a |
+ * struct vduse_dev_response - response to control request
|
|
Open vSwitch CI |
c49a4a |
+ * @request_id: corresponding request id
|
|
Open vSwitch CI |
c49a4a |
+ * @result: the result of request
|
|
Open vSwitch CI |
c49a4a |
+ * @reserved: for future use, needs to be initialized to zero
|
|
Open vSwitch CI |
c49a4a |
+ * @vq_state: virtqueue state
|
|
Open vSwitch CI |
c49a4a |
+ * @padding: padding
|
|
Open vSwitch CI |
c49a4a |
+ *
|
|
Open vSwitch CI |
c49a4a |
+ * Structure used by write(2) on /dev/vduse/$NAME.
|
|
Open vSwitch CI |
c49a4a |
+ */
|
|
Open vSwitch CI |
c49a4a |
+struct vduse_dev_response {
|
|
Open vSwitch CI |
c49a4a |
+ __u32 request_id;
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_REQ_RESULT_OK 0x00
|
|
Open vSwitch CI |
c49a4a |
+#define VDUSE_REQ_RESULT_FAILED 0x01
|
|
Open vSwitch CI |
c49a4a |
+ __u32 result;
|
|
Open vSwitch CI |
c49a4a |
+ __u32 reserved[4];
|
|
Open vSwitch CI |
c49a4a |
+ union {
|
|
Open vSwitch CI |
c49a4a |
+ struct vduse_vq_state vq_state;
|
|
Open vSwitch CI |
c49a4a |
+ __u32 padding[32];
|
|
Open vSwitch CI |
c49a4a |
+ };
|
|
Open vSwitch CI |
c49a4a |
+};
|
|
Open vSwitch CI |
c49a4a |
+
|
|
Open vSwitch CI |
c49a4a |
+#endif /* _UAPI_VDUSE_H_ */
|
|
Open vSwitch CI |
c49a4a |
diff --git a/dpdk/lib/vhost/meson.build b/dpdk/lib/vhost/meson.build
|
|
Open vSwitch CI |
c49a4a |
index 51bcf17244..0004f283bb 100644
|
|
Open vSwitch CI |
c49a4a |
--- a/dpdk/lib/vhost/meson.build
|
|
Open vSwitch CI |
c49a4a |
+++ b/dpdk/lib/vhost/meson.build
|
|
Open vSwitch CI |
c49a4a |
@@ -26,16 +26,13 @@ sources = files(
|
|
Open vSwitch CI |
c49a4a |
'iotlb.c',
|
|
Open vSwitch CI |
c49a4a |
'socket.c',
|
|
Open vSwitch CI |
c49a4a |
'vdpa.c',
|
|
Open vSwitch CI |
c49a4a |
+ 'vduse.c',
|
|
Open vSwitch CI |
c49a4a |
'vhost.c',
|
|
Open vSwitch CI |
c49a4a |
'vhost_crypto.c',
|
|
Open vSwitch CI |
c49a4a |
'vhost_user.c',
|
|
Open vSwitch CI |
c49a4a |
'virtio_net.c',
|
|
Open vSwitch CI |
c49a4a |
'virtio_net_ctrl.c',
|
|
Open vSwitch CI |
c49a4a |
)
|
|
Open vSwitch CI |
c49a4a |
-if cc.has_header('linux/vduse.h')
|
|
Open vSwitch CI |
c49a4a |
- sources += files('vduse.c')
|
|
Open vSwitch CI |
c49a4a |
- cflags += '-DVHOST_HAS_VDUSE'
|
|
Open vSwitch CI |
c49a4a |
-endif
|
|
Open vSwitch CI |
c49a4a |
headers = files(
|
|
Open vSwitch CI |
c49a4a |
'rte_vdpa.h',
|
|
Open vSwitch CI |
c49a4a |
'rte_vhost.h',
|
|
Open vSwitch CI |
c49a4a |
diff --git a/dpdk/lib/vhost/vduse.c b/dpdk/lib/vhost/vduse.c
|
|
Open vSwitch CI |
c49a4a |
index 8ba58555f9..eaf3146b95 100644
|
|
Open vSwitch CI |
c49a4a |
--- a/dpdk/lib/vhost/vduse.c
|
|
Open vSwitch CI |
c49a4a |
+++ b/dpdk/lib/vhost/vduse.c
|
|
Open vSwitch CI |
c49a4a |
@@ -8,7 +8,7 @@
|
|
Open vSwitch CI |
c49a4a |
#include <fcntl.h>
|
|
Open vSwitch CI |
c49a4a |
|
|
Open vSwitch CI |
c49a4a |
|
|
Open vSwitch CI |
c49a4a |
-#include <linux/vduse.h>
|
|
Open vSwitch CI |
c49a4a |
+#include <uapi/linux/vduse.h>
|
|
Open vSwitch CI |
c49a4a |
#include <linux/virtio_net.h>
|
|
Open vSwitch CI |
c49a4a |
|
|
Open vSwitch CI |
c49a4a |
#include <sys/ioctl.h>
|
|
Open vSwitch CI |
c49a4a |
diff --git a/dpdk/lib/vhost/vduse.h b/dpdk/lib/vhost/vduse.h
|
|
Open vSwitch CI |
c49a4a |
index 0d8f3f1205..47ca97a064 100644
|
|
Open vSwitch CI |
c49a4a |
--- a/dpdk/lib/vhost/vduse.h
|
|
Open vSwitch CI |
c49a4a |
+++ b/dpdk/lib/vhost/vduse.h
|
|
Open vSwitch CI |
c49a4a |
@@ -9,29 +9,7 @@
|
|
Open vSwitch CI |
c49a4a |
|
|
Open vSwitch CI |
c49a4a |
#define VDUSE_NET_SUPPORTED_FEATURES VIRTIO_NET_SUPPORTED_FEATURES
|
|
Open vSwitch CI |
c49a4a |
|
|
Open vSwitch CI |
c49a4a |
-#ifdef VHOST_HAS_VDUSE
|
|
Open vSwitch CI |
c49a4a |
-
|
|
Open vSwitch CI |
c49a4a |
int vduse_device_create(const char *path, bool compliant_ol_flags);
|
|
Open vSwitch CI |
c49a4a |
int vduse_device_destroy(const char *path);
|
|
Open vSwitch CI |
c49a4a |
|
|
Open vSwitch CI |
c49a4a |
-#else
|
|
Open vSwitch CI |
c49a4a |
-
|
|
Open vSwitch CI |
c49a4a |
-static inline int
|
|
Open vSwitch CI |
c49a4a |
-vduse_device_create(const char *path, bool compliant_ol_flags)
|
|
Open vSwitch CI |
c49a4a |
-{
|
|
Open vSwitch CI |
c49a4a |
- RTE_SET_USED(compliant_ol_flags);
|
|
Open vSwitch CI |
c49a4a |
-
|
|
Open vSwitch CI |
c49a4a |
- VHOST_CONFIG_LOG(path, ERR, "VDUSE support disabled at build time");
|
|
Open vSwitch CI |
c49a4a |
- return -1;
|
|
Open vSwitch CI |
c49a4a |
-}
|
|
Open vSwitch CI |
c49a4a |
-
|
|
Open vSwitch CI |
c49a4a |
-static inline int
|
|
Open vSwitch CI |
c49a4a |
-vduse_device_destroy(const char *path)
|
|
Open vSwitch CI |
c49a4a |
-{
|
|
Open vSwitch CI |
c49a4a |
- VHOST_CONFIG_LOG(path, ERR, "VDUSE support disabled at build time");
|
|
Open vSwitch CI |
c49a4a |
- return -1;
|
|
Open vSwitch CI |
c49a4a |
-}
|
|
Open vSwitch CI |
c49a4a |
-
|
|
Open vSwitch CI |
c49a4a |
-#endif /* VHOST_HAS_VDUSE */
|
|
Open vSwitch CI |
c49a4a |
-
|
|
Open vSwitch CI |
c49a4a |
#endif /* _VDUSE_H */
|
|
Open vSwitch CI |
70cc8f |
diff --git a/dpdk/lib/vhost/virtio_net.c b/dpdk/lib/vhost/virtio_net.c
|
|
Open vSwitch CI |
70cc8f |
index d764d4bc6a..a340e5a772 100644
|
|
Open vSwitch CI |
70cc8f |
--- a/dpdk/lib/vhost/virtio_net.c
|
|
Open vSwitch CI |
70cc8f |
+++ b/dpdk/lib/vhost/virtio_net.c
|
|
Open vSwitch CI |
70cc8f |
@@ -2823,6 +2823,9 @@ vhost_dequeue_offload(struct virtio_net *dev, struct virtio_net_hdr *hdr,
|
|
Open vSwitch CI |
70cc8f |
*/
|
|
Open vSwitch CI |
70cc8f |
uint16_t csum = 0, off;
|
|
Open vSwitch CI |
70cc8f |
|
|
Open vSwitch CI |
70cc8f |
+ if (hdr->csum_start >= rte_pktmbuf_pkt_len(m))
|
|
Open vSwitch CI |
70cc8f |
+ return;
|
|
Open vSwitch CI |
70cc8f |
+
|
|
Open vSwitch CI |
70cc8f |
if (rte_raw_cksum_mbuf(m, hdr->csum_start,
|
|
Open vSwitch CI |
70cc8f |
rte_pktmbuf_pkt_len(m) - hdr->csum_start, &csum) < 0)
|
|
Open vSwitch CI |
70cc8f |
return;
|
|
Open vSwitch CI |
70cc8f |
@@ -3626,6 +3629,8 @@ rte_vhost_dequeue_burst(int vid, uint16_t queue_id,
|
|
Open vSwitch CI |
70cc8f |
rte_rwlock_read_unlock(&vq->access_lock);
|
|
Open vSwitch CI |
70cc8f |
|
|
Open vSwitch CI |
70cc8f |
virtio_dev_vring_translate(dev, vq);
|
|
Open vSwitch CI |
70cc8f |
+
|
|
Open vSwitch CI |
70cc8f |
+ count = 0;
|
|
Open vSwitch CI |
70cc8f |
goto out_no_unlock;
|
|
Open vSwitch CI |
70cc8f |
}
|
|
Open vSwitch CI |
70cc8f |
|