mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-12-22 12:52:49 +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;
|
static uint32_t netdev_watch = 0;
|
||||||
|
|
||||||
struct wsc {
|
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;
|
||||||
struct l_dbus_message *pending_cancel;
|
struct l_dbus_message *pending_cancel;
|
||||||
uint8_t *wsc_ies;
|
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;
|
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;
|
wsc->wsc_association = false;
|
||||||
|
|
||||||
@ -370,7 +371,7 @@ static void wsc_netdev_event(struct netdev *netdev, enum netdev_event event,
|
|||||||
break;
|
break;
|
||||||
case NETDEV_EVENT_DISCONNECT_BY_AP:
|
case NETDEV_EVENT_DISCONNECT_BY_AP:
|
||||||
l_debug("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);
|
NETDEV_RESULT_HANDSHAKE_FAILED, wsc);
|
||||||
break;
|
break;
|
||||||
case NETDEV_EVENT_RSSI_THRESHOLD_LOW:
|
case NETDEV_EVENT_RSSI_THRESHOLD_LOW:
|
||||||
@ -418,7 +419,7 @@ static void wsc_connect(struct wsc *wsc)
|
|||||||
|
|
||||||
wsc->target = NULL;
|
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",
|
l_settings_set_string(settings, "Security", "EAP-Identity",
|
||||||
"WFA-SimpleConfig-Enrollee-1-0");
|
"WFA-SimpleConfig-Enrollee-1-0");
|
||||||
@ -433,7 +434,7 @@ static void wsc_connect(struct wsc *wsc)
|
|||||||
l_settings_set_string(settings, "WSC", "PrimaryDeviceType",
|
l_settings_set_string(settings, "WSC", "PrimaryDeviceType",
|
||||||
"0-00000000-0");
|
"0-00000000-0");
|
||||||
l_settings_set_string(settings, "WSC", "EnrolleeMAC",
|
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")) {
|
if (!strcmp(l_dbus_message_get_member(wsc->pending), "StartPin")) {
|
||||||
const char *pin;
|
const char *pin;
|
||||||
@ -457,7 +458,7 @@ static void wsc_connect(struct wsc *wsc)
|
|||||||
handshake_state_set_8021x_config(hs, settings);
|
handshake_state_set_8021x_config(hs, settings);
|
||||||
wsc->eap_settings = 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_netdev_event, wsc_connect_cb,
|
||||||
wsc_eapol_event, wsc) < 0) {
|
wsc_eapol_event, wsc) < 0) {
|
||||||
dbus_pending_reply(&wsc->pending,
|
dbus_pending_reply(&wsc->pending,
|
||||||
@ -526,7 +527,7 @@ static void wsc_cancel_scan(struct wsc *wsc)
|
|||||||
wsc->wsc_ies = 0;
|
wsc->wsc_ies = 0;
|
||||||
|
|
||||||
if (wsc->scan_id > 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;
|
wsc->scan_id = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -657,7 +658,7 @@ static bool push_button_scan_results(uint32_t wiphy_id, uint32_t ifindex,
|
|||||||
target = bss_2g;
|
target = bss_2g;
|
||||||
else {
|
else {
|
||||||
l_debug("No PBC APs found, running the scan again");
|
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,
|
wsc->wsc_ies, wsc->wsc_ies_size,
|
||||||
NULL, push_button_scan_results,
|
NULL, push_button_scan_results,
|
||||||
wsc, NULL);
|
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));
|
l_debug("AuthorizedMacs: %s", authorized_macs_to_string(amacs));
|
||||||
|
|
||||||
if (authorized_macs_contains(amacs,
|
if (authorized_macs_contains(amacs,
|
||||||
device_get_address(wsc->device))) {
|
netdev_get_address(wsc->netdev))) {
|
||||||
target = bss;
|
target = bss;
|
||||||
break;
|
break;
|
||||||
} else if (!target && authorized_macs_contains(amacs,
|
} 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) {
|
if (!target) {
|
||||||
l_debug("No PIN APs found, running the scan again");
|
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,
|
wsc->wsc_ies, wsc->wsc_ies_size,
|
||||||
NULL, pin_scan_results,
|
NULL, pin_scan_results,
|
||||||
wsc, NULL);
|
wsc, NULL);
|
||||||
@ -827,7 +828,7 @@ static bool wsc_initiate_scan(struct wsc *wsc,
|
|||||||
{
|
{
|
||||||
static const uint8_t wfa_oui[] = { 0x00, 0x50, 0xF2 };
|
static const uint8_t wfa_oui[] = { 0x00, 0x50, 0xF2 };
|
||||||
struct wsc_probe_request req;
|
struct wsc_probe_request req;
|
||||||
struct wiphy *wiphy = device_get_wiphy(wsc->device);
|
struct wiphy *wiphy = netdev_get_wiphy(wsc->netdev);
|
||||||
uint32_t bands;
|
uint32_t bands;
|
||||||
uint8_t *wsc_data;
|
uint8_t *wsc_data;
|
||||||
size_t wsc_data_size;
|
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 |
|
req.config_methods = WSC_CONFIGURATION_METHOD_VIRTUAL_PUSH_BUTTON |
|
||||||
WSC_CONFIGURATION_METHOD_KEYPAD;
|
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;
|
return false;
|
||||||
|
|
||||||
/* TODO: Grab from configuration file ? */
|
/* TODO: Grab from configuration file ? */
|
||||||
@ -872,7 +873,7 @@ static bool wsc_initiate_scan(struct wsc *wsc,
|
|||||||
if (!wsc->wsc_ies)
|
if (!wsc->wsc_ies)
|
||||||
return false;
|
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,
|
wsc->wsc_ies, wsc->wsc_ies_size,
|
||||||
NULL, callback, wsc, NULL);
|
NULL, callback, wsc, NULL);
|
||||||
if (!wsc->scan_id) {
|
if (!wsc->scan_id) {
|
||||||
@ -984,8 +985,7 @@ static struct l_dbus_message *wsc_cancel(struct l_dbus *dbus,
|
|||||||
if (wsc->wsc_association) {
|
if (wsc->wsc_association) {
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
r = netdev_disconnect(device_get_netdev(wsc->device),
|
r = netdev_disconnect(wsc->netdev, wsc_disconnect_cb, wsc);
|
||||||
wsc_disconnect_cb, wsc);
|
|
||||||
if (r == 0) {
|
if (r == 0) {
|
||||||
wsc->pending_cancel = l_dbus_message_ref(message);
|
wsc->pending_cancel = l_dbus_message_ref(message);
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -1041,15 +1041,16 @@ static void wsc_free(void *userdata)
|
|||||||
l_free(wsc);
|
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 l_dbus *dbus = dbus_get_bus();
|
||||||
struct wsc *wsc;
|
struct wsc *wsc;
|
||||||
|
|
||||||
wsc = l_new(struct wsc, 1);
|
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,
|
IWD_WSC_INTERFACE,
|
||||||
wsc)) {
|
wsc)) {
|
||||||
wsc_free(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();
|
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);
|
IWD_WSC_INTERFACE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1077,11 +1078,11 @@ static void wsc_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_STATION)
|
if (netdev_get_iftype(netdev) == NETDEV_IFTYPE_STATION)
|
||||||
wsc_add_interface(device);
|
wsc_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:
|
||||||
wsc_remove_interface(device);
|
wsc_remove_interface(netdev);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user