From patchwork Sat Jul 27 19:55:31 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: michael-dev X-Patchwork-Id: 262515 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from maxx.maxx.shmoo.com (maxx.shmoo.com [205.134.188.171]) by ozlabs.org (Postfix) with ESMTP id A27862C00D0 for ; Sun, 28 Jul 2013 05:59:18 +1000 (EST) Received: from localhost (localhost [127.0.0.1]) by maxx.maxx.shmoo.com (Postfix) with ESMTP id 9A91817C15C; Sat, 27 Jul 2013 15:59:16 -0400 (EDT) X-Virus-Scanned: amavisd-new at maxx.shmoo.com Received: from maxx.maxx.shmoo.com ([127.0.0.1]) by localhost (maxx.shmoo.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id nnDr1iDZAgLi; Sat, 27 Jul 2013 15:59:16 -0400 (EDT) Received: from maxx.shmoo.com (localhost [127.0.0.1]) by maxx.maxx.shmoo.com (Postfix) with ESMTP id 607989D47D; Sat, 27 Jul 2013 15:56:52 -0400 (EDT) X-Original-To: mailman-post+hostap@maxx.shmoo.com Delivered-To: mailman-post+hostap@maxx.shmoo.com Received: from localhost (localhost [127.0.0.1]) by maxx.maxx.shmoo.com (Postfix) with ESMTP id 69B439D47C for ; Sat, 27 Jul 2013 15:56:50 -0400 (EDT) X-Virus-Scanned: amavisd-new at maxx.shmoo.com Received: from maxx.maxx.shmoo.com ([127.0.0.1]) by localhost (maxx.shmoo.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id QADn9JAQjI+V for ; Sat, 27 Jul 2013 15:56:45 -0400 (EDT) Received: from mail.fem.tu-ilmenau.de (mail.fem.tu-ilmenau.de [141.24.101.79]) by maxx.maxx.shmoo.com (Postfix) with ESMTP id 4778317C0FB for ; Sat, 27 Jul 2013 15:55:33 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by mail.fem.tu-ilmenau.de (Postfix) with ESMTP id CA64E6551 for ; Sat, 27 Jul 2013 21:55:32 +0200 (CEST) X-Virus-Scanned: amavisd-new at fem.tu-ilmenau.de Received: from mail.fem.tu-ilmenau.de ([127.0.0.1]) by localhost (mail.fem.tu-ilmenau.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 7psklNiNSbCU; Sat, 27 Jul 2013 21:55:31 +0200 (CEST) Received: from a234.fem.tu-ilmenau.de (unknown [10.42.51.234]) by mail.fem.tu-ilmenau.de (Postfix) with ESMTP; Sat, 27 Jul 2013 21:55:31 +0200 (CEST) Received: from [10.42.51.234] (localhost [127.0.0.1]) by a234.fem.tu-ilmenau.de (Postfix) with ESMTP id E4F6CBED2D; Sat, 27 Jul 2013 21:55:31 +0200 (CEST) Subject: [PATCH v4 13/25] VLAN: Use new VLAN data type in src_ap_wpa_auth To: hostap@lists.shmoo.com From: Michael Braun Date: Sat, 27 Jul 2013 21:55:31 +0200 Message-ID: <20130727195531.17627.35703.stgit@ray-controller> In-Reply-To: <20130727195247.17627.28374.stgit@ray-controller> References: <20130727195247.17627.28374.stgit@ray-controller> User-Agent: StGit/0.16 MIME-Version: 1.0 Cc: projekt-wlan@fem.tu-ilmenau.de X-BeenThere: hostap@lists.shmoo.com X-Mailman-Version: 2.1.11 Precedence: list List-Id: HostAP Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: hostap-bounces@lists.shmoo.com Errors-To: hostap-bounces@lists.shmoo.com Signed-hostap: Michael Braun --- src/ap/wpa_auth.c | 34 ++++++++++++++++++---------------- src/ap/wpa_auth.h | 5 +++-- src/ap/wpa_auth_ft.c | 4 ++-- src/ap/wpa_auth_glue.c | 4 ++-- src/ap/wpa_auth_i.h | 2 +- src/ap/wpa_auth_ie.c | 2 +- 6 files changed, 27 insertions(+), 24 deletions(-) diff --git a/src/ap/wpa_auth.c b/src/ap/wpa_auth.c index af7250e..eca8c1e 100644 --- a/src/ap/wpa_auth.c +++ b/src/ap/wpa_auth.c @@ -106,7 +106,7 @@ static inline int wpa_auth_get_msk(struct wpa_authenticator *wpa_auth, static inline int wpa_auth_set_key(struct wpa_authenticator *wpa_auth, - int vlan_id, + vlan_t vlan_id, enum wpa_alg alg, const u8 *addr, int idx, u8 *key, size_t key_len) { @@ -318,7 +318,7 @@ static int wpa_group_init_gmk_and_counter(struct wpa_authenticator *wpa_auth, static struct wpa_group * wpa_group_init(struct wpa_authenticator *wpa_auth, - int vlan_id, int delay_init) + vlan_t vlan_id, int delay_init) { struct wpa_group *group; @@ -327,7 +327,7 @@ static struct wpa_group * wpa_group_init(struct wpa_authenticator *wpa_auth, return NULL; group->GTKAuthenticator = TRUE; - group->vlan_id = vlan_id; + vlan_alloc_copy(&group->vlan_id, &vlan_id); group->GTK_len = wpa_cipher_key_len(wpa_auth->conf.wpa_group); if (random_pool_ready() != 1) { @@ -390,7 +390,8 @@ struct wpa_authenticator * wpa_init(const u8 *addr, return NULL; } - wpa_auth->group = wpa_group_init(wpa_auth, 0, 1); + vlan_t vlan_id = VLAN_NULL; + wpa_auth->group = wpa_group_init(wpa_auth, vlan_id, 1); if (wpa_auth->group == NULL) { os_free(wpa_auth->wpa_ie); os_free(wpa_auth); @@ -1436,7 +1437,8 @@ void wpa_remove_ptk(struct wpa_state_machine *sm) { sm->PTK_valid = FALSE; os_memset(&sm->PTK, 0, sizeof(sm->PTK)); - wpa_auth_set_key(sm->wpa_auth, 0, WPA_ALG_NONE, sm->addr, 0, NULL, 0); + wpa_auth_set_key(sm->wpa_auth, VLAN_NULL, WPA_ALG_NONE, sm->addr, 0, + NULL, 0); sm->pairwise_set = FALSE; eloop_cancel_timeout(wpa_rekey_ptk, sm->wpa_auth, sm); } @@ -2067,7 +2069,7 @@ SM_STATE(WPA_PTK, PTKINITDONE) if (sm->Pair) { enum wpa_alg alg = wpa_cipher_to_alg(sm->pairwise); int klen = wpa_cipher_key_len(sm->pairwise); - if (wpa_auth_set_key(sm->wpa_auth, 0, alg, sm->addr, 0, + if (wpa_auth_set_key(sm->wpa_auth, VLAN_NULL, alg, sm->addr, 0, sm->PTK.tk1, klen)) { wpa_sta_disconnect(sm->wpa_auth, sm->addr); return; @@ -2395,7 +2397,7 @@ static void wpa_group_gtk_init(struct wpa_authenticator *wpa_auth, struct wpa_group *group) { wpa_printf(MSG_DEBUG, "WPA: group state machine entering state " - "GTK_INIT (VLAN-ID %d)", group->vlan_id); + "GTK_INIT (VLAN-ID %d)", vlan_untagged(&group->vlan_id)); group->changed = FALSE; /* GInit is not cleared here; avoid loop */ group->wpa_group_state = WPA_GROUP_GTK_INIT; @@ -2532,7 +2534,7 @@ static void wpa_group_setkeys(struct wpa_authenticator *wpa_auth, int tmp; wpa_printf(MSG_DEBUG, "WPA: group state machine entering state " - "SETKEYS (VLAN-ID %d)", group->vlan_id); + "SETKEYS (VLAN-ID %d)", vlan_untagged(&group->vlan_id)); group->changed = TRUE; group->wpa_group_state = WPA_GROUP_SETKEYS; group->GTKReKey = FALSE; @@ -2589,7 +2591,7 @@ static int wpa_group_setkeysdone(struct wpa_authenticator *wpa_auth, struct wpa_group *group) { wpa_printf(MSG_DEBUG, "WPA: group state machine entering state " - "SETKEYSDONE (VLAN-ID %d)", group->vlan_id); + "SETKEYSDONE (VLAN-ID %d)", vlan_untagged(&group->vlan_id)); group->changed = TRUE; group->wpa_group_state = WPA_GROUP_SETKEYSDONE; @@ -2981,7 +2983,7 @@ static void wpa_group_free(void *eloop_ctx, void *timeout_ctx) struct wpa_group *prev = wpa_auth->group; wpa_printf(MSG_DEBUG, "WPA: Remove group state machine for VLAN-ID %d", - group->vlan_id); + vlan_untagged(&group->vlan_id)); while (prev) { if (prev->next == group) { @@ -2992,7 +2994,6 @@ static void wpa_group_free(void *eloop_ctx, void *timeout_ctx) } prev = prev->next; } - } @@ -3029,7 +3030,7 @@ wpa_group_put(struct wpa_authenticator *wpa_auth, struct wpa_group *group) static struct wpa_group * -wpa_auth_add_group(struct wpa_authenticator *wpa_auth, int vlan_id) +wpa_auth_add_group(struct wpa_authenticator *wpa_auth, vlan_t vlan_id) { struct wpa_group *group; @@ -3037,7 +3038,7 @@ wpa_auth_add_group(struct wpa_authenticator *wpa_auth, int vlan_id) return NULL; wpa_printf(MSG_DEBUG, "WPA: Add group state machine for VLAN-ID %d", - vlan_id); + vlan_untagged(&vlan_id)); group = wpa_group_init(wpa_auth, vlan_id, 0); if (group == NULL) return NULL; @@ -3049,7 +3050,7 @@ wpa_auth_add_group(struct wpa_authenticator *wpa_auth, int vlan_id) } -int wpa_auth_sta_set_vlan(struct wpa_state_machine *sm, int vlan_id) +int wpa_auth_sta_set_vlan(struct wpa_state_machine *sm, vlan_t vlan_id) { struct wpa_group *group; @@ -3058,7 +3059,7 @@ int wpa_auth_sta_set_vlan(struct wpa_state_machine *sm, int vlan_id) group = sm->wpa_auth->group; while (group) { - if (group->vlan_id == vlan_id) + if (vlan_cmp(&group->vlan_id, &vlan_id)) break; group = group->next; } @@ -3073,7 +3074,8 @@ int wpa_auth_sta_set_vlan(struct wpa_state_machine *sm, int vlan_id) return 0; wpa_printf(MSG_DEBUG, "WPA: Moving STA " MACSTR " to use group state " - "machine for VLAN ID %d", MAC2STR(sm->addr), vlan_id); + "machine for VLAN ID %d", MAC2STR(sm->addr), + vlan_untagged(&vlan_id)); wpa_group_put(sm->wpa_auth, sm->group); sm->group = group; diff --git a/src/ap/wpa_auth.h b/src/ap/wpa_auth.h index ebfe86f..f4c17a0 100644 --- a/src/ap/wpa_auth.h +++ b/src/ap/wpa_auth.h @@ -10,6 +10,7 @@ #define WPA_AUTH_H #include "common/defs.h" +#include "common/vlan.h" #include "common/eapol_common.h" #include "common/wpa_common.h" @@ -186,7 +187,7 @@ struct wpa_auth_callbacks { int (*get_eapol)(void *ctx, const u8 *addr, wpa_eapol_variable var); const u8 * (*get_psk)(void *ctx, const u8 *addr, const u8 *prev_psk); int (*get_msk)(void *ctx, const u8 *addr, u8 *msk, size_t *len); - int (*set_key)(void *ctx, int vlan_id, enum wpa_alg alg, + int (*set_key)(void *ctx, vlan_t vlan_id, enum wpa_alg alg, const u8 *addr, int idx, u8 *key, size_t key_len); int (*get_seqnum)(void *ctx, const u8 *addr, int idx, u8 *seq); int (*send_eapol)(void *ctx, const u8 *addr, const u8 *data, @@ -265,7 +266,7 @@ int wpa_auth_pmksa_add_preauth(struct wpa_authenticator *wpa_auth, struct eapol_state_machine *eapol); void wpa_auth_pmksa_remove(struct wpa_authenticator *wpa_auth, const u8 *sta_addr); -int wpa_auth_sta_set_vlan(struct wpa_state_machine *sm, int vlan_id); +int wpa_auth_sta_set_vlan(struct wpa_state_machine *sm, vlan_t vlan_id); void wpa_auth_eapol_key_tx_status(struct wpa_authenticator *wpa_auth, struct wpa_state_machine *sm, int ack); diff --git a/src/ap/wpa_auth_ft.c b/src/ap/wpa_auth_ft.c index 1bb5d97..5f944cc 100644 --- a/src/ap/wpa_auth_ft.c +++ b/src/ap/wpa_auth_ft.c @@ -737,7 +737,7 @@ u8 * wpa_sm_write_assoc_resp_ies(struct wpa_state_machine *sm, u8 *pos, static inline int wpa_auth_set_key(struct wpa_authenticator *wpa_auth, - int vlan_id, + vlan_t vlan_id, enum wpa_alg alg, const u8 *addr, int idx, u8 *key, size_t key_len) { @@ -768,7 +768,7 @@ void wpa_ft_install_ptk(struct wpa_state_machine *sm) * again after association to get the PTK configured, but that could be * optimized by adding the STA entry earlier. */ - if (wpa_auth_set_key(sm->wpa_auth, 0, alg, sm->addr, 0, + if (wpa_auth_set_key(sm->wpa_auth, VLAN_NULL, alg, sm->addr, 0, sm->PTK.tk1, klen)) return; diff --git a/src/ap/wpa_auth_glue.c b/src/ap/wpa_auth_glue.c index e2be1ea..c769644 100644 --- a/src/ap/wpa_auth_glue.c +++ b/src/ap/wpa_auth_glue.c @@ -245,14 +245,14 @@ static int hostapd_wpa_auth_get_msk(void *ctx, const u8 *addr, u8 *msk, } -static int hostapd_wpa_auth_set_key(void *ctx, int vlan_id, enum wpa_alg alg, +static int hostapd_wpa_auth_set_key(void *ctx, vlan_t vlan_id, enum wpa_alg alg, const u8 *addr, int idx, u8 *key, size_t key_len) { struct hostapd_data *hapd = ctx; const char *ifname = hapd->conf->iface; - if (vlan_id > 0) { + if (vlan_notempty(&vlan_id) && vlan_untagged(&vlan_id) >= 0) { ifname = hostapd_get_vlan_id_ifname(hapd->conf->vlan, vlan_id); if (ifname == NULL) return -1; diff --git a/src/ap/wpa_auth_i.h b/src/ap/wpa_auth_i.h index 82e6e3a..49d514d 100644 --- a/src/ap/wpa_auth_i.h +++ b/src/ap/wpa_auth_i.h @@ -126,7 +126,7 @@ struct wpa_state_machine { /* per group key state machine data */ struct wpa_group { struct wpa_group *next; - int vlan_id; + vlan_t vlan_id; Boolean GInit; int GKeyDoneStations; diff --git a/src/ap/wpa_auth_ie.c b/src/ap/wpa_auth_ie.c index cdfcca1..b0aa98a 100644 --- a/src/ap/wpa_auth_ie.c +++ b/src/ap/wpa_auth_ie.c @@ -609,7 +609,7 @@ int wpa_validate_wpa_ie(struct wpa_authenticator *wpa_auth, "PMKID found from PMKSA cache " "eap_type=%d vlan_id=%d", sm->pmksa->eap_type_authsrv, - sm->pmksa->vlan_id); + vlan_untagged(&sm->pmksa->vlan_id)); os_memcpy(wpa_auth->dot11RSNAPMKIDUsed, pmkid, PMKID_LEN); }