Skip to content

Commit b878bd9

Browse files
author
Juha Heiskanen
committed
KMP address update
KMP address is not anymore dynamic size. KMP address is not static stuctrure at kmp entry. Change-Id: I470174512af61edae637109d54563252caabf75d
1 parent 7f18afe commit b878bd9

File tree

8 files changed

+69
-210
lines changed

8 files changed

+69
-210
lines changed

source/6LoWPAN/ws/ws_pae_auth.c

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -332,15 +332,15 @@ int8_t ws_pae_auth_node_keys_remove(protocol_interface_info_entry_t *interface_p
332332
sec_prot_keys_pmk_delete(&supp->sec_keys);
333333
sec_prot_keys_ptk_delete(&supp->sec_keys);
334334
supp->access_revoked = true;
335-
tr_info("Access revoked; keys removed, eui-64: %s", trace_array(kmp_address_eui_64_get(supp->addr), 8));
335+
tr_info("Access revoked; keys removed, eui-64: %s", trace_array(supp->addr.eui_64, 8));
336336
return 0;
337337
}
338338

339339
// Checks if supplicant is inactive
340340
supp = ws_pae_lib_supp_list_entry_eui_64_get(&pae_auth->inactive_supp_list, eui_64);
341341
if (supp) {
342342
// Deletes supplicant
343-
tr_info("Access revoked; deleted, eui-64: %s", trace_array(kmp_address_eui_64_get(supp->addr), 8));
343+
tr_info("Access revoked; deleted, eui-64: %s", trace_array(supp->addr.eui_64, 8));
344344
ws_pae_lib_supp_list_remove(&pae_auth->inactive_supp_list, supp);
345345
return 0;
346346
}
@@ -720,8 +720,8 @@ static void ws_pae_auth_kmp_service_addr_get(kmp_service_t *service, kmp_api_t *
720720

721721
// Get supplicant address
722722
supp_entry_t *entry = kmp_api_data_get(kmp);
723-
if (entry && entry->addr) {
724-
kmp_address_copy(remote_addr, entry->addr);
723+
if (entry) {
724+
kmp_address_copy(remote_addr, &entry->addr);
725725
}
726726
}
727727

@@ -767,7 +767,7 @@ static kmp_api_t *ws_pae_auth_kmp_incoming_ind(kmp_service_t *service, kmp_type_
767767
sec_prot_keys_ptk_eui_64_write(&supp_entry->sec_keys, kmp_address_eui_64_get(addr));
768768
} else {
769769
// Updates relay address
770-
kmp_address_copy(supp_entry->addr, addr);
770+
kmp_address_copy(&supp_entry->addr, addr);
771771
}
772772

773773
// Increases waiting time for supplicant authentication
@@ -788,7 +788,7 @@ static kmp_api_t *ws_pae_auth_kmp_incoming_ind(kmp_service_t *service, kmp_type_
788788

789789
kmp_api_data_set(kmp, supp_entry);
790790
// Sets address to KMP
791-
kmp_api_addr_set(kmp, supp_entry->addr);
791+
kmp_api_addr_set(kmp, &supp_entry->addr);
792792

793793
// Sets security keys to KMP
794794
kmp_api_sec_keys_set(kmp, &supp_entry->sec_keys);
@@ -864,7 +864,7 @@ static void ws_pae_auth_next_kmp_trigger(pae_auth_t *pae_auth, supp_entry_t *sup
864864
return;
865865
} else {
866866
if (ws_pae_lib_kmp_list_type_get(&supp_entry->kmp_list, next_type) != NULL) {
867-
tr_info("KMP already ongoing; ignored, eui-64: %s", trace_array(kmp_address_eui_64_get(supp_entry->addr), 8));
867+
tr_info("KMP already ongoing; ignored, eui-64: %s", trace_array(supp_entry->addr.eui_64, 8));
868868
return;
869869
}
870870
}
@@ -882,7 +882,7 @@ static void ws_pae_auth_next_kmp_trigger(pae_auth_t *pae_auth, supp_entry_t *sup
882882
uint16_t ongoing_eap_tls_cnt = ws_pae_lib_supp_list_kmp_count(&pae_auth->active_supp_list, IEEE_802_1X_MKA);
883883
if (ongoing_eap_tls_cnt >= MAX_SIMULTANEOUS_EAP_TLS_NEGOTIATIONS) {
884884
supp_entry->retry_ticks = EAP_TLS_NEGOTIATION_TRIGGER_TIMEOUT;
885-
tr_info("EAP-TLS max ongoing reached, count %i, delayed: eui-64: %s", ongoing_eap_tls_cnt, trace_array(kmp_address_eui_64_get(supp_entry->addr), 8));
885+
tr_info("EAP-TLS max ongoing reached, count %i, delayed: eui-64: %s", ongoing_eap_tls_cnt, trace_array(supp_entry->addr.eui_64, 8));
886886
return;
887887
}
888888
}
@@ -907,7 +907,7 @@ static void ws_pae_auth_next_kmp_trigger(pae_auth_t *pae_auth, supp_entry_t *sup
907907
}
908908
}
909909

910-
kmp_api_create_request(new_kmp, next_type, supp_entry->addr, &supp_entry->sec_keys);
910+
kmp_api_create_request(new_kmp, next_type, &supp_entry->addr, &supp_entry->sec_keys);
911911
}
912912

