mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-12-22 13:02:44 +01:00
adhoc: Do not use device
Ad-Hoc only uses information from the netdev object and doesn't really depend on the device object.
This commit is contained in:
parent
92e7e63af5
commit
8d6f3021e3
45
src/adhoc.c
45
src/adhoc.c
@ -40,7 +40,7 @@
|
|||||||
#include "src/dbus.h"
|
#include "src/dbus.h"
|
||||||
|
|
||||||
struct adhoc_state {
|
struct adhoc_state {
|
||||||
struct device *device;
|
struct netdev *netdev;
|
||||||
char *ssid;
|
char *ssid;
|
||||||
uint8_t pmk[32];
|
uint8_t pmk[32];
|
||||||
struct l_queue *sta_states;
|
struct l_queue *sta_states;
|
||||||
@ -97,7 +97,7 @@ static void adhoc_remove_sta(struct sta_state *sta)
|
|||||||
/* signal station has been removed */
|
/* signal station has been removed */
|
||||||
if (sta->authenticated) {
|
if (sta->authenticated) {
|
||||||
l_dbus_property_changed(dbus_get_bus(),
|
l_dbus_property_changed(dbus_get_bus(),
|
||||||
device_get_path(sta->adhoc->device),
|
netdev_get_path(sta->adhoc->netdev),
|
||||||
IWD_ADHOC_INTERFACE, "ConnectedPeers");
|
IWD_ADHOC_INTERFACE, "ConnectedPeers");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,24 +112,24 @@ static void adhoc_reset(struct adhoc_state *adhoc)
|
|||||||
|
|
||||||
l_free(adhoc->ssid);
|
l_free(adhoc->ssid);
|
||||||
|
|
||||||
netdev_station_watch_remove(device_get_netdev(adhoc->device),
|
netdev_station_watch_remove(adhoc->netdev, adhoc->sta_watch_id);
|
||||||
adhoc->sta_watch_id);
|
|
||||||
|
|
||||||
l_queue_destroy(adhoc->sta_states, adhoc_sta_free);
|
l_queue_destroy(adhoc->sta_states, adhoc_sta_free);
|
||||||
|
|
||||||
adhoc->started = false;
|
adhoc->started = false;
|
||||||
|
|
||||||
l_dbus_property_changed(dbus_get_bus(), device_get_path(adhoc->device),
|
l_dbus_property_changed(dbus_get_bus(), netdev_get_path(adhoc->netdev),
|
||||||
IWD_ADHOC_INTERFACE, "Started");
|
IWD_ADHOC_INTERFACE, "Started");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void adhoc_set_rsn_info(struct adhoc_state *adhoc,
|
static void adhoc_set_rsn_info(struct adhoc_state *adhoc,
|
||||||
struct ie_rsn_info *rsn)
|
struct ie_rsn_info *rsn)
|
||||||
{
|
{
|
||||||
|
struct wiphy *wiphy = netdev_get_wiphy(adhoc->netdev);
|
||||||
|
|
||||||
memset(rsn, 0, sizeof(*rsn));
|
memset(rsn, 0, sizeof(*rsn));
|
||||||
rsn->akm_suites = IE_RSN_AKM_SUITE_PSK;
|
rsn->akm_suites = IE_RSN_AKM_SUITE_PSK;
|
||||||
rsn->pairwise_ciphers = wiphy_select_cipher(
|
rsn->pairwise_ciphers = wiphy_select_cipher(wiphy, 0xffff);
|
||||||
device_get_wiphy(adhoc->device), 0xffff);
|
|
||||||
rsn->group_cipher = IE_RSN_CIPHER_SUITE_NO_GROUP_TRAFFIC;
|
rsn->group_cipher = IE_RSN_CIPHER_SUITE_NO_GROUP_TRAFFIC;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,7 +171,7 @@ static void adhoc_handshake_event(struct handshake_state *hs,
|
|||||||
!sta->authenticated) {
|
!sta->authenticated) {
|
||||||
sta->authenticated = true;
|
sta->authenticated = true;
|
||||||
l_dbus_property_changed(dbus_get_bus(),
|
l_dbus_property_changed(dbus_get_bus(),
|
||||||
device_get_path(adhoc->device),
|
netdev_get_path(adhoc->netdev),
|
||||||
IWD_ADHOC_INTERFACE, "ConnectedPeers");
|
IWD_ADHOC_INTERFACE, "ConnectedPeers");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -182,8 +182,8 @@ static void adhoc_handshake_event(struct handshake_state *hs,
|
|||||||
|
|
||||||
static struct eapol_sm *adhoc_new_sm(struct sta_state *sta, bool authenticator)
|
static struct eapol_sm *adhoc_new_sm(struct sta_state *sta, bool authenticator)
|
||||||
{
|
{
|
||||||
struct netdev *netdev = device_get_netdev(sta->adhoc->device);
|
|
||||||
struct adhoc_state *adhoc = sta->adhoc;
|
struct adhoc_state *adhoc = sta->adhoc;
|
||||||
|
struct netdev *netdev = adhoc->netdev;
|
||||||
const uint8_t *own_addr = netdev_get_address(netdev);
|
const uint8_t *own_addr = netdev_get_address(netdev);
|
||||||
struct ie_rsn_info rsn;
|
struct ie_rsn_info rsn;
|
||||||
uint8_t bss_rsne[24];
|
uint8_t bss_rsne[24];
|
||||||
@ -264,7 +264,7 @@ static void adhoc_new_station(struct adhoc_state *adhoc, const uint8_t *mac)
|
|||||||
if (sta->adhoc->open) {
|
if (sta->adhoc->open) {
|
||||||
sta->authenticated = true;
|
sta->authenticated = true;
|
||||||
l_dbus_property_changed(dbus_get_bus(),
|
l_dbus_property_changed(dbus_get_bus(),
|
||||||
device_get_path(adhoc->device),
|
netdev_get_path(adhoc->netdev),
|
||||||
IWD_ADHOC_INTERFACE, "ConnectedPeers");
|
IWD_ADHOC_INTERFACE, "ConnectedPeers");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -338,7 +338,7 @@ static void adhoc_join_cb(struct netdev *netdev, int result, void *user_data)
|
|||||||
|
|
||||||
adhoc->started = true;
|
adhoc->started = true;
|
||||||
|
|
||||||
l_dbus_property_changed(dbus_get_bus(), device_get_path(adhoc->device),
|
l_dbus_property_changed(dbus_get_bus(), netdev_get_path(adhoc->netdev),
|
||||||
IWD_ADHOC_INTERFACE, "Started");
|
IWD_ADHOC_INTERFACE, "Started");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -347,8 +347,7 @@ static struct l_dbus_message *adhoc_dbus_start(struct l_dbus *dbus,
|
|||||||
void *user_data)
|
void *user_data)
|
||||||
{
|
{
|
||||||
struct adhoc_state *adhoc = user_data;
|
struct adhoc_state *adhoc = user_data;
|
||||||
struct device *device = adhoc->device;
|
struct netdev *netdev = adhoc->netdev;
|
||||||
struct netdev *netdev = device_get_netdev(device);
|
|
||||||
struct wiphy *wiphy = netdev_get_wiphy(netdev);
|
struct wiphy *wiphy = netdev_get_wiphy(netdev);
|
||||||
const char *ssid, *wpa2_psk;
|
const char *ssid, *wpa2_psk;
|
||||||
struct ie_rsn_info rsn;
|
struct ie_rsn_info rsn;
|
||||||
@ -389,8 +388,7 @@ static struct l_dbus_message *adhoc_dbus_start_open(struct l_dbus *dbus,
|
|||||||
struct l_dbus_message *message, void *user_data)
|
struct l_dbus_message *message, void *user_data)
|
||||||
{
|
{
|
||||||
struct adhoc_state *adhoc = user_data;
|
struct adhoc_state *adhoc = user_data;
|
||||||
struct device *device = adhoc->device;
|
struct netdev *netdev = adhoc->netdev;
|
||||||
struct netdev *netdev = device_get_netdev(device);
|
|
||||||
const char *ssid;
|
const char *ssid;
|
||||||
struct iovec rsn_ie;
|
struct iovec rsn_ie;
|
||||||
uint8_t ie_elems[10];
|
uint8_t ie_elems[10];
|
||||||
@ -451,8 +449,7 @@ static struct l_dbus_message *adhoc_dbus_stop(struct l_dbus *dbus,
|
|||||||
if (!adhoc->started)
|
if (!adhoc->started)
|
||||||
return l_dbus_message_new_method_return(message);
|
return l_dbus_message_new_method_return(message);
|
||||||
|
|
||||||
if (!netdev_leave_adhoc(device_get_netdev(adhoc->device),
|
if (!netdev_leave_adhoc(adhoc->netdev, adhoc_leave_cb, adhoc))
|
||||||
adhoc_leave_cb, adhoc))
|
|
||||||
return dbus_error_failed(message);
|
return dbus_error_failed(message);
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -524,23 +521,23 @@ static void adhoc_destroy_interface(void *user_data)
|
|||||||
adhoc_free(adhoc);
|
adhoc_free(adhoc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void adhoc_add_interface(struct device *device)
|
static void adhoc_add_interface(struct netdev *netdev)
|
||||||
{
|
{
|
||||||
struct adhoc_state *adhoc;
|
struct adhoc_state *adhoc;
|
||||||
|
|
||||||
/* just allocate/set device, Start method will complete setup */
|
/* just allocate/set device, Start method will complete setup */
|
||||||
adhoc = l_new(struct adhoc_state, 1);
|
adhoc = l_new(struct adhoc_state, 1);
|
||||||
adhoc->device = device;
|
adhoc->netdev = netdev;
|
||||||
|
|
||||||
/* setup ap dbus interface */
|
/* setup ap dbus interface */
|
||||||
l_dbus_object_add_interface(dbus_get_bus(),
|
l_dbus_object_add_interface(dbus_get_bus(),
|
||||||
device_get_path(device), IWD_ADHOC_INTERFACE, adhoc);
|
netdev_get_path(netdev), IWD_ADHOC_INTERFACE, adhoc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void adhoc_remove_interface(struct device *device)
|
static void adhoc_remove_interface(struct netdev *netdev)
|
||||||
{
|
{
|
||||||
l_dbus_object_remove_interface(dbus_get_bus(),
|
l_dbus_object_remove_interface(dbus_get_bus(),
|
||||||
device_get_path(device), IWD_ADHOC_INTERFACE);
|
netdev_get_path(netdev), IWD_ADHOC_INTERFACE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void adhoc_netdev_watch(struct netdev *netdev,
|
static void adhoc_netdev_watch(struct netdev *netdev,
|
||||||
@ -555,11 +552,11 @@ static void adhoc_netdev_watch(struct netdev *netdev,
|
|||||||
case NETDEV_WATCH_EVENT_UP:
|
case NETDEV_WATCH_EVENT_UP:
|
||||||
case NETDEV_WATCH_EVENT_NEW:
|
case NETDEV_WATCH_EVENT_NEW:
|
||||||
if (netdev_get_iftype(netdev) == NETDEV_IFTYPE_ADHOC)
|
if (netdev_get_iftype(netdev) == NETDEV_IFTYPE_ADHOC)
|
||||||
adhoc_add_interface(device);
|
adhoc_add_interface(netdev);
|
||||||
break;
|
break;
|
||||||
case NETDEV_WATCH_EVENT_DOWN:
|
case NETDEV_WATCH_EVENT_DOWN:
|
||||||
case NETDEV_WATCH_EVENT_DEL:
|
case NETDEV_WATCH_EVENT_DEL:
|
||||||
adhoc_remove_interface(device);
|
adhoc_remove_interface(netdev);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user