Skip to content

Commit e112466

Browse files
author
Ari Parkkila
committed
Cellular: Add DNS servers from PDP contexts to nsapi_dns
1 parent 3f74a7f commit e112466

File tree

4 files changed

+41
-1
lines changed

4 files changed

+41
-1
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,5 @@ set(unittest-test-sources
4141
stubs/SerialBase_stub.cpp
4242
stubs/CellularContext_stub.cpp
4343
stubs/CellularUtil_stub.cpp
44+
stubs/SocketAddress_stub.cpp
4445
)

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
@@ -239,6 +239,16 @@ const char *AT_CellularContext::get_ip_address()
239239
#endif
240240
}
241241

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

459469
nsapi_error_t AT_CellularContext::activate_ip_context()
460470
{
461-
return find_and_activate_context();
471+
nsapi_error_t ret = find_and_activate_context();
472+
#if !NSAPI_PPP_AVAILABLE
473+
if (ret == NSAPI_ERROR_OK) {
474+
pdpContextList_t params_list;
475+
if (get_pdpcontext_params(params_list) == NSAPI_ERROR_OK) {
476+
pdpcontext_params_t *pdp = params_list.get_head();
477+
while (pdp) {
478+
SocketAddress addr;
479+
if (addr.set_ip_address(pdp->dns_secondary_addr)) {
480+
tr_info("DNS secondary %s", pdp->dns_secondary_addr);
481+
char ifn[5]; // "ce" + two digit _cid + zero
482+
add_dns_server(addr, get_interface_name(ifn));
483+
}
484+
if (addr.set_ip_address(pdp->dns_primary_addr)) {
485+
tr_info("DNS primary %s", pdp->dns_primary_addr);
486+
char ifn[5]; // "ce" + two digit _cid + zero
487+
add_dns_server(addr, get_interface_name(ifn));
488+
}
489+
pdp = pdp->next;
490+
}
491+
}
492+
}
493+
#endif
494+
return ret;
462495
}
463496

464497
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)