913913
static kmp_type_e ws_pae_auth_next_protocol_get(supp_entry_t *supp_entry)
@@ -920,11 +920,11 @@ static kmp_type_e ws_pae_auth_next_protocol_get(supp_entry_t *supp_entry)
920920
sec_keys->ptk_mismatch = true;
921921
// start EAP-TLS towards supplicant
922922
next_type = IEEE_802_1X_MKA;
923-
tr_info("PAE start EAP-TLS, eui-64: %s", trace_array(kmp_address_eui_64_get(supp_entry->addr), 8));
923+
tr_info("PAE start EAP-TLS, eui-64: %s", trace_array(supp_entry->addr.eui_64, 8));
924924
} else if (sec_keys->ptk_mismatch) {
925925
// start 4WH towards supplicant
926926
next_type = IEEE_802_11_4WH;
927-
tr_info("PAE start 4WH, eui-64: %s", trace_array(kmp_address_eui_64_get(supp_entry->addr), 8));
927+
tr_info("PAE start 4WH, eui-64: %s", trace_array(supp_entry->addr.eui_64, 8));
928928
}
929929

930930
int8_t gtk_index = -1;
@@ -942,14 +942,14 @@ static kmp_type_e ws_pae_auth_next_protocol_get(supp_entry_t *supp_entry)
942942
if (next_type == KMP_TYPE_NONE && gtk_index >= 0) {
943943
// Update just GTK
944944
next_type = IEEE_802_11_GKH;
945-
tr_info("PAE start GKH, eui-64: %s", trace_array(kmp_address_eui_64_get(supp_entry->addr), 8));
945+
tr_info("PAE start GKH, eui-64: %s", trace_array(supp_entry->addr.eui_64, 8));
946946
}
947947

948-
tr_info("PAE update GTK index: %i, eui-64: %s", gtk_index, trace_array(kmp_address_eui_64_get(supp_entry->addr), 8));
948+
tr_info("PAE update GTK index: %i, eui-64: %s", gtk_index, trace_array(supp_entry->addr.eui_64, 8));
949949
}
950950

951951
if (next_type == KMP_TYPE_NONE) {
952-
tr_info("PAE authenticated, eui-64: %s", trace_array(kmp_address_eui_64_get(supp_entry->addr), 8));
952+
tr_info("PAE authenticated, eui-64: %s", trace_array(supp_entry->addr.eui_64, 8));
953953
}
954954

955955
return next_type;
@@ -1009,7 +1009,7 @@ static void ws_pae_auth_kmp_api_finished(kmp_api_t *kmp)
10091009
ws_pae_lib_kmp_list_delete(&supp_entry->kmp_list, kmp);
10101010

10111011
if (retry_supp) {
1012-
tr_info("PAE next KMP trigger, eui-64: %s", trace_array(kmp_address_eui_64_get(retry_supp->addr), 8));
1012+
tr_info("PAE next KMP trigger, eui-64: %s", trace_array(retry_supp->addr.eui_64, 8));
10131013
ws_pae_auth_next_kmp_trigger(pae_auth, retry_supp);
10141014
}
10151015

source/6LoWPAN/ws/ws_pae_lib.c

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -156,9 +156,9 @@ supp_entry_t *ws_pae_lib_supp_list_add(supp_list_t *supp_list, const kmp_addr_t
156156
}
157157

