Re: Checking libnm/NM version mismatch



On Fri, 2019-11-22 at 21:52 +0100, Till Maas via networkmanager-list
wrote:
Hi,

one of the Nmstate ours accidentally used Nmstate on a machine after
updating NM without restarting it on CentOS 8. Therefore the system
used libnm 1.20 with NM 1.14. This resulted in an error like

Connection adding failed: error=nm-connection-error-quark:
bridge.vlans: unknown property (7)

How can we improve this error message?

NM cannot improve this. Version 1.14 did not know that in the future
"bridge.vlans" would be a valid property.

The error message is anyway mostly for debugging/logging. An
application should create settings that it knows are valid (according
to the targeted NM API). It's not clear how it could meaningfully
interpret and react on an error.



My initial idea would be to compare the versions of NM and libnm in
Nmstate and warn/abort if there is a mismatch:
AFAICS we can check the NM version with NMClient.get_version() and
the
libnm version seems to be available with

struct.unpack("xBBB", struct.pack(">I", NM.utils_version()))

regarding ">I": the number is in native endianness, not BE.


def nm_decode_version(v = None):
    if v is None:
        v = NM.utils_version()
    return ((v >> 16) & 0xFF,
            (v >>  8) & 0xFF,
            (
v      ) & 0xFF)


You can also print it in in hex, which gives 0x11503, meaning
0x1.0x15.0x3, which is 1.21.3.


The major benefit of this encoding is that you can compare versions by
number.

def nm_encode_version(major, minor, micro):
    return (major << 16) | (minor << 8) | micro

if NM.utils_version() < nm_encode_version(1, 20, 0):
    warn("version missmatch")

or just

if NM.utils_version() < 0x11400: # 1.20.0
    warn("version missmatch")

                         

(not so convenient that the version identifiers are in different
encodings, to be honest).

Hm, right. The value on D-Bus is a string, so it's nicer to read in d-
feet/busctl. The value in libnm is numeric, so it's nicer to compare
the value directly...


How about we add a warning/an error to Nmstate in case the versions
mismatch? Do you prefer a warning or an error? Do you have other
suggestions?

Sounds fine. A warning might suffice.


best,
Thomas

Attachment: signature.asc
Description: This is a digitally signed message part



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]