Skip to content

Commit fa2d7d0

Browse files
Juha Heiskanenjuhhei01
authored andcommitted
Removed Adaptation interface depency from LLC away.
Removed Adaptation MPX user registration away from sw_llc_create() Added getter fro MPX API for registration Added support for un register MPX at adapatation interface. Updated Unit test.
1 parent 4356ae8 commit fa2d7d0

File tree

5 files changed

+64
-60
lines changed

5 files changed

+64
-60
lines changed

source/6LoWPAN/adaptation_interface.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -382,10 +382,18 @@ int8_t lowpan_adaptation_interface_mpx_register(int8_t interface_id, struct mpx_
382382
if (!interface_ptr) {
383383
return -1;
384384
}
385+
if (!mpx_api && interface_ptr->mpx_api) {
386+
//Disable Data Callbacks from MPX Class
387+
interface_ptr->mpx_api->mpx_user_registration(interface_ptr->mpx_api, NULL, NULL, interface_ptr->mpx_user_id);
388+
}
389+
385390
interface_ptr->mpx_api = mpx_api;
386391
interface_ptr->mpx_user_id = mpx_user_id;
387-
//Register MPX callbacks: confirmation and indication
388-
interface_ptr->mpx_api->mpx_user_registration(interface_ptr->mpx_api, lowpan_adaptation_mpx_data_confirm, lowpan_adaptation_mpx_data_indication, interface_ptr->mpx_user_id);
392+
393+
if (interface_ptr->mpx_api) {
394+
//Register MPX callbacks: confirmation and indication
395+
interface_ptr->mpx_api->mpx_user_registration(interface_ptr->mpx_api, lowpan_adaptation_mpx_data_confirm, lowpan_adaptation_mpx_data_indication, interface_ptr->mpx_user_id);
396+
}
389397
return 0;
390398
}
391399

source/6LoWPAN/ws/ws_common_defines.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,9 @@ typedef struct ws_pan_information_s {
6363
unsigned version:3; /**< Pan version support. */
6464
} ws_pan_information_t;
6565

66+
67+
#define MPX_KEY_MANAGEMENT_ENC_USER_ID 0x0001 /**< MPX Key management user ID */
68+
#define MPX_LOWPAN_ENC_USER_ID 0xA0ED /**< MPX Lowpan User Id */
69+
70+
6671
#endif /* WS_COMMON_DEFINES_H_ */

source/6LoWPAN/ws/ws_llc.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,16 @@ void ws_llc_reset(struct protocol_interface_info_entry *interface);
101101
*/
102102
int8_t ws_llc_delete(struct protocol_interface_info_entry *interface);
103103

