|
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 |
};
|