From 0a94b0138de65ae88e783143d2c4cab930303844 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Mon, 2 Dec 2024 09:39:21 -0600 Subject: netlink: add RTM_GETLINK support to read MAC address Since we're also now reading responses we need to check sender credentials to make sure we're talking to the kernel, and not some other process spoofing netlink. Signed-off-by: Dan Williams --- src/mm-port-net.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) (limited to 'src/mm-port-net.c') diff --git a/src/mm-port-net.c b/src/mm-port-net.c index f1122ef6..a1fb4372 100644 --- a/src/mm-port-net.c +++ b/src/mm-port-net.c @@ -97,6 +97,59 @@ mm_port_net_link_setup (MMPortNet *self, /*****************************************************************************/ +GByteArray * +mm_port_net_get_hwaddress_finish (MMPortNet *self, + GAsyncResult *res, + GError **error) +{ + return g_task_propagate_pointer (G_TASK (res), error); +} + +static void +netlink_get_hwaddress_ready (MMNetlink *netlink, + GAsyncResult *res, + GTask *task) +{ + GError *error = NULL; + GByteArray *hwaddr; + + hwaddr = mm_netlink_get_hwaddr_finish (netlink, res, &error); + if (!hwaddr) { + g_prefix_error (&error, "netlink operation failed: "); + g_task_return_error (task, error); + } else + g_task_return_pointer (task, hwaddr, (GDestroyNotify) g_byte_array_unref); + g_object_unref (task); +} + +void +mm_port_net_get_hwaddress (MMPortNet *self, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + GTask *task; + + task = g_task_new (self, cancellable, callback, user_data); + + ensure_ifindex (self); + if (!self->priv->ifindex) { + g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, + "no valid interface index found for %s", + mm_port_get_device (MM_PORT (self))); + g_object_unref (task); + return; + } + + mm_netlink_get_hwaddr (mm_netlink_get (), /* singleton */ + self->priv->ifindex, + cancellable, + (GAsyncReadyCallback) netlink_get_hwaddress_ready, + task); +} + +/*****************************************************************************/ + MMPortNet * mm_port_net_new (const gchar *name) { -- cgit v1.2.3-70-g09d2