<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.mcselec.com/bavr/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.mcselec.com/bavr/index.php?action=history&amp;feed=atom&amp;title=TCPCHECKSUM</id>
		<title>TCPCHECKSUM - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.mcselec.com/bavr/index.php?action=history&amp;feed=atom&amp;title=TCPCHECKSUM"/>
		<link rel="alternate" type="text/html" href="http://wiki.mcselec.com/bavr/index.php?title=TCPCHECKSUM&amp;action=history"/>
		<updated>2026-04-16T14:05:33Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.18.6</generator>

	<entry>
		<id>http://wiki.mcselec.com/bavr/index.php?title=TCPCHECKSUM&amp;diff=877&amp;oldid=prev</id>
		<title>Admin: Created page with &quot;= &lt;span class=&quot;f_Header&quot;&gt;Action&lt;/span&gt; =  Return a TCP/IP checksum, also called Internet Checksum, or IP Checksum.  &lt;span style=&quot;font-family: Arial;&quot;&gt;&amp;nbsp;&lt;/span&gt;  &lt;span styl...&quot;</title>
		<link rel="alternate" type="text/html" href="http://wiki.mcselec.com/bavr/index.php?title=TCPCHECKSUM&amp;diff=877&amp;oldid=prev"/>
				<updated>2013-02-12T17:55:07Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Action&amp;lt;/span&amp;gt; =  Return a TCP/IP checksum, also called Internet Checksum, or IP Checksum.  &amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;  &amp;lt;span styl...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Action&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Return a TCP/IP checksum, also called Internet Checksum, or IP Checksum.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Syntax&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
