Quero usar o busctl para ler as informações de concessão do systemd netowrkd para um link específico no Linux.
No busctl tree
meu sistema, posso ver as interfaces de rede:
Service org.freedesktop.resolve1:
└─/org
└─/org/freedesktop
├─/org/freedesktop/LogControl1
└─/org/freedesktop/resolve1
├─/org/freedesktop/resolve1/dnssd
└─/org/freedesktop/resolve1/link
├─/org/freedesktop/resolve1/link/_31
├─/org/freedesktop/resolve1/link/_32
├─/org/freedesktop/resolve1/link/_33
├─/org/freedesktop/resolve1/link/_34
├─/org/freedesktop/resolve1/link/_35
├─/org/freedesktop/resolve1/link/_36
├─/org/freedesktop/resolve1/link/_37
├─/org/freedesktop/resolve1/link/_38
└─/org/freedesktop/resolve1/link/_39
Quando faço uma introspecção na interface do link, vejo o nome do servidor DHCP que desejo ler:
busctl introspect org.freedesktop.network1 /org/freedesktop/network1/link/_35
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
org.freedesktop.DBus.Introspectable interface - - -
.Introspect method - s -
org.freedesktop.DBus.Peer interface - - -
.GetMachineId method - s -
.Ping method - - -
org.freedesktop.DBus.Properties interface - - -
.Get method ss v -
.GetAll method s a{sv} -
.Set method ssv - -
.PropertiesChanged signal sa{sv}as - -
org.freedesktop.network1.DHCPServer interface - - -
.Leases property a(uayayayayt) 2 2 7 1 174 229 169 184 21 41 4 10 10 1… emits-change
org.freedesktop.network1.Link interface - - -
.Describe method - s -
.ForceRenew method - - -
.Reconfigure method - - -
.Renew method - - -
.RevertDNS method - - -
.RevertNTP method - - -
.SetDNS method a(iay) - -
.SetDNSEx method a(iayqs) - -
.SetDNSOverTLS method s - -
.SetDNSSEC method s - -
.SetDNSSECNegativeTrustAnchors method as - -
.SetDefaultRoute method b - -
.SetDomains method a(sb) - -
.SetLLMNR method s - -
.SetMulticastDNS method s - -
.SetNTP method as - -
.AddressState property s "routable" emits-change
.AdministrativeState property s "configured" emits-change
.BitRates property (tt) 18446744073709551615 184467440737095516… -
.CarrierState property s "carrier" emits-change
.IPv4AddressState property s "routable" emits-change
.IPv6AddressState property s "degraded" emits-change
.OnlineState property s "online" emits-change
.OperationalState property s "routable" emits-change
Não consigo chamar o método Leases:
busctl call org.freedesktop.network1 /org/freedesktop/network1/link/_35 org.freedesktop.network1.DHCPServer Leases
Call failed: Unknown method Leases or interface org.freedesktop.network1.DHCPServer.
O que estou fazendo de errado aqui e como posso ler as informações do aluguel? Obrigado.
Como diz a tabela,
Leases
não é um método – é uma propriedade. Aproveitebusctl get-property
para ler.As propriedades são acessadas chamando métodos na
org.freedesktop.DBus.Properties
interface; por exemplo, "get-property" chamaGet(interface, property)
enquanto "introspect" provavelmente usaGetAll(interface)
.(Lembre-se de que esta propriedade contém concessões emitidas por networkd atuando como um servidor DHCP. Networkd não fornece acesso D-Bus a concessões que recebeu como cliente; você precisa usar a API C que lê arquivos de /run.)