summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2022-07-12 20:06:10 +0200
committerThomas Haller <thaller@redhat.com>2022-07-19 12:36:57 +0200
commitf40dcd65f75a2763c26966d4218b74ce5d79ba0e (patch)
treea69fce8d837913680e35eebd41802c1841147705
parent3d4906a3da8930e1de48bd5cf1a7efc56a9bedfd (diff)
downloadNetworkManager-f40dcd65f75a2763c26966d4218b74ce5d79ba0e.tar.gz
platform: use new platform API to get genl family id for wireguard
-rw-r--r--src/libnm-platform/nm-linux-platform.c64
-rw-r--r--src/libnm-platform/nmp-object.c6
-rw-r--r--src/libnm-platform/nmp-object.h5
3 files changed, 19 insertions, 56 deletions
diff --git a/src/libnm-platform/nm-linux-platform.c b/src/libnm-platform/nm-linux-platform.c
index 2ab0251c32..0e6f3c71e2 100644
--- a/src/libnm-platform/nm-linux-platform.c
+++ b/src/libnm-platform/nm-linux-platform.c
@@ -2493,7 +2493,7 @@ _wireguard_get_device_cb(struct nl_msg *msg, void *arg)
static const NMPObject *
_wireguard_read_info(NMPlatform *platform /* used only as logging context */,
struct nl_sock *genl,
- int wireguard_family_id,
+ guint16 wireguard_family_id,
int ifindex)
{
nm_auto_nlmsg struct nl_msg *msg = NULL;
@@ -2507,10 +2507,12 @@ _wireguard_read_info(NMPlatform *platform /* used only as logging context */
guint i;
nm_assert(genl);
- nm_assert(wireguard_family_id >= 0);
nm_assert(ifindex > 0);
- _LOGT("wireguard: fetching information for ifindex %d (genl-id %d)...",
+ if (wireguard_family_id == 0)
+ return NULL;
+
+ _LOGT("wireguard: fetching information for ifindex %d (genl-id %u)...",
ifindex,
wireguard_family_id);
@@ -2623,25 +2625,8 @@ nla_put_failure:
g_return_val_if_reached(NULL);
}
-static int
-_wireguard_get_family_id(NMPlatform *platform, int ifindex_try)
-{
- NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE(platform);
- int wireguard_family_id = -1;
-
- if (ifindex_try > 0) {
- const NMPlatformLink *plink;
-
- if (nm_platform_link_get_lnk_wireguard(platform, ifindex_try, &plink))
- wireguard_family_id = NMP_OBJECT_UP_CAST(plink)->_link.wireguard_family_id;
- }
- if (wireguard_family_id < 0)
- wireguard_family_id = genl_ctrl_resolve(priv->sk_genl_sync, "wireguard");
- return wireguard_family_id;
-}
-
static const NMPObject *
-_wireguard_refresh_link(NMPlatform *platform, int wireguard_family_id, int ifindex)
+_wireguard_refresh_link(NMPlatform *platform, guint16 wireguard_family_id, int ifindex)
{
NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE(platform);
nm_auto_nmpobj const NMPObject *obj_old = NULL;
@@ -2651,7 +2636,7 @@ _wireguard_refresh_link(NMPlatform *platform, int wireguard_family_id, int ifind
const NMPObject *plink = NULL;
nm_auto_nmpobj NMPObject *obj = NULL;
- nm_assert(wireguard_family_id >= 0);
+ nm_assert(wireguard_family_id > 0);
nm_assert(ifindex > 0);
nm_platform_process_events(platform);
@@ -2676,15 +2661,13 @@ _wireguard_refresh_link(NMPlatform *platform, int wireguard_family_id, int ifind
}
}
- if (plink->_link.wireguard_family_id == wireguard_family_id
- && plink->_link.netlink.lnk == lnk_new)
+ if (plink->_link.netlink.lnk == lnk_new)
return plink;
/* we use nmp_cache_update_netlink() to re-inject the new object into the cache.
* For that, we need to clone it, and tweak it so that it's suitable. It's a bit
* of a hack, in particular that we need to clear driver and udev-device. */
- obj = nmp_object_clone(plink, FALSE);
- obj->_link.wireguard_family_id = wireguard_family_id;
+ obj = nmp_object_clone(plink, FALSE);
nmp_object_unref(obj->_link.netlink.lnk);
obj->_link.netlink.lnk = g_steal_pointer(&lnk_new);
obj->link.driver = NULL;
@@ -2710,7 +2693,7 @@ _wireguard_refresh_link(NMPlatform *platform, int wireguard_family_id, int ifind
static int
_wireguard_create_change_nlmsgs(NMPlatform *platform,
int ifindex,
- int wireguard_family_id,
+ guint16 wireguard_family_id,
const NMPlatformLnkWireGuard *lnk_wireguard,
const NMPWireGuardPeer *peers,
const NMPlatformWireGuardChangePeerFlags *peer_flags,
@@ -2952,12 +2935,12 @@ link_wireguard_change(NMPlatform *platform,
{
NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE(platform);
gs_unref_ptrarray GPtrArray *msgs = NULL;
- int wireguard_family_id;
+ guint16 wireguard_family_id;
guint i;
int r;
- wireguard_family_id = _wireguard_get_family_id(platform, ifindex);
- if (wireguard_family_id < 0)
+ wireguard_family_id = nm_platform_genl_get_family_id(platform, NMP_GENL_FAMILY_TYPE_WIREGUARD);
+ if (wireguard_family_id == 0)
return -NME_PL_NO_FIRMWARE;
r = _wireguard_create_change_nlmsgs(platform,
@@ -3337,22 +3320,11 @@ _new_from_nl_link(NMPlatform *platform,
* notifications, so we don't actually update the cache. For
* now, always refetch link data here. */
- _lookup_cached_link(cache, obj->link.ifindex, completed_from_cache, &link_cached);
- if (link_cached && link_cached->_link.netlink.is_in_netlink
- && link_cached->link.type == NM_LINK_TYPE_WIREGUARD)
- obj->_link.wireguard_family_id = link_cached->_link.wireguard_family_id;
- else
- obj->_link.wireguard_family_id = -1;
-
- if (obj->_link.wireguard_family_id < 0)
- obj->_link.wireguard_family_id = genl_ctrl_resolve(genl, "wireguard");
-
- if (obj->_link.wireguard_family_id >= 0) {
- lnk_data_new = _wireguard_read_info(platform,
- genl,
- obj->_link.wireguard_family_id,
- obj->link.ifindex);
- }
+ lnk_data_new = _wireguard_read_info(
+ platform,
+ genl,
+ nm_platform_genl_get_family_id(platform, NMP_GENL_FAMILY_TYPE_WIREGUARD),
+ obj->link.ifindex);
if (lnk_data_new && obj->_link.netlink.lnk
&& nmp_object_equal(obj->_link.netlink.lnk, lnk_data_new))
diff --git a/src/libnm-platform/nmp-object.c b/src/libnm-platform/nmp-object.c
index 99e2287691..d411043d0f 100644
--- a/src/libnm-platform/nmp-object.c
+++ b/src/libnm-platform/nmp-object.c
@@ -1149,10 +1149,7 @@ _vt_cmd_obj_hash_update_link(const NMPObject *obj, NMHashState *h)
nm_assert(NMP_OBJECT_GET_TYPE(obj) == NMP_OBJECT_TYPE_LINK);
nm_platform_link_hash_update(&obj->link, h);
- nm_hash_update_vals(h,
- obj->_link.netlink.is_in_netlink,
- obj->_link.wireguard_family_id,
- obj->_link.udev.device);
+ nm_hash_update_vals(h, obj->_link.netlink.is_in_netlink, obj->_link.udev.device);
if (obj->_link.netlink.lnk)
nmp_object_hash_update(obj->_link.netlink.lnk, h);
}
@@ -1232,7 +1229,6 @@ _vt_cmd_obj_cmp_link(const NMPObject *obj1, const NMPObject *obj2)
NM_CMP_RETURN(nm_platform_link_cmp(&obj1->link, &obj2->link));
NM_CMP_DIRECT(obj1->_link.netlink.is_in_netlink, obj2->_link.netlink.is_in_netlink);
NM_CMP_RETURN(nmp_object_cmp(obj1->_link.netlink.lnk, obj2->_link.netlink.lnk));
- NM_CMP_DIRECT(obj1->_link.wireguard_family_id, obj2->_link.wireguard_family_id);
if (obj1->_link.udev.device != obj2->_link.udev.device) {
if (!obj1->_link.udev.device)
diff --git a/src/libnm-platform/nmp-object.h b/src/libnm-platform/nmp-object.h
index d0c0463f13..7d2ebf979a 100644
--- a/src/libnm-platform/nmp-object.h
+++ b/src/libnm-platform/nmp-object.h
@@ -238,11 +238,6 @@ typedef struct {
/* Auxiliary data object for Wi-Fi and WPAN */
GObject *ext_data;
-
- /* FIXME: not every NMPObjectLink should pay the price for tracking
- * the wireguard family id. This should be tracked via ext_data, which
- * would be exactly the right place. */
- int wireguard_family_id;
} NMPObjectLink;
typedef struct {