wsc: Make WSC netdev centric

This commit is contained in:
Denis Kenzior 2018-08-19 23:28:07 -05:00
parent 2e0638d51b
commit e068c97409
1 changed files with 23 additions and 22 deletions

View File

@ -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;