Skip to content

Commit 976c30c

Browse files
author
Seppo Takalo
authored
Merge pull request #11162 from AriParkkila/cell-dns
Add DNS servers from cellular PDP to nsapi
2 parents 6781c79 + e112466 commit 976c30c

File tree

5 files changed

+48
-1
lines changed

5 files changed

+48
-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;
@@ -451,7 +461,30 @@ nsapi_error_t AT_CellularContext::do_activate_context()
451461

452462
nsapi_error_t AT_CellularContext::activate_ip_context()
453463
{
454-
return find_and_activate_context();
464+
nsapi_error_t ret = find_and_activate_context();
465+
#if !NSAPI_PPP_AVAILABLE
466+
if (ret == NSAPI_ERROR_OK) {
467+
pdpContextList_t params_list;
468+
if (get_pdpcontext_params(params_list) == NSAPI_ERROR_OK) {
469+
pdpcontext_params_t *pdp = params_list.get_head();
470+
while (pdp) {
471+
SocketAddress addr;
472+
if (addr.set_ip_address(pdp->dns_secondary_addr)) {
473+
tr_info("DNS secondary %s", pdp->dns_secondary_addr);
474+
char ifn[5]; // "ce" + two digit _cid + zero
475+
add_dns_server(addr, get_interface_name(ifn));
476+
}
477+
if (addr.set_ip_address(pdp->dns_primary_addr)) {
478+
tr_info("DNS primary %s", pdp->dns_primary_addr);
479+
char ifn[5]; // "ce" + two digit _cid + zero
480+
add_dns_server(addr, get_interface_name(ifn));
481+
}
482+
pdp = pdp->next;
483+
}
484+
}
485+
}
486+
#endif
487+
return ret;
455488
}
456489

457490
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();

features/netsocket/nsapi_dns.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,13 @@ static bool dns_timer_running = false;
131131
// DNS server configuration
132132
extern "C" nsapi_error_t nsapi_dns_add_server(nsapi_addr_t addr, const char *interface_name)
133133
{
134+
// check if addr was already added
135+
for (int i = 0; i < DNS_SERVERS_SIZE; i++) {
136+
if (memcmp(&addr, &dns_servers[i], sizeof(nsapi_addr_t)) == 0) {
137+
return NSAPI_ERROR_OK;
138+
}
139+
}
140+
134141
memmove(&dns_servers[1], &dns_servers[0],
135142
(DNS_SERVERS_SIZE - 1)*sizeof(nsapi_addr_t));
136143

0 commit comments

Comments
 (0)