158158
ws_pae_lib_supp_init(entry);
159-
160-
entry->addr = kmp_address_create(KMP_ADDR_EUI_64_AND_IP, 0);
161-
kmp_address_copy(entry->addr, addr);
159+
memset(&entry->addr, 0, sizeof(kmp_addr_t));
160+
entry->addr.type = KMP_ADDR_EUI_64_AND_IP;
161+
kmp_address_copy(&entry->addr, addr);
162162

163163
ns_list_add_to_end(supp_list, entry);
164164

@@ -178,7 +178,7 @@ int8_t ws_pae_lib_supp_list_remove(supp_list_t *supp_list, supp_entry_t *supp)
178178
supp_entry_t *ws_pae_lib_supp_list_entry_eui_64_get(const supp_list_t *supp_list, const uint8_t *eui_64)
179179
{
180180
ns_list_foreach(supp_entry_t, cur, supp_list) {
181-
if (memcmp(kmp_address_eui_64_get(cur->addr), eui_64, 8) == 0) {
181+
if (memcmp(cur->addr.eui_64, eui_64, 8) == 0) {
182182
return cur;
183183
}
184184
}
@@ -213,10 +213,10 @@ void ws_pae_lib_supp_list_slow_timer_update(supp_list_t *supp_list, timer_settin
213213
{
214214
ns_list_foreach(supp_entry_t, entry, supp_list) {
215215
if (sec_prot_keys_pmk_lifetime_decrement(&entry->sec_keys, timer_settings->pmk_lifetime, seconds)) {
216-
tr_info("PMK and PTK expired, eui-64: %s, system time: %"PRIu32"", trace_array(kmp_address_eui_64_get(entry->addr), 8), protocol_core_monotonic_time / 10);
216+
tr_info("PMK and PTK expired, eui-64: %s, system time: %"PRIu32"", trace_array(entry->addr.eui_64, 8), protocol_core_monotonic_time / 10);
217217
}
218218
if (sec_prot_keys_ptk_lifetime_decrement(&entry->sec_keys, timer_settings->ptk_lifetime, seconds)) {
219-
tr_info("PTK expired, eui-64: %s, system time: %"PRIu32"", trace_array(kmp_address_eui_64_get(entry->addr), 8), protocol_core_monotonic_time / 10);
219+
tr_info("PTK expired, eui-64: %s, system time: %"PRIu32"", trace_array(entry->addr.eui_64, 8), protocol_core_monotonic_time / 10);
220220
}
221221
}
222222

@@ -225,7 +225,7 @@ void ws_pae_lib_supp_list_slow_timer_update(supp_list_t *supp_list, timer_settin
225225
void ws_pae_lib_supp_init(supp_entry_t *entry)
226226
{
227227
ws_pae_lib_kmp_list_init(&entry->kmp_list);
228-
entry->addr = 0;
228+
memset(&entry->addr, 0, sizeof(kmp_addr_t));
229229
memset(&entry->sec_keys, 0, sizeof(sec_prot_keys_t));
230230
entry->ticks = 0;
231231
entry->retry_ticks = 0;
@@ -236,7 +236,6 @@ void ws_pae_lib_supp_init(supp_entry_t *entry)
236236
void ws_pae_lib_supp_delete(supp_entry_t *entry)
237237
{
238238
ws_pae_lib_kmp_list_free(&entry->kmp_list);
239-
kmp_address_delete(entry->addr);
240239
}
241240

242241
bool ws_pae_lib_supp_timer_update(supp_entry_t *entry, uint16_t ticks, ws_pae_lib_kmp_timer_timeout timeout)
@@ -260,7 +259,7 @@ bool ws_pae_lib_supp_timer_update(supp_entry_t *entry, uint16_t ticks, ws_pae_li
260259
entry->retry_ticks -= ticks;
261260
} else {
262261
if (entry->retry_ticks > 0) {
263-
tr_info("EAP-TLS max ongoing delay timeout eui-64: %s", trace_array(kmp_address_eui_64_get(entry->addr), 8));
262+
tr_info("EAP-TLS max ongoing delay timeout eui-64: %s", trace_array(entry->addr.eui_64, 8));
264263
}
265264
entry->retry_ticks = 0;
266265
}
@@ -279,7 +278,7 @@ void ws_pae_lib_supp_list_to_active(supp_list_t *active_supp_list, supp_list_t *
279278
return;
280279
}
281280

282-
tr_debug("PAE: to active, eui-64: %s", trace_array(kmp_address_eui_64_get(entry->addr), 8));
281+
tr_debug("PAE: to active, eui-64: %s", trace_array(entry->addr.eui_64, 8));
283282

284283
ns_list_remove(inactive_supp_list, entry);
285284
ns_list_add_to_start(active_supp_list, entry);
@@ -288,9 +287,7 @@ void ws_pae_lib_supp_list_to_active(supp_list_t *active_supp_list, supp_list_t *
288287
entry->ticks = 0;
289288

290289
// Adds relay address data
291-
kmp_addr_t *addr = kmp_address_create(KMP_ADDR_EUI_64_AND_IP, kmp_address_eui_64_get(entry->addr));
292-
kmp_address_delete(entry->addr);
293-
entry->addr = addr;
290+
entry->addr.type = KMP_ADDR_EUI_64_AND_IP;
294291
}
295292

296293
void ws_pae_lib_supp_list_to_inactive(supp_list_t *active_supp_list, supp_list_t *inactive_supp_list, supp_entry_t *entry)
@@ -299,10 +296,10 @@ void ws_pae_lib_supp_list_to_inactive(supp_list_t *active_supp_list, supp_list_t
299296
return;
300297
}
301298

302-
tr_debug("PAE: to inactive, eui-64: %s", trace_array(kmp_address_eui_64_get(entry->addr), 8));
299+
tr_debug("PAE: to inactive, eui-64: %s", trace_array(entry->addr.eui_64, 8));
303300

304301
if (entry->access_revoked) {
305-
tr_info("Access revoked; deleted, eui-64: %s", trace_array(kmp_address_eui_64_get(entry->addr), 8));
302+
tr_info("Access revoked; deleted, eui-64: %s", trace_array(entry->addr.eui_64, 8));
306303
ws_pae_lib_supp_list_remove(active_supp_list, entry);
307304
return;
308305
}
@@ -314,9 +311,9 @@ void ws_pae_lib_supp_list_to_inactive(supp_list_t *active_supp_list, supp_list_t
314311
entry->ticks = 0;
315312

316313
// Removes relay address data
317-
kmp_addr_t *addr = kmp_address_create(KMP_ADDR_EUI_64, kmp_address_eui_64_get(entry->addr));
318-
kmp_address_delete(entry->addr);
319-
entry->addr = addr;
314+
entry->addr.type = KMP_ADDR_EUI_64;
315+
entry->addr.port = 0;
316+
memset(entry->addr.relay_address, 0, 16);
320317
}
321318

322319
uint16_t ws_pae_lib_supp_list_kmp_count(supp_list_t *supp_list, kmp_type_e type)

source/6LoWPAN/ws/ws_pae_lib.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ typedef NS_LIST_HEAD(kmp_entry_t, link) kmp_list_t;
3333

3434
typedef struct {
3535
kmp_list_t kmp_list; /**< Ongoing KMP negotiations */
36-
kmp_addr_t *addr; /**< EUI-64 (Relay IP address, Relay port) */
36+
kmp_addr_t addr; /**< EUI-64 (Relay IP address, Relay port) */
3737
sec_prot_keys_t sec_keys; /**< Security keys */
3838
uint32_t ticks; /**< Ticks */
3939
uint16_t retry_ticks; /**< Retry ticks */

source/6LoWPAN/ws/ws_pae_supp.c

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ typedef struct {
103103
bool timer_running : 1; /**< Timer is running */
104104
bool new_br_eui_64_set : 1; /**< Border router address has been set */
105105
bool new_br_eui_64_fresh : 1; /**< Border router address is fresh (set during this authentication attempt) */
106+
bool entry_address_active: 1;
106107
} pae_supp_t;
107108

108109

@@ -185,7 +186,8 @@ int8_t ws_pae_supp_authenticate(protocol_interface_info_entry_t *interface_ptr,
185186
// Stores target/parent address
186187
kmp_address_init(KMP_ADDR_EUI_64, &pae_supp->target_addr, dest_eui_64);
187188
// Sets target address in use
188-
pae_supp->entry.addr = (kmp_addr_t *) &pae_supp->target_addr;
189+
pae_supp->entry.addr = pae_supp->target_addr;
190+
pae_supp->entry_address_active = true;
189191

190192
pae_supp->auth_requested = true;
191193

@@ -362,7 +364,7 @@ static int8_t ws_pae_supp_nvm_nw_info_write(pae_supp_t *pae_supp)
362364
nvm_tlv_list_t tlv_list;
363365
ns_list_init(&tlv_list);
364366

365-
ws_pae_nvm_store_nw_info_tlv_create(tlv_entry,pae_supp->sec_keys_nw_info.key_pan_id,
367+
ws_pae_nvm_store_nw_info_tlv_create(tlv_entry, pae_supp->sec_keys_nw_info.key_pan_id,
366368
pae_supp->sec_keys_nw_info.network_name,
367369
&pae_supp->gtks);
368370
ns_list_add_to_end(&tlv_list, tlv_entry);
@@ -445,7 +447,7 @@ static int8_t ws_pae_supp_initial_key_send(pae_supp_t *pae_supp)
445447
// Stores target/parent address
446448
kmp_address_init(KMP_ADDR_EUI_64, &pae_supp->target_addr, parent_eui_64);
447449
// Sets parent address in use
448-
pae_supp->entry.addr = (kmp_addr_t *) &pae_supp->target_addr;
450+
pae_supp->entry.addr = pae_supp->target_addr;
449451

450452
ws_pae_lib_supp_timer_ticks_set(&pae_supp->entry, WAIT_FOR_REAUTHENTICATION_TICKS);
451453
tr_info("PAE wait for auth seconds: %i", WAIT_FOR_REAUTHENTICATION_TICKS / 10);
@@ -456,9 +458,9 @@ static int8_t ws_pae_supp_initial_key_send(pae_supp_t *pae_supp)
456458
return -1;
457459
}
458460

459-
tr_info("EAPOL target: %s", trace_array(kmp_address_eui_64_get(pae_supp->entry.addr), 8));
461+
tr_info("EAPOL target: %s", trace_array(kmp_address_eui_64_get(&pae_supp->entry.addr), 8));
460462

461-
kmp_api_create_request(kmp, IEEE_802_1X_MKA_KEY, pae_supp->entry.addr, &pae_supp->entry.sec_keys);
463+
kmp_api_create_request(kmp, IEEE_802_1X_MKA_KEY, &pae_supp->entry.addr, &pae_supp->entry.sec_keys);
462464

463465
return 0;
464466
}
@@ -742,8 +744,7 @@ void ws_pae_supp_fast_timer(uint16_t ticks)
742744

743745
tr_debug("PAE idle");
744746
// Sets target/parent address to null
745-
pae_supp->entry.addr = NULL;
746-
747+
pae_supp->entry_address_active = false;
747748
// If not already completed, restart bootstrap
748749
ws_pae_supp_authenticate_response(pae_supp, false);
749750

@@ -853,8 +854,8 @@ static int8_t ws_pae_supp_eapol_pdu_address_check(protocol_interface_info_entry_
853854
}
854855

855856
// Message from EAPOL target node, route to self
856-
if (pae_supp->entry.addr) {
857-
if (memcmp(eui_64, kmp_address_eui_64_get(pae_supp->entry.addr), 8) == 0) {
857+
if (pae_supp->entry_address_active) {
858+
if (memcmp(eui_64, pae_supp->entry.addr.eui_64, 8) == 0) {
858859
return 0;
859860
}
860861
}
@@ -952,7 +953,7 @@ static kmp_api_t *ws_pae_supp_kmp_incoming_ind(kmp_service_t *service, kmp_type_
952953
return NULL;
953954
}
954955

955-
if (!pae_supp->entry.addr) {
956+
if (!pae_supp->entry_address_active) {
956957
// Does no longer wait for authentication, ignores message
957958
return NULL;
958959
}
@@ -961,7 +962,7 @@ static kmp_api_t *ws_pae_supp_kmp_incoming_ind(kmp_service_t *service, kmp_type_
961962
pae_supp->auth_trickle_running = false;
962963

963964
// Updates parent address
964-
kmp_address_copy(pae_supp->entry.addr, addr);
965+
kmp_address_copy(&pae_supp->entry.addr, addr);
965966

966967
// Check if ongoing
967968
kmp_api_t *kmp = ws_pae_lib_kmp_list_type_get(&pae_supp->entry.kmp_list, type);
@@ -998,7 +999,7 @@ static kmp_api_t *ws_pae_supp_kmp_create_and_start(kmp_service_t *service, kmp_t
998999
}
9991000

10001001
// Updates parent address
1001-
kmp_api_addr_set(kmp, pae_supp->entry.addr);
1002+
kmp_api_addr_set(kmp, &pae_supp->entry.addr);
10021003

10031004
// Sets security keys to KMP
10041005
kmp_api_sec_keys_set(kmp, &pae_supp->entry.sec_keys);

0 commit comments

Comments
 (0)