104+
/**
105+
* @brief ws_llc_mpx_api_get Get MPX api for registration purpose.
106+
* @param interface Interface pointer
107+
*
108+
* @return NULL when MPX is not vailabale
109+
* @return Pointer to MPX API
110+
*
111+
*/
112+
mpx_api_t * ws_llc_mpx_api_get(struct protocol_interface_info_entry *interface);
113+
104114
/**
105115
* @brief ws_llc_asynch_request ws asynch message request to all giving channels
106116
* @param interface Interface pointer

source/6LoWPAN/ws/ws_llc_data_service.c

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,11 @@
3232
#include "6LoWPAN/ws/ws_ie_lib.h"
3333
#include "6LoWPAN/ws/ws_llc.h"
3434
#include "6LoWPAN/ws/ws_mpx_header.h"
35-
#include "6LoWPAN/lowpan_adaptation_interface.h"
3635

3736
#define TRACE_GROUP "wllc"
3837

3938
#define LLC_MESSAGE_QUEUE_LIST_SIZE_MAX 16 //Do not config over 30 never
4039
#define MPX_USER_SIZE 2
41-
#define MPX_KEY_MANAGEMENT_ENC_USER_ID 0x0001
42-
#define MPX_LOWPAN_ENC_USER_ID 0xA0ED
43-
4440

4541
typedef struct {
4642
uint16_t user_id; /**< User ID for identify MPX User */
@@ -127,7 +123,7 @@ static void ws_llc_mpx_data_request(const mpx_api_t *api, const struct mcps_data
127123
static int8_t ws_llc_mpx_data_cb_register(const mpx_api_t* api, mpx_data_confirm *confirm_cb, mpx_data_indication *indication_cb, uint16_t user_id);
128124
static uint16_t ws_llc_mpx_header_size_get(const mpx_api_t * api, uint16_t user_id);
129125
static void ws_llc_mpx_data_purge_request(const mpx_api_t *api, struct mcps_purge_s *purge, uint16_t user_id);
130-
static int8_t ws_llc_mpx_init(mpx_class_t *mpx_class, int8_t interface_id);
126+
static void ws_llc_mpx_init(mpx_class_t *mpx_class);
131127

132128
/** Discover Message by message handle id */
133129
static llc_message_t * llc_message_discover_by_mac_handle(uint8_t handle, llc_message_list_t *list)
@@ -326,8 +322,6 @@ static uint16_t ws_wp_nested_message_length(wp_nested_ie_sub_list_t requested_li
326322
return length;
327323
}
328324

329-
330-
331325
static mpx_user_t * ws_llc_mpx_user_discover(mpx_class_t *mpx_class, uint16_t user_id)
332326
{
333327
for(int i= 0; i< MPX_USER_SIZE; i++) {
@@ -338,8 +332,6 @@ static mpx_user_t * ws_llc_mpx_user_discover(mpx_class_t *mpx_class, uint16_t us
338332
return NULL;
339333
}
340334

341-
342-
343335
static llc_data_base_t * ws_llc_base_allocate(void)
344336
{
345337
llc_data_base_t * base = ns_dyn_mem_temporary_alloc(sizeof(llc_data_base_t));
@@ -625,7 +617,7 @@ static void ws_llc_mpx_data_purge_request(const mpx_api_t *api, struct mcps_purg
625617

626618
}
627619

628-
static int8_t ws_llc_mpx_init(mpx_class_t *mpx_class, int8_t interface_id)
620+
static void ws_llc_mpx_init(mpx_class_t *mpx_class)
629621
{
630622
//Init Mbed Class and API
631623
mpx_class->mpx_user_table[0].user_id = MPX_LOWPAN_ENC_USER_ID;
@@ -634,8 +626,6 @@ static int8_t ws_llc_mpx_init(mpx_class_t *mpx_class, int8_t interface_id)
634626
mpx_class->mpx_api.mpx_user_registration = &ws_llc_mpx_data_cb_register;
635627
mpx_class->mpx_api.mpx_data_request = &ws_llc_mpx_data_request;
636628
mpx_class->mpx_api.mpx_data_purge = &ws_llc_mpx_data_purge_request;
637-
//Register MPX to adaptation layer
638-
return lowpan_adaptation_interface_mpx_register(interface_id, &mpx_class->mpx_api, MPX_LOWPAN_ENC_USER_ID);
639629
}
640630

641631
static void ws_llc_clean(llc_data_base_t *base)
@@ -656,27 +646,23 @@ int8_t ws_llc_create(struct protocol_interface_info_entry *interface, ws_asynch_
656646
{
657647
llc_data_base_t *base = ws_llc_discover_by_interface(interface);
658648
if (base) {
659-
return -1;
649+
ws_llc_clean(base);
650+
return 0;
660651
}
661652

662-
663653
//Allocate Data base
664654
base =ws_llc_base_allocate();
665655
if (!base) {
666656
return -2;
667657
}
658+
668659
base->interface_ptr = interface;
669660
base->acynch_ind = asynch_ind_cb;
670661
base->asynch_confirm = asynch_cnf_cb;
671662
//Register MAC Extensions
672663
base->interface_ptr->mac_api->mac_mcps_extension_enable(base->interface_ptr->mac_api, &ws_llc_mac_indication_cb, &ws_llc_mac_confirm_cb);
673-
//Init MPX class and register MPX to users
674-
if (ws_llc_mpx_init(&base->mpx_data_base, interface->id) != 0) {
675-
ns_list_remove(&llc_data_base_list, base);
676-
ns_dyn_mem_free(base);
677-
return -1;
678-
}
679-
664+
//Init MPX class
665+
ws_llc_mpx_init(&base->mpx_data_base);
680666
return 0;
681667
}
682668

@@ -692,8 +678,6 @@ int8_t ws_llc_delete(struct protocol_interface_info_entry *interface)
692678
ns_list_remove(&llc_data_base_list, base);
693679
//Disable Mac extension
694680
base->interface_ptr->mac_api->mac_mcps_extension_enable(base->interface_ptr->mac_api, NULL, NULL);
695-
//Disable Adaptation MPX
696-
lowpan_adaptation_interface_mpx_register(base->interface_ptr->id, NULL, 0);
697681
ns_dyn_mem_free(base);
698682
return 0;
699683
}
@@ -709,6 +693,15 @@ void ws_llc_reset(struct protocol_interface_info_entry *interface)
709693
ws_llc_clean(base);
710694
}
711695

696+
mpx_api_t * ws_llc_mpx_api_get(struct protocol_interface_info_entry *interface)
697+
{
698+
llc_data_base_t *base = ws_llc_discover_by_interface(interface);
699+
if (!base) {
700+
return NULL;
701+
}
702+
return &base->mpx_data_base.mpx_api;
703+
}
704+
712705
int8_t ws_llc_asynch_request(struct protocol_interface_info_entry *interface, asynch_request_t *request)
713706
{
714707
llc_data_base_t *base = ws_llc_discover_by_interface(interface);

test/nanostack/unittest/6LoWPAN/ws_llc_data_service/test_ws_llc_data_service.c

Lines changed: 23 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
#include "6LoWPAN/ws/ws_mpx_header.h"
3434
#include "6LoWPAN/lowpan_adaptation_interface.h"
3535
#include "nsdynmemLIB_stub.h"
36-
#include "adaptation_interface_stub.h"
3736
#include "mac_ie_lib_stub.h"
3837
#include "ws_mpx_header_stub.h"
3938

@@ -91,14 +90,9 @@ static int8_t test_mac_api_enable_mcps_ext(mac_api_t *api,
9190
return 0;
9291
}
9392

94-
static bool register_mpx_user(void)
93+
static void register_mpx_user(mpx_api_t *mpx_api)
9594
{
96-
97-
if (!adaptation_interface_stub.mpx_api) {
98-
return false;
99-
}
100-
adaptation_interface_stub.mpx_api->mpx_user_registration(adaptation_interface_stub.mpx_api, &test_mpx_data_confirm, &test_mpx_data_indication, 0xA0ED);
101-
return true;
95+
mpx_api->mpx_user_registration(mpx_api, &test_mpx_data_confirm, &test_mpx_data_indication, 0xA0ED);
10296
}
10397

10498
static uint8_t test_handle;
@@ -132,22 +126,16 @@ bool test_ws_llc_create()
132126
if (ws_llc_create(&interface, test_ws_asynch_ind, test_ws_asynch_confirm) != -2) {
133127
return false;
134128
}
135-
nsdynmemlib_stub.returnCounter = 1;
136-
adaptation_interface_stub.expectedInt8 = -1;
137-
if (ws_llc_create(&interface, test_ws_asynch_ind, test_ws_asynch_confirm) != -1) {
129+
if (ws_llc_mpx_api_get(&interface)) {
138130
return false;
139131
}
132+
140133
nsdynmemlib_stub.returnCounter = 1;
141-
adaptation_interface_stub.expectedInt8 = 0;
142134
if (ws_llc_create(&interface, test_ws_asynch_ind, test_ws_asynch_confirm) != 0) {
143135
return false;
144136
}
145137

146-
if (!register_mpx_user()) {
147-
return false;
148-
}
149-
150-
if (ws_llc_create(&interface, test_ws_asynch_ind, test_ws_asynch_confirm) != -1) {
138+
if (ws_llc_create(&interface, test_ws_asynch_ind, test_ws_asynch_confirm) != 0) {
151139
return false;
152140
}
153141
ws_llc_delete(&interface);
@@ -161,9 +149,9 @@ bool test_ws_llc_reset()
161149
interface_api_init(&api);
162150

163151
nsdynmemlib_stub.returnCounter = 1;
164-
adaptation_interface_stub.expectedInt8 = 0;
165152
ws_llc_create(&interface, test_ws_asynch_ind, test_ws_asynch_confirm);
166-
register_mpx_user();
153+
mpx_api_t *mpx_api = ws_llc_mpx_api_get(&interface);
154+
register_mpx_user(mpx_api);
167155
ws_llc_reset(NULL);
168156
//Tri Asynch and MPX to queue
169157
mcps_data_req_t data_req;
@@ -174,7 +162,7 @@ bool test_ws_llc_reset()
174162
data_req.msdu = test_data;
175163
data_req.msduLength = 80;
176164
nsdynmemlib_stub.returnCounter = 1;
177-
adaptation_interface_stub.mpx_api->mpx_data_request(adaptation_interface_stub.mpx_api, &data_req, 0xA0ED);
165+
mpx_api->mpx_data_request(mpx_api, &data_req, 0xA0ED);
178166
nsdynmemlib_stub.returnCounter = 1;
179167
asynch_request_t asynch_request;
180168
asynch_request.message_type = WS_FT_PAN_ADVERT;
@@ -191,9 +179,9 @@ bool test_asynch_msg_send()
191179
interface_api_init(&api);
192180

193181
nsdynmemlib_stub.returnCounter = 1;
194-
adaptation_interface_stub.expectedInt8 = 0;
195182
ws_llc_create(&interface, test_ws_asynch_ind, test_ws_asynch_confirm);
196-
register_mpx_user();
183+
mpx_api_t *mpx_api = ws_llc_mpx_api_get(&interface);
184+
register_mpx_user(mpx_api);
197185
asynch_request_t asynch_request;
198186
asynch_request.message_type = WS_FT_PAN_ADVERT_SOL;
199187
message_id = WS_FT_PAN_ADVERT_SOL;
@@ -268,9 +256,9 @@ bool test_mpx_msg_send()
268256
interface_api_init(&api);
269257

270258
nsdynmemlib_stub.returnCounter = 1;
271-
adaptation_interface_stub.expectedInt8 = 0;
272259
ws_llc_create(&interface, test_ws_asynch_ind, test_ws_asynch_confirm);
273-
register_mpx_user();
260+
mpx_api_t *mpx_api = ws_llc_mpx_api_get(&interface);
261+
register_mpx_user(mpx_api);
274262

275263
mcps_data_req_t data_req;
276264
uint8_t test_data[100];
@@ -283,7 +271,7 @@ bool test_mpx_msg_send()
283271
valid_mpx_conf = false;
284272
test_status = MLME_TRANSACTION_OVERFLOW;
285273
mpx_handle_test = 10;
286-
adaptation_interface_stub.mpx_api->mpx_data_request(adaptation_interface_stub.mpx_api, &data_req, 0xA0ED);
274+
mpx_api->mpx_data_request(mpx_api, &data_req, 0xA0ED);
287275
if (!valid_mpx_conf) {
288276
return false;
289277
}
@@ -294,7 +282,7 @@ bool test_mpx_msg_send()
294282
test_status = MLME_SUCCESS;
295283
mpx_handle_test = 11;
296284
nsdynmemlib_stub.returnCounter = 1;
297-
adaptation_interface_stub.mpx_api->mpx_data_request(adaptation_interface_stub.mpx_api, &data_req, 0xA0ED);
285+
mpx_api->mpx_data_request(mpx_api, &data_req, 0xA0ED);
298286
if (valid_mpx_conf) {
299287
return false;
300288
}
@@ -322,18 +310,18 @@ bool test_mpx_msg_send()
322310
test_status = MLME_SUCCESS;
323311
mpx_handle_test = 12;
324312
nsdynmemlib_stub.returnCounter = 1;
325-
adaptation_interface_stub.mpx_api->mpx_data_request(adaptation_interface_stub.mpx_api, &data_req, 0xA0ED);
313+
mpx_api->mpx_data_request(mpx_api, &data_req, 0xA0ED);
326314
uint8_t test_1 = test_handle;
327315
data_req.msduHandle = 13;
328316
nsdynmemlib_stub.returnCounter = 1;
329-
adaptation_interface_stub.mpx_api->mpx_data_request(adaptation_interface_stub.mpx_api, &data_req, 0xA0ED);
317+
mpx_api->mpx_data_request(mpx_api, &data_req, 0xA0ED);
330318
uint8_t test_2 = test_handle;
331319

332320
struct mcps_purge_s purge;
333321
purge.msduHandle = 12;
334-
adaptation_interface_stub.mpx_api->mpx_data_purge(adaptation_interface_stub.mpx_api,&purge, 0xA0ED);
322+
mpx_api->mpx_data_purge(mpx_api,&purge, 0xA0ED);
335323
purge.msduHandle = 13;
336-
adaptation_interface_stub.mpx_api->mpx_data_purge(adaptation_interface_stub.mpx_api,&purge, 0xA0ED);
324+
mpx_api->mpx_data_purge(mpx_api,&purge, 0xA0ED);
337325
//Purge and after that test confirm
338326
data_conf.msduHandle = test_handle;
339327
data_confirmation_cb(&api, &data_conf, &conf_payload);
@@ -342,18 +330,18 @@ bool test_mpx_msg_send()
342330
}
343331
uint8_t vendor_test[10];
344332
//Test OverHead check
345-
uint16_t test_length = adaptation_interface_stub.mpx_api->mpx_headroom_size_get(adaptation_interface_stub.mpx_api, 0xA0ED);
333+
uint16_t test_length = mpx_api->mpx_headroom_size_get(mpx_api, 0xA0ED);
346334
if (test_length != 14) {
347335
return false;
348336
}
349337
ws_llc_set_vendor_header_data(&interface, vendor_test, 10);
350-
test_length = adaptation_interface_stub.mpx_api->mpx_headroom_size_get(adaptation_interface_stub.mpx_api, 0xA0ED);
338+
test_length = mpx_api->mpx_headroom_size_get(mpx_api, 0xA0ED);
351339
if (test_length != 14 + 13) {
352340
return false;
353341
}
354342

355343
ws_llc_set_vendor_payload_data(&interface, vendor_test, 10);
356-
test_length = adaptation_interface_stub.mpx_api->mpx_headroom_size_get(adaptation_interface_stub.mpx_api, 0xA0ED);
344+
test_length = mpx_api->mpx_headroom_size_get(mpx_api, 0xA0ED);
357345
if (test_length != 14 + 13 + 14) {
358346
return false;
359347
}
@@ -371,9 +359,9 @@ bool test_mpx_msg_rx()
371359
interface_api_init(&api);
372360

373361
nsdynmemlib_stub.returnCounter = 1;
374-
adaptation_interface_stub.expectedInt8 = 0;
375362
ws_llc_create(&interface, test_ws_asynch_ind, test_ws_asynch_confirm);
376-
register_mpx_user();
363+
mpx_api_t *mpx_api = ws_llc_mpx_api_get(&interface);
364+
register_mpx_user(mpx_api);
377365

378366
mcps_data_ind_t data_ind;
379367
uint8_t utt_type = 0;

0 commit comments

Comments
 (0)