mirror of
https://github.com/apache/nuttx.git
synced 2026-05-25 01:39:44 +08:00
6LoWPAN TCP: Major re-architecting of TCP logic to properly handle TCP stuf like ACKs and TPC windowing which were not properly covered in the initial design. Still does not work; hangs waiting of ACKs.
This commit is contained in:
@@ -40,15 +40,14 @@ ifeq ($(CONFIG_NET_6LOWPAN),y)
|
||||
# Include IEEE 802.15.4 file in the build
|
||||
|
||||
NET_CSRCS += sixlowpan_initialize.c sixlowpan_globals.c sixlowpan_utils.c
|
||||
NET_CSRCS += sixlowpan_input.c sixlowpan_send.c sixlowpan_framer.c
|
||||
NET_CSRCS += sixlowpan_framelist.c
|
||||
NET_CSRCS += sixlowpan_input.c sixlowpan_framer.c sixlowpan_framelist.c
|
||||
|
||||
ifeq ($(CONFIG_NET_TCP),y)
|
||||
NET_CSRCS += sixlowpan_tcpsend.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_NET_UDP),y)
|
||||
NET_CSRCS += sixlowpan_udpsend.c
|
||||
NET_CSRCS += sixlowpan_udpsend.c sixlowpan_send.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_NET_6LOWPAN_COMPRESSION_HC1),y)
|
||||
|
||||
@@ -226,9 +226,9 @@ struct iob_s; /* Forward reference */
|
||||
* Name: sixlowpan_send
|
||||
*
|
||||
* Description:
|
||||
* Process an outgoing UDP or TCP packet. Takes an IP packet and formats
|
||||
* Process an outgoing UDP or ICMPv6 packet. Takes an IP packet and formats
|
||||
* it to be sent on an 802.15.4 network using 6lowpan. Called from common
|
||||
* UDP/TCP send logic.
|
||||
* UDP/ICMPv6 send logic.
|
||||
*
|
||||
* The payload data is in the caller 'buf' and is of length 'buflen'.
|
||||
* Compressed headers will be added and if necessary the packet is
|
||||
@@ -238,16 +238,16 @@ struct iob_s; /* Forward reference */
|
||||
* Input Parameters:
|
||||
* dev - The IEEE802.15.4 MAC network driver interface.
|
||||
* list - Head of callback list for send interrupt
|
||||
* ipv6hdr - IPv6 plus TCP or UDP headers.
|
||||
* ipv6hdr - IPv6 header followed by UDP or ICMPv6 header.
|
||||
* buf - Data to send
|
||||
* len - Length of data to send
|
||||
* raddr - The MAC address of the destination
|
||||
* destmac - The IEEE802.15.4 MAC address of the destination
|
||||
* timeout - Send timeout in deciseconds
|
||||
*
|
||||
* Returned Value:
|
||||
* Ok is returned on success; Othewise a negated errno value is returned.
|
||||
* This function is expected to fail if the driver is not an IEEE802.15.4
|
||||
* MAC network driver. In that case, the UDP/TCP will fall back to normal
|
||||
* MAC network driver. In that case, the logic will fall back to normal
|
||||
* IPv4/IPv6 formatting.
|
||||
*
|
||||
* Assumptions:
|
||||
|
||||
@@ -82,7 +82,7 @@ struct sixlowpan_send_s
|
||||
int s_result; /* The result of the transfer */
|
||||
uint16_t s_timeout; /* Send timeout in deciseconds */
|
||||
systime_t s_time; /* Last send time for determining timeout */
|
||||
FAR const struct ipv6_hdr_s *s_ipv6hdr; /* IPv6 header, followed by UDP or TCP header. */
|
||||
FAR const struct ipv6_hdr_s *s_ipv6hdr; /* IPv6 header, followed by UDP or ICMP header. */
|
||||
FAR const struct sixlowpan_tagaddr_s *s_destmac; /* Destination MAC address */
|
||||
FAR const void *s_buf; /* Data to send */
|
||||
size_t s_len; /* Length of data in buf */
|
||||
@@ -242,9 +242,9 @@ end_wait:
|
||||
* Name: sixlowpan_send
|
||||
*
|
||||
* Description:
|
||||
* Process an outgoing UDP or TCP packet. Takes an IP packet and formats
|
||||
* Process an outgoing UDP or ICMPv6 packet. Takes an IP packet and formats
|
||||
* it to be sent on an 802.15.4 network using 6lowpan. Called from common
|
||||
* UDP/TCP send logic.
|
||||
* UDP/ICMPv6 send logic.
|
||||
*
|
||||
* The payload data is in the caller 'buf' and is of length 'buflen'.
|
||||
* Compressed headers will be added and if necessary the packet is
|
||||
@@ -254,7 +254,7 @@ end_wait:
|
||||
* Input Parameters:
|
||||
* dev - The IEEE802.15.4 MAC network driver interface.
|
||||
* list - Head of callback list for send interrupt
|
||||
* ipv6hdr - IPv6 header followed by TCP or UDP header.
|
||||
* ipv6hdr - IPv6 header followed by UDP or ICMPv6 header.
|
||||
* buf - Data to send
|
||||
* len - Length of data to send
|
||||
* destmac - The IEEE802.15.4 MAC address of the destination
|
||||
@@ -263,7 +263,7 @@ end_wait:
|
||||
* Returned Value:
|
||||
* Ok is returned on success; Othewise a negated errno value is returned.
|
||||
* This function is expected to fail if the driver is not an IEEE802.15.4
|
||||
* MAC network driver. In that case, the UDP/TCP will fall back to normal
|
||||
* MAC network driver. In that case, the logic will fall back to normal
|
||||
* IPv4/IPv6 formatting.
|
||||
*
|
||||
* Assumptions:
|
||||
|
||||
+504
-120
File diff suppressed because it is too large
Load Diff
@@ -340,10 +340,10 @@ static uint16_t tcpsend_interrupt(FAR struct net_driver_s *dev,
|
||||
}
|
||||
#endif /* CONFIG_NET_IPv6 */
|
||||
|
||||
/* The current acknowledgement number number is the (relative) offset
|
||||
* of the of the next byte needed by the receiver. The snd_isn is the
|
||||
* offset of the first byte to send to the receiver. The difference
|
||||
* is the number of bytes to be acknowledged.
|
||||
/* The current acknowledgement number is the (relative) offset of the
|
||||
* next byte needed by the receiver. The snd_isn is the offset of the
|
||||
* first byte to send to the receiver. The difference is the number
|
||||
* of bytes to be acknowledged.
|
||||
*/
|
||||
|
||||
pstate->snd_acked = tcp_getsequence(tcp->ackno) - pstate->snd_isn;
|
||||
|
||||
Reference in New Issue
Block a user