MQTT client: TCP retransmission problem

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

MQTT client: TCP retransmission problem

Reaster
Hi,
I've implemented lwIP on following hardware:
CC1312R (ARM Cortex M4F) - TI Launchpad Board, 
lwIP 2.1 in operation system mode (TI-RTOS), 
ENC28J60 MAC+PHY.

My lwIP MQTT client (the one which comes with the stack) succesfully connects to the broker and can both publish and subscribe.
At this moment I'm testing only publishing (one publish per second) - the messages are published without problem for some time (one time it is about 50 publish packets, one time 300), then the communication stops.

I've recorded packets using Wireshark (with MQTT and TCP filters). IP 192.168.1.171 is lwIP, 54.76.137.235 is broker IP.
What I can observe is that lwIP somehow can't handle TCP retransmission packets properly. 
I don't have any messages about too small memory or assertions before communication stops.
What can I do more to solve my problem? Did you see something like that?

I'm attaching .pcap file with described problem (at the end of file).

Regards,
Paweł

_______________________________________________
lwip-users mailing list
[hidden email]
https://lists.nongnu.org/mailman/listinfo/lwip-users

mqttCapture.pcapng (104K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: MQTT client: TCP retransmission problem

Jens Nielsen
Hi

Looks just like your driver stops receiving, did you check with a breakpoint that you're actually passing the correct received packets to lwip?

BR /Jens

On 2018-09-30 11:09, Paweł wrote:
Hi,
I've implemented lwIP on following hardware:
CC1312R (ARM Cortex M4F) - TI Launchpad Board, 
lwIP 2.1 in operation system mode (TI-RTOS), 
ENC28J60 MAC+PHY.

My lwIP MQTT client (the one which comes with the stack) succesfully connects to the broker and can both publish and subscribe.
At this moment I'm testing only publishing (one publish per second) - the messages are published without problem for some time (one time it is about 50 publish packets, one time 300), then the communication stops.

I've recorded packets using Wireshark (with MQTT and TCP filters). IP 192.168.1.171 is lwIP, 54.76.137.235 is broker IP.
What I can observe is that lwIP somehow can't handle TCP retransmission packets properly. 
I don't have any messages about too small memory or assertions before communication stops.
What can I do more to solve my problem? Did you see something like that?

I'm attaching .pcap file with described problem (at the end of file).

Regards,
Paweł


_______________________________________________
lwip-users mailing list
[hidden email]
https://lists.nongnu.org/mailman/listinfo/lwip-users


_______________________________________________
lwip-users mailing list
[hidden email]
https://lists.nongnu.org/mailman/listinfo/lwip-users
Reply | Threaded
Open this post in threaded view
|

Re: MQTT client: TCP retransmission problem

Reaster
Hi,
I looked closer at driver implementation and I have problems with interrupts - at one moment the interrupt isn't handled anymore. I temporarily worked it around but I'm facing next problems.
From time to time I'm getting a hardfault in tcp_out.c at useg = useg->next;. I realized that useg is null there, I looked through Internet and I found similiar problem (http://lwip.100.n7.nabble.com/lwIP-2-0-2-Crash-on-tcp-out-c-line-1148-TCP-SEQ-LT-EXC-BAD-ACCESS-td30707.html) - the reason was problem with threading.
What I'm wondering about is how to init MQTT and DHCP client in tcp_ip thread context. I will shortly describe my init sequence. First I start with tcpip_init with dedicated function to init apps (like in example_app in contrib) and semaphore. In this function I have netif configuration, dhcp_start and init MQTT client. I'm starting scheduler, so the tcpip_thread is starting. Thread calls function described earlier but DHCP will not assign an IP address because while loop in this thread is not antered at this time so I can't do MQTT connect at this time because I need IP address from DNS.
It's complicated to describe but summarizing - I have to call MQTT client connect in another thread. How to overcome that?


Regards,
Paweł

niedz., 30 wrz 2018 o 16:36 Jens Nielsen <[hidden email]> napisał(a):
Hi

Looks just like your driver stops receiving, did you check with a breakpoint that you're actually passing the correct received packets to lwip?

BR /Jens

On 2018-09-30 11:09, Paweł wrote:
Hi,
I've implemented lwIP on following hardware:
CC1312R (ARM Cortex M4F) - TI Launchpad Board, 
lwIP 2.1 in operation system mode (TI-RTOS), 
ENC28J60 MAC+PHY.

My lwIP MQTT client (the one which comes with the stack) succesfully connects to the broker and can both publish and subscribe.
At this moment I'm testing only publishing (one publish per second) - the messages are published without problem for some time (one time it is about 50 publish packets, one time 300), then the communication stops.

I've recorded packets using Wireshark (with MQTT and TCP filters). IP 192.168.1.171 is lwIP, 54.76.137.235 is broker IP.
What I can observe is that lwIP somehow can't handle TCP retransmission packets properly. 
I don't have any messages about too small memory or assertions before communication stops.
What can I do more to solve my problem? Did you see something like that?

I'm attaching .pcap file with described problem (at the end of file).

Regards,
Paweł


_______________________________________________
lwip-users mailing list
[hidden email]
https://lists.nongnu.org/mailman/listinfo/lwip-users

_______________________________________________
lwip-users mailing list
[hidden email]
https://lists.nongnu.org/mailman/listinfo/lwip-users

_______________________________________________
lwip-users mailing list
[hidden email]
https://lists.nongnu.org/mailman/listinfo/lwip-users
Reply | Threaded
Open this post in threaded view
|

Re: MQTT client: TCP retransmission problem

Richard Man
In my implementation using my own RTOS, I have a thread that does DHCP start (and reconnect as needed), and the MQTT Connect will wait until there is an IP address before proceeding.

On Wed, Oct 3, 2018 at 3:23 PM, Paweł <[hidden email]> wrote:
Hi,
I looked closer at driver implementation and I have problems with interrupts - at one moment the interrupt isn't handled anymore. I temporarily worked it around but I'm facing next problems.
From time to time I'm getting a hardfault in tcp_out.c at useg = useg->next;. I realized that useg is null there, I looked through Internet and I found similiar problem (http://lwip.100.n7.nabble.com/lwIP-2-0-2-Crash-on-tcp-out-c-line-1148-TCP-SEQ-LT-EXC-BAD-ACCESS-td30707.html) - the reason was problem with threading.
What I'm wondering about is how to init MQTT and DHCP client in tcp_ip thread context. I will shortly describe my init sequence. First I start with tcpip_init with dedicated function to init apps (like in example_app in contrib) and semaphore. In this function I have netif configuration, dhcp_start and init MQTT client. I'm starting scheduler, so the tcpip_thread is starting. Thread calls function described earlier but DHCP will not assign an IP address because while loop in this thread is not antered at this time so I can't do MQTT connect at this time because I need IP address from DNS.
It's complicated to describe but summarizing - I have to call MQTT client connect in another thread. How to overcome that?


Regards,
Paweł

niedz., 30 wrz 2018 o 16:36 Jens Nielsen <[hidden email]> napisał(a):
Hi

Looks just like your driver stops receiving, did you check with a breakpoint that you're actually passing the correct received packets to lwip?

BR /Jens

On 2018-09-30 11:09, Paweł wrote:
Hi,
I've implemented lwIP on following hardware:
CC1312R (ARM Cortex M4F) - TI Launchpad Board, 
lwIP 2.1 in operation system mode (TI-RTOS), 
ENC28J60 MAC+PHY.

My lwIP MQTT client (the one which comes with the stack) succesfully connects to the broker and can both publish and subscribe.
At this moment I'm testing only publishing (one publish per second) - the messages are published without problem for some time (one time it is about 50 publish packets, one time 300), then the communication stops.

I've recorded packets using Wireshark (with MQTT and TCP filters). IP 192.168.1.171 is lwIP, 54.76.137.235 is broker IP.
What I can observe is that lwIP somehow can't handle TCP retransmission packets properly. 
I don't have any messages about too small memory or assertions before communication stops.
What can I do more to solve my problem? Did you see something like that?

I'm attaching .pcap file with described problem (at the end of file).

Regards,
Paweł


_______________________________________________
lwip-users mailing list
[hidden email]
https://lists.nongnu.org/mailman/listinfo/lwip-users

_______________________________________________
lwip-users mailing list
[hidden email]
https://lists.nongnu.org/mailman/listinfo/lwip-users

_______________________________________________
lwip-users mailing list
[hidden email]
https://lists.nongnu.org/mailman/listinfo/lwip-users



--
// richard http://imagecraft.com
Beyond Arduino - When you're ready to get serious...
JumpStart C Tools for Atmel AVR and Cortex-M, The Better Alternative

_______________________________________________
lwip-users mailing list
[hidden email]
https://lists.nongnu.org/mailman/listinfo/lwip-users
Reply | Threaded
Open this post in threaded view
|

Re: MQTT client: TCP retransmission problem

Dirk Ziegelmeier-2
In reply to this post by Reaster
Did you also see this page?


-> section "OS Mode"

HTH
Dirk


On Thu, Oct 4, 2018 at 12:24 AM Paweł <[hidden email]> wrote:
Hi,
I looked closer at driver implementation and I have problems with interrupts - at one moment the interrupt isn't handled anymore. I temporarily worked it around but I'm facing next problems.
From time to time I'm getting a hardfault in tcp_out.c at useg = useg->next;. I realized that useg is null there, I looked through Internet and I found similiar problem (http://lwip.100.n7.nabble.com/lwIP-2-0-2-Crash-on-tcp-out-c-line-1148-TCP-SEQ-LT-EXC-BAD-ACCESS-td30707.html) - the reason was problem with threading.
What I'm wondering about is how to init MQTT and DHCP client in tcp_ip thread context. I will shortly describe my init sequence. First I start with tcpip_init with dedicated function to init apps (like in example_app in contrib) and semaphore. In this function I have netif configuration, dhcp_start and init MQTT client. I'm starting scheduler, so the tcpip_thread is starting. Thread calls function described earlier but DHCP will not assign an IP address because while loop in this thread is not antered at this time so I can't do MQTT connect at this time because I need IP address from DNS.
It's complicated to describe but summarizing - I have to call MQTT client connect in another thread. How to overcome that?


Regards,
Paweł

niedz., 30 wrz 2018 o 16:36 Jens Nielsen <[hidden email]> napisał(a):
Hi

Looks just like your driver stops receiving, did you check with a breakpoint that you're actually passing the correct received packets to lwip?

BR /Jens

On 2018-09-30 11:09, Paweł wrote:
Hi,
I've implemented lwIP on following hardware:
CC1312R (ARM Cortex M4F) - TI Launchpad Board, 
lwIP 2.1 in operation system mode (TI-RTOS), 
ENC28J60 MAC+PHY.

My lwIP MQTT client (the one which comes with the stack) succesfully connects to the broker and can both publish and subscribe.
At this moment I'm testing only publishing (one publish per second) - the messages are published without problem for some time (one time it is about 50 publish packets, one time 300), then the communication stops.

I've recorded packets using Wireshark (with MQTT and TCP filters). IP 192.168.1.171 is lwIP, 54.76.137.235 is broker IP.
What I can observe is that lwIP somehow can't handle TCP retransmission packets properly. 
I don't have any messages about too small memory or assertions before communication stops.
What can I do more to solve my problem? Did you see something like that?

I'm attaching .pcap file with described problem (at the end of file).

Regards,
Paweł


_______________________________________________
lwip-users mailing list
[hidden email]
https://lists.nongnu.org/mailman/listinfo/lwip-users

_______________________________________________
lwip-users mailing list
[hidden email]
https://lists.nongnu.org/mailman/listinfo/lwip-users
_______________________________________________
lwip-users mailing list
[hidden email]
https://lists.nongnu.org/mailman/listinfo/lwip-users

_______________________________________________
lwip-users mailing list
[hidden email]
https://lists.nongnu.org/mailman/listinfo/lwip-users