about summary refs log tree commit diff
path: root/libnm-core/nm-libnm-core-intern
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2021-02-11 18:12:43 +0100
committerMichael Biebl <biebl@debian.org>2021-02-11 18:12:43 +0100
commit8f0db010e71e252ac290d51bd2a5b0a078f1d279 (patch)
tree2caa344fefcd9bb4218583c5aa2e0f92f4b2aa8c /libnm-core/nm-libnm-core-intern
parentf54032b30e1ddd84f10a339e0caf493772e049a7 (diff)
parent80ec1decc49c72efec2a8b87c06245c92c0ab807 (diff)
Update upstream source from tag 'upstream/1.29.90'
Update to upstream version '1.29.90'
with Debian dir 90df6d97476cc3200c410f3f3603b87396175c7a
Diffstat (limited to 'libnm-core/nm-libnm-core-intern')
-rw-r--r--libnm-core/nm-libnm-core-intern/nm-auth-subject.c44
-rw-r--r--libnm-core/nm-libnm-core-intern/nm-auth-subject.h2
-rw-r--r--libnm-core/nm-libnm-core-intern/nm-common-macros.h2
-rw-r--r--libnm-core/nm-libnm-core-intern/nm-ethtool-utils.c276
-rw-r--r--libnm-core/nm-libnm-core-intern/nm-ethtool-utils.h164
-rw-r--r--libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.c62
-rw-r--r--libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.h12
7 files changed, 87 insertions, 475 deletions
diff --git a/libnm-core/nm-libnm-core-intern/nm-auth-subject.c b/libnm-core/nm-libnm-core-intern/nm-auth-subject.c
index 49cd4f12..1866662c 100644
--- a/libnm-core/nm-libnm-core-intern/nm-auth-subject.c
+++ b/libnm-core/nm-libnm-core-intern/nm-auth-subject.c
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2013 - 2014 Red Hat, Inc.
  */
@@ -11,7 +11,7 @@
  * makes requests, like process identifier and user UID.
  */
 
-#include "nm-default.h"
+#include "libnm-core/nm-default-libnm-core.h"
 
 #include "nm-auth-subject.h"
 
@@ -179,10 +179,10 @@ nm_auth_subject_get_unix_session_id(NMAuthSubject *subject)
 NMAuthSubject *
 nm_auth_subject_new_internal(void)
 {
-    return NM_AUTH_SUBJECT(g_object_new(NM_TYPE_AUTH_SUBJECT,
-                                        NM_AUTH_SUBJECT_SUBJECT_TYPE,
-                                        (int) NM_AUTH_SUBJECT_TYPE_INTERNAL,
-                                        NULL));
+    return g_object_new(NM_TYPE_AUTH_SUBJECT,
+                        NM_AUTH_SUBJECT_SUBJECT_TYPE,
+                        (int) NM_AUTH_SUBJECT_TYPE_INTERNAL,
+                        NULL);
 }
 
 /**
@@ -195,12 +195,12 @@ nm_auth_subject_new_internal(void)
 NMAuthSubject *
 nm_auth_subject_new_unix_session(const char *session_id)
 {
-    return NM_AUTH_SUBJECT(g_object_new(NM_TYPE_AUTH_SUBJECT,
-                                        NM_AUTH_SUBJECT_SUBJECT_TYPE,
-                                        (int) NM_AUTH_SUBJECT_TYPE_UNIX_SESSION,
-                                        NM_AUTH_SUBJECT_UNIX_SESSION_ID,
-                                        session_id,
-                                        NULL));
+    return g_object_new(NM_TYPE_AUTH_SUBJECT,
+                        NM_AUTH_SUBJECT_SUBJECT_TYPE,
+                        (int) NM_AUTH_SUBJECT_TYPE_UNIX_SESSION,
+                        NM_AUTH_SUBJECT_UNIX_SESSION_ID,
+                        session_id,
+                        NULL);
 }
 
 /**
@@ -213,16 +213,16 @@ nm_auth_subject_new_unix_session(const char *session_id)
 NMAuthSubject *
 nm_auth_subject_new_unix_process(const char *dbus_sender, gulong pid, gulong uid)
 {
-    return NM_AUTH_SUBJECT(g_object_new(NM_TYPE_AUTH_SUBJECT,
-                                        NM_AUTH_SUBJECT_SUBJECT_TYPE,
-                                        (int) NM_AUTH_SUBJECT_TYPE_UNIX_PROCESS,
-                                        NM_AUTH_SUBJECT_UNIX_PROCESS_DBUS_SENDER,
-                                        dbus_sender,
-                                        NM_AUTH_SUBJECT_UNIX_PROCESS_PID,
-                                        pid,
-                                        NM_AUTH_SUBJECT_UNIX_PROCESS_UID,
-                                        uid,
-                                        NULL));
+    return g_object_new(NM_TYPE_AUTH_SUBJECT,
+                        NM_AUTH_SUBJECT_SUBJECT_TYPE,
+                        (int) NM_AUTH_SUBJECT_TYPE_UNIX_PROCESS,
+                        NM_AUTH_SUBJECT_UNIX_PROCESS_DBUS_SENDER,
+                        dbus_sender,
+                        NM_AUTH_SUBJECT_UNIX_PROCESS_PID,
+                        pid,
+                        NM_AUTH_SUBJECT_UNIX_PROCESS_UID,
+                        uid,
+                        NULL);
 }
 
 /**
diff --git a/libnm-core/nm-libnm-core-intern/nm-auth-subject.h b/libnm-core/nm-libnm-core-intern/nm-auth-subject.h
index 13d380d2..2c9c4f71 100644
--- a/libnm-core/nm-libnm-core-intern/nm-auth-subject.h
+++ b/libnm-core/nm-libnm-core-intern/nm-auth-subject.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2013 Red Hat, Inc.
  */