res=&amp;amp;nbsp;&amp;lt;span class=&amp;quot;f_Syntax&amp;quot;&amp;gt;TCPCHECKSUM&amp;lt;/span&amp;gt;(buffer , bytes [,w1] [,w2])&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Remarks&amp;lt;/span&amp;gt; =&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px 0px 0px 4px;&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;604&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 2px solid rgb(0, 0, 0); border-spacing: 0px; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;15%&amp;quot; style=&amp;quot;width: 87px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
Res&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;100%&amp;quot; style=&amp;quot;width: 508px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
A word variable that is assigned with the TCP/IP checksum of the buffer&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;15%&amp;quot; style=&amp;quot;width: 87px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
Buffer&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;100%&amp;quot; style=&amp;quot;width: 508px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
A variable or array to get the checksum of.&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;15%&amp;quot; style=&amp;quot;width: 87px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
Bytes&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;100%&amp;quot; style=&amp;quot;width: 508px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
The number of bytes that must be examined.&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;15%&amp;quot; style=&amp;quot;width: 87px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
w1,w2&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;100%&amp;quot; style=&amp;quot;width: 508px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
Optional words that will be included in the checksum.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Checksum's are used a lot in communication protocols. &amp;amp;nbsp;A checksum is a way to verify that received data is the same as it was sent. &amp;amp;nbsp;In the many Internet Protocols (TCP, UDP, IP, ICMP …) a special Internet checksum is used. &amp;amp;nbsp;Normally the data to calculate the checksum on is stored in an array of bytes, but in some cases like TCP, and UDP, a pseudo header is added. &amp;amp;nbsp;The optional words (w1, w2) can be used for these cases. &amp;amp;nbsp;Most often w1 and w2 will be used for the Protocol number, and the UDP or TCP packet length.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This checksum is calculated by grouping the bytes in the array into 2-byte words. &amp;amp;nbsp;If the number of Bytes is an odd number, then an extra byte of zero is used to make the last 2-byte word. &amp;amp;nbsp;All of the words are added together, keeping the total in a 4-byte Long variable. &amp;amp;nbsp;If the optional words w1, w2, are included, they are also added to the total. &amp;amp;nbsp;Next, the 4-byte Long total is split into two, 2-byte words, and these words are added together to make a new 2-byte Word total. &amp;amp;nbsp;Finally the total is inverted. &amp;amp;nbsp;This is the value returned as Res.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This function using w1, w2, are very useful when working directly with Ethernet chips like the RTL8019AS or with protocols not directly supported by the WIZnet chips.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the samples directory for more examples of use (IP_Checksum.bas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use it for the PING sample below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;See also&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
[[CRC8]]&amp;amp;nbsp;,&amp;amp;nbsp;[[CRC16]],&amp;amp;nbsp;[[CRC32]]&amp;amp;nbsp;,&amp;amp;nbsp;[[CHECKSUM]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;ASM&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
NONE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Example&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;source lang=&amp;quot;bascomavr&amp;quot;&amp;gt;&lt;br /&gt;
'-----------------------------------------------------------------------------------------&lt;br /&gt;
'name : PING_TWI.bas http://www.faqs.org/rfcs/rfc792.html&lt;br /&gt;
'copyright : (c) 1995-2005, MCS Electronics&lt;br /&gt;
'purpose : Simple PING program&lt;br /&gt;
'micro : Mega88&lt;br /&gt;
'suited for demo : yes&lt;br /&gt;
'commercial addon needed : no&lt;br /&gt;
'-----------------------------------------------------------------------------------------&lt;br /&gt;
$regfile = &amp;quot;m32def.dat&amp;quot; ' specify the used micro&lt;br /&gt;
 &lt;br /&gt;
$crystal = 8000000 ' used crystal frequency&lt;br /&gt;
$baud = 19200 ' use baud rate&lt;br /&gt;
$hwstack = 80 ' default use 32 for the hardware stack&lt;br /&gt;
$swstack = 128 ' default use 10 for the SW stack&lt;br /&gt;
$framesize = 80 ' default use 40 for the frame space&lt;br /&gt;
 &lt;br /&gt;
Const Debug = 1&lt;br /&gt;
 &lt;br /&gt;
'we do the usual&lt;br /&gt;
Print &amp;quot;Init TCP&amp;quot; ' display a message&lt;br /&gt;
Enable Interrupts ' before we use config tcpip , we need to enable the interrupts&lt;br /&gt;
Config Tcpip = Int0 , Mac = 12.128.12.34.56.78 , Ip = 192.168.0.8 , Submask = 255.255.255.0 , Gateway = 192.168.0.1 , Localport = 1000 , Tx = $55 , Rx = $55 , Twi = &amp;amp;H80 , Clock = 400000&lt;br /&gt;
Print &amp;quot;Init done&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
Dim Peersize As Integer , Peeraddress As Long , Peerport As Word&lt;br /&gt;
Dim Idx As Byte , Result As Word , J As Byte , Res As Byte&lt;br /&gt;
Dim Ip As Long&lt;br /&gt;
Dim Dta(12) As Byte , Rec(12) As Byte&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Dta(1) = 8 'type is echo&lt;br /&gt;
Dta(2) = 0 'code&lt;br /&gt;
 &lt;br /&gt;
Dta(3) = 0 ' for checksum initialization&lt;br /&gt;
Dta(4) = 0 ' checksum&lt;br /&gt;
Dta(5) = 0 ' a signature can be any number&lt;br /&gt;
Dta(6) = 1 ' signature&lt;br /&gt;
Dta(7) = 0 ' sequence number - any number&lt;br /&gt;
Dta(8) = 1&lt;br /&gt;
Dta(9) = 65&lt;br /&gt;
 &lt;br /&gt;
Dim W As Word At Dta + 2 Overlay 'same as dta(3) and dta(4)&lt;br /&gt;
W = Tcpchecksum(dta(1) , 9) ' calculate checksum and store in dta(3) and dta(4)&lt;br /&gt;
 &lt;br /&gt;
#if Debug&lt;br /&gt;
For J = 1 To 9&lt;br /&gt;
 Print Dta(j)&lt;br /&gt;
Next&lt;br /&gt;
#endif&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Ip = Maketcp(192.168.0.16) 'try to check this server&lt;br /&gt;
 &lt;br /&gt;
Print &amp;quot;Socket &amp;quot; ; Idx ; &amp;quot; &amp;quot; ; Idx&lt;br /&gt;
Setipprotocol Idx , 1 'set protocol to 1&lt;br /&gt;
'the protocol value must be set BEFORE the socket is openend&lt;br /&gt;
 &lt;br /&gt;
Idx = Getsocket(idx , 3 , 5000 , 0)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Do&lt;br /&gt;
 Result = Udpwrite(ip , 7 , Idx , Dta(1) , 9) 'write ping data '&lt;br /&gt;
Print Result&lt;br /&gt;
Waitms 100&lt;br /&gt;
 Result = Socketstat(idx , Sel_recv) 'check for data&lt;br /&gt;
Print Result&lt;br /&gt;
If Result &amp;gt;= 11 Then&lt;br /&gt;
 Print &amp;quot;Ok&amp;quot;&lt;br /&gt;
 Res = Tcpread(idx , Rec(1) , Result) 'get data with TCPREAD !!!&lt;br /&gt;
 #if Debug&lt;br /&gt;
 Print &amp;quot;DATA RETURNED :&amp;quot; ; Res '&lt;br /&gt;
 For J = 1 To Result&lt;br /&gt;
 Print Rec(j) ; &amp;quot; &amp;quot; ;&lt;br /&gt;
 Next&lt;br /&gt;
 Print&lt;br /&gt;
 #endif&lt;br /&gt;
Else 'there might be a problem&lt;br /&gt;
 Print &amp;quot;Network not available&amp;quot;&lt;br /&gt;
End If&lt;br /&gt;
Waitms 1000&lt;br /&gt;
Loop&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;br/&amp;gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
[[Category:BASCOM Language Reference]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>