Andrew,

Thanks! 

Probably there is a bug in my GLDv3 driver and are not handling chained mblks 
correctly. I think FTP uses TCP protocol, doesn't it? When I use "FTP" from the 
Linux machine to get a big file from Solaris and I use Wireshark on Linux 
machine to check incoming packets, I didn't see any bad packet. 

Is there any problem in my TX code? I use similar routines that have been 
generally used by quite a lot of OpenSolaris drivers, like bge_m_tx( ), 
bge_send_copy( ); rge_m_tx() and rge_send_copy( ).

static mblk_t * qla_m_tx(void *arg, mblk_t *mp)
{
                ..........
        mp_head = mp;

        /*we must try to send all*/
        while(mp != NULL)
        {
                next = mp->b_next;
                mp->b_next=NULL;
                rval = qla_send_common(ha, mp,0);
                
                if(rval != DDI_SUCCESS)
                {
                        mp->b_next=next;
                        break;
                }
                mp = next;
        }
exit:
   return mp;                                   
}

static int qla_send_common(adapter_state_t *ha, mblk_t *mp,uint32_t vtag)
{
                ................
        tx_cb = &ha->tx_buf[ha->req_producer_index] ;//get a available TX buffer
                bp = tx_cb->dma_mem_area.virt_addr;//pointer to the TX buffer

        /*Copy up to max_pkt of the tx data from mp to tx buffer*/
        for (tp = mp; tp != NULL; tp = tp->b_cont) 
        {
                nbyte = tp->b_wptr - tp->b_rptr;
                if((off+nbyte)<max_pkt)
                {
                        bcopy(tp->b_rptr, &bp[off], nbyte);
                        off += nbyte;
                        nMsg++;
                }
        }
               //Trigger hardware to send packet in TX buffer 
               ........
}
I am very new to GLDv3 driver. I am especially not confident in the 
qla_send_common( ) function which copies only up to TX buffer size data from mp 
to TX buffer and send it. What if the incoming data is more than TX buffer 
size? like this one 0x112c (4396 bytes)packet which is bigger than mtu (1514 
bytes)? Why other OpenSolaris drivers do not care about this? Is this a concern 
only in drivers supporting LSO? 


Tom
 
 
This message posted from opensolaris.org
_______________________________________________
networking-discuss mailing list
[email protected]

Reply via email to