Skip to content

Commit 9e69628

Browse files
lgehrekecfriedt
authored andcommitted
drivers: modem: sim7080: Made dns timeout and retry configurable
Timeout and retries for DNS lookups were hardcoded. This commit introduces kconfig settings for the default values and functions for runtime configuration. Signed-off-by: Lukas Gehreke <[email protected]>
1 parent d81dbba commit 9e69628

File tree

5 files changed

+77
-1
lines changed

5 files changed

+77
-1
lines changed

drivers/modem/simcom/sim7080/Kconfig

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,20 @@ config MODEM_SIMCOM_SIM7080_BAUDRATE
5757
the modem is configured to use autobaud. The driver will then
5858
configure the modem to use a fixed baudrate for faster startups.
5959

60+
config MODEM_SIMCOM_SIM7080_DNS_DEFAULT_RECOUNT
61+
int "Retry count for a DNS query"
62+
range 0 10
63+
default 10
64+
help
65+
The number of retries for a DNS lookup
66+
67+
config MODEM_SIMCOM_SIM7080_DNS_DEFAULT_TIMEOUT
68+
int "Timeout for a DNS query"
69+
range 0 60000
70+
default 20000
71+
help
72+
The timeout for DNS queries in milliseconds
73+
6074
choice MODEM_SIMCOM_SIM7080_RAT
6175
bool "Radio Access Technology Mode"
6276
default MODEM_SIMCOM_SIM7080_RAT_NB1

drivers/modem/simcom/sim7080/sim7080.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,9 @@ static int modem_init(const struct device *dev)
832832
mdata.current_sock_fd = -1;
833833
mdata.current_sock_written = 0;
834834

835+
mdata.dns.recount = CONFIG_MODEM_SIMCOM_SIM7080_DNS_DEFAULT_RECOUNT;
836+
mdata.dns.timeout = CONFIG_MODEM_SIMCOM_SIM7080_DNS_DEFAULT_TIMEOUT;
837+
835838
mdata.ftp.read_buffer = NULL;
836839
mdata.ftp.nread = 0;
837840
mdata.ftp.state = SIM7080_FTP_CONNECTION_STATE_INITIAL;

drivers/modem/simcom/sim7080/sim7080.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,13 @@ struct sim7080_data {
143143
uint8_t sms_buffer_pos;
144144
/* Status of the last http operation */
145145
uint16_t http_status;
146+
/* DNS related variables */
147+
struct {
148+
/* Number of DNS retries */
149+
uint8_t recount;
150+
/* Timeout in milliseconds */
151+
uint16_t timeout;
152+
} dns;
146153
/* Ftp related variables. */
147154
struct {
148155
/* User buffer for ftp data. */

drivers/modem/simcom/sim7080/sim7080_dns.c

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,13 @@ static int offload_getaddrinfo(const char *node, const char *service,
115115
return DNS_EAI_NONAME;
116116
}
117117

118-
snprintk(sendbuf, sizeof(sendbuf), "AT+CDNSGIP=\"%s\",10,20000", node);
118+
ret = snprintk(sendbuf, sizeof(sendbuf), "AT+CDNSGIP=\"%s\",%u,%u", node,
119+
mdata.dns.recount, mdata.dns.timeout);
120+
if (ret < 0) {
121+
LOG_ERR("Formatting dns query failed");
122+
return ret;
123+
}
124+
119125
ret = modem_cmd_send(&mctx.iface, &mctx.cmd_handler, cmd, ARRAY_SIZE(cmd), sendbuf,
120126
&mdata.sem_dns, MDM_DNS_TIMEOUT);
121127
if (ret < 0) {
@@ -142,3 +148,26 @@ const struct socket_dns_offload offload_dns_ops = {
142148
.getaddrinfo = offload_getaddrinfo,
143149
.freeaddrinfo = offload_freeaddrinfo,
144150
};
151+
152+
int mdm_sim7080_dns_set_lookup_params(uint8_t recount, uint16_t timeout)
153+
{
154+
if (recount > SIM7080_DNS_MAX_RECOUNT || timeout > SIM7080_DNS_MAX_TIMEOUT_MS) {
155+
return -EINVAL;
156+
}
157+
158+
mdata.dns.recount = recount;
159+
mdata.dns.timeout = timeout;
160+
161+
return 0;
162+
}
163+
164+
void mdm_sim7080_dns_get_lookup_params(uint8_t *recount, uint16_t *timeout)
165+
{
166+
if (recount) {
167+
*recount = mdata.dns.recount;
168+
}
169+
170+
if (timeout) {
171+
*timeout = mdata.dns.timeout;
172+
}
173+
}

include/zephyr/drivers/modem/simcom-sim7080.h

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ extern "C" {
2424
#define SIM7080_SMS_MAX_LEN 160
2525
/** Maximum UE system information band size */
2626
#define SIM7080_UE_SYS_INFO_BAND_SIZE 32
27+
/** Maximum number of DNS retries */
28+
#define SIM7080_DNS_MAX_RECOUNT 10
29+
/** Maximum timeout for DNS queries in milliseconds */
30+
#define SIM7080_DNS_MAX_TIMEOUT_MS 60000
2731

2832
/** Sim7080 modem state */
2933
enum sim7080_state {
@@ -423,6 +427,25 @@ int mdm_sim7080_get_ue_sys_info(struct sim7080_ue_sys_info *info);
423427
*/
424428
int mdm_sim7080_get_local_time(struct tm *t);
425429

430+
/**
431+
* Set the dns query lookup parameters.
432+
*
433+
* @param recount Number of retries per query.
434+
* Maximum @c SIM7080_DNS_MAX_RECOUNT
435+
* @param timeout Timeout for a dns query in milliseconds.
436+
* Maximum @c SIM7080_DNS_MAX_TIMEOUT_MS
437+
* @return 0 on success. Otherwise a negative error is returned.
438+
*/
439+
int mdm_sim7080_dns_set_lookup_params(uint8_t recount, uint16_t timeout);
440+
441+
/**
442+
* Get the dns query lookup parameters.
443+
*
444+
* @param recount [out] Number of retries per query.
445+
* @param timeout [out] Timeout for a dns query in milliseconds.
446+
*/
447+
void mdm_sim7080_dns_get_lookup_params(uint8_t *recount, uint16_t *timeout);
448+
426449
#ifdef __cplusplus
427450
}
428451
#endif

0 commit comments

Comments
 (0)