/********************************************************************** **º¯ÊýÔ­ÐÍ: unsigned int CheckSum(unsigned int xdata *check,unsigned int length) **Èë¿Ú²ÎÊý:º check : ±»Ð£ÑéÊý¾ÝÆðʼµØÖ· length : ±»Ð£ÑéÊý¾Ý³¤¶È£¬µ¥Î»×Ö **³ö¿Ú²ÎÊý: ÎÞ **·µ »Ø Öµ: ~((sum)&0xffff)) **˵ Ã÷: ¼ÆËãУÑéºÍ ************************************************************************/ //================================================================================= unsigned int CheckSum(unsigned int xdata *check,unsigned int length) { unsigned long sum=0; unsigned int i; for (i=0;i<(length)/2;i++) { sum += *check++; } if(length&0x01)//³¤¶ÈÎªÆæÊý¸öʱ£¬Òª½øÐиòÙ×÷ { sum = sum + ((*check)&0xff00); } sum = (sum&0xffff) + ((sum>>16)&0xffff);//¸ß16λºÍµÍ16λÏà¼Ó if(sum & 0xffff0000) {//±íʾÓнøÎ» sum++; } return ( (unsigned int)(~((sum)&0xffff)) ); } /********************************************************************** **º¯ÊýÔ­ÐÍ£º unsigned char VerifyIpHeadCrc() **Èë¿Ú²ÎÊý:º ÎÞ **³ö¿Ú²ÎÊý: ÎÞ **·µ »Ø Öµ£º 0 : УÑé´íÎó ** 1 : УÑéÕýÈ· **˵ Ã÷£º ¶ÔIPÍ·½øÐÐУÑé ************************************************************************/ unsigned char VerifyIpHeadCrc() { unsigned int crc; crc = CheckSum(&RxdNetBuff.IpPacket.IpPacket[0],(RxdNetBuff.IpFrame.VerandIphLen&0x0f)*4);//1λ´ú±í1×Ö½Ú if(crc == 0) { return (1); } return(0); } //=============================================================== /********************************************************************** **º¯ÊýÔ­ÐÍ:º unsigned char VerifyTcpCrc() **Èë¿Ú²ÎÊý:º ÎÞ **³ö¿Ú²ÎÊý: ÎÞ **·µ »Ø Öµ:º 0 :º УÑé´íÎó ** 1 :º УÑéÕýÈ· **˵ Ã÷:º ¶ÔTCPÍ·½øÐÐУÑé ************************************************************************/ unsigned char VerifyTcpCrc() { unsigned int crc; RxdNetBuff.IpFrame.ttl=0; RxdNetBuff.IpFrame.Crc=RxdNetBuff.IpFrame.TotalLen-(RxdNetBuff.IpFrame.VerandIphLen&0x0f)*4; crc = CheckSum(&RxdNetBuff.IpPacket.IpPacket[4],RxdNetBuff.IpFrame.Crc+12); if(crc == 0) { return (1); } return(0); } //================================================================ /********************************************************************** **º¯ÊýÔ­ÐÍ£º void CreateIpHeadCrc() **Èë¿Ú²ÎÊý:º ÎÞ **³ö¿Ú²ÎÊý: ÎÞ **·µ »Ø Öµ£º crc £º 16λµÄУÑéºÍ **˵ Ã÷£º ²úÉúIPÊײ¿µÄУÑéºÍ ************************************************************************/ uint CreateIpHeadCrc() { uchar i; CrcTemp.dwords = 0; for(i=9;i<19;i++) //IPÊײ¿¹²20×Ö½Ú { CrcTemp.dwords = CrcTemp.dwords + TxdNetBuff.words.wordbuf[i]; } while(CrcTemp.words.high>0) { CrcTemp.dwords = (ulong)(CrcTemp.words.high + CrcTemp.words.low); } CrcTemp.words.low = 0xffff - CrcTemp.words.low; //È¡·´ return(CrcTemp.words.low); } //================================================================ /********************************************************************** **º¯ÊýÔ­ÐÍ£º void CreateIcmpCrc( ) **Èë¿Ú²ÎÊý:º ÎÞ **³ö¿Ú²ÎÊý: ÎÞ **·µ »Ø Öµ£º crc £º 16λµÄУÑéºÍ **˵ Ã÷£º ²úÉúICMPÊý¾Ý¶ÎµÄУÑéºÍ ************************************************************************/ uint CreateIcmpCrc()// { uchar i; CrcTemp.dwords=0; for(i=19;i<39;i++) //ÓÃÓÚ²éѯµÄICMP±¨ÎĹ²40×Ö½Ú { CrcTemp.dwords = CrcTemp.dwords + TxdNetBuff.words.wordbuf[i]; } while(CrcTemp.words.high>0) { CrcTemp.dwords = (ulong)(CrcTemp.words.high+CrcTemp.words.low); } CrcTemp.words.low = 0xffff - CrcTemp.words.low; return(CrcTemp.words.low); } //================================================================= /********************************************************************** **º¯ÊýÔ­ÐÍ£º unsigned char VerifyUdpCrc() **Èë¿Ú²ÎÊý:º ÎÞ **³ö¿Ú²ÎÊý: ÎÞ **·µ »Ø Öµ£º 0 £º УÑé´íÎó ** 1 £º УÑéÕýÈ· **˵ Ã÷£º ¶ÔUDPÍ·½øÐÐУÑé ************************************************************************/ unsigned char VerifyUdpCrc() { unsigned int crc; RxdNetBuff.IpFrame.ttl = 0; RxdNetBuff.IpFrame.Crc = RxdNetBuff.IpFrame.TotalLen - (RxdNetBuff.IpFrame.VerandIphLen&0x0f)*4; crc = CheckSum(&RxdNetBuff.IpPacket.IpPacket[4],RxdNetBuff.IpFrame.Crc+12); if(crc==0) { return (1); } return(0); } //================================================================== /********************************************************************** **º¯ÊýÔ­ÐÍ£º void CreateTcpCrc() **Èë¿Ú²ÎÊý:º ÎÞ **³ö¿Ú²ÎÊý: ÎÞ **·µ »Ø Öµ£º crc £º 16λµÄУÑéºÍ **˵ Ã÷£º ²úÉúTCPÊý¾Ý¶ÎµÄУÑéºÍ ************************************************************************/ uint CreateTcpCrc() { uint crc; crc = CheckSum(&TxdNetBuff.IpPacket.IpPacket[4],TxdNetBuff.IpFrame.Crc+12); return (crc); }