From 993a69cef8073556152f3c4d74f2501cf4caf8a7 Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Tue, 4 Sep 2018 15:45:37 -0500 Subject: [PATCH] network: Make network station centric --- src/device.c | 5 ----- src/device.h | 1 - src/network.c | 47 ++++++++++++++++++++++++++++++++++------------- src/network.h | 2 +- src/station.c | 3 +-- 5 files changed, 36 insertions(+), 22 deletions(-) diff --git a/src/device.c b/src/device.c index f11de675..bbb33fa0 100644 --- a/src/device.c +++ b/src/device.c @@ -156,11 +156,6 @@ bool device_is_busy(struct device *device) return false; } -struct wiphy *device_get_wiphy(struct device *device) -{ - return device->wiphy; -} - static void periodic_scan_trigger(int err, void *user_data) { struct device *device = user_data; diff --git a/src/device.h b/src/device.h index 82805cd3..0c0a4ac0 100644 --- a/src/device.h +++ b/src/device.h @@ -31,7 +31,6 @@ struct device; struct network *device_get_connected_network(struct device *device); const char *device_get_path(struct device *device); bool device_is_busy(struct device *device); -struct wiphy *device_get_wiphy(struct device *device); void device_disassociated(struct device *device); void device_transition_start(struct device *device, struct scan_bss *bss); diff --git a/src/network.c b/src/network.c index c51b3f15..b8c2dcd9 100644 --- a/src/network.c +++ b/src/network.c @@ -40,15 +40,18 @@ #include "src/scan.h" #include "src/dbus.h" #include "src/agent.h" +#include "src/netdev.h" #include "src/device.h" #include "src/wiphy.h" +#include "src/watchlist.h" +#include "src/station.h" #include "src/eap.h" #include "src/knownnetworks.h" #include "src/network.h" struct network { char *object_path; - struct device *device; + struct station *station; struct network_info *info; unsigned char *psk; char *passphrase; @@ -275,13 +278,13 @@ static void network_info_put(struct network_info *network) network_info_free(network); } -struct network *network_create(struct device *device, const char *ssid, +struct network *network_create(struct station *station, const char *ssid, enum security security) { struct network *network; network = l_new(struct network, 1); - network->device = device; + network->station = station; network->info = network_info_get(ssid, security); network->bss_list = l_queue_new(); @@ -458,7 +461,10 @@ void network_sync_psk(struct network *network) int network_autoconnect(struct network *network, struct scan_bss *bss) { - struct wiphy *wiphy = device_get_wiphy(network->device); + struct station *station = network->station; + struct wiphy *wiphy = station_get_wiphy(station); + struct netdev *netdev = station_get_netdev(station); + struct device *device = netdev_get_device(netdev); bool is_autoconnectable; bool is_rsn; int ret; @@ -534,7 +540,7 @@ int network_autoconnect(struct network *network, struct scan_bss *bss) goto close_settings; } - return __device_connect_network(network->device, network, bss); + return __device_connect_network(device, network, bss); close_settings: network_settings_close(network); @@ -593,7 +599,7 @@ struct scan_bss *network_bss_find_by_addr(struct network *network, struct scan_bss *network_bss_select(struct network *network) { struct l_queue *bss_list = network->bss_list; - struct wiphy *wiphy = device_get_wiphy(network->device); + struct wiphy *wiphy = station_get_wiphy(network->station); const struct l_queue_entry *bss_entry; switch (network_get_security(network)) { @@ -628,6 +634,9 @@ static void passphrase_callback(enum agent_result result, void *user_data) { struct network *network = user_data; + struct station *station = network->station; + struct netdev *netdev = station_get_netdev(station); + struct device *device = netdev_get_device(netdev); struct scan_bss *bss; l_debug("result %d", result); @@ -677,7 +686,7 @@ static void passphrase_callback(enum agent_result result, */ network->update_psk = true; - device_connect_network(network->device, network, bss, message); + device_connect_network(device, network, bss, message); l_dbus_message_unref(message); return; @@ -702,7 +711,9 @@ static struct l_dbus_message *network_connect_psk(struct network *network, struct scan_bss *bss, struct l_dbus_message *message) { - struct device *device = network->device; + struct station *station = network->station; + struct netdev *netdev = station_get_netdev(station); + struct device *device = netdev_get_device(netdev); l_debug(""); @@ -930,6 +941,9 @@ static struct l_dbus_message *network_connect_8021x(struct network *network, struct scan_bss *bss, struct l_dbus_message *message) { + struct station *station = network->station; + struct netdev *netdev = station_get_netdev(station); + struct device *device = netdev_get_device(netdev); int r; struct l_queue *missing_secrets = NULL; struct l_dbus_message *reply; @@ -962,7 +976,7 @@ static struct l_dbus_message *network_connect_8021x(struct network *network, goto error; } - device_connect_network(network->device, network, bss, message); + device_connect_network(device, network, bss, message); return NULL; } @@ -987,7 +1001,9 @@ static struct l_dbus_message *network_connect(struct l_dbus *dbus, void *user_data) { struct network *network = user_data; - struct device *device = network->device; + struct station *station = network->station; + struct netdev *netdev = station_get_netdev(station); + struct device *device = netdev_get_device(netdev); struct scan_bss *bss; l_debug(""); @@ -1025,7 +1041,9 @@ static struct l_dbus_message *network_connect(struct l_dbus *dbus, void network_connect_new_hidden_network(struct network *network, struct l_dbus_message *message) { - struct device *device = network->device; + struct station *station = network->station; + struct netdev *netdev = station_get_netdev(station); + struct device *device = netdev_get_device(netdev); struct scan_bss *bss; struct l_dbus_message *error; @@ -1086,9 +1104,10 @@ static bool network_property_is_connected(struct l_dbus *dbus, void *user_data) { struct network *network = user_data; + struct station *station = network->station; bool connected; - connected = device_get_connected_network(network->device) == network; + connected = station_get_connected_network(station) == network; l_dbus_message_builder_append_basic(builder, 'b', &connected); return true; } @@ -1099,9 +1118,11 @@ static bool network_property_get_device(struct l_dbus *dbus, void *user_data) { struct network *network = user_data; + struct station *station = network->station; + struct netdev *netdev = station_get_netdev(station); l_dbus_message_builder_append_basic(builder, 'o', - device_get_path(network->device)); + netdev_get_path(netdev)); return true; } diff --git a/src/network.h b/src/network.h index 070ae3c5..40bcadfa 100644 --- a/src/network.h +++ b/src/network.h @@ -32,7 +32,7 @@ void network_connected(struct network *network); void network_disconnected(struct network *network); bool network_rankmod(const struct network *network, double *rankmod); -struct network *network_create(struct device *device, const char *ssid, +struct network *network_create(struct station *station, const char *ssid, enum security security); const char *network_get_ssid(const struct network *network); diff --git a/src/station.c b/src/station.c index 57bc7f50..84abf99d 100644 --- a/src/station.c +++ b/src/station.c @@ -193,7 +193,6 @@ struct network *station_network_find(struct station *station, const char *ssid, struct network *station_add_seen_bss(struct station *station, struct scan_bss *bss) { - struct device *device = netdev_get_device(station->netdev); struct network *network; struct ie_rsn_info info; int r; @@ -235,7 +234,7 @@ struct network *station_add_seen_bss(struct station *station, network = l_hashmap_lookup(station->networks, path); if (!network) { - network = network_create(device, ssid, security); + network = network_create(station, ssid, security); if (!network_register(network, path)) { network_remove(network, -EINVAL);