Skip to content

Commit d160098

Browse files
Ari Parkkila0xc0170
authored andcommitted
Cellular: Add DNS servers from PDP contexts to nsapi_dns
1 parent 527daa0 commit d160098

File tree

4 files changed

+42
-1
lines changed

4 files changed

+42
-1
lines changed

UNITTESTS/features/cellular/framework/AT/at_cellularcontext/unittest.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,6 @@ set(unittest-test-sources
4242
stubs/UARTSerial_stub.cpp
4343
stubs/SerialBase_stub.cpp
4444
stubs/CellularContext_stub.cpp
45+
stubs/CellularUtil_stub.cpp
46+
stubs/SocketAddress_stub.cpp
4547
)

UNITTESTS/stubs/AT_CellularContext_stub.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,3 +287,8 @@ void AT_CellularContext::do_connect_with_retry()
287287
{
288288

289289
}
290+
291+
char *AT_CellularContext::get_interface_name(char *interface_name)
292+
{
293+
return NULL;
294+
}

features/cellular/framework/AT/AT_CellularContext.cpp

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,16 @@ const char *AT_CellularContext::get_ip_address()
238238
#endif
239239
}
240240

241+
char *AT_CellularContext::get_interface_name(char *interface_name)
242+
{
243+
if (_cid < 0) {
244+
return NULL;
245+
}
246+
MBED_ASSERT(interface_name);
247+
sprintf(interface_name, "ce%02d", _cid);
248+
return interface_name;
249+
}
250+
241251
void AT_CellularContext::attach(Callback<void(nsapi_event_t, intptr_t)> status_cb)
242252
{
243253
_status_cb = status_cb;
@@ -469,7 +479,30 @@ nsapi_error_t AT_CellularContext::do_activate_context()
469479

470480
nsapi_error_t AT_CellularContext::activate_ip_context()
471481
{
472-
return find_and_activate_context();
482+
nsapi_error_t ret = find_and_activate_context();
483+
#if !NSAPI_PPP_AVAILABLE
484+
if (ret == NSAPI_ERROR_OK) {
485+
pdpContextList_t params_list;
486+
if (get_pdpcontext_params(params_list) == NSAPI_ERROR_OK) {
487+
pdpcontext_params_t *pdp = params_list.get_head();
488+
while (pdp) {
489+
SocketAddress addr;
490+
if (addr.set_ip_address(pdp->dns_secondary_addr)) {
491+
tr_info("DNS secondary %s", pdp->dns_secondary_addr);
492+
char ifn[5]; // "ce" + two digit _cid + zero
493+
add_dns_server(addr, get_interface_name(ifn));
494+
}
495+
if (addr.set_ip_address(pdp->dns_primary_addr)) {
496+
tr_info("DNS primary %s", pdp->dns_primary_addr);
497+
char ifn[5]; // "ce" + two digit _cid + zero
498+
add_dns_server(addr, get_interface_name(ifn));
499+
}
500+
pdp = pdp->next;
501+
}
502+
}
503+
}
504+
#endif
505+
return ret;
473506
}
474507

475508
nsapi_error_t AT_CellularContext::activate_non_ip_context()

features/cellular/framework/AT/AT_CellularContext.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ class AT_CellularContext : public CellularContext, public AT_CellularBase {
3636
virtual nsapi_error_t set_blocking(bool blocking);
3737
virtual NetworkStack *get_stack();
3838
virtual const char *get_ip_address();
39+
virtual char *get_interface_name(char *interface_name);
3940
virtual void attach(mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb);
4041
virtual nsapi_error_t connect();
4142
virtual nsapi_error_t disconnect();

0 commit comments

Comments
 (0)