@@ -109,7 +109,7 @@ void WisunBorderRouter::stop()
109
109
110
110
mesh_error_t WisunBorderRouter::configure ()
111
111
{
112
- #if defined(MBED_CONF_MBED_MESH_API_RADIUS_SHARED_SECRET) || defined(MBED_CONF_MBED_MESH_API_RADIUS_SERVER_IPV6_ADDRESS)
112
+ #if defined(MBED_CONF_MBED_MESH_API_RADIUS_SHARED_SECRET) || defined(MBED_CONF_MBED_MESH_API_RADIUS_SERVER_IPV6_ADDRESS) || defined(MBED_CONF_MBED_MESH_API_RADIUS_RETRY_IMIN)
113
113
mesh_error_t status;
114
114
#endif
115
115
@@ -139,23 +139,40 @@ mesh_error_t WisunBorderRouter::configure()
139
139
if (status != MESH_ERROR_NONE) {
140
140
tr_error (" Failed to set RADIUS server IPv6 address!" );
141
141
}
142
+
143
+ #if defined(MBED_CONF_MBED_MESH_API_RADIUS_RETRY_IMIN) || defined(MBED_CONF_MBED_MESH_API_RADIUS_RETRY_IMAX) || defined(MBED_CONF_MBED_MESH_API_RADIUS_RETRY_COUNT)
144
+ ws_br_radius_timing_t timing {
145
+ .radius_retry_imin = MBED_CONF_MBED_MESH_API_RADIUS_RETRY_IMIN,
146
+ .radius_retry_imax = MBED_CONF_MBED_MESH_API_RADIUS_RETRY_IMAX,
147
+ .radius_retry_count = MBED_CONF_MBED_MESH_API_RADIUS_RETRY_COUNT
148
+ };
149
+ status = set_radius_timing (&timing);
150
+ if (status != MESH_ERROR_NONE) {
151
+ tr_error (" Failed to set RADIUS timing parameters!" );
152
+ }
142
153
#endif
143
154
155
+ #endif
144
156
return MESH_ERROR_NONE;
145
157
}
146
158
147
159
mesh_error_t WisunBorderRouter::apply_configuration (int8_t mesh_if_id)
148
160
{
161
+ configure ();
162
+
149
163
mesh_error_t status = set_bbr_radius_address ();
150
164
if (status != MESH_ERROR_NONE) {
151
165
tr_error (" Failed to apply RADIUS server IPv6 address!" );
152
- return MESH_ERROR_PARAM;
153
166
}
154
167
155
168
status = set_bbr_radius_shared_secret ();
156
169
if (status != MESH_ERROR_NONE) {
157
170
tr_error (" Failed to apply RADIUS server IPv6 address!" );
158
- return MESH_ERROR_PARAM;
171
+ }
172
+
173
+ status = set_bbr_radius_timing ();
174
+ if (status != MESH_ERROR_NONE) {
175
+ tr_error (" Failed to apply RADIUS timing parameters!" );
159
176
}
160
177
161
178
return MESH_ERROR_NONE;
@@ -328,7 +345,7 @@ mesh_error_t WisunBorderRouter::set_radius_shared_secret(uint16_t shared_secret_
328
345
return set_bbr_radius_shared_secret ();
329
346
}
330
347
331
- mesh_error_t WisunBorderRouter::set_bbr_radius_shared_secret ()
348
+ mesh_error_t WisunBorderRouter::set_bbr_radius_shared_secret (void )
332
349
{
333
350
if (_shared_secret_len == 0 || _shared_secret == NULL ) {
334
351
return MESH_ERROR_UNKNOWN;
@@ -372,3 +389,83 @@ mesh_error_t WisunBorderRouter::set_dns_query_result(SocketAddress *address, cha
372
389
373
390
return MESH_ERROR_UNKNOWN;
374
391
}
392
+
393
+ mesh_error_t WisunBorderRouter::set_radius_timing (ws_br_radius_timing_t *timing)
394
+ {
395
+ if (timing == NULL ) {
396
+ return MESH_ERROR_PARAM;
397
+ }
398
+
399
+ if (validate_radius_timing (timing) != MESH_ERROR_NONE) {
400
+ return MESH_ERROR_PARAM;
401
+ }
402
+
403
+ _radius_timing = *timing;
404
+ _radius_timing_set = true ;
405
+
406
+ return set_bbr_radius_timing ();
407
+ }
408
+
409
+ mesh_error_t WisunBorderRouter::set_bbr_radius_timing (void )
410
+ {
411
+ if (!_radius_timing_set) {
412
+ return MESH_ERROR_NONE;
413
+ }
414
+
415
+ bbr_radius_timing_t bbr_timing = {
416
+ .radius_retry_imin = _radius_timing.radius_retry_imin ,
417
+ .radius_retry_imax = _radius_timing.radius_retry_imax ,
418
+ .radius_retry_count = _radius_timing.radius_retry_count
419
+ };
420
+
421
+ int status = ws_bbr_radius_timing_set (_mesh_if_id, &bbr_timing);
422
+ if (status != 0 ) {
423
+ return MESH_ERROR_UNKNOWN;
424
+ }
425
+
426
+ return MESH_ERROR_NONE;
427
+ }
428
+
429
+ mesh_error_t WisunBorderRouter::get_radius_timing (ws_br_radius_timing_t *timing)
430
+ {
431
+ if (timing == NULL ) {
432
+ return MESH_ERROR_PARAM;
433
+ }
434
+
435
+ if (_radius_timing_set) {
436
+ *timing = _radius_timing;
437
+ return MESH_ERROR_NONE;
438
+ }
439
+
440
+ bbr_radius_timing_t bbr_timing;
441
+ int status = ws_bbr_radius_timing_get (_mesh_if_id, &bbr_timing);
442
+ if (status != 0 ) {
443
+ return MESH_ERROR_UNKNOWN;
444
+ }
445
+
446
+ timing->radius_retry_imin = bbr_timing.radius_retry_imin ;
447
+ timing->radius_retry_imax = bbr_timing.radius_retry_imax ;
448
+ timing->radius_retry_count = bbr_timing.radius_retry_count ;
449
+
450
+ return MESH_ERROR_NONE;
451
+ }
452
+
453
+ mesh_error_t WisunBorderRouter::validate_radius_timing (ws_br_radius_timing_t *timing)
454
+ {
455
+ if (timing == NULL ) {
456
+ return MESH_ERROR_PARAM;
457
+ }
458
+
459
+ bbr_radius_timing_t bbr_timing = {
460
+ .radius_retry_imin = timing->radius_retry_imin ,
461
+ .radius_retry_imax = timing->radius_retry_imax ,
462
+ .radius_retry_count = timing->radius_retry_count
463
+ };
464
+
465
+ int status = ws_bbr_radius_timing_validate (_mesh_if_id, &bbr_timing);
466
+ if (status != 0 ) {
467
+ return MESH_ERROR_UNKNOWN;
468
+ }
469
+
470
+ return MESH_ERROR_NONE;
471
+ }
0 commit comments