We apologize for a lengthy post, but want to convey our trials for
better understanding of the problem we are facing.

We have a requirement to send and receive raw ethernet frames in
VxWorks. We are using version 5.5.1. We are aware of etherOutput(),
but even that doesn't works in our device. We tried sending a
gratituous ARP through etherOutput(), but couldn't capture this packet
using Ethereal. But the ping from our device to other hosts are
captured. Also even if etherOutput works, it may not be efficient for
us as we feel that we may have to scan/parse each and every received
raw ethernet packet for picking the selective ones. In short, there
will not be any Selective Reception of the packet types.

We searched in the net and we got muxSend() as the alternative. So we
tried using muxBind,muxSend() routines. The problem we are facing here
is muxSend is successful, but we are not able see frames in Ethereal.

We are not sure of how to fill the source and destination MAC
addresses in the pSrcAddr and pDstAddr M_BLK_ID structures. Below is
our implementation of eth_send_pkt(). If anyone knows how to use
muxAddressForm() and do muxSend(), please post it to this group.

The requirement is very urgent

void eth_ppc_send_pkt()

STATUS result;

pSrcAddr->mBlkHdr.mData = (char*)SourceEthernetAddress;
pSrcAddr->mBlkHdr.mLen = 6;

pDestAddr->mBlkHdr.mData = (char*)DestEthernetAddress;
pDestAddr->mBlkHdr.mLen = 6;
pDestAddr->mBlkHdr.reserved = 0x9000;

//pNBuff = muxAddressForm(pcookie, pMblk, pSrcAddr, pDestAddr);
pNBuff = muxAddressForm(pcookie, NULL, pSrcAddr, pDestAddr);
if (pNBuff == NULL) {
DBG("ETH_PPC: muxAddressForm failed!!!\n");

pNBuff->mBlkHdr.mData = "Hello World";
pNBuff.mLen = 12;

result= muxSend(pcookie, pNBuff);
if(result == OK) {
DBG("ETH_PPC: muxSend succeeded !!!\n");
if (result == END_ERR_BLOCK) {
DBG("ETH_PPC: muxSend failed - END_ERR_BLOCK!!!\n");
if (result == ERROR) {
DBG("ETH_PPC: muxSend failed - ERROR!!\n");
if (result == ENETDOWN) {
DBG("ETH_PPC: muxSend failed - ENETDOWN!!\n");