Skip to content

Commit 87f5a4a

Browse files
author
Ari Parkkila
committed
Cellular: Fix resolving of DNS server IPv4/6 address
1 parent daafb95 commit 87f5a4a

File tree

7 files changed

+38
-11
lines changed

7 files changed

+38
-11
lines changed

UNITTESTS/stubs/AT_CellularContext_stub.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,3 +288,7 @@ char *AT_CellularContext::get_interface_name(char *interface_name)
288288
{
289289
return NULL;
290290
}
291+
292+
void AT_CellularContext::is_prefer_ipv6(char *ip, size_t ip_size, char *ip2, size_t ip2_size)
293+
{
294+
}

UNITTESTS/stubs/AT_CellularStack_stub.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,3 +94,7 @@ void AT_CellularStack::socket_attach(nsapi_socket_t handle, void (*callback)(voi
9494
{
9595
}
9696

97+
bool AT_CellularStack::is_addr_stack_compatible(const SocketAddress &addr)
98+
{
99+
return true;
100+
}

UNITTESTS/target_h/myCellularContext.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,9 @@ class myCellularContext : public CellularContext {
220220
{
221221
};
222222

223+
void is_prefer_ipv6(char *ip, size_t ip_size, char *ip2, size_t ip2_size)
224+
{
225+
};
223226
};
224227

225228
}

features/cellular/framework/AT/AT_CellularContext.cpp

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -841,31 +841,31 @@ nsapi_error_t AT_CellularContext::get_pdpcontext_params(pdpContextList_t &params
841841

842842
_at.read_string(ipv6_and_subnetmask, ipv6_subnet_size);
843843
separate_ip_addresses(ipv6_and_subnetmask, params->gateway_addr, sizeof(params->gateway_addr), temp, max_ipv6_size);
844-
prefer_ipv6(params->gateway_addr, sizeof(params->gateway_addr), temp, max_ipv6_size);
844+
is_prefer_ipv6(params->gateway_addr, sizeof(params->gateway_addr), temp, max_ipv6_size);
845845
ipv6_and_subnetmask[0] = '\0';
846846
temp[0] = '\0';
847847

848848
_at.read_string(ipv6_and_subnetmask, ipv6_subnet_size);
849849
separate_ip_addresses(ipv6_and_subnetmask, params->dns_primary_addr, sizeof(params->dns_primary_addr), temp, max_ipv6_size);
850-
prefer_ipv6(params->dns_primary_addr, sizeof(params->dns_primary_addr), temp, max_ipv6_size);
850+
is_prefer_ipv6(params->dns_primary_addr, sizeof(params->dns_primary_addr), temp, max_ipv6_size);
851851
ipv6_and_subnetmask[0] = '\0';
852852
temp[0] = '\0';
853853

854854
_at.read_string(ipv6_and_subnetmask, ipv6_subnet_size);
855855
separate_ip_addresses(ipv6_and_subnetmask, params->dns_secondary_addr, sizeof(params->dns_secondary_addr), temp, max_ipv6_size);
856-
prefer_ipv6(params->dns_secondary_addr, sizeof(params->dns_secondary_addr), temp, max_ipv6_size);
856+
is_prefer_ipv6(params->dns_secondary_addr, sizeof(params->dns_secondary_addr), temp, max_ipv6_size);
857857
ipv6_and_subnetmask[0] = '\0';
858858
temp[0] = '\0';
859859

860860
_at.read_string(ipv6_and_subnetmask, ipv6_subnet_size);
861861
separate_ip_addresses(ipv6_and_subnetmask, params->p_cscf_prim_addr, sizeof(params->p_cscf_prim_addr), temp, max_ipv6_size);
862-
prefer_ipv6(params->p_cscf_prim_addr, sizeof(params->p_cscf_prim_addr), temp, max_ipv6_size);
862+
is_prefer_ipv6(params->p_cscf_prim_addr, sizeof(params->p_cscf_prim_addr), temp, max_ipv6_size);
863863
ipv6_and_subnetmask[0] = '\0';
864864
temp[0] = '\0';
865865

866866
_at.read_string(ipv6_and_subnetmask, ipv6_subnet_size);
867867
separate_ip_addresses(ipv6_and_subnetmask, params->p_cscf_sec_addr, sizeof(params->p_cscf_sec_addr), temp, max_ipv6_size);
868-
prefer_ipv6(params->p_cscf_sec_addr, sizeof(params->p_cscf_sec_addr), temp, max_ipv6_size);
868+
is_prefer_ipv6(params->p_cscf_sec_addr, sizeof(params->p_cscf_sec_addr), temp, max_ipv6_size);
869869

870870
params->im_signalling_flag = _at.read_int();
871871
params->lipa_indication = _at.read_int();
@@ -1065,3 +1065,16 @@ void AT_CellularContext::set_disconnect()
10651065
_is_connected = false;
10661066
_device->cellular_callback(NSAPI_EVENT_CONNECTION_STATUS_CHANGE, NSAPI_STATUS_DISCONNECTED, this);
10671067
}
1068+
1069+
void AT_CellularContext::is_prefer_ipv6(char *ip, size_t ip_size, char *ip2, size_t ip2_size)
1070+
{
1071+
#if NSAPI_PPP_AVAILABLE
1072+
prefer_ipv6(ip, ip_size, ip2, ip2_size);
1073+
#else
1074+
AT_CellularStack *stack = static_cast<AT_CellularStack *>(get_stack());
1075+
SocketAddress addr("127.0.0.1");
1076+
if (!stack->is_addr_stack_compatible(addr)) {
1077+
prefer_ipv6(ip, ip_size, ip2, ip2_size);
1078+
}
1079+
#endif
1080+
}

features/cellular/framework/AT/AT_CellularContext.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ class AT_CellularContext : public CellularContext, public AT_CellularBase {
109109
void ppp_status_cb(nsapi_event_t ev, intptr_t ptr);
110110
void ppp_disconnected();
111111
#endif // #if NSAPI_PPP_AVAILABLE
112+
void is_prefer_ipv6(char *ip, size_t ip_size, char *ip2, size_t ip2_size);
112113
nsapi_error_t do_activate_context();
113114
virtual void activate_context();
114115
nsapi_error_t find_and_activate_context();

features/cellular/framework/AT/AT_CellularStack.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,4 +410,3 @@ bool AT_CellularStack::is_addr_stack_compatible(const SocketAddress &addr)
410410
}
411411
return true;
412412
}
413-

features/cellular/framework/AT/AT_CellularStack.h

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,14 @@ class AT_CellularStack : public NetworkStack, public AT_CellularBase {
4444
public: // NetworkStack
4545

4646
virtual const char *get_ip_address();
47+
48+
/**
49+
* Checks if send to address is valid and if current stack type supports sending to that address type
50+
* @param addr for nsapi_version_t compatiblity check
51+
* @return true on supported, false otherwise
52+
*/
53+
bool is_addr_stack_compatible(const SocketAddress &addr);
54+
4755
protected: // NetworkStack
4856

4957
/**
@@ -192,11 +200,6 @@ class AT_CellularStack : public NetworkStack, public AT_CellularBase {
192200
*/
193201
int find_socket_index(nsapi_socket_t handle);
194202

195-
/**
196-
* Checks if send to address is valid and if current stack type supports sending to that address type
197-
*/
198-
bool is_addr_stack_compatible(const SocketAddress &addr);
199-
200203
// socket container
201204
CellularSocket **_socket;
202205

0 commit comments

Comments
 (0)