LOCAL int _roboTx(M_BLK_ID pMblk) { char zd[] = {0,0,0,0,0,0}; #ifdef ROBO_TXRX_DEBUG if (robo_txrx_debug & ROBO_TXRX_DEBUG_F) { logMsg("Sending a packet %08x\n", (int)pMblk, 2, 3, 4, 5, 6); robo_txrx_print_packet(pMblk); } #endif if (muxTkSend( robo_txrx_info.roboMuxBindID, pMblk, zd, 0x0806, 0) == ERROR) { logMsg("muxTkSend failed \n", 1, 2, 3, 4, 5, 6); netMblkClChainFree(pMblk); robo_txrx_info.tx_fail++; return(0); } robo_txrx_info.tx_cnt++; return(1); }
STATUS wdbEndTx ( void * pDev, struct mbuf * pMbuf ) { WDB_END_PKT_DEV *pPktDev = pDev; struct mbuf* pFirstMbuf = pMbuf; #ifdef WDB_NPT_CAPABLE int sendStatus = 0; char * dstMacAddr = NULL; #else int len = 0; #endif WDB_NPT_CAPABLE if (wdbEndDebug) logMsg ("entering send\n", 1, 2, 3, 4, 5, 6); if (pMbuf == NULL) return (ERROR); if (pPktDev->outputBusy) { wdbMbufChainFree (pFirstMbuf); return (EAGAIN); } else pPktDev->outputBusy = TRUE; if (wdbEndDebug) logMsg ("About to enter the copy loop!\n", 1, 2, 3, 4, 5, 6); /* Make sure we know that the outgoing buffer is clean/empty */ pPktDev->pOutBlk->mBlkHdr.mLen = 0; pPktDev->pOutBlk->mBlkHdr.mData = pPktDev->pOutBlk->pClBlk->clNode.pClBuf; /* increment the data pointer so that muxAddressForm can prepend header */ pPktDev->pOutBlk->mBlkHdr.mData += SIZEOF_ETHERHEADER; #ifndef WDB_NPT_CAPABLE /* First place the addressing information into the packet. */ muxAddressForm (pPktDev->pCookie, pPktDev->pOutBlk, pPktDev->srcAddr, pPktDev->lastHAddr); len = pPktDev->pOutBlk->mBlkHdr.mLen; if (wdbEndDebug) logMsg ("About to check length!\n", 1, 2, 3, 4, 5, 6); if (len == 0) { wdbMbufChainFree (pFirstMbuf); pPktDev->outputBusy = FALSE; if (wdbEndDebug) logMsg ("Wrong length!\n", 1, 2, 3, 4, 5, 6); return (EAGAIN); } if (wdbEndDebug) logMsg ("hdr length:%d\n", len, 2, 3, 4, 5, 6); pPktDev->pOutBlk->mBlkHdr.mLen = len + netMblkToBufCopy (pMbuf, pPktDev->pOutBlk->mBlkHdr.mData + len, NULL); pPktDev->pOutBlk->mBlkPktHdr.len = pPktDev->pOutBlk->mBlkHdr.mLen; if (wdbEndDebug) logMsg ("OutBlk: %x:%x:%x:%x:%x:%x\n", pPktDev->pOutBlk->mBlkHdr.mData[0], pPktDev->pOutBlk->mBlkHdr.mData[1], pPktDev->pOutBlk->mBlkHdr.mData[2], pPktDev->pOutBlk->mBlkHdr.mData[3], pPktDev->pOutBlk->mBlkHdr.mData[4], pPktDev->pOutBlk->mBlkHdr.mData[5]); #else pPktDev->pOutBlk->mBlkHdr.mLen = netMblkToBufCopy (pMbuf, pPktDev->pOutBlk->mBlkHdr.mData, NULL); pPktDev->pOutBlk->mBlkPktHdr.len = pPktDev->pOutBlk->mBlkHdr.mLen; #endif /* WDB_NPT_CAPABLE */ if (wdbEndDebug) logMsg ("Data copied !\n", 1, 2, 3, 4, 5, 6); wdbMbufChainFree (pFirstMbuf); if (wdbEndDebug) logMsg ("About to send a packet!\n", 1, 2, 3, 4, 5, 6); #ifdef WDB_NPT_CAPABLE dstMacAddr = pPktDev->lastHAddr->mBlkHdr.mData; #endif /* WDB_NPT_CAPABLE */ #ifndef STANDALONE_AGENT /* if we are in polled mode, transmit the packet in a loop */ if (pPktDev->mode == WDB_COMM_MODE_POLL) { #ifndef WDB_NPT_CAPABLE muxPollSend (pPktDev->pCookie, pPktDev->pOutBlk); #else sendStatus = muxTkPollSend (pPktDev->pCookie, pPktDev->pOutBlk, dstMacAddr, htons(ETHERTYPE_IP), NULL); if (sendStatus != OK) { pPktDev->outputBusy = FALSE; if (wdbEndDebug) logMsg ("Wrong length!\n", 1, 2, 3, 4, 5, 6); return (EAGAIN); } #endif /* WDB_NPT_CAPABLE */ if (wdbEndDebug) logMsg ("Sent polled packet!\n", 1, 2, 3, 4, 5, 6); } else { #ifndef WDB_NPT_CAPABLE if (muxSend (pPktDev->pCookie, pPktDev->pOutBlk) == OK) #else if (muxTkSend (pPktDev->pCookie, pPktDev->pOutBlk, dstMacAddr, htons(ETHERTYPE_IP), NULL) == OK) #endif /* WDB_NPT_CAPABLE */ { END_OBJ * pEnd; if (wdbEndDebug) logMsg ("Sent regular packet!\n", 1, 2, 3, 4, 5, 6); /*pEnd = (END_OBJ *)pPktDev->pCookie;*/ pEnd = PCOOKIE_TO_ENDOBJ(pPktDev->pCookie); if ((pPktDev->pOutBlk = wdbEndMblkClGet (pEnd, pEnd->mib2Tbl.ifMtu)) == NULL) return (ERROR); pPktDev->pOutBlk->mBlkHdr.mFlags |= M_PKTHDR; } else { if (wdbEndDebug) logMsg ("Could not send regular packet!\n", 1, 2, 3, 4, 5, 6); } } #else /* STANDALONE_AGENT */ if (muxPollSend (pPktDev->pCookie, pPktDev->pOutBlk) == ERROR) { if (wdbEndDebug); logMsg ("Could not send regular packet!\n", 1, 2, 3, 4, 5, 6); } else { if (wdbEndDebug) logMsg ("Sent polled packet!\n", 1, 2, 3, 4, 5, 6); } #endif /* STANDALONE_AGENT */ wdbEndOutputFree (pPktDev); return (OK); }