Blame src/devices/wifi/nm-wifi-common.c

Packit Service 87a54e
/* SPDX-License-Identifier: LGPL-2.1-or-later */
Packit 5756e2
/*
Packit 5756e2
 * Copyright (C) 2018 Red Hat, Inc.
Packit 5756e2
 */
Packit 5756e2
Packit 5756e2
#include "nm-default.h"
Packit 5756e2
Packit 5756e2
#include "nm-wifi-common.h"
Packit 5756e2
Packit 5756e2
#include "devices/nm-device.h"
Packit 5756e2
#include "nm-wifi-ap.h"
Packit 5756e2
#include "nm-device-wifi.h"
Packit 5756e2
#include "nm-dbus-manager.h"
Packit 5756e2
Packit 5756e2
#if WITH_IWD
Packit Service a1bd4f
    #include "nm-device-iwd.h"
Packit 5756e2
#endif
Packit 5756e2
Packit 5756e2
/*****************************************************************************/
Packit 5756e2
Packit 5756e2
void
Packit Service a1bd4f
nm_device_wifi_emit_signal_access_point(NMDevice *device,
Packit Service a1bd4f
                                        NMWifiAP *ap,
Packit Service a1bd4f
                                        gboolean  is_added /* or else is_removed */)
Packit 5756e2
{
Packit Service a1bd4f
    nm_dbus_object_emit_signal(NM_DBUS_OBJECT(device),
Packit Service a1bd4f
                               &nm_interface_info_device_wireless,
Packit Service a1bd4f
                               is_added ? &nm_signal_info_wireless_access_point_added
Packit Service a1bd4f
                                        : &nm_signal_info_wireless_access_point_removed,
Packit Service a1bd4f
                               "(o)",
Packit Service a1bd4f
                               nm_dbus_object_get_path(NM_DBUS_OBJECT(ap)));
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/*****************************************************************************/
Packit 5756e2
Packit 5756e2
static const CList *
Packit Service a1bd4f
_dispatch_get_aps(NMDevice *device)
Packit 5756e2
{
Packit 5756e2
#if WITH_IWD
Packit Service a1bd4f
    if (NM_IS_DEVICE_IWD(device))
Packit Service a1bd4f
        return _nm_device_iwd_get_aps(NM_DEVICE_IWD(device));
Packit 5756e2
#endif
Packit Service a1bd4f
    return _nm_device_wifi_get_aps(NM_DEVICE_WIFI(device));
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
_dispatch_request_scan(NMDevice *device, GVariant *options, GDBusMethodInvocation *invocation)
Packit 5756e2
{
Packit 5756e2
#if WITH_IWD
Packit Service a1bd4f
    if (NM_IS_DEVICE_IWD(device)) {
Packit Service a1bd4f
        _nm_device_iwd_request_scan(NM_DEVICE_IWD(device), options, invocation);
Packit Service a1bd4f
        return;
Packit Service a1bd4f
    }
Packit 5756e2
#endif
Packit Service a1bd4f
    _nm_device_wifi_request_scan(NM_DEVICE_WIFI(device), options, invocation);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
impl_device_wifi_get_access_points(NMDBusObject *                     obj,
Packit Service a1bd4f
                                   const NMDBusInterfaceInfoExtended *interface_info,
Packit Service a1bd4f
                                   const NMDBusMethodInfoExtended *   method_info,
Packit Service a1bd4f
                                   GDBusConnection *                  connection,
Packit Service a1bd4f
                                   const char *                       sender,
Packit Service a1bd4f
                                   GDBusMethodInvocation *            invocation,
Packit Service a1bd4f
                                   GVariant *                         parameters)
Packit 5756e2
{
Packit Service a1bd4f
    gs_free const char **list = NULL;
Packit Service a1bd4f
    GVariant *           v;
Packit Service a1bd4f
    const CList *        all_aps;
Packit 5756e2
Packit Service a1bd4f
    /* NOTE: this handler is called both for NMDevicwWifi and NMDeviceIwd. */
Packit 5756e2
Packit Service a1bd4f
    all_aps = _dispatch_get_aps(NM_DEVICE(obj));
Packit Service a1bd4f
    list    = nm_wifi_aps_get_paths(all_aps, FALSE);
Packit Service a1bd4f
    v       = g_variant_new_objv(list, -1);
Packit Service a1bd4f
    g_dbus_method_invocation_return_value(invocation, g_variant_new_tuple(&v, 1));
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
impl_device_wifi_get_all_access_points(NMDBusObject *                     obj,
Packit Service a1bd4f
                                       const NMDBusInterfaceInfoExtended *interface_info,
Packit Service a1bd4f
                                       const NMDBusMethodInfoExtended *   method_info,
Packit Service a1bd4f
                                       GDBusConnection *                  connection,
Packit Service a1bd4f
                                       const char *                       sender,
Packit Service a1bd4f
                                       GDBusMethodInvocation *            invocation,
Packit Service a1bd4f
                                       GVariant *                         parameters)
Packit 5756e2
{
Packit Service a1bd4f
    gs_free const char **list = NULL;
Packit Service a1bd4f
    GVariant *           v;
Packit Service a1bd4f
    const CList *        all_aps;
Packit 5756e2
Packit Service a1bd4f
    /* NOTE: this handler is called both for NMDevicwWifi and NMDeviceIwd. */
Packit 5756e2
Packit Service a1bd4f
    all_aps = _dispatch_get_aps(NM_DEVICE(obj));
Packit Service a1bd4f
    list    = nm_wifi_aps_get_paths(all_aps, TRUE);
Packit Service a1bd4f
    v       = g_variant_new_objv(list, -1);
Packit Service a1bd4f
    g_dbus_method_invocation_return_value(invocation, g_variant_new_tuple(&v, 1));
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
impl_device_wifi_request_scan(NMDBusObject *                     obj,
Packit Service a1bd4f
                              const NMDBusInterfaceInfoExtended *interface_info,
Packit Service a1bd4f
                              const NMDBusMethodInfoExtended *   method_info,
Packit Service a1bd4f
                              GDBusConnection *                  connection,
Packit Service a1bd4f
                              const char *                       sender,
Packit Service a1bd4f
                              GDBusMethodInvocation *            invocation,
Packit Service a1bd4f
                              GVariant *                         parameters)
Packit 5756e2
{
Packit Service a1bd4f
    gs_unref_variant GVariant *options = NULL;
Packit 5756e2
Packit Service a1bd4f
    /* NOTE: this handler is called both for NMDevicwWifi and NMDeviceIwd. */
Packit 5756e2
Packit Service a1bd4f
    g_variant_get(parameters, "(@a{sv})", &options);
Packit 5756e2
Packit Service a1bd4f
    _dispatch_request_scan(NM_DEVICE(obj), options, invocation);
Packit 5756e2
}
Packit 5756e2
Packit Service a1bd4f
const GDBusSignalInfo nm_signal_info_wireless_access_point_added = NM_DEFINE_GDBUS_SIGNAL_INFO_INIT(
Packit Service a1bd4f
    "AccessPointAdded",
Packit Service a1bd4f
    .args = NM_DEFINE_GDBUS_ARG_INFOS(NM_DEFINE_GDBUS_ARG_INFO("access_point", "o"), ), );
Packit 5756e2
Packit Service a1bd4f
const GDBusSignalInfo nm_signal_info_wireless_access_point_removed =
Packit Service a1bd4f
    NM_DEFINE_GDBUS_SIGNAL_INFO_INIT(
Packit Service a1bd4f
        "AccessPointRemoved",
Packit Service a1bd4f
        .args = NM_DEFINE_GDBUS_ARG_INFOS(NM_DEFINE_GDBUS_ARG_INFO("access_point", "o"), ), );
Packit 5756e2
Packit 5756e2
const NMDBusInterfaceInfoExtended nm_interface_info_device_wireless = {
Packit Service a1bd4f
    .parent = NM_DEFINE_GDBUS_INTERFACE_INFO_INIT(
Packit Service a1bd4f
        NM_DBUS_INTERFACE_DEVICE_WIRELESS,
Packit Service a1bd4f
        .methods = NM_DEFINE_GDBUS_METHOD_INFOS(
Packit Service a1bd4f
            NM_DEFINE_DBUS_METHOD_INFO_EXTENDED(
Packit Service a1bd4f
                NM_DEFINE_GDBUS_METHOD_INFO_INIT(
Packit Service a1bd4f
                    "GetAccessPoints",
Packit Service a1bd4f
                    .out_args = NM_DEFINE_GDBUS_ARG_INFOS(
Packit Service a1bd4f
                        NM_DEFINE_GDBUS_ARG_INFO("access_points", "ao"), ), ),
Packit Service a1bd4f
                .handle = impl_device_wifi_get_access_points, ),
Packit Service a1bd4f
            NM_DEFINE_DBUS_METHOD_INFO_EXTENDED(
Packit Service a1bd4f
                NM_DEFINE_GDBUS_METHOD_INFO_INIT(
Packit Service a1bd4f
                    "GetAllAccessPoints",
Packit Service a1bd4f
                    .out_args = NM_DEFINE_GDBUS_ARG_INFOS(
Packit Service a1bd4f
                        NM_DEFINE_GDBUS_ARG_INFO("access_points", "ao"), ), ),
Packit Service a1bd4f
                .handle = impl_device_wifi_get_all_access_points, ),
Packit Service a1bd4f
            NM_DEFINE_DBUS_METHOD_INFO_EXTENDED(
Packit Service a1bd4f
                NM_DEFINE_GDBUS_METHOD_INFO_INIT(
Packit Service a1bd4f
                    "RequestScan",
Packit Service a1bd4f
                    .in_args = NM_DEFINE_GDBUS_ARG_INFOS(
Packit Service a1bd4f
                        NM_DEFINE_GDBUS_ARG_INFO("options", "a{sv}"), ), ),
Packit Service a1bd4f
                .handle = impl_device_wifi_request_scan, ), ),
Packit Service a1bd4f
        .signals    = NM_DEFINE_GDBUS_SIGNAL_INFOS(&nm_signal_info_property_changed_legacy,
Packit Service a1bd4f
                                                &nm_signal_info_wireless_access_point_added,
Packit Service a1bd4f
                                                &nm_signal_info_wireless_access_point_removed, ),
Packit Service a1bd4f
        .properties = NM_DEFINE_GDBUS_PROPERTY_INFOS(
Packit Service a1bd4f
            NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE_L("HwAddress",
Packit Service a1bd4f
                                                             "s",
Packit Service a1bd4f
                                                             NM_DEVICE_HW_ADDRESS),
Packit Service a1bd4f
            NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE_L("PermHwAddress",
Packit Service a1bd4f
                                                             "s",
Packit Service a1bd4f
                                                             NM_DEVICE_PERM_HW_ADDRESS),
Packit Service a1bd4f
            NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE_L("Mode", "u", NM_DEVICE_WIFI_MODE),
Packit Service a1bd4f
            NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE_L("Bitrate",
Packit Service a1bd4f
                                                             "u",
Packit Service a1bd4f
                                                             NM_DEVICE_WIFI_BITRATE),
Packit Service a1bd4f
            NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE_L("AccessPoints",
Packit Service a1bd4f
                                                             "ao",
Packit Service a1bd4f
                                                             NM_DEVICE_WIFI_ACCESS_POINTS),
Packit Service a1bd4f
            NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE_L("ActiveAccessPoint",
Packit Service a1bd4f
                                                             "o",
Packit Service a1bd4f
                                                             NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT),
Packit Service a1bd4f
            NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE_L("WirelessCapabilities",
Packit Service a1bd4f
                                                             "u",
Packit Service a1bd4f
                                                             NM_DEVICE_WIFI_CAPABILITIES),
Packit Service a1bd4f
            NM_DEFINE_DBUS_PROPERTY_INFO_EXTENDED_READABLE("LastScan",
Packit Service a1bd4f
                                                           "x",
Packit Service a1bd4f
                                                           NM_DEVICE_WIFI_LAST_SCAN), ), ),
Packit Service a1bd4f
    .legacy_property_changed = TRUE,
Packit 5756e2
};