00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "includes.h"
00010
00011 #define EthernetUdpIdleState 0
00012
00013 UDP_CONTROL UdpCtrl;
00014
00015 void F_EthernetUdpInit(void){
00016 UdpCtrl.InUse=FALSE;
00017
00018 UdpCtrl.State=EthernetUdpIdleState;
00019 }
00020 INT8U F_EthernetUdpPacketReceive(ETHBUFFER *pBuffer){
00021 UDP_HEAD *pUdpHead=(UDP_HEAD *)(pBuffer->pData);
00022
00023 #if(DEBUG_ETHERNET_UDP==1)
00024 printf("\n UDP receive");
00025 #endif
00026 pBuffer->Length=F_EthernetUnsignedShortN2H(pUdpHead->Length);
00027 F_EthernetBufferPull(pBuffer,sizeof(UDP_HEAD));
00028 if(F_EthernetUnsignedShortN2H(pUdpHead->Destination)==TFTP)
00029 F_EthernetTftpPacketReceive(pBuffer);
00030
00031
00032
00033 return TRUE;
00034 }
00035 INT8U F_EthernetUdpPacketSend(ETHBUFFER *pBuffer,
00036 INT8U *pIpAddress,
00037 INT16U SourcePort,
00038 INT16U DestinationPort){
00039 UDP_HEAD *pUdpHead;
00040
00041 #if(DEBUG_ETHERNET_UDP==1)
00042 printf("\n UDP send ");
00043 #endif
00044 pUdpHead=(UDP_HEAD *)F_EthernetBufferPush(pBuffer,sizeof(UDP_HEAD));
00045 pUdpHead->Source=F_EthernetUnsignedShortH2N(SourcePort);
00046 pUdpHead->Destination=F_EthernetUnsignedShortH2N(DestinationPort);
00047 pUdpHead->Length=F_EthernetUnsignedShortH2N(12);
00048 pUdpHead->Check=0;
00049 F_EthernetIpSend(pBuffer,pIpAddress,UDP);
00050 return TRUE;
00051 }
00052 INT8U F_EthernetUdpBufferReserve(ETHBUFFER *pBuffer){
00053 F_EthernetBufferReserve(pBuffer,sizeof(ETHERNET_HEAD));
00054 F_EthernetBufferReserve(pBuffer,sizeof(IP_HEAD));
00055 F_EthernetBufferReserve(pBuffer,sizeof(UDP_HEAD));
00056 return TRUE;
00057 }
00058 INT16U F_EthernetUdpSourcePortGet(ETHBUFFER *pBuffer){
00059 UDP_HEAD *pUdpHead;
00060
00061 pUdpHead=(UDP_HEAD *)(pBuffer->Data+ETHERNET_HEAD_LENGTH+sizeof(IP_HEAD));
00062 return F_EthernetUnsignedShortN2H(pUdpHead->Source);
00063 }
00064