diff --git a/libnm-core/nm-libnm-core-intern/nm-common-macros.h b/libnm-core/nm-libnm-core-intern/nm-common-macros.h
index 9de3a8fc..c452b7d3 100644
--- a/libnm-core/nm-libnm-core-intern/nm-common-macros.h
+++ b/libnm-core/nm-libnm-core-intern/nm-common-macros.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 /*
  * Copyright (C) 2016 Red Hat, Inc.
  */
diff --git a/libnm-core/nm-libnm-core-intern/nm-ethtool-utils.c b/libnm-core/nm-libnm-core-intern/nm-ethtool-utils.c
deleted file mode 100644
index f3d34fea..00000000
--- a/libnm-core/nm-libnm-core-intern/nm-ethtool-utils.c
+++ /dev/null
@@ -1,276 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
-/*
- * Copyright (C) 2018 Red Hat, Inc.
- */
-
-#include "nm-default.h"
-
-#include "nm-ethtool-utils.h"
-
-#include "nm-setting-ethtool.h"
-
-/*****************************************************************************/
-
-#define ETHT_DATA(xname)                                \
-    [NM_ETHTOOL_ID_##xname] = (&((const NMEthtoolData){ \
-        .optname = NM_ETHTOOL_OPTNAME_##xname,          \
-        .id      = NM_ETHTOOL_ID_##xname,               \
-    }))
-
-const NMEthtoolData *const nm_ethtool_data[_NM_ETHTOOL_ID_NUM + 1] = {
-    /* indexed by NMEthtoolID */
-    ETHT_DATA(COALESCE_ADAPTIVE_RX),
-    ETHT_DATA(COALESCE_ADAPTIVE_TX),
-    ETHT_DATA(COALESCE_PKT_RATE_HIGH),
-    ETHT_DATA(COALESCE_PKT_RATE_LOW),
-    ETHT_DATA(COALESCE_RX_FRAMES),
-    ETHT_DATA(COALESCE_RX_FRAMES_HIGH),
-    ETHT_DATA(COALESCE_RX_FRAMES_IRQ),
-    ETHT_DATA(COALESCE_RX_FRAMES_LOW),
-    ETHT_DATA(COALESCE_RX_USECS),
-    ETHT_DATA(COALESCE_RX_USECS_HIGH),
-    ETHT_DATA(COALESCE_RX_USECS_IRQ),
-    ETHT_DATA(COALESCE_RX_USECS_LOW),
-    ETHT_DATA(COALESCE_SAMPLE_INTERVAL),
-    ETHT_DATA(COALESCE_STATS_BLOCK_USECS),
-    ETHT_DATA(COALESCE_TX_FRAMES),
-    ETHT_DATA(COALESCE_TX_FRAMES_HIGH),
-    ETHT_DATA(COALESCE_TX_FRAMES_IRQ),
-    ETHT_DATA(COALESCE_TX_FRAMES_LOW),
-    ETHT_DATA(COALESCE_TX_USECS),
-    ETHT_DATA(COALESCE_TX_USECS_HIGH),
-    ETHT_DATA(COALESCE_TX_USECS_IRQ),
-    ETHT_DATA(COALESCE_TX_USECS_LOW),
-    ETHT_DATA(FEATURE_ESP_HW_OFFLOAD),
-    ETHT_DATA(FEATURE_ESP_TX_CSUM_HW_OFFLOAD),
-    ETHT_DATA(FEATURE_FCOE_MTU),
-    ETHT_DATA(FEATURE_GRO),
-    ETHT_DATA(FEATURE_GSO),
-    ETHT_DATA(FEATURE_HIGHDMA),
-    ETHT_DATA(FEATURE_HW_TC_OFFLOAD),
-    ETHT_DATA(FEATURE_L2_FWD_OFFLOAD),
-    ETHT_DATA(FEATURE_LOOPBACK),
-    ETHT_DATA(FEATURE_LRO),
-    ETHT_DATA(FEATURE_NTUPLE),
-    ETHT_DATA(FEATURE_RX),
-    ETHT_DATA(FEATURE_RXHASH),
-    ETHT_DATA(FEATURE_RXVLAN),
-    ETHT_DATA(FEATURE_RX_ALL),
-    ETHT_DATA(FEATURE_RX_FCS),
-    ETHT_DATA(FEATURE_RX_GRO_HW),
-    ETHT_DATA(FEATURE_RX_UDP_TUNNEL_PORT_OFFLOAD),
-    ETHT_DATA(FEATURE_RX_VLAN_FILTER),
-    ETHT_DATA(FEATURE_RX_VLAN_STAG_FILTER),
-    ETHT_DATA(FEATURE_RX_VLAN_STAG_HW_PARSE),
-    ETHT_DATA(FEATURE_SG),
-    ETHT_DATA(FEATURE_TLS_HW_RECORD),
-    ETHT_DATA(FEATURE_TLS_HW_TX_OFFLOAD),
-    ETHT_DATA(FEATURE_TSO),
-    ETHT_DATA(FEATURE_TX),
-    ETHT_DATA(FEATURE_TXVLAN),
-    ETHT_DATA(FEATURE_TX_CHECKSUM_FCOE_CRC),
-    ETHT_DATA(FEATURE_TX_CHECKSUM_IPV4),
-    ETHT_DATA(FEATURE_TX_CHECKSUM_IPV6),
-    ETHT_DATA(FEATURE_TX_CHECKSUM_IP_GENERIC),
-    ETHT_DATA(FEATURE_TX_CHECKSUM_SCTP),
-    ETHT_DATA(FEATURE_TX_ESP_SEGMENTATION),
-    ETHT_DATA(FEATURE_TX_FCOE_SEGMENTATION),
-    ETHT_DATA(FEATURE_TX_GRE_CSUM_SEGMENTATION),
-    ETHT_DATA(FEATURE_TX_GRE_SEGMENTATION),
-    ETHT_DATA(FEATURE_TX_GSO_PARTIAL),
-    ETHT_DATA(FEATURE_TX_GSO_ROBUST),
-    ETHT_DATA(FEATURE_TX_IPXIP4_SEGMENTATION),
-    ETHT_DATA(FEATURE_TX_IPXIP6_SEGMENTATION),
-    ETHT_DATA(FEATURE_TX_NOCACHE_COPY),
-    ETHT_DATA(FEATURE_TX_SCATTER_GATHER),
-    ETHT_DATA(FEATURE_TX_SCATTER_GATHER_FRAGLIST),
-    ETHT_DATA(FEATURE_TX_SCTP_SEGMENTATION),
-    ETHT_DATA(FEATURE_TX_TCP6_SEGMENTATION),
-    ETHT_DATA(FEATURE_TX_TCP_ECN_SEGMENTATION),
-    ETHT_DATA(FEATURE_TX_TCP_MANGLEID_SEGMENTATION),
-    ETHT_DATA(FEATURE_TX_TCP_SEGMENTATION),
-    ETHT_DATA(FEATURE_TX_UDP_SEGMENTATION),
-    ETHT_DATA(FEATURE_TX_UDP_TNL_CSUM_SEGMENTATION),
-    ETHT_DATA(FEATURE_TX_UDP_TNL_SEGMENTATION),
-    ETHT_DATA(FEATURE_TX_VLAN_STAG_HW_INSERT),
-    ETHT_DATA(RING_RX),
-    ETHT_DATA(RING_RX_JUMBO),
-    ETHT_DATA(RING_RX_MINI),
-    ETHT_DATA(RING_TX),
-    [_NM_ETHTOOL_ID_NUM] = NULL,
-};
-
-static const guint8 _by_name[_NM_ETHTOOL_ID_NUM] = {
-    /* sorted by optname. */
-    NM_ETHTOOL_ID_COALESCE_ADAPTIVE_RX,
-    NM_ETHTOOL_ID_COALESCE_ADAPTIVE_TX,
-    NM_ETHTOOL_ID_COALESCE_PKT_RATE_HIGH,
-    NM_ETHTOOL_ID_COALESCE_PKT_RATE_LOW,
-    NM_ETHTOOL_ID_COALESCE_RX_FRAMES,
-    NM_ETHTOOL_ID_COALESCE_RX_FRAMES_HIGH,
-    NM_ETHTOOL_ID_COALESCE_RX_FRAMES_IRQ,
-    NM_ETHTOOL_ID_COALESCE_RX_FRAMES_LOW,
-    NM_ETHTOOL_ID_COALESCE_RX_USECS,
-    NM_ETHTOOL_ID_COALESCE_RX_USECS_HIGH,
-    NM_ETHTOOL_ID_COALESCE_RX_USECS_IRQ,
-    NM_ETHTOOL_ID_COALESCE_RX_USECS_LOW,
-    NM_ETHTOOL_ID_COALESCE_SAMPLE_INTERVAL,
-    NM_ETHTOOL_ID_COALESCE_STATS_BLOCK_USECS,
-    NM_ETHTOOL_ID_COALESCE_TX_FRAMES,
-    NM_ETHTOOL_ID_COALESCE_TX_FRAMES_HIGH,
-    NM_ETHTOOL_ID_COALESCE_TX_FRAMES_IRQ,
-    NM_ETHTOOL_ID_COALESCE_TX_FRAMES_LOW,
-    NM_ETHTOOL_ID_COALESCE_TX_USECS,
-    NM_ETHTOOL_ID_COALESCE_TX_USECS_HIGH,
-    NM_ETHTOOL_ID_COALESCE_TX_USECS_IRQ,
-    NM_ETHTOOL_ID_COALESCE_TX_USECS_LOW,
-    NM_ETHTOOL_ID_FEATURE_ESP_HW_OFFLOAD,
-    NM_ETHTOOL_ID_FEATURE_ESP_TX_CSUM_HW_OFFLOAD,
-    NM_ETHTOOL_ID_FEATURE_FCOE_MTU,
-    NM_ETHTOOL_ID_FEATURE_GRO,
-    NM_ETHTOOL_ID_FEATURE_GSO,
-    NM_ETHTOOL_ID_FEATURE_HIGHDMA,
-    NM_ETHTOOL_ID_FEATURE_HW_TC_OFFLOAD,
-    NM_ETHTOOL_ID_FEATURE_L2_FWD_OFFLOAD,
-    NM_ETHTOOL_ID_FEATURE_LOOPBACK,
-    NM_ETHTOOL_ID_FEATURE_LRO,
-    NM_ETHTOOL_ID_FEATURE_NTUPLE,
-    NM_ETHTOOL_ID_FEATURE_RX,
-    NM_ETHTOOL_ID_FEATURE_RX_ALL,
-    NM_ETHTOOL_ID_FEATURE_RX_FCS,
-    NM_ETHTOOL_ID_FEATURE_RX_GRO_HW,
-    NM_ETHTOOL_ID_FEATURE_RX_UDP_TUNNEL_PORT_OFFLOAD,
-    NM_ETHTOOL_ID_FEATURE_RX_VLAN_FILTER,
-    NM_ETHTOOL_ID_FEATURE_RX_VLAN_STAG_FILTER,
-    NM_ETHTOOL_ID_FEATURE_RX_VLAN_STAG_HW_PARSE,
-    NM_ETHTOOL_ID_FEATURE_RXHASH,
-    NM_ETHTOOL_ID_FEATURE_RXVLAN,
-    NM_ETHTOOL_ID_FEATURE_SG,
-    NM_ETHTOOL_ID_FEATURE_TLS_HW_RECORD,
-    NM_ETHTOOL_ID_FEATURE_TLS_HW_TX_OFFLOAD,
-    NM_ETHTOOL_ID_FEATURE_TSO,
-    NM_ETHTOOL_ID_FEATURE_TX,
-    NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_FCOE_CRC,
-    NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_IP_GENERIC,
-    NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_IPV4,
-    NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_IPV6,
-    NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_SCTP,
-    NM_ETHTOOL_ID_FEATURE_TX_ESP_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_FCOE_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_GRE_CSUM_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_GRE_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_GSO_PARTIAL,
-    NM_ETHTOOL_ID_FEATURE_TX_GSO_ROBUST,
-    NM_ETHTOOL_ID_FEATURE_TX_IPXIP4_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_IPXIP6_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_NOCACHE_COPY,
-    NM_ETHTOOL_ID_FEATURE_TX_SCATTER_GATHER,
-    NM_ETHTOOL_ID_FEATURE_TX_SCATTER_GATHER_FRAGLIST,
-    NM_ETHTOOL_ID_FEATURE_TX_SCTP_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_TCP_ECN_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_TCP_MANGLEID_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_TCP_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_TCP6_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_UDP_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_CSUM_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_VLAN_STAG_HW_INSERT,
-    NM_ETHTOOL_ID_FEATURE_TXVLAN,
-    NM_ETHTOOL_ID_RING_RX,
-    NM_ETHTOOL_ID_RING_RX_JUMBO,
-    NM_ETHTOOL_ID_RING_RX_MINI,
-    NM_ETHTOOL_ID_RING_TX,
-};
-
-/*****************************************************************************/
-
-static void
-_ASSERT_data(void)
-{
-    int i;
-
-    if (!NM_MORE_ASSERT_ONCE(10))
-        return;
-
-    G_STATIC_ASSERT_EXPR(_NM_ETHTOOL_ID_FIRST == 0);
-    G_STATIC_ASSERT_EXPR(_NM_ETHTOOL_ID_LAST == _NM_ETHTOOL_ID_NUM - 1);
-    G_STATIC_ASSERT_EXPR(_NM_ETHTOOL_ID_NUM > 0);
-
-    nm_assert(NM_PTRARRAY_LEN(nm_ethtool_data) == _NM_ETHTOOL_ID_NUM);
-    nm_assert(G_N_ELEMENTS(_by_name) == _NM_ETHTOOL_ID_NUM);
-    nm_assert(G_N_ELEMENTS(nm_ethtool_data) == _NM_ETHTOOL_ID_NUM + 1);
-
-    for (i = 0; i < _NM_ETHTOOL_ID_NUM; i++) {
-        const NMEthtoolData *d = nm_ethtool_data[i];
-
-        nm_assert(d);
-        nm_assert(d->id == (NMEthtoolID) i);
-        nm_assert(d->optname && d->optname[0]);
-    }
-
-    for (i = 0; i < _NM_ETHTOOL_ID_NUM; i++) {
-        NMEthtoolID          id = _by_name[i];
-        const NMEthtoolData *d;
-
-        nm_assert(id >= 0);
-        nm_assert(id < _NM_ETHTOOL_ID_NUM);
-
-        d = nm_ethtool_data[id];
-        if (i > 0) {
-            /* since we assert that all optnames are sorted strictly monotonically increasing,
-             * it also follows that there are no duplicates in the _by_name.
-             * It also follows, that all names in nm_ethtool_data are unique. */
-            if (strcmp(nm_ethtool_data[_by_name[i - 1]]->optname, d->optname) >= 0) {
-                g_error("nm_ethtool_data is not sorted asciibetically: %u/%s should be after %u/%s",
-                        i - 1,
-                        nm_ethtool_data[_by_name[i - 1]]->optname,
-                        i,
-                        d->optname);
-            }
-        }
-    }
-}
-
-static int
-_by_name_cmp(gconstpointer a, gconstpointer b, gpointer user_data)
-{
-    const guint8 *p_id    = a;
-    const char *  optname = b;
-
-    nm_assert(p_id && p_id >= _by_name && p_id <= &_by_name[_NM_ETHTOOL_ID_NUM]);
-    nm_assert(*p_id < _NM_ETHTOOL_ID_NUM);
-
-    return strcmp(nm_ethtool_data[*p_id]->optname, optname);
-}
-
-const NMEthtoolData *
-nm_ethtool_data_get_by_optname(const char *optname)
-{
-    gssize idx;
-
-    if (!optname)
-        return NULL;
-
-    _ASSERT_data();
-
-    idx = nm_utils_array_find_binary_search((gconstpointer *) _by_name,
-                                            sizeof(_by_name[0]),
-                                            _NM_ETHTOOL_ID_NUM,
-                                            optname,
-                                            _by_name_cmp,
-                                            NULL);
-    return (idx < 0) ? NULL : nm_ethtool_data[_by_name[idx]];
-}
-
-NMEthtoolType
-nm_ethtool_id_to_type(NMEthtoolID id)
-{
-    if (nm_ethtool_id_is_coalesce(id))
-        return NM_ETHTOOL_TYPE_COALESCE;
-    if (nm_ethtool_id_is_feature(id))
-        return NM_ETHTOOL_TYPE_FEATURE;
-    if (nm_ethtool_id_is_ring(id))
-        return NM_ETHTOOL_TYPE_RING;
-
-    return NM_ETHTOOL_TYPE_UNKNOWN;
-}
diff --git a/libnm-core/nm-libnm-core-intern/nm-ethtool-utils.h b/libnm-core/nm-libnm-core-intern/nm-ethtool-utils.h
deleted file mode 100644
index a11177e8..00000000
--- a/libnm-core/nm-libnm-core-intern/nm-ethtool-utils.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
-/*
- * Copyright (C) 2018 Red Hat, Inc.
- */
-
-#ifndef __NM_ETHTOOL_UTILS_H__
-#define __NM_ETHTOOL_UTILS_H__
-
-/*****************************************************************************/
-
-typedef enum {
-    NM_ETHTOOL_ID_UNKNOWN = -1,
-
-    _NM_ETHTOOL_ID_FIRST = 0,
-
-    _NM_ETHTOOL_ID_COALESCE_FIRST      = _NM_ETHTOOL_ID_FIRST,
-    NM_ETHTOOL_ID_COALESCE_ADAPTIVE_RX = _NM_ETHTOOL_ID_COALESCE_FIRST,
-    NM_ETHTOOL_ID_COALESCE_ADAPTIVE_TX,
-    NM_ETHTOOL_ID_COALESCE_PKT_RATE_HIGH,
-    NM_ETHTOOL_ID_COALESCE_PKT_RATE_LOW,
-    NM_ETHTOOL_ID_COALESCE_RX_FRAMES,
-    NM_ETHTOOL_ID_COALESCE_RX_FRAMES_HIGH,
-    NM_ETHTOOL_ID_COALESCE_RX_FRAMES_IRQ,
-    NM_ETHTOOL_ID_COALESCE_RX_FRAMES_LOW,
-    NM_ETHTOOL_ID_COALESCE_RX_USECS,
-    NM_ETHTOOL_ID_COALESCE_RX_USECS_HIGH,
-    NM_ETHTOOL_ID_COALESCE_RX_USECS_IRQ,
-    NM_ETHTOOL_ID_COALESCE_RX_USECS_LOW,
-    NM_ETHTOOL_ID_COALESCE_SAMPLE_INTERVAL,
-    NM_ETHTOOL_ID_COALESCE_STATS_BLOCK_USECS,
-    NM_ETHTOOL_ID_COALESCE_TX_FRAMES,
-    NM_ETHTOOL_ID_COALESCE_TX_FRAMES_HIGH,
-    NM_ETHTOOL_ID_COALESCE_TX_FRAMES_IRQ,
-    NM_ETHTOOL_ID_COALESCE_TX_FRAMES_LOW,
-    NM_ETHTOOL_ID_COALESCE_TX_USECS,
-    NM_ETHTOOL_ID_COALESCE_TX_USECS_HIGH,
-    NM_ETHTOOL_ID_COALESCE_TX_USECS_IRQ,
-    NM_ETHTOOL_ID_COALESCE_TX_USECS_LOW,
-    _NM_ETHTOOL_ID_COALESCE_LAST = NM_ETHTOOL_ID_COALESCE_TX_USECS_LOW,
-
-    _NM_ETHTOOL_ID_FEATURE_FIRST         = _NM_ETHTOOL_ID_COALESCE_LAST + 1,
-    NM_ETHTOOL_ID_FEATURE_ESP_HW_OFFLOAD = _NM_ETHTOOL_ID_FEATURE_FIRST,
-    NM_ETHTOOL_ID_FEATURE_ESP_TX_CSUM_HW_OFFLOAD,
-    NM_ETHTOOL_ID_FEATURE_FCOE_MTU,
-    NM_ETHTOOL_ID_FEATURE_GRO,
-    NM_ETHTOOL_ID_FEATURE_GSO,
-    NM_ETHTOOL_ID_FEATURE_HIGHDMA,
-    NM_ETHTOOL_ID_FEATURE_HW_TC_OFFLOAD,
-    NM_ETHTOOL_ID_FEATURE_L2_FWD_OFFLOAD,
-    NM_ETHTOOL_ID_FEATURE_LOOPBACK,
-    NM_ETHTOOL_ID_FEATURE_LRO,
-    NM_ETHTOOL_ID_FEATURE_NTUPLE,
-    NM_ETHTOOL_ID_FEATURE_RX,
-    NM_ETHTOOL_ID_FEATURE_RXHASH,
-    NM_ETHTOOL_ID_FEATURE_RXVLAN,
-    NM_ETHTOOL_ID_FEATURE_RX_ALL,
-    NM_ETHTOOL_ID_FEATURE_RX_FCS,
-    NM_ETHTOOL_ID_FEATURE_RX_GRO_HW,
-    NM_ETHTOOL_ID_FEATURE_RX_UDP_TUNNEL_PORT_OFFLOAD,
-    NM_ETHTOOL_ID_FEATURE_RX_VLAN_FILTER,
-    NM_ETHTOOL_ID_FEATURE_RX_VLAN_STAG_FILTER,
-    NM_ETHTOOL_ID_FEATURE_RX_VLAN_STAG_HW_PARSE,
-    NM_ETHTOOL_ID_FEATURE_SG,
-    NM_ETHTOOL_ID_FEATURE_TLS_HW_RECORD,
-    NM_ETHTOOL_ID_FEATURE_TLS_HW_TX_OFFLOAD,
-    NM_ETHTOOL_ID_FEATURE_TSO,
-    NM_ETHTOOL_ID_FEATURE_TX,
-    NM_ETHTOOL_ID_FEATURE_TXVLAN,
-    NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_FCOE_CRC,
-    NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_IPV4,
-    NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_IPV6,
-    NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_IP_GENERIC,
-    NM_ETHTOOL_ID_FEATURE_TX_CHECKSUM_SCTP,
-    NM_ETHTOOL_ID_FEATURE_TX_ESP_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_FCOE_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_GRE_CSUM_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_GRE_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_GSO_PARTIAL,
-    NM_ETHTOOL_ID_FEATURE_TX_GSO_ROBUST,
-    NM_ETHTOOL_ID_FEATURE_TX_IPXIP4_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_IPXIP6_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_NOCACHE_COPY,
-    NM_ETHTOOL_ID_FEATURE_TX_SCATTER_GATHER,
-    NM_ETHTOOL_ID_FEATURE_TX_SCATTER_GATHER_FRAGLIST,
-    NM_ETHTOOL_ID_FEATURE_TX_SCTP_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_TCP6_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_TCP_ECN_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_TCP_MANGLEID_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_TCP_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_UDP_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_CSUM_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_UDP_TNL_SEGMENTATION,
-    NM_ETHTOOL_ID_FEATURE_TX_VLAN_STAG_HW_INSERT,
-    _NM_ETHTOOL_ID_FEATURE_LAST = NM_ETHTOOL_ID_FEATURE_TX_VLAN_STAG_HW_INSERT,
-
-    _NM_ETHTOOL_ID_RING_FIRST = _NM_ETHTOOL_ID_FEATURE_LAST + 1,
-    NM_ETHTOOL_ID_RING_RX     = _NM_ETHTOOL_ID_RING_FIRST,
-    NM_ETHTOOL_ID_RING_RX_JUMBO,
-    NM_ETHTOOL_ID_RING_RX_MINI,
-    NM_ETHTOOL_ID_RING_TX,
-    _NM_ETHTOOL_ID_RING_LAST = NM_ETHTOOL_ID_RING_TX,
-
-    _NM_ETHTOOL_ID_LAST = _NM_ETHTOOL_ID_RING_LAST,
-
-    _NM_ETHTOOL_ID_COALESCE_NUM =
-        (_NM_ETHTOOL_ID_COALESCE_LAST - _NM_ETHTOOL_ID_COALESCE_FIRST + 1),
-    _NM_ETHTOOL_ID_FEATURE_NUM = (_NM_ETHTOOL_ID_FEATURE_LAST - _NM_ETHTOOL_ID_FEATURE_FIRST + 1),
-    _NM_ETHTOOL_ID_RING_NUM    = (_NM_ETHTOOL_ID_RING_LAST - _NM_ETHTOOL_ID_RING_FIRST + 1),
-    _NM_ETHTOOL_ID_NUM         = (_NM_ETHTOOL_ID_LAST - _NM_ETHTOOL_ID_FIRST + 1),
-} NMEthtoolID;
-
-#define _NM_ETHTOOL_ID_FEATURE_AS_IDX(ethtool_id)  ((ethtool_id) -_NM_ETHTOOL_ID_FEATURE_FIRST)
-#define _NM_ETHTOOL_ID_COALESCE_AS_IDX(ethtool_id) ((ethtool_id) -_NM_ETHTOOL_ID_COALESCE_FIRST)
-
-typedef enum {
-    NM_ETHTOOL_TYPE_UNKNOWN,
-    NM_ETHTOOL_TYPE_COALESCE,
-    NM_ETHTOOL_TYPE_FEATURE,
-    NM_ETHTOOL_TYPE_RING,
-} NMEthtoolType;
-
-typedef struct {
-    const char *optname;
-    NMEthtoolID id;
-} NMEthtoolData;
-
-extern const NMEthtoolData *const nm_ethtool_data[_NM_ETHTOOL_ID_NUM + 1];
-
-const NMEthtoolData *nm_ethtool_data_get_by_optname(const char *optname);
-
-NMEthtoolType nm_ethtool_id_to_type(NMEthtoolID id);
-
-/****************************************************************************/
-
-static inline NMEthtoolID
-nm_ethtool_id_get_by_name(const char *optname)
-{
-    const NMEthtoolData *d;
-
-    d = nm_ethtool_data_get_by_optname(optname);
-    return d ? d->id : NM_ETHTOOL_ID_UNKNOWN;
-}
-
-static inline gboolean
-nm_ethtool_id_is_feature(NMEthtoolID id)
-{
-    return id >= _NM_ETHTOOL_ID_FEATURE_FIRST && id <= _NM_ETHTOOL_ID_FEATURE_LAST;
-}
-
-static inline gboolean
-nm_ethtool_id_is_coalesce(NMEthtoolID id)
-{
-    return id >= _NM_ETHTOOL_ID_COALESCE_FIRST && id <= _NM_ETHTOOL_ID_COALESCE_LAST;
-}
-
-static inline gboolean
-nm_ethtool_id_is_ring(NMEthtoolID id)
-{
-    return id >= _NM_ETHTOOL_ID_RING_FIRST && id <= _NM_ETHTOOL_ID_RING_LAST;
-}
-
-/****************************************************************************/
-
-#endif /* __NM_ETHTOOL_UTILS_H__ */
diff --git a/libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.c b/libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.c
index 65cd8ba5..1ab0fcf2 100644
--- a/libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.c
+++ b/libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.c
@@ -1,6 +1,6 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include "nm-default.h"
+#include "libnm-core/nm-default-libnm-core.h"
 
 #include "nm-libnm-core-utils.h"
 
@@ -36,18 +36,19 @@ _nm_setting_bond_remove_options_arp_interval(NMSettingBond *s_bond)
     nm_setting_bond_remove_option(s_bond, NM_SETTING_BOND_OPTION_ARP_IP_TARGET);
 }
 
+/*****************************************************************************/
+
 NM_UTILS_STRING_TABLE_LOOKUP_DEFINE(
     _nm_setting_bond_mode_from_string,
     NMBondMode,
-    { g_return_val_if_fail(name, NM_BOND_MODE_UNKNOWN); },
+    {
+        G_STATIC_ASSERT_EXPR(_NM_BOND_MODE_NUM <= 9);
+
+        if (name && name[0] < '0' + _NM_BOND_MODE_NUM && name[0] >= '0' && name[1] == '\0') {
+            return name[0] - '0';
+        }
+    },
     { return NM_BOND_MODE_UNKNOWN; },
-    {"0", NM_BOND_MODE_ROUNDROBIN},
-    {"1", NM_BOND_MODE_ACTIVEBACKUP},
-    {"2", NM_BOND_MODE_XOR},
-    {"3", NM_BOND_MODE_BROADCAST},
-    {"4", NM_BOND_MODE_8023AD},
-    {"5", NM_BOND_MODE_TLB},
-    {"6", NM_BOND_MODE_ALB},
     {"802.3ad", NM_BOND_MODE_8023AD},
     {"active-backup", NM_BOND_MODE_ACTIVEBACKUP},
     {"balance-alb", NM_BOND_MODE_ALB},
@@ -56,6 +57,47 @@ NM_UTILS_STRING_TABLE_LOOKUP_DEFINE(
     {"balance-xor", NM_BOND_MODE_XOR},
     {"broadcast", NM_BOND_MODE_BROADCAST}, );
 
+const char *
+_nm_setting_bond_mode_to_string(int mode)
+{
+    static const char *const modes[] = {
+        [NM_BOND_MODE_8023AD]       = "802.3ad",
+        [NM_BOND_MODE_ACTIVEBACKUP] = "active-backup",
+        [NM_BOND_MODE_ALB]          = "balance-alb",
+        [NM_BOND_MODE_BROADCAST]    = "broadcast",
+        [NM_BOND_MODE_ROUNDROBIN]   = "balance-rr",
+        [NM_BOND_MODE_TLB]          = "balance-tlb",
+        [NM_BOND_MODE_XOR]          = "balance-xor",
+    };
+
+    G_STATIC_ASSERT(G_N_ELEMENTS(modes) == _NM_BOND_MODE_NUM);
+
+    if (NM_MORE_ASSERT_ONCE(5)) {
+        char       sbuf[100];
+        int        i;
+        NMBondMode m;
+
+        for (i = 0; i < (int) G_N_ELEMENTS(modes); i++) {
+            nm_assert(modes[i]);
+            nm_assert(i == _nm_setting_bond_mode_from_string(modes[i]));
+            nm_assert(i == _nm_setting_bond_mode_from_string(nm_sprintf_buf(sbuf, "%d", i)));
+        }
+        nm_assert(NM_BOND_MODE_UNKNOWN == _nm_setting_bond_mode_from_string(NULL));
+        nm_assert(NM_BOND_MODE_UNKNOWN == _nm_setting_bond_mode_from_string(""));
+        for (i = -2; i < ((int) G_N_ELEMENTS(modes)) + 20; i++) {
+            if (i < 0 || i >= G_N_ELEMENTS(modes))
+                m = NM_BOND_MODE_UNKNOWN;
+            else
+                m = i;
+            nm_assert(m == _nm_setting_bond_mode_from_string(nm_sprintf_buf(sbuf, "%d", i)));
+        }
+    }
+
+    if (mode >= 0 && mode < (int) G_N_ELEMENTS(modes))
+        return modes[mode];
+    return NULL;
+}
+
 /*****************************************************************************/
 
 gboolean
diff --git a/libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.h b/libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.h
index 5d672fed..946c7a2c 100644
--- a/libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.h
+++ b/libnm-core/nm-libnm-core-intern/nm-libnm-core-utils.h
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 
 #ifndef __NM_LIBNM_SHARED_UTILS_H__
 #define __NM_LIBNM_SHARED_UTILS_H__
@@ -65,11 +65,16 @@ typedef enum {
     NM_BOND_MODE_8023AD       = 4,
     NM_BOND_MODE_TLB          = 5,
     NM_BOND_MODE_ALB          = 6,
+
     _NM_BOND_MODE_NUM,
 } NMBondMode;
 
 NMBondMode _nm_setting_bond_mode_from_string(const char *str);
 
+const char *_nm_setting_bond_mode_to_string(int mode);
+
+gboolean _nm_setting_bond_validate_option(const char *name, const char *value, GError **error);
+
 /*****************************************************************************/
 
 static inline guint32
@@ -93,6 +98,11 @@ gboolean nm_utils_vlan_priority_map_parse_str(NMVlanPriorityMap map_type,
 
 /*****************************************************************************/
 
+#define NM_OVS_EXTERNAL_ID_NM_PREFIX          "NM."
+#define NM_OVS_EXTERNAL_ID_NM_CONNECTION_UUID "NM.connection.uuid"
+
+/*****************************************************************************/
+
 static inline int
 nm_setting_ip_config_get_addr_family(NMSettingIPConfig *s_ip)
 {