wifi: merge branch 'th/ssids-options-to-ptrarray'

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/385
This commit is contained in:
Thomas Haller 2020-01-08 12:14:51 +01:00
commit 5080dfa46f
5 changed files with 129 additions and 36 deletions

View file

@ -3606,9 +3606,9 @@ EXTRA_DIST += \
if WITH_WIFI
core_plugins += src/devices/wifi/libnm-device-plugin-wifi.la
noinst_LTLIBRARIES += src/devices/wifi/libnm-wifi-base.la
src_devices_wifi_libnm_device_plugin_wifi_la_SOURCES = \
src_devices_wifi_libnm_wifi_base_la_SOURCES = \
src/devices/wifi/nm-device-olpc-mesh.c \
src/devices/wifi/nm-device-olpc-mesh.h \
src/devices/wifi/nm-device-wifi-p2p.c \
@ -3619,7 +3619,6 @@ src_devices_wifi_libnm_device_plugin_wifi_la_SOURCES = \
src/devices/wifi/nm-wifi-ap.h \
src/devices/wifi/nm-wifi-common.c \
src/devices/wifi/nm-wifi-common.h \
src/devices/wifi/nm-wifi-factory.c \
src/devices/wifi/nm-wifi-p2p-peer.c \
src/devices/wifi/nm-wifi-p2p-peer.h \
src/devices/wifi/nm-wifi-utils.c \
@ -3627,7 +3626,7 @@ src_devices_wifi_libnm_device_plugin_wifi_la_SOURCES = \
$(NULL)
if WITH_IWD
src_devices_wifi_libnm_device_plugin_wifi_la_SOURCES += \
src_devices_wifi_libnm_wifi_base_la_SOURCES += \
src/devices/wifi/nm-device-iwd.c \
src/devices/wifi/nm-device-iwd.h \
src/devices/wifi/nm-iwd-manager.c \
@ -3635,6 +3634,19 @@ src_devices_wifi_libnm_device_plugin_wifi_la_SOURCES += \
$(NULL)
endif
src_devices_wifi_libnm_wifi_base_la_CPPFLAGS = $(src_cppflags_device_plugin)
src_devices_wifi_libnm_wifi_base_la_LIBADD = \
$(GLIB_LIBS)
$(src_devices_wifi_libnm_wifi_base_la_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
core_plugins += src/devices/wifi/libnm-device-plugin-wifi.la
src_devices_wifi_libnm_device_plugin_wifi_la_SOURCES = \
src/devices/wifi/nm-wifi-factory.c \
$(NULL)
src_devices_wifi_libnm_device_plugin_wifi_la_CPPFLAGS = $(src_cppflags_device_plugin)
src_devices_wifi_libnm_device_plugin_wifi_la_LDFLAGS = \
@ -3642,8 +3654,11 @@ src_devices_wifi_libnm_device_plugin_wifi_la_LDFLAGS = \
-Wl,--version-script="$(srcdir)/linker-script-devices.ver"
src_devices_wifi_libnm_device_plugin_wifi_la_LIBADD = \
src/devices/wifi/libnm-wifi-base.la \
$(GLIB_LIBS)
$(src_devices_wifi_libnm_device_plugin_wifi_la_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
check-local-devices-wifi: src/devices/wifi/libnm-device-plugin-wifi.la
$(srcdir)/tools/check-exports.sh $(builddir)/src/devices/wifi/.libs/libnm-device-plugin-wifi.so "$(srcdir)/linker-script-devices.ver"
$(call check_so_symbols,$(builddir)/src/devices/wifi/.libs/libnm-device-plugin-wifi.so)
@ -3654,14 +3669,15 @@ check_programs += src/devices/wifi/tests/test-devices-wifi
src_devices_wifi_tests_test_devices_wifi_SOURCES = \
src/devices/wifi/tests/test-devices-wifi.c \
src/devices/wifi/nm-wifi-ap.c \
src/devices/wifi/nm-wifi-ap.h \
src/devices/wifi/nm-wifi-utils.c \
src/devices/wifi/nm-wifi-utils.h
$(NULL)
src_devices_wifi_tests_test_devices_wifi_CPPFLAGS = $(src_cppflags_base_test)
src_devices_wifi_tests_test_devices_wifi_LDADD = src/libNetworkManagerTest.la
src_devices_wifi_tests_test_devices_wifi_LDADD = \
src/libNetworkManagerTest.la \
src/devices/wifi/libnm-wifi-base.la \
$(NULL)
src_devices_wifi_tests_test_devices_wifi_LDFLAGS = $(SANITIZER_EXEC_LDFLAGS)
$(src_devices_wifi_tests_test_devices_wifi_OBJECTS): $(libnm_core_lib_h_pub_mkenums)

View file

@ -1,28 +1,36 @@
common_sources = files(
'nm-wifi-ap.c',
'nm-wifi-p2p-peer.c',
'nm-wifi-utils.c',
)
sources = common_sources + files(
'nm-device-olpc-mesh.c',
'nm-device-wifi-p2p.c',
'nm-device-wifi.c',
'nm-wifi-common.c',
'nm-wifi-factory.c',
)
iwd_sources = files()
if enable_iwd
sources += files(
iwd_sources += files(
'nm-device-iwd.c',
'nm-iwd-manager.c',
)
endif
libnm_wifi_base = static_library(
'nm-wifi-base',
sources: files(
'nm-device-olpc-mesh.c',
'nm-device-wifi-p2p.c',
'nm-device-wifi.c',
'nm-wifi-ap.c',
'nm-wifi-common.c',
'nm-wifi-p2p-peer.c',
'nm-wifi-utils.c',
) + iwd_sources,
dependencies: daemon_nm_default_dep,
c_args: daemon_c_flags,
)
libnm_wifi_base_dep = declare_dependency(
link_with: libnm_wifi_base,
)
libnm_device_plugin_wifi = shared_module(
'nm-device-plugin-wifi',
sources: sources,
dependencies: daemon_nm_default_dep,
sources: files(
'nm-wifi-factory.c',
),
dependencies: [ daemon_nm_default_dep, libnm_wifi_base_dep ],
c_args: daemon_c_flags,
link_args: ldflags_linker_script_devices,
link_depends: linker_script_devices,
@ -43,8 +51,8 @@ if enable_tests
exe = executable(
test_unit,
['tests/' + test_unit + '.c'] + common_sources,
dependencies: libnetwork_manager_test_dep,
'tests/' + test_unit + '.c',
dependencies: [ libnetwork_manager_test_dep, libnm_wifi_base_dep ],
c_args: test_c_flags,
)

View file

@ -1074,11 +1074,11 @@ _hw_addr_set_scanning (NMDeviceWifi *self, gboolean do_reset)
static GPtrArray *
ssids_options_to_ptrarray (GVariant *value, GError **error)
{
GPtrArray *ssids = NULL;
GVariant *v;
const guint8 *bytes;
gsize len;
int num_ssids, i;
gs_unref_ptrarray GPtrArray *ssids = NULL;
gsize num_ssids;
gsize i;
nm_assert (g_variant_is_of_type (value, G_VARIANT_TYPE ("aay")));
num_ssids = g_variant_n_children (value);
if (num_ssids > 32) {
@ -1092,21 +1092,31 @@ ssids_options_to_ptrarray (GVariant *value, GError **error)
if (num_ssids) {
ssids = g_ptr_array_new_full (num_ssids, (GDestroyNotify) g_bytes_unref);
for (i = 0; i < num_ssids; i++) {
gs_unref_variant GVariant *v = NULL;
gsize len;
const guint8 *bytes;
v = g_variant_get_child_value (value, i);
bytes = g_variant_get_fixed_array (v, &len, sizeof (guint8));
if (len > 32) {
g_set_error (error,
NM_DEVICE_ERROR,
NM_DEVICE_ERROR_NOT_ALLOWED,
"SSID at index %d more than 32 bytes", i);
g_ptr_array_unref (ssids);
"SSID at index %d more than 32 bytes", (int) i);
return NULL;
}
g_ptr_array_add (ssids, g_bytes_new (bytes, len));
}
}
return ssids;
return g_steal_pointer (&ssids);
}
GPtrArray *
nmtst_ssids_options_to_ptrarray (GVariant *value, GError **error)
{
return ssids_options_to_ptrarray (value, error);
}
static void

View file

@ -40,4 +40,6 @@ void _nm_device_wifi_request_scan (NMDeviceWifi *self,
GVariant *options,
GDBusMethodInvocation *invocation);
GPtrArray *nmtst_ssids_options_to_ptrarray (GVariant *value, GError **error);
#endif /* __NETWORKMANAGER_DEVICE_WIFI_H__ */

View file

@ -6,6 +6,7 @@
#include "nm-default.h"
#include "devices/wifi/nm-wifi-utils.h"
#include "devices/wifi/nm-device-wifi.h"
#include "nm-core-internal.h"
#include "nm-test-utils-core.h"
@ -1337,6 +1338,60 @@ test_strength_all (void)
/*****************************************************************************/
static void
do_test_ssids_options_to_ptrarray (const char *const*ssids)
{
GVariantBuilder builder;
gs_unref_variant GVariant *variant = NULL;
gs_unref_ptrarray GPtrArray *ssids_arr = NULL;
gs_free_error GError *error = NULL;
gsize len;
gsize i;
g_assert (ssids);
len = NM_PTRARRAY_LEN (ssids);
g_variant_builder_init (&builder, G_VARIANT_TYPE ("aay"));
for (i = 0; i < len; i++) {
const char *ssid = ssids[i];
g_variant_builder_add (&builder,
"@ay",
g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, ssid, strlen (ssid), 1));
}
variant = g_variant_builder_end (&builder);
if (nmtst_get_rand_bool ())
g_variant_ref_sink (variant);
ssids_arr = nmtst_ssids_options_to_ptrarray (variant, &error);
g_assert (!error);
if (len == 0) {
g_assert (!ssids_arr);
return;
}
g_assert_cmpint (len, ==, ssids_arr->len);
for (i = 0; i < len; i++) {
const char *ssid = ssids[i];
GBytes *bytes = ssids_arr->pdata[i];
g_assert (nm_utils_gbytes_equal_mem (bytes,
ssid,
strlen (ssid)));
}
}
static void
test_ssids_options_to_ptrarray (void)
{
do_test_ssids_options_to_ptrarray (NM_PTRARRAY_EMPTY (const char *));
do_test_ssids_options_to_ptrarray (NM_MAKE_STRV ("ab"));
do_test_ssids_options_to_ptrarray (NM_MAKE_STRV ("ab", "cd", "fsdfdsf"));
}
/*****************************************************************************/
NMTST_DEFINE ();
int
@ -1501,5 +1556,7 @@ main (int argc, char **argv)
g_test_add_func ("/wifi/strength/all",
test_strength_all);
g_test_add_func ("/wifi/ssids_options_to_ptrarray", test_ssids_options_to_ptrarray);
return g_test_run ();
}