You didn't say from where you call the SendDiagnoseMessage() function (i.e. which thread). Most often, things like checksum corruption (or corruption of linked lists etc.) result from multiple threads being active in the lwIP code at the same time. You should make sure that this is not the case by using tcpip_callback() when another thread wants to execute SendDiagnoseMessage() (this makes sure the function runs in the correct thread context).

Simon


Steffen schrieb:
[..]
void SendDiagnoseMessage(u08 source_address, u08 destination_address, u08 *message, u16 length)
{

 struct ETH_Diagnose_Struct *hs_send_diagnose_message;
 struct tcp_pcb *apcbs = tcp_active_pcbs;
 u32 i=0;

 while (apcbs != NULL)
 {
         if (apcbs->local_port == DIAGNOSE_TCP_PORT)
         {
             hs_send_diagnose_message = apcbs->callback_arg;

             if (hs_send_diagnose_message->file == NULL  )
             {

                 /* build tcp_diag_response_header */
                 DiagResponseHeader->len = (u32)length + DIAG_ADDRESS_LEN;
                 DiagResponseHeader->ctrl_word = DIAG_RESP_CW;
                 DiagResponseHeader->source = source_address;
                 DiagResponseHeader->target = destination_address;

                 /* copy payload */
                 for(i=0; i < length; i++)
                 {
                     diag_buf[i+ HEADER_LEN + DIAG_ADDRESS_LEN] = *message;
                     message++;
                 }


                 hs_send_diagnose_message->file = (u08*)&diag_buf;
hs_send_diagnose_message->left = length + HEADER_LEN + DIAG_ADDRESS_LEN;

                 if(hs_send_diagnose_message->left >0)
                 {
                     tcp_send_data_diag(apcbs, hs_send_diagnose_message);
                     tcp_sent(apcbs, tcp_sent_diag);
                 }
             }
             break;
         }
         apcbs = apcbs->next;
 }
}



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




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

Reply via email to