diff options
author | Thomas Haller <thaller@redhat.com> | 2020-01-08 12:14:51 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2020-01-08 12:14:51 +0100 |
commit | 5080dfa46fc6496be110d743ce233d2ca6b9977f (patch) | |
tree | a38d2da1a3a74d568c2f82dd1827030d8c91e8a5 | |
parent | 6da9e06508b1ee25411993c910d6bc418e18df7f (diff) | |
parent | e6d256fe817293c82cfae60f9e7dc74db791a241 (diff) | |
download | NetworkManager-5080dfa46fc6496be110d743ce233d2ca6b9977f.tar.gz |
wifi: merge branch 'th/ssids-options-to-ptrarray'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/385
-rw-r--r-- | Makefile.am | 34 | ||||
-rw-r--r-- | src/devices/wifi/meson.build | 46 | ||||
-rw-r--r-- | src/devices/wifi/nm-device-wifi.c | 26 | ||||
-rw-r--r-- | src/devices/wifi/nm-device-wifi.h | 2 | ||||
-rw-r--r-- | src/devices/wifi/tests/test-devices-wifi.c | 57 |
5 files changed, 129 insertions, 36 deletions
diff --git a/Makefile.am b/Makefile.am index f8020794b4..1673fc1fc3 100644 --- a/Makefile.am +++ b/Makefile.am @@ -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) diff --git a/src/devices/wifi/meson.build b/src/devices/wifi/meson.build index 6566f20119..9f18a36b18 100644 --- a/src/devices/wifi/meson.build +++ b/src/devices/wifi/meson.build @@ -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, ) diff --git a/src/devices/wifi/nm-device-wifi.c b/src/devices/wifi/nm-device-wifi.c index 75b9943c80..f334858cb4 100644 --- a/src/devices/wifi/nm-device-wifi.c +++ b/src/devices/wifi/nm-device-wifi.c @@ -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 diff --git a/src/devices/wifi/nm-device-wifi.h b/src/devices/wifi/nm-device-wifi.h index aaf47143b8..d861d24712 100644 --- a/src/devices/wifi/nm-device-wifi.h +++ b/src/devices/wifi/nm-device-wifi.h @@ -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__ */ diff --git a/src/devices/wifi/tests/test-devices-wifi.c b/src/devices/wifi/tests/test-devices-wifi.c index a960e7a205..bde3630706 100644 --- a/src/devices/wifi/tests/test-devices-wifi.c +++ b/src/devices/wifi/tests/test-devices-wifi.c @@ -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 (); } |