Skip to content

Commit c28bbce

Browse files
committed
modem: hl7800: fix IPv6 socket creation
When creating a socket, be sure to check the address family and set the correct address family option in the AT command. Signed-off-by: Ryan Erickson <[email protected]>
1 parent 93f7a48 commit c28bbce

File tree

1 file changed

+21
-12
lines changed

1 file changed

+21
-12
lines changed

drivers/modem/hl7800.c

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,8 @@ static const struct mdm_control_pinconfig pinconfig[] = {
313313
#else
314314
#define MODEM_HL7800_ADDRESS_FAMILY "IPV6"
315315
#endif
316+
#define MDM_HL7800_SOCKET_AF_IPV4 0
317+
#define MDM_HL7800_SOCKET_AF_IPV6 1
316318

317319
#define SET_RAT_M1_CMD_LEGACY "AT+KSRAT=0"
318320
#define SET_RAT_NB1_CMD_LEGACY "AT+KSRAT=1"
@@ -5116,26 +5118,23 @@ static int configure_TCP_socket(struct hl7800_socket *sock)
51165118
int ret;
51175119
char cmd_cfg[sizeof("AT+KTCPCFG=#,#,\"" IPV6_ADDR_FORMAT "\",#####")];
51185120
int dst_port = -1;
5121+
int af;
51195122

5120-
#if defined(CONFIG_NET_IPV6)
51215123
if (sock->dst.sa_family == AF_INET6) {
5124+
af = MDM_HL7800_SOCKET_AF_IPV6;
51225125
dst_port = net_sin6(&sock->dst)->sin6_port;
5123-
} else
5124-
#endif
5125-
#if defined(CONFIG_NET_IPV4)
5126-
if (sock->dst.sa_family == AF_INET) {
5126+
} else if (sock->dst.sa_family == AF_INET) {
5127+
af = MDM_HL7800_SOCKET_AF_IPV4;
51275128
dst_port = net_sin(&sock->dst)->sin_port;
5128-
} else
5129-
#endif
5130-
{
5129+
} else {
51315130
return -EINVAL;
51325131
}
51335132

51345133
/* socket # needs assigning */
51355134
sock->socket_id = MDM_MAX_SOCKETS + 1;
51365135

5137-
snprintk(cmd_cfg, sizeof(cmd_cfg), "AT+KTCPCFG=%d,%d,\"%s\",%u", 1, 0,
5138-
hl7800_sprint_ip_addr(&sock->dst), dst_port);
5136+
snprintk(cmd_cfg, sizeof(cmd_cfg), "AT+KTCPCFG=%d,%d,\"%s\",%u,,,,%d", 1, 0,
5137+
hl7800_sprint_ip_addr(&sock->dst), dst_port, af);
51395138
ret = send_at_cmd(sock, cmd_cfg, MDM_CMD_SEND_TIMEOUT, 0, false);
51405139
if (ret < 0) {
51415140
LOG_ERR("AT+KTCPCFG ret:%d", ret);
@@ -5158,12 +5157,22 @@ static int configure_TCP_socket(struct hl7800_socket *sock)
51585157
static int configure_UDP_socket(struct hl7800_socket *sock)
51595158
{
51605159
int ret = 0;
5160+
char cmd[sizeof("AT+KUDPCFG=1,0,,,,,0")];
5161+
int af;
51615162

51625163
/* socket # needs assigning */
51635164
sock->socket_id = MDM_MAX_SOCKETS + 1;
51645165

5165-
ret = send_at_cmd(sock, "AT+KUDPCFG=1,0", MDM_CMD_SEND_TIMEOUT, 0,
5166-
false);
5166+
if (sock->family == AF_INET) {
5167+
af = MDM_HL7800_SOCKET_AF_IPV4;
5168+
} else if (sock->family == AF_INET6) {
5169+
af = MDM_HL7800_SOCKET_AF_IPV6;
5170+
} else {
5171+
return -EINVAL;
5172+
}
5173+
5174+
snprintk(cmd, sizeof(cmd), "AT+KUDPCFG=1,0,,,,,%d", af);
5175+
ret = send_at_cmd(sock, cmd, MDM_CMD_SEND_TIMEOUT, 0, false);
51675176
if (ret < 0) {
51685177
LOG_ERR("AT+KUDPCFG ret:%d", ret);
51695178
goto done;

0 commit comments

Comments
 (0)