网络管理器 API 中类型 a{sa{sv}} 的 dbus 参数到底是什么?



我正在查看网络管理器的dbus api,并且有一些方法的输入类型为a{sa{sv}}。 我仍然是 dbus 的新手,但如果我正确解释 https://www.freedesktop.org/software/systemd/man/sd_bus_message_read.html# 中签名说明符的定义,那就是:

  • 可变长度数组
    • 命名变量数组
      • 命名的"变体"(我猜是标记的工会)

这实际上是为了什么? 命名设置的名称分页列表? 我在这个 API 中到处都能看到它。

  • sstd::string.
  • vvariant.
  • a{}std::map.
  • a{sv}std::map<std::string, Variant>
  • 最后:a{sa{sv}}std::map<std::string, std::map<std::string, Variant>>

Variant可以保存任何 D-Bus 支持类型的值,如果您使用的是c++我建议您在 SDBUS-CPP

事实证明,我想这应该被称为网络管理器中的"设置"。 对于多种方法,而不是通过设置来构建连接设置,而是一次添加整组设置。 例如,这是我当前连接设置的选项卡式和注释版本:

5
"connection" 5
"id" s "Profile 1"
"permissions" as o //<empty array of strings>
"timestamp" t 1661376049
"type" s "802-3-ethernet"
"uuid" s <not posting for privacy>
"802-3-ethernet" 3
"auto-negotiate" b false
"mac-address-blacklist" as 0
"s390-options" a{ss} 0
"ipv4" 6
"address-data" aa{sv} 0
"addresses" aau 0
"dns-search" as 0
"method" s "auto"
"route-data" aa{sv} 0
"routes" aau 0
"ipv6" 7
"addr-gen-mode" i 1
"address-data" aa{sv} 0
"addresses" a(ayuay) 0
"dns-search" as 0
"method" s "auto"
"route-data" aa{sv} 0
"routes" a(ayuayu) 0
"proxy" 0

我认为其中大多数是默认值,因此您在创建连接时可能设置的实际设置可能是这样的:

4
"connection" 4
"id" s "Profile Foo"
"timestamp" t <whatever, maybe this is autogenerated>
"type" s "802-3-ethernet"
"uuid" s <might be auto generated too>
"802-3-ethernet" 0
"ipv4" 1
"method" s "auto"
"ipv6" 1
"addr-gen-mode" i 1
"method" s "auto"

最新更新