mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-12-22 04:32:37 +01:00
wsc: Make WSC netdev centric
This commit is contained in:
parent
2e0638d51b
commit
e068c97409
45
src/wsc.c
45
src/wsc.c
@ -49,7 +49,8 @@
|
||||
static uint32_t netdev_watch = 0;
|
||||
|
||||
struct wsc {
|
||||
struct device *device;
|
||||
struct netdev *netdev;
|
||||
struct device *device; /* TODO: Should be Station */
|
||||
struct l_dbus_message *pending;
|
||||
struct l_dbus_message *pending_cancel;
|
||||
uint8_t *wsc_ies;
|
||||
@ -206,7 +207,7 @@ static void wsc_connect_cb(struct netdev *netdev, enum netdev_result result,
|
||||
{
|
||||
struct wsc *wsc = user_data;
|
||||
|
||||
l_debug("%d, result: %d", device_get_ifindex(wsc->device), result);
|
||||
l_debug("%d, result: %d", netdev_get_ifindex(wsc->netdev), result);
|
||||
|
||||
wsc->wsc_association = false;
|
||||
|
||||
@ -370,7 +371,7 @@ static void wsc_netdev_event(struct netdev *netdev, enum netdev_event event,
|
||||
break;
|
||||
case NETDEV_EVENT_DISCONNECT_BY_AP:
|
||||
l_debug("Disconnect by AP");
|
||||
wsc_connect_cb(device_get_netdev(wsc->device),
|
||||
wsc_connect_cb(wsc->netdev,
|
||||
NETDEV_RESULT_HANDSHAKE_FAILED, wsc);
|
||||
break;
|
||||
case NETDEV_EVENT_RSSI_THRESHOLD_LOW:
|
||||
@ -418,7 +419,7 @@ static void wsc_connect(struct wsc *wsc)
|
||||
|
||||
wsc->target = NULL;
|
||||
|
||||
hs = netdev_handshake_state_new(device_get_netdev(wsc->device));
|
||||
hs = netdev_handshake_state_new(wsc->netdev);
|
||||
|
||||
l_settings_set_string(settings, "Security", "EAP-Identity",
|
||||
"WFA-SimpleConfig-Enrollee-1-0");
|
||||
@ -433,7 +434,7 @@ static void wsc_connect(struct wsc *wsc)
|
||||
l_settings_set_string(settings, "WSC", "PrimaryDeviceType",
|
||||
"0-00000000-0");
|
||||
l_settings_set_string(settings, "WSC", "EnrolleeMAC",
|
||||
util_address_to_string(device_get_address(wsc->device)));
|
||||
util_address_to_string(netdev_get_address(wsc->netdev)));
|
||||
|
||||
if (!strcmp(l_dbus_message_get_member(wsc->pending), "StartPin")) {
|
||||
const char *pin;
|
||||
@ -457,7 +458,7 @@ static void wsc_connect(struct wsc *wsc)
|
||||
handshake_state_set_8021x_config(hs, settings);
|
||||
wsc->eap_settings = settings;
|
||||
|
||||
if (netdev_connect_wsc(device_get_netdev(wsc->device), bss, hs,
|
||||
if (netdev_connect_wsc(wsc->netdev, bss, hs,
|
||||
wsc_netdev_event, wsc_connect_cb,
|
||||
wsc_eapol_event, wsc) < 0) {
|
||||
dbus_pending_reply(&wsc->pending,
|
||||
@ -526,7 +527,7 @@ static void wsc_cancel_scan(struct wsc *wsc)
|
||||
wsc->wsc_ies = 0;
|
||||
|
||||
if (wsc->scan_id > 0) {
|
||||
scan_cancel(device_get_ifindex(wsc->device), wsc->scan_id);
|
||||
scan_cancel(netdev_get_ifindex(wsc->netdev), wsc->scan_id);
|
||||
wsc->scan_id = 0;
|
||||
}
|
||||
|
||||
@ -657,7 +658,7 @@ static bool push_button_scan_results(uint32_t wiphy_id, uint32_t ifindex,
|
||||
target = bss_2g;
|
||||
else {
|
||||
l_debug("No PBC APs found, running the scan again");
|
||||
wsc->scan_id = scan_active(device_get_ifindex(wsc->device),
|
||||
wsc->scan_id = scan_active(netdev_get_ifindex(wsc->netdev),
|
||||
wsc->wsc_ies, wsc->wsc_ies_size,
|
||||
NULL, push_button_scan_results,
|
||||
wsc, NULL);
|
||||
@ -794,7 +795,7 @@ static bool pin_scan_results(uint32_t wiphy_id, uint32_t ifindex, int err,
|
||||
l_debug("AuthorizedMacs: %s", authorized_macs_to_string(amacs));
|
||||
|
||||
if (authorized_macs_contains(amacs,
|
||||
device_get_address(wsc->device))) {
|
||||
netdev_get_address(wsc->netdev))) {
|
||||
target = bss;
|
||||
break;
|
||||
} else if (!target && authorized_macs_contains(amacs,
|
||||
@ -804,7 +805,7 @@ static bool pin_scan_results(uint32_t wiphy_id, uint32_t ifindex, int err,
|
||||
|
||||
if (!target) {
|
||||
l_debug("No PIN APs found, running the scan again");
|
||||
wsc->scan_id = scan_active(device_get_ifindex(wsc->device),
|
||||
wsc->scan_id = scan_active(netdev_get_ifindex(wsc->netdev),
|
||||
wsc->wsc_ies, wsc->wsc_ies_size,
|
||||
NULL, pin_scan_results,
|
||||
wsc, NULL);
|
||||
@ -827,7 +828,7 @@ static bool wsc_initiate_scan(struct wsc *wsc,
|
||||
{
|
||||
static const uint8_t wfa_oui[] = { 0x00, 0x50, 0xF2 };
|
||||
struct wsc_probe_request req;
|
||||
struct wiphy *wiphy = device_get_wiphy(wsc->device);
|
||||
struct wiphy *wiphy = netdev_get_wiphy(wsc->netdev);
|
||||
uint32_t bands;
|
||||
uint8_t *wsc_data;
|
||||
size_t wsc_data_size;
|
||||
@ -841,7 +842,7 @@ static bool wsc_initiate_scan(struct wsc *wsc,
|
||||
req.config_methods = WSC_CONFIGURATION_METHOD_VIRTUAL_PUSH_BUTTON |
|
||||
WSC_CONFIGURATION_METHOD_KEYPAD;
|
||||
|
||||
if (!wsc_uuid_from_addr(device_get_address(wsc->device), req.uuid_e))
|
||||
if (!wsc_uuid_from_addr(netdev_get_address(wsc->netdev), req.uuid_e))
|
||||
return false;
|
||||
|
||||
/* TODO: Grab from configuration file ? */
|
||||
@ -872,7 +873,7 @@ static bool wsc_initiate_scan(struct wsc *wsc,
|
||||
if (!wsc->wsc_ies)
|
||||
return false;
|
||||
|
||||
wsc->scan_id = scan_active(device_get_ifindex(wsc->device),
|
||||
wsc->scan_id = scan_active(netdev_get_ifindex(wsc->netdev),
|
||||
wsc->wsc_ies, wsc->wsc_ies_size,
|
||||
NULL, callback, wsc, NULL);
|
||||
if (!wsc->scan_id) {
|
||||
@ -984,8 +985,7 @@ static struct l_dbus_message *wsc_cancel(struct l_dbus *dbus,
|
||||
if (wsc->wsc_association) {
|
||||
int r;
|
||||
|
||||
r = netdev_disconnect(device_get_netdev(wsc->device),
|
||||
wsc_disconnect_cb, wsc);
|
||||
r = netdev_disconnect(wsc->netdev, wsc_disconnect_cb, wsc);
|
||||
if (r == 0) {
|
||||
wsc->pending_cancel = l_dbus_message_ref(message);
|
||||
return NULL;
|
||||
@ -1041,15 +1041,16 @@ static void wsc_free(void *userdata)
|
||||
l_free(wsc);
|
||||
}
|
||||
|
||||
static void wsc_add_interface(struct device *device)
|
||||
static void wsc_add_interface(struct netdev *netdev)
|
||||
{
|
||||
struct l_dbus *dbus = dbus_get_bus();
|
||||
struct wsc *wsc;
|
||||
|
||||
wsc = l_new(struct wsc, 1);
|
||||
wsc->device = device;
|
||||
wsc->netdev = netdev;
|
||||
wsc->device = netdev_get_device(netdev);
|
||||
|
||||
if (!l_dbus_object_add_interface(dbus, device_get_path(device),
|
||||
if (!l_dbus_object_add_interface(dbus, netdev_get_path(netdev),
|
||||
IWD_WSC_INTERFACE,
|
||||
wsc)) {
|
||||
wsc_free(wsc);
|
||||
@ -1057,11 +1058,11 @@ static void wsc_add_interface(struct device *device)
|
||||
}
|
||||
}
|
||||
|
||||
static void wsc_remove_interface(struct device *device)
|
||||
static void wsc_remove_interface(struct netdev *netdev)
|
||||
{
|
||||
struct l_dbus *dbus = dbus_get_bus();
|
||||
|
||||
l_dbus_object_remove_interface(dbus, device_get_path(device),
|
||||
l_dbus_object_remove_interface(dbus, netdev_get_path(netdev),
|
||||
IWD_WSC_INTERFACE);
|
||||
}
|
||||
|
||||
@ -1077,11 +1078,11 @@ static void wsc_netdev_watch(struct netdev *netdev,
|
||||
case NETDEV_WATCH_EVENT_UP:
|
||||
case NETDEV_WATCH_EVENT_NEW:
|
||||
if (netdev_get_iftype(netdev) == NETDEV_IFTYPE_STATION)
|
||||
wsc_add_interface(device);
|
||||
wsc_add_interface(netdev);
|
||||
break;
|
||||
case NETDEV_WATCH_EVENT_DOWN:
|
||||
case NETDEV_WATCH_EVENT_DEL:
|
||||
wsc_remove_interface(device);
|
||||
wsc_remove_interface(netdev);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user