mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-12-22 13:02:44 +01:00
handshake: Add HANDSHAKE_EVENT_P2P_IP_REQUEST
Add a handshake event for use by the AP side for mechanisms that allocate client IPs during the handshake: P2P address allocation and FILS address assignment. This is emitted only when EAPOL or the auth_proto is actually about to send the network configuration data to the client so that ap.c can skip allocating a DHCP leases altogether if the client doesn't send the required KDE or IE.
This commit is contained in:
parent
ed10b00afa
commit
a90c4025f1
17
src/eapol.c
17
src/eapol.c
@ -1350,6 +1350,23 @@ static void eapol_send_ptk_3_of_4(struct eapol_sm *sm)
|
||||
key_data_len += gtk_kde[1] + 2;
|
||||
}
|
||||
|
||||
if (sm->handshake->support_ip_allocation &&
|
||||
!sm->handshake->client_ip_addr) {
|
||||
handshake_event(sm->handshake, HANDSHAKE_EVENT_P2P_IP_REQUEST);
|
||||
|
||||
/*
|
||||
* If .support_ip_allocation was set, the
|
||||
* HANDSHAKE_EVENT_P2P_IP_REQUEST handler is expected to set
|
||||
* .client_ip_addr if not already set. Check if the handler
|
||||
* was successful in allocating an address, if it wasn't we'll
|
||||
* just skip the IP Address Allocation KDE. In either case if
|
||||
* we need to resend message 3/4 the event callback won't be
|
||||
* triggered again because the condition above will be false.
|
||||
*/
|
||||
if (!sm->handshake->client_ip_addr)
|
||||
sm->handshake->support_ip_allocation = false;
|
||||
}
|
||||
|
||||
if (sm->handshake->support_ip_allocation) {
|
||||
/* Wi-Fi P2P Technical Specification v1.7 Table 59 */
|
||||
key_data_buf[key_data_len++] = IE_TYPE_VENDOR_SPECIFIC;
|
||||
|
@ -57,6 +57,7 @@ enum handshake_event {
|
||||
HANDSHAKE_EVENT_REKEY_FAILED,
|
||||
HANDSHAKE_EVENT_EAP_NOTIFY,
|
||||
HANDSHAKE_EVENT_TRANSITION_DISABLE,
|
||||
HANDSHAKE_EVENT_P2P_IP_REQUEST,
|
||||
};
|
||||
|
||||
typedef void (*handshake_event_func_t)(struct handshake_state *hs,
|
||||
|
@ -753,6 +753,7 @@ static void station_handshake_event(struct handshake_state *hs,
|
||||
case HANDSHAKE_EVENT_COMPLETE:
|
||||
case HANDSHAKE_EVENT_SETTING_KEYS_FAILED:
|
||||
case HANDSHAKE_EVENT_EAP_NOTIFY:
|
||||
case HANDSHAKE_EVENT_P2P_IP_REQUEST:
|
||||
/*
|
||||
* currently we don't care about any other events. The
|
||||
* netdev_connect_cb will notify us when the connection is
|
||||
|
Loading…
Reference in New Issue
Block a user