net/devif_send: replace all block send to nonblock mode

Signed-off-by: chao an <anchao@xiaomi.com>
This commit is contained in:
chao an
2022-12-07 17:44:09 +08:00
committed by Petro Karashchenko
parent c44f87eb1a
commit 11de08de27
9 changed files with 82 additions and 11 deletions
+5
View File
@@ -107,6 +107,11 @@ static uint16_t psock_send_eventhandler(FAR struct net_driver_s *dev,
/* Copy the packet data into the device packet buffer and send it */
devif_can_send(dev, pstate->snd_buffer, pstate->snd_buflen);
if (dev->d_sndlen == 0)
{
return flags;
}
pstate->snd_sent = pstate->snd_buflen;
if (pstate->pr_msglen > 0) /* concat cmsg data after packet */
{
+16 -3
View File
@@ -70,9 +70,22 @@ void devif_can_send(FAR struct net_driver_s *dev, FAR const void *buf,
* bytes to send
*/
dev->d_sndlen = iob_copyin(dev->d_iob, buf, len, 0, false) == len ?
len : 0;
dev->d_len = dev->d_sndlen;
if (len <= iob_navail(false) * CONFIG_IOB_BUFSIZE)
{
dev->d_sndlen = iob_trycopyin(dev->d_iob, buf, len, 0, false);
}
else
{
dev->d_sndlen = 0;
}
if (dev->d_sndlen != len)
{
netdev_iob_release(dev);
dev->d_sndlen = 0;
}
dev->d_len = dev->d_sndlen;
}
#endif /* CONFIG_NET_CAN */
+9 -3
View File
@@ -77,6 +77,12 @@ void devif_iob_send(FAR struct net_driver_s *dev, FAR struct iob_s *iob,
if (dev->d_iob != NULL)
{
if (len > iob_navail(false) * CONFIG_IOB_BUFSIZE)
{
dev->d_sndlen = 0;
return;
}
/* Skip the l3/l4 offset before append */
iob_update_pktlen(dev->d_iob, target_offset);
@@ -98,9 +104,9 @@ void devif_iob_send(FAR struct net_driver_s *dev, FAR struct iob_s *iob,
copyin = (len > iob->io_len - offset) ?
iob->io_len - offset : len;
ret = iob_copyin(dev->d_iob, iob->io_data +
iob->io_offset + offset,
copyin, target_offset, false);
ret = iob_trycopyin(dev->d_iob, iob->io_data +
iob->io_offset + offset,
copyin, target_offset, false);
if (ret != copyin)
{
netdev_iob_release(dev);
+16 -3
View File
@@ -70,9 +70,22 @@ void devif_pkt_send(FAR struct net_driver_s *dev, FAR const void *buf,
* bytes to send
*/
dev->d_sndlen = iob_copyin(dev->d_iob, buf, len, 0, false) == len ?
len : 0;
dev->d_len = dev->d_sndlen;
if (len <= iob_navail(false) * CONFIG_IOB_BUFSIZE)
{
dev->d_sndlen = iob_trycopyin(dev->d_iob, buf, len, 0, false);
}
else
{
dev->d_sndlen = 0;
}
if (dev->d_sndlen != len)
{
netdev_iob_release(dev);
dev->d_sndlen = 0;
}
dev->d_len = dev->d_sndlen;
}
#endif /* CONFIG_NET_PKT */
+14 -2
View File
@@ -82,6 +82,18 @@ void devif_send(FAR struct net_driver_s *dev, FAR const void *buf,
/* Copy in iob to target device buffer */
dev->d_sndlen = iob_copyin(dev->d_iob, buf, len, offset, false) == len ?
len : 0;
if (len <= iob_navail(false) * CONFIG_IOB_BUFSIZE)
{
dev->d_sndlen = iob_trycopyin(dev->d_iob, buf, len, offset, false);
}
else
{
dev->d_sndlen = 0;
}
if (dev->d_sndlen != len)
{
netdev_iob_release(dev);
dev->d_sndlen = 0;
}
}
+5
View File
@@ -106,6 +106,11 @@ static uint16_t psock_send_eventhandler(FAR struct net_driver_s *dev,
/* Copy the packet data into the device packet buffer and send it */
devif_pkt_send(dev, pstate->snd_buffer, pstate->snd_buflen);
if (dev->d_sndlen == 0)
{
return flags;
}
pstate->snd_sent = pstate->snd_buflen;
/* Make sure no ARP request overwrites this ARP request. This
+8
View File
@@ -598,6 +598,10 @@ static uint16_t psock_send_eventhandler(FAR struct net_driver_s *dev,
devif_iob_send(dev, TCP_WBIOB(wrb), sndlen,
0, tcpip_hdrsize(conn));
if (dev->d_sndlen == 0)
{
return flags;
}
/* Reset the retransmission timer. */
@@ -885,6 +889,10 @@ static uint16_t psock_send_eventhandler(FAR struct net_driver_s *dev,
devif_iob_send(dev, TCP_WBIOB(wrb), sndlen,
TCP_WBSENT(wrb), tcpip_hdrsize(conn));
if (dev->d_sndlen == 0)
{
return flags;
}
/* Remember how much data we send out now so that we know
* when everything has been acknowledged. Just increment
+4
View File
@@ -410,6 +410,10 @@ static uint16_t tcpsend_eventhandler(FAR struct net_driver_s *dev,
devif_send(dev, &pstate->snd_buffer[pstate->snd_sent],
sndlen, tcpip_hdrsize(conn));
if (dev->d_sndlen == 0)
{
return flags;
}
/* Update the amount of data sent (but not necessarily ACKed) */
+5
View File
@@ -206,6 +206,11 @@ static uint16_t sendto_eventhandler(FAR struct net_driver_s *dev,
devif_send(dev, pstate->st_buffer,
pstate->st_buflen, udpip_hdrsize(pstate->st_conn));
if (dev->d_sndlen == 0)
{
return flags;
}
pstate->st_sndlen = pstate->st_buflen;
}