From 14106431fbe7091ba41e593afbf2346c7ed6fdc3 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Thu, 3 Apr 2025 10:05:47 +0200 Subject: [PATCH] libnm-core: set ovs-dpdk and ovs-patch as non-base settings Settings "ovs-dpdk" and "ovs-patch" are currently marked with priority NM_SETTING_PRIORITY_HW_BASE, which makes them "base" settings. This means that they can be used as connection type, for example via "nmcli connection add type ovs-dpdk ...". This is wrong, as both settings can only belong to a connection of type "ovs-interface". Decrease their priority and make them non-base settings. The problem was spotted when trying to add a ovs-patch connection via nmcli: # nmcli connection add type ovs-patch ifname p con-name q ovs-patch.peer r controller s port-type ovs-port Warning: controller='s' doesn't refer to any existing profile. (process:4580): nm-CRITICAL **: 10:15:42.807: file ../src/libnm-core-impl/nm-connection.c: line 1682 (_normalize_ovs_interface_type): should not be reached (process:4580): nm-WARNING **: 10:15:42.807: connection did not verify after normalization: ?? (process:4580): nm-CRITICAL **: 10:15:42.807: file ../src/libnm-core-impl/nm-connection.c: line 2170 (_connection_normalize): should not be reached Error: Failed to add 'q' connection: ovs-interface.type: A connection with 'ovs-patch' setting must be of connection.type "ovs-interface" but is "ovs-patch" Fixes: d0ec5011638e ('cli: assert that valid_parts are set for base types') https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/2178 --- src/libnm-core-impl/nm-meta-setting-base-impl.c | 8 ++++---- src/libnmc-setting/nm-meta-setting-base-impl.c | 8 ++++---- src/libnmc-setting/nm-meta-setting-desc.c | 14 ++------------ src/nmcli/gen-metadata-nm-settings-nmcli.xml.in | 2 +- 4 files changed, 11 insertions(+), 21 deletions(-) diff --git a/src/libnm-core-impl/nm-meta-setting-base-impl.c b/src/libnm-core-impl/nm-meta-setting-base-impl.c index d625c4e8c7..52af9ad259 100644 --- a/src/libnm-core-impl/nm-meta-setting-base-impl.c +++ b/src/libnm-core-impl/nm-meta-setting-base-impl.c @@ -432,7 +432,7 @@ const NMMetaSettingInfo nm_meta_setting_infos[] = { [NM_META_SETTING_TYPE_OVS_DPDK] = { .meta_type = NM_META_SETTING_TYPE_OVS_DPDK, - .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_priority = NM_SETTING_PRIORITY_AUX, .setting_name = NM_SETTING_OVS_DPDK_SETTING_NAME, .get_setting_gtype = nm_setting_ovs_dpdk_get_type, }, @@ -460,7 +460,7 @@ const NMMetaSettingInfo nm_meta_setting_infos[] = { [NM_META_SETTING_TYPE_OVS_PATCH] = { .meta_type = NM_META_SETTING_TYPE_OVS_PATCH, - .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_priority = NM_SETTING_PRIORITY_AUX, .setting_name = NM_SETTING_OVS_PATCH_SETTING_NAME, .get_setting_gtype = nm_setting_ovs_patch_get_type, }, @@ -664,9 +664,7 @@ const NMMetaSettingType nm_meta_setting_types_by_priority[] = { NM_META_SETTING_TYPE_MACSEC, NM_META_SETTING_TYPE_MACVLAN, NM_META_SETTING_TYPE_OVS_BRIDGE, - NM_META_SETTING_TYPE_OVS_DPDK, NM_META_SETTING_TYPE_OVS_INTERFACE, - NM_META_SETTING_TYPE_OVS_PATCH, NM_META_SETTING_TYPE_OVS_PORT, NM_META_SETTING_TYPE_TEAM, NM_META_SETTING_TYPE_TUN, @@ -696,8 +694,10 @@ const NMMetaSettingType nm_meta_setting_types_by_priority[] = { NM_META_SETTING_TYPE_ETHTOOL, NM_META_SETTING_TYPE_LINK, NM_META_SETTING_TYPE_MATCH, + NM_META_SETTING_TYPE_OVS_DPDK, NM_META_SETTING_TYPE_OVS_EXTERNAL_IDS, NM_META_SETTING_TYPE_OVS_OTHER_CONFIG, + NM_META_SETTING_TYPE_OVS_PATCH, NM_META_SETTING_TYPE_PPP, NM_META_SETTING_TYPE_PPPOE, NM_META_SETTING_TYPE_TEAM_PORT, diff --git a/src/libnmc-setting/nm-meta-setting-base-impl.c b/src/libnmc-setting/nm-meta-setting-base-impl.c index d625c4e8c7..52af9ad259 100644 --- a/src/libnmc-setting/nm-meta-setting-base-impl.c +++ b/src/libnmc-setting/nm-meta-setting-base-impl.c @@ -432,7 +432,7 @@ const NMMetaSettingInfo nm_meta_setting_infos[] = { [NM_META_SETTING_TYPE_OVS_DPDK] = { .meta_type = NM_META_SETTING_TYPE_OVS_DPDK, - .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_priority = NM_SETTING_PRIORITY_AUX, .setting_name = NM_SETTING_OVS_DPDK_SETTING_NAME, .get_setting_gtype = nm_setting_ovs_dpdk_get_type, }, @@ -460,7 +460,7 @@ const NMMetaSettingInfo nm_meta_setting_infos[] = { [NM_META_SETTING_TYPE_OVS_PATCH] = { .meta_type = NM_META_SETTING_TYPE_OVS_PATCH, - .setting_priority = NM_SETTING_PRIORITY_HW_BASE, + .setting_priority = NM_SETTING_PRIORITY_AUX, .setting_name = NM_SETTING_OVS_PATCH_SETTING_NAME, .get_setting_gtype = nm_setting_ovs_patch_get_type, }, @@ -664,9 +664,7 @@ const NMMetaSettingType nm_meta_setting_types_by_priority[] = { NM_META_SETTING_TYPE_MACSEC, NM_META_SETTING_TYPE_MACVLAN, NM_META_SETTING_TYPE_OVS_BRIDGE, - NM_META_SETTING_TYPE_OVS_DPDK, NM_META_SETTING_TYPE_OVS_INTERFACE, - NM_META_SETTING_TYPE_OVS_PATCH, NM_META_SETTING_TYPE_OVS_PORT, NM_META_SETTING_TYPE_TEAM, NM_META_SETTING_TYPE_TUN, @@ -696,8 +694,10 @@ const NMMetaSettingType nm_meta_setting_types_by_priority[] = { NM_META_SETTING_TYPE_ETHTOOL, NM_META_SETTING_TYPE_LINK, NM_META_SETTING_TYPE_MATCH, + NM_META_SETTING_TYPE_OVS_DPDK, NM_META_SETTING_TYPE_OVS_EXTERNAL_IDS, NM_META_SETTING_TYPE_OVS_OTHER_CONFIG, + NM_META_SETTING_TYPE_OVS_PATCH, NM_META_SETTING_TYPE_PPP, NM_META_SETTING_TYPE_PPPOE, NM_META_SETTING_TYPE_TEAM_PORT, diff --git a/src/libnmc-setting/nm-meta-setting-desc.c b/src/libnmc-setting/nm-meta-setting-desc.c index 2cae19ba86..e109f228e9 100644 --- a/src/libnmc-setting/nm-meta-setting-desc.c +++ b/src/libnmc-setting/nm-meta-setting-desc.c @@ -9166,12 +9166,7 @@ const NMMetaSettingInfoEditor nm_meta_setting_infos_editor[] = { NM_META_SETTING_VALID_PART_ITEM (WIRED, FALSE), ), ), - SETTING_INFO (OVS_DPDK, - .valid_parts = NM_META_SETTING_VALID_PARTS ( - NM_META_SETTING_VALID_PART_ITEM (CONNECTION, TRUE), - NM_META_SETTING_VALID_PART_ITEM (OVS_DPDK, TRUE), - ), - ), + SETTING_INFO (OVS_DPDK), SETTING_INFO_EMPTY (OVS_OTHER_CONFIG), SETTING_INFO_EMPTY (OVS_EXTERNAL_IDS), SETTING_INFO (OVS_INTERFACE, @@ -9187,12 +9182,7 @@ const NMMetaSettingInfoEditor nm_meta_setting_infos_editor[] = { NM_META_SETTING_VALID_PART_ITEM (ETHTOOL, FALSE), ), ), - SETTING_INFO (OVS_PATCH, - .valid_parts = NM_META_SETTING_VALID_PARTS ( - NM_META_SETTING_VALID_PART_ITEM (CONNECTION, TRUE), - NM_META_SETTING_VALID_PART_ITEM (OVS_PATCH, TRUE), - ), - ), + SETTING_INFO (OVS_PATCH), SETTING_INFO (OVS_PORT, .valid_parts = NM_META_SETTING_VALID_PARTS ( NM_META_SETTING_VALID_PART_ITEM (CONNECTION, TRUE), diff --git a/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in b/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in index 5b3ba3e7dc..155c413cb8 100644 --- a/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in +++ b/src/nmcli/gen-metadata-nm-settings-nmcli.xml.in @@ -629,7 +629,7 @@ alias="type" nmcli-description="Base type of the connection. For hardware-dependent connections, should contain the setting name of the hardware-type specific setting (ie, "802-3-ethernet" or "802-11-wireless" or "bluetooth", etc), and for non-hardware dependent connections like VPN or otherwise, should contain the setting name of that setting type (ie, "vpn" or "bridge", etc)." format="string" - values="6lowpan, 802-11-olpc-mesh, 802-11-wireless, 802-3-ethernet, adsl, bluetooth, bond, bridge, cdma, dummy, generic, gsm, hsr, infiniband, ip-tunnel, ipvlan, loopback, macsec, macvlan, ovs-bridge, ovs-dpdk, ovs-interface, ovs-patch, ovs-port, pppoe, team, tun, veth, vlan, vpn, vrf, vxlan, wifi-p2p, wimax, wireguard, wpan" /> + values="6lowpan, 802-11-olpc-mesh, 802-11-wireless, 802-3-ethernet, adsl, bluetooth, bond, bridge, cdma, dummy, generic, gsm, hsr, infiniband, ip-tunnel, ipvlan, loopback, macsec, macvlan, ovs-bridge, ovs-interface, ovs-port, pppoe, team, tun, veth, vlan, vpn, vrf, vxlan, wifi-p2p, wimax, wireguard, wpan" />