2009年2月23日星期一

GOOSE报文在vxworks链路直接发送成功

#include "vxWorks.h"

#include "netinet/in.h"

#include "netinet/ip.h"

#include "netinet/if_ether.h"

#include "netinet/udp.h"

#include "private/muxlibP.h"

void *MuxCookie;

BOOL RxHandler

(

void * pCookie, /* returned by muxBind() */

long type, /* from RFC1700, or user-defined */

M_BLK_ID pNetBuff, /* packet with link-level info */

LL_HDR_INFO * pLinkHdr, /* link-level header info structure */

void * pSpare /* defined on a per-protocol basis */

)

{

return(FALSE);

}

int auto_init ()

{

if (muxLibInit() != OK)

{

printf( "Failed to initialize mux subsystem\n");

return -1;

}

/* Check if the interface exists */

if(muxDevExists("fei", 3 )) /*3=序号,使用网卡的序号为3*/

{

printf("muxDevExists\n");

/* MUX_PROTO_SNARF MUX_PROTO_PROMISC MUX_PROTO_OUTPUT */

if ((MuxCookie = muxBind("fei", 3, RxHandler, NULL, NULL, NULL,MUX_PROTO_SNARF, "VLAN", NULL)) == NULL)

{

printf("\nERROR: %x,bind failure (ERRNO=%x) ",errnoGet());

}

}

}

int auto_Send(char *pMsgBuf, long FrameLen)

{

M_BLK_ID pMblk = 0;

END_OBJ * pEnd = 0;

if ((pEnd = ((MUX_ID) MuxCookie) -> pEnd) == NULL)

{

printf( "Failed to get valid cookie end reference\n");

return -1;

}

if ((pMblk = netTupleGet (pEnd-> pNetPool, 1500, M_DONTWAIT,MT_DATA,FALSE)) == NULL)

{

perror ( "pMblk");

muxUnbind(MuxCookie,MUX_PROTO_SNARF,RxHandler);

return(ERROR);

}

pMblk->mBlkHdr.mFlags |= M_PKTHDR;

pMblk->mBlkHdr.mLen = 0;

pMblk->mBlkHdr.mData = pMblk->pClBlk->clNode.pClBuf;

pMblk->mBlkHdr.mLen = FrameLen;

memcpy(pMblk->mBlkHdr.mData, pMsgBuf, FrameLen);

if (muxSend(MuxCookie, pMblk) != OK)

{

printf( "Failed to send ethernet frame\n");

netMblkClChainFree(pMblk);

return -1;

}

printf("Sent an Frame\n");

}

void autofei_muxsend(void)

{

int i_Count= 0 ;

int i;

unsigned char packet[512];

memset(packet,0,sizeof(packet));

/* TODO: Add your control notification handler code here */

packet[0]=0x01;

packet[1]=0x0c;

packet[2]=0xcd;

packet[3]=0x04;

packet[4]=0x01;

packet[5]=0xff;

/* set mac source to 2:2:2:2:2:2 */

/* 00:10:16:00:89:d4 */

packet[6]=0x00;

packet[7]=0x10;

packet[8]=0x16;

packet[9]=0x00;

packet[10]=0x89;

packet[11]=0xd4;

packet[12]=0x88;

packet[13]=0xb8;

packet[14]=0x40;

packet[15]=0x00;

packet[16]=0x00;

packet[17]=0x7a;

/* Fill the rest of the packet */

strcpy((char*)&packet[18],"noodle and rice,very very nice,yummy yummy,very very nice;a big fat mouse,come to the house,ai yao,ai yao,pepper in the eyes!http://shenlan51.blogspot.com/");

while(1)

{

printf("prepare muxsend auto %d \n",i_Count++);

auto_Send(packet,256);

taskDelay(100);

}

}

void muxsend_auto (void)

{

sysClkRateSet(100);

if(chdir("/ata0a/")==ERROR)

{

printf("directory is not existed\r\n");

}

InitNetCard();

ftpInit();

auto_init();

taskSpawn("sig_main", 50, 0, 1024*20, (FUNCPTR)autofei_muxsend, 0,0,0,0,0,0,0,0,0,0);

}

From: http://shenlan51.blogspot.com/

0 评论: