mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-26 10:39:23 +01:00
p2p: As GO delay connect success until client gets IP
Don't signal the connected state until the client has obtained a DHCP lease and we can set the ConnectedIP property. From now on that property is always set when there's a connection.
This commit is contained in:
parent
f7c6fe0ed6
commit
04bfe55c36
36
src/p2p.c
36
src/p2p.c
@ -659,10 +659,11 @@ static void p2p_connection_reset(struct p2p_device *dev)
|
|||||||
netconfig_destroy(dev->conn_netconfig);
|
netconfig_destroy(dev->conn_netconfig);
|
||||||
dev->conn_netconfig = NULL;
|
dev->conn_netconfig = NULL;
|
||||||
l_settings_free(dev->conn_netconfig_settings);
|
l_settings_free(dev->conn_netconfig_settings);
|
||||||
l_free(dev->conn_peer_ip);
|
|
||||||
dev->conn_peer_ip = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
l_free(dev->conn_peer_ip);
|
||||||
|
dev->conn_peer_ip = NULL;
|
||||||
|
|
||||||
if (dev->conn_new_intf_cmd_id)
|
if (dev->conn_new_intf_cmd_id)
|
||||||
/*
|
/*
|
||||||
* Note this may result in the interface being created
|
* Note this may result in the interface being created
|
||||||
@ -948,8 +949,8 @@ static void p2p_group_event(enum ap_event_type type, const void *event_data,
|
|||||||
p2p_extract_wfd_properties(wfd_data, wfd_data_len,
|
p2p_extract_wfd_properties(wfd_data, wfd_data_len,
|
||||||
dev->conn_peer->wfd);
|
dev->conn_peer->wfd);
|
||||||
|
|
||||||
dev->conn_peer_added = true;
|
/* Setup is progressing so re-arm the timeout */
|
||||||
p2p_peer_connect_done(dev);
|
l_timeout_modify(dev->conn_dhcp_timeout, p2p_dhcp_timeout_val);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -968,6 +969,28 @@ static void p2p_group_event(enum ap_event_type type, const void *event_data,
|
|||||||
break;
|
break;
|
||||||
case AP_EVENT_PBC_MODE_EXIT:
|
case AP_EVENT_PBC_MODE_EXIT:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case AP_EVENT_DHCP_NEW_LEASE:
|
||||||
|
{
|
||||||
|
const struct l_dhcp_lease *lease = event_data;
|
||||||
|
|
||||||
|
if (dev->conn_peer_added)
|
||||||
|
break;
|
||||||
|
|
||||||
|
dev->conn_peer_added = true;
|
||||||
|
dev->conn_peer_ip = l_dhcp_lease_get_address(lease);
|
||||||
|
l_timeout_remove(dev->conn_dhcp_timeout);
|
||||||
|
p2p_peer_connect_done(dev);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case AP_EVENT_DHCP_LEASE_EXPIRED:
|
||||||
|
/*
|
||||||
|
* Only one DHCP lease allowed for now, as soon as it expires
|
||||||
|
* the connection is considered to be down.
|
||||||
|
*/
|
||||||
|
p2p_connect_failed(dev);
|
||||||
|
break;
|
||||||
};
|
};
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -1242,7 +1265,8 @@ static void p2p_group_start(struct p2p_device *dev)
|
|||||||
|
|
||||||
l_settings_set_bytes(config, "Security", "PreSharedKey", psk, 32);
|
l_settings_set_bytes(config, "Security", "PreSharedKey", psk, 32);
|
||||||
|
|
||||||
l_settings_add_group(config, "IPv4");
|
/* Enable netconfig, set maximum usable DHCP lease time */
|
||||||
|
l_settings_set_uint(config, "IPv4", "LeaseTime", 0x7fffffff);
|
||||||
|
|
||||||
dev->capability.group_caps |= P2P_GROUP_CAP_GO;
|
dev->capability.group_caps |= P2P_GROUP_CAP_GO;
|
||||||
dev->capability.group_caps |= P2P_GROUP_CAP_GROUP_FORMATION;
|
dev->capability.group_caps |= P2P_GROUP_CAP_GROUP_FORMATION;
|
||||||
@ -4757,7 +4781,7 @@ static bool p2p_peer_get_connected_ip(struct l_dbus *dbus,
|
|||||||
{
|
{
|
||||||
struct p2p_peer *peer = user_data;
|
struct p2p_peer *peer = user_data;
|
||||||
|
|
||||||
if (!p2p_peer_operational(peer) || !peer->dev->conn_peer_ip)
|
if (!p2p_peer_operational(peer))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
l_dbus_message_builder_append_basic(builder, 's', peer->dev->conn_peer_ip);
|
l_dbus_message_builder_append_basic(builder, 's', peer->dev->conn_peer_ip);
|
||||||
|
Loading…
Reference in New Issue
Block a user