Need support on TCP/IP packet transmission

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

Need support on TCP/IP packet transmission

praveenkumar raavi

Hi Everyone,

 

we are using LWIP 2.0.3 for one of our project to establish the TCP connection from ECU and Atmel micro.
We got the LWIP from Atmel itself and I have modified little to support VLAN data receive and transmit.

 

But now we are seeing some issue during data transmission.
When the ECU goes to sleep, it cut down the Ethernet link and when it wakes up it will establish the Ethernet connection.
But here when the ECU wakes up the communication is not going well from our LWIP stack. We are seeing multiple re transmissions which are causing issues in data transmission.

So we planned to reinitialize the LWIP stack after ECU goes to sleep.
But when I do shut down the connection, the connection is not closing as there is no FIN request response from ECU and its getting stuck in tcp_slow timer.
Also I have seen new behavior like when i received new frame on TCP, I am trying to ACK back using ACK now function(pcb->prio = TCP_PRIO_MAX; tcp_send_empty_ack(pcb);  tcp_output(pcb);), but I am seeing the ACK packet transmitted after my data packet is been transferred.
This I didn't understand like why the ACK packet is transferred after data packet? this is also one of the reason for us to see communication failure.

I am attaching the images for our communication issues.
Here LWIP_IP: 192.168.6.182
     ECU IP : 192.168.6.144
If you see LWIP_TCP_DataSentoutFirst.JPG, the data is send first and ACK is sent after that even though the ACK transmission is initiated first with priority level set to MAX.

Please let us know how to solve this issue.

 

I am adding following steps during lwip init.

TCPIP_STACK_INTERFACE_0_init(st_ETH_ConfigStruct.u8_SourceMacAddress, Src_IP, gw);         

netif_set_up(&TCPIP_STACK_INTERFACE_0_desc);

netif_set_default(&TCPIP_STACK_INTERFACE_0_desc);

mac_async_enable(&MACIF);

etharp_add_static_entry(&Dest_IP, (struct eth_addr *)&st_ETH_ConfigStruct.u8_DestMacAddress[0]);

pcb_tcp = tcp_new();

error = tcp_bind(pcb_tcp, &address, st_ETH_ConfigStruct.u16_SourcePortNum);

pcb_tcp = tcp_listen(pcb_tcp);

tcp_accept(pcb_tcp, Etherdo_connected);

 

After link established, below functions are used to do data transfer.

 

tcp_write(pcb_tcp,u8_DataBuff,u16_DataLen,TCP_WRITE_FLAG_MORE);

tcp_output(pcb_tcp));

 

This is how I initialized LWIP stack and transmitting data over ethernet. Here I have used static MAC address as we should connect to particular MAC address.


Regards,

PraveenKumar.


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

LWIP_TCP_DataSentoutFirst.JPG (166K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Need support on TCP/IP packet transmission

praveenkumar raavi
Hi,

Any update on my query...

Regards,
PraveenKumar.

On Thu, 13 Feb 2020, 09:54 praveenkumar raavi, <[hidden email]> wrote:

Hi Everyone,

 

we are using LWIP 2.0.3 for one of our project to establish the TCP connection from ECU and Atmel micro.
We got the LWIP from Atmel itself and I have modified little to support VLAN data receive and transmit.

 

But now we are seeing some issue during data transmission.
When the ECU goes to sleep, it cut down the Ethernet link and when it wakes up it will establish the Ethernet connection.
But here when the ECU wakes up the communication is not going well from our LWIP stack. We are seeing multiple re transmissions which are causing issues in data transmission.

So we planned to reinitialize the LWIP stack after ECU goes to sleep.
But when I do shut down the connection, the connection is not closing as there is no FIN request response from ECU and its getting stuck in tcp_slow timer.
Also I have seen new behavior like when i received new frame on TCP, I am trying to ACK back using ACK now function(pcb->prio = TCP_PRIO_MAX; tcp_send_empty_ack(pcb);  tcp_output(pcb);), but I am seeing the ACK packet transmitted after my data packet is been transferred.
This I didn't understand like why the ACK packet is transferred after data packet? this is also one of the reason for us to see communication failure.

I am attaching the images for our communication issues.
Here LWIP_IP: 192.168.6.182
     ECU IP : 192.168.6.144
If you see LWIP_TCP_DataSentoutFirst.JPG, the data is send first and ACK is sent after that even though the ACK transmission is initiated first with priority level set to MAX.

Please let us know how to solve this issue.

 

I am adding following steps during lwip init.

TCPIP_STACK_INTERFACE_0_init(st_ETH_ConfigStruct.u8_SourceMacAddress, Src_IP, gw);         

netif_set_up(&TCPIP_STACK_INTERFACE_0_desc);

netif_set_default(&TCPIP_STACK_INTERFACE_0_desc);

mac_async_enable(&MACIF);

etharp_add_static_entry(&Dest_IP, (struct eth_addr *)&st_ETH_ConfigStruct.u8_DestMacAddress[0]);

pcb_tcp = tcp_new();

error = tcp_bind(pcb_tcp, &address, st_ETH_ConfigStruct.u16_SourcePortNum);

pcb_tcp = tcp_listen(pcb_tcp);

tcp_accept(pcb_tcp, Etherdo_connected);

 

After link established, below functions are used to do data transfer.

 

tcp_write(pcb_tcp,u8_DataBuff,u16_DataLen,TCP_WRITE_FLAG_MORE);

tcp_output(pcb_tcp));

 

This is how I initialized LWIP stack and transmitting data over ethernet. Here I have used static MAC address as we should connect to particular MAC address.


Regards,

PraveenKumar.


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

Re: Need support on TCP/IP packet transmission

goldsimon@gmx.de


Am 20. Februar 2020 15:23:55 MEZ schrieb praveenkumar raavi <[hidden email]>:
>Hi,
>
>Any update on my query...

I'm not sure I even understand what your actual problem is. But being stuck in the timer function surely sounds like a threading problem...

Regards,
Simon

>
>Regards,
>PraveenKumar.
>
>On Thu, 13 Feb 2020, 09:54 praveenkumar raavi,
><[hidden email]>
>wrote:
>
>> Hi Everyone,
>>
>>
>>
>> we are using LWIP 2.0.3 for one of our project to establish the TCP
>> connection from ECU and Atmel micro.
>> We got the LWIP from Atmel itself and I have modified little to
>support
>> VLAN data receive and transmit.
>>
>>
>>
>> But now we are seeing some issue during data transmission.
>> When the ECU goes to sleep, it cut down the Ethernet link and when it
>> wakes up it will establish the Ethernet connection.
>> But here when the ECU wakes up the communication is not going well
>from
>> our LWIP stack. We are seeing multiple re transmissions which are
>causing
>> issues in data transmission.
>>
>> So we planned to reinitialize the LWIP stack after ECU goes to sleep.
>> But when I do shut down the connection, the connection is not closing
>as
>> there is no FIN request response from ECU and its getting stuck in
>tcp_slow
>> timer.
>> Also I have seen new behavior like when i received new frame on TCP,
>I am
>> trying to ACK back using ACK now function(pcb->prio = TCP_PRIO_MAX;
>> tcp_send_empty_ack(pcb);  tcp_output(pcb);), but I am seeing the ACK
>> packet transmitted after my data packet is been transferred.
>> This I didn't understand like why the ACK packet is transferred after
>data
>> packet? this is also one of the reason for us to see communication
>failure.
>>
>> I am attaching the images for our communication issues.
>> Here LWIP_IP: 192.168.6.182
>>      ECU IP : 192.168.6.144
>> If you see LWIP_TCP_DataSentoutFirst.JPG, the data is send first and
>ACK
>> is sent after that even though the ACK transmission is initiated
>first with
>> priority level set to MAX.
>>
>> Please let us know how to solve this issue.
>>
>>
>>
>> I am adding following steps during lwip init.
>>
>> TCPIP_STACK_INTERFACE_0_init(st_ETH_ConfigStruct.u8_SourceMacAddress,
>> Src_IP, gw);
>>
>> netif_set_up(&TCPIP_STACK_INTERFACE_0_desc);
>>
>> netif_set_default(&TCPIP_STACK_INTERFACE_0_desc);
>>
>> mac_async_enable(&MACIF);
>>
>> etharp_add_static_entry(&Dest_IP, (struct eth_addr
>> *)&st_ETH_ConfigStruct.u8_DestMacAddress[0]);
>>
>> pcb_tcp = tcp_new();
>>
>> error = tcp_bind(pcb_tcp, &address,
>st_ETH_ConfigStruct.u16_SourcePortNum);
>>
>> pcb_tcp = tcp_listen(pcb_tcp);
>>
>> tcp_accept(pcb_tcp, Etherdo_connected);
>>
>>
>>
>> After link established, below functions are used to do data transfer.
>>
>>
>>
>> tcp_write(pcb_tcp,u8_DataBuff,u16_DataLen,TCP_WRITE_FLAG_MORE);
>>
>> tcp_output(pcb_tcp));
>>
>>
>>
>> This is how I initialized LWIP stack and transmitting data over
>ethernet.
>> Here I have used static MAC address as we should connect to
>particular MAC
>> address.
>>
>>
>> Regards,
>>
>> PraveenKumar.
>>

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