xref: /nrf52832-nimble/rt-thread/components/net/uip/doc/html/a00151.html (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2*10465441SEvalZero<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
3*10465441SEvalZero<title>uIP 1.0: Architecture specific uIP functions</title>
4*10465441SEvalZero<link href="doxygen.css" rel="stylesheet" type="text/css">
5*10465441SEvalZero<link href="tabs.css" rel="stylesheet" type="text/css">
6*10465441SEvalZero</head><body>
7*10465441SEvalZero<!-- Generated by Doxygen 1.4.6 -->
8*10465441SEvalZero<div class="tabs">
9*10465441SEvalZero  <ul>
10*10465441SEvalZero    <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
11*10465441SEvalZero    <li><a href="modules.html"><span>Modules</span></a></li>
12*10465441SEvalZero    <li><a href="classes.html"><span>Data&nbsp;Structures</span></a></li>
13*10465441SEvalZero    <li><a href="files.html"><span>Files</span></a></li>
14*10465441SEvalZero    <li><a href="examples.html"><span>Examples</span></a></li>
15*10465441SEvalZero  </ul></div>
16*10465441SEvalZero<h1>Architecture specific uIP functions<br>
17*10465441SEvalZero<small>
18*10465441SEvalZero[<a class="el" href="a00150.html">The uIP TCP/IP stack</a>]</small>
19*10465441SEvalZero</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
20*10465441SEvalZeroThe functions in the architecture specific module implement the IP check sum and 32-bit additions.
21*10465441SEvalZero<p>
22*10465441SEvalZeroThe IP checksum calculation is the most computationally expensive operation in the TCP/IP stack and it therefore pays off to implement this in efficient assembler. The purpose of the uip-arch module is to let the checksum functions to be implemented in architecture specific assembler.
23*10465441SEvalZero<p>
24*10465441SEvalZero<table border="0" cellpadding="0" cellspacing="0">
25*10465441SEvalZero<tr><td></td></tr>
26*10465441SEvalZero<tr><td colspan="2"><br><h2>Files</h2></td></tr>
27*10465441SEvalZero<tr><td class="memItemLeft" nowrap align="right" valign="top">file &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00137.html">uip_arch.h</a></td></tr>
28*10465441SEvalZero
29*10465441SEvalZero<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Declarations of architecture specific functions. <br></td></tr>
30*10465441SEvalZero
31*10465441SEvalZero<p>
32*10465441SEvalZero<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
33*10465441SEvalZero<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#g6832e4d2d046536b6472f7ac92340f68">uip_add32</a> (<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *op32, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> op16)</td></tr>
34*10465441SEvalZero
35*10465441SEvalZero<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Carry out a 32-bit addition.  <a href="#g6832e4d2d046536b6472f7ac92340f68"></a><br></td></tr>
36*10465441SEvalZero<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#gb6683dd83fe1c8de9a24086d4b69e907">uip_chksum</a> (<a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *buf, <a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> len)</td></tr>
37*10465441SEvalZero
38*10465441SEvalZero<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calculate the Internet checksum over a buffer.  <a href="#gb6683dd83fe1c8de9a24086d4b69e907"></a><br></td></tr>
39*10465441SEvalZero<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#g2addf34c7d457c1a7899a7e2171ef1e9">uip_ipchksum</a> (void)</td></tr>
40*10465441SEvalZero
41*10465441SEvalZero<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calculate the IP header checksum of the packet header in uip_buf.  <a href="#g2addf34c7d457c1a7899a7e2171ef1e9"></a><br></td></tr>
42*10465441SEvalZero<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#g85b65e38aa74eba18979156f97a94a87">uip_tcpchksum</a> (void)</td></tr>
43*10465441SEvalZero
44*10465441SEvalZero<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calculate the TCP checksum of the packet in uip_buf and uip_appdata.  <a href="#g85b65e38aa74eba18979156f97a94a87"></a><br></td></tr>
45*10465441SEvalZero<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
46*10465441SEvalZero<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g2a0cf5d86c58fab216414ce59bf1fea1"></a><!-- doxytag: member="uiparch::uip_acc32" ref="g2a0cf5d86c58fab216414ce59bf1fea1" args="[4]" -->
47*10465441SEvalZero<a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#g2a0cf5d86c58fab216414ce59bf1fea1">uip_acc32</a> [4]</td></tr>
48*10465441SEvalZero
49*10465441SEvalZero<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">4-byte array used for the 32-bit sequence number calculations. <br></td></tr>
50*10465441SEvalZero</table>
51*10465441SEvalZero<hr><h2>Function Documentation</h2>
52*10465441SEvalZero<a class="anchor" name="g6832e4d2d046536b6472f7ac92340f68"></a><!-- doxytag: member="uip_arch.h::uip_add32" ref="g6832e4d2d046536b6472f7ac92340f68" args="(u8_t *op32, u16_t op16)" --><p>
53*10465441SEvalZero<table class="mdTable" cellpadding="2" cellspacing="0">
54*10465441SEvalZero  <tr>
55*10465441SEvalZero    <td class="mdRow">
56*10465441SEvalZero      <table cellpadding="0" cellspacing="0" border="0">
57*10465441SEvalZero        <tr>
58*10465441SEvalZero          <td class="md" nowrap valign="top">void uip_add32           </td>
59*10465441SEvalZero          <td class="md" valign="top">(&nbsp;</td>
60*10465441SEvalZero          <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *&nbsp;</td>
61*10465441SEvalZero          <td class="mdname" nowrap> <em>op32</em>, </td>
62*10465441SEvalZero        </tr>
63*10465441SEvalZero        <tr>
64*10465441SEvalZero          <td class="md" nowrap align="right"></td>
65*10465441SEvalZero          <td class="md"></td>
66*10465441SEvalZero          <td class="md" nowrap><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a>&nbsp;</td>
67*10465441SEvalZero          <td class="mdname" nowrap> <em>op16</em></td>
68*10465441SEvalZero        </tr>
69*10465441SEvalZero        <tr>
70*10465441SEvalZero          <td class="md"></td>
71*10465441SEvalZero          <td class="md">)&nbsp;</td>
72*10465441SEvalZero          <td class="md" colspan="2"></td>
73*10465441SEvalZero        </tr>
74*10465441SEvalZero      </table>
75*10465441SEvalZero    </td>
76*10465441SEvalZero  </tr>
77*10465441SEvalZero</table>
78*10465441SEvalZero<table cellspacing="5" cellpadding="0" border="0">
79*10465441SEvalZero  <tr>
80*10465441SEvalZero    <td>
81*10465441SEvalZero      &nbsp;
82*10465441SEvalZero    </td>
83*10465441SEvalZero    <td>
84*10465441SEvalZero
85*10465441SEvalZero<p>
86*10465441SEvalZeroCarry out a 32-bit addition.
87*10465441SEvalZero<p>
88*10465441SEvalZeroBecause not all architectures for which uIP is intended has native 32-bit arithmetic, uIP uses an external C function for doing the required 32-bit additions in the TCP protocol processing. This function should add the two arguments and place the result in the global variable uip_acc32.<p>
89*10465441SEvalZero<dl compact><dt><b>Note:</b></dt><dd>The 32-bit integer pointed to by the op32 parameter and the result in the uip_acc32 variable are in network byte order (big endian).</dd></dl>
90*10465441SEvalZero<dl compact><dt><b>Parameters:</b></dt><dd>
91*10465441SEvalZero  <table border="0" cellspacing="2" cellpadding="0">
92*10465441SEvalZero    <tr><td valign="top"></td><td valign="top"><em>op32</em>&nbsp;</td><td>A pointer to a 4-byte array representing a 32-bit integer in network byte order (big endian).</td></tr>
93*10465441SEvalZero    <tr><td valign="top"></td><td valign="top"><em>op16</em>&nbsp;</td><td>A 16-bit integer in host byte order. </td></tr>
94*10465441SEvalZero  </table>
95*10465441SEvalZero</dl>
96*10465441SEvalZero
97*10465441SEvalZero<p>
98*10465441SEvalZeroDefinition at line <a class="el" href="a00201.html#l00249">249</a> of file <a class="el" href="a00201.html">uip.c</a>.
99*10465441SEvalZero<p>
100*10465441SEvalZeroReferenced by <a class="el" href="a00199.html#l00049">uip_split_output()</a>.    </td>
101*10465441SEvalZero  </tr>
102*10465441SEvalZero</table>
103*10465441SEvalZero<a class="anchor" name="gb6683dd83fe1c8de9a24086d4b69e907"></a><!-- doxytag: member="uip_arch.h::uip_chksum" ref="gb6683dd83fe1c8de9a24086d4b69e907" args="(u16_t *buf, u16_t len)" --><p>
104*10465441SEvalZero<table class="mdTable" cellpadding="2" cellspacing="0">
105*10465441SEvalZero  <tr>
106*10465441SEvalZero    <td class="mdRow">
107*10465441SEvalZero      <table cellpadding="0" cellspacing="0" border="0">
108*10465441SEvalZero        <tr>
109*10465441SEvalZero          <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> uip_chksum           </td>
110*10465441SEvalZero          <td class="md" valign="top">(&nbsp;</td>
111*10465441SEvalZero          <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> *&nbsp;</td>
112*10465441SEvalZero          <td class="mdname" nowrap> <em>buf</em>, </td>
113*10465441SEvalZero        </tr>
114*10465441SEvalZero        <tr>
115*10465441SEvalZero          <td class="md" nowrap align="right"></td>
116*10465441SEvalZero          <td class="md"></td>
117*10465441SEvalZero          <td class="md" nowrap><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a>&nbsp;</td>
118*10465441SEvalZero          <td class="mdname" nowrap> <em>len</em></td>
119*10465441SEvalZero        </tr>
120*10465441SEvalZero        <tr>
121*10465441SEvalZero          <td class="md"></td>
122*10465441SEvalZero          <td class="md">)&nbsp;</td>
123*10465441SEvalZero          <td class="md" colspan="2"></td>
124*10465441SEvalZero        </tr>
125*10465441SEvalZero      </table>
126*10465441SEvalZero    </td>
127*10465441SEvalZero  </tr>
128*10465441SEvalZero</table>
129*10465441SEvalZero<table cellspacing="5" cellpadding="0" border="0">
130*10465441SEvalZero  <tr>
131*10465441SEvalZero    <td>
132*10465441SEvalZero      &nbsp;
133*10465441SEvalZero    </td>
134*10465441SEvalZero    <td>
135*10465441SEvalZero
136*10465441SEvalZero<p>
137*10465441SEvalZeroCalculate the Internet checksum over a buffer.
138*10465441SEvalZero<p>
139*10465441SEvalZeroThe Internet checksum is the one's complement of the one's complement sum of all 16-bit words in the buffer.<p>
140*10465441SEvalZeroSee RFC1071.<p>
141*10465441SEvalZero<dl compact><dt><b>Note:</b></dt><dd>This function is not called in the current version of uIP, but future versions might make use of it.</dd></dl>
142*10465441SEvalZero<dl compact><dt><b>Parameters:</b></dt><dd>
143*10465441SEvalZero  <table border="0" cellspacing="2" cellpadding="0">
144*10465441SEvalZero    <tr><td valign="top"></td><td valign="top"><em>buf</em>&nbsp;</td><td>A pointer to the buffer over which the checksum is to be computed.</td></tr>
145*10465441SEvalZero    <tr><td valign="top"></td><td valign="top"><em>len</em>&nbsp;</td><td>The length of the buffer over which the checksum is to be computed.</td></tr>
146*10465441SEvalZero  </table>
147*10465441SEvalZero</dl>
148*10465441SEvalZero<dl compact><dt><b>Returns:</b></dt><dd>The Internet checksum of the buffer. </dd></dl>
149*10465441SEvalZero    </td>
150*10465441SEvalZero  </tr>
151*10465441SEvalZero</table>
152*10465441SEvalZero<a class="anchor" name="g2addf34c7d457c1a7899a7e2171ef1e9"></a><!-- doxytag: member="uip_arch.h::uip_ipchksum" ref="g2addf34c7d457c1a7899a7e2171ef1e9" args="(void)" --><p>
153*10465441SEvalZero<table class="mdTable" cellpadding="2" cellspacing="0">
154*10465441SEvalZero  <tr>
155*10465441SEvalZero    <td class="mdRow">
156*10465441SEvalZero      <table cellpadding="0" cellspacing="0" border="0">
157*10465441SEvalZero        <tr>
158*10465441SEvalZero          <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> uip_ipchksum           </td>
159*10465441SEvalZero          <td class="md" valign="top">(&nbsp;</td>
160*10465441SEvalZero          <td class="md" nowrap valign="top">void&nbsp;</td>
161*10465441SEvalZero          <td class="mdname1" valign="top" nowrap>          </td>
162*10465441SEvalZero          <td class="md" valign="top">&nbsp;)&nbsp;</td>
163*10465441SEvalZero          <td class="md" nowrap></td>
164*10465441SEvalZero        </tr>
165*10465441SEvalZero      </table>
166*10465441SEvalZero    </td>
167*10465441SEvalZero  </tr>
168*10465441SEvalZero</table>
169*10465441SEvalZero<table cellspacing="5" cellpadding="0" border="0">
170*10465441SEvalZero  <tr>
171*10465441SEvalZero    <td>
172*10465441SEvalZero      &nbsp;
173*10465441SEvalZero    </td>
174*10465441SEvalZero    <td>
175*10465441SEvalZero
176*10465441SEvalZero<p>
177*10465441SEvalZeroCalculate the IP header checksum of the packet header in uip_buf.
178*10465441SEvalZero<p>
179*10465441SEvalZeroThe IP header checksum is the Internet checksum of the 20 bytes of the IP header.<p>
180*10465441SEvalZero<dl compact><dt><b>Returns:</b></dt><dd>The IP header checksum of the IP header in the uip_buf buffer. </dd></dl>
181*10465441SEvalZero    </td>
182*10465441SEvalZero  </tr>
183*10465441SEvalZero</table>
184*10465441SEvalZero<a class="anchor" name="g85b65e38aa74eba18979156f97a94a87"></a><!-- doxytag: member="uip_arch.h::uip_tcpchksum" ref="g85b65e38aa74eba18979156f97a94a87" args="(void)" --><p>
185*10465441SEvalZero<table class="mdTable" cellpadding="2" cellspacing="0">
186*10465441SEvalZero  <tr>
187*10465441SEvalZero    <td class="mdRow">
188*10465441SEvalZero      <table cellpadding="0" cellspacing="0" border="0">
189*10465441SEvalZero        <tr>
190*10465441SEvalZero          <td class="md" nowrap valign="top"><a class="el" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> uip_tcpchksum           </td>
191*10465441SEvalZero          <td class="md" valign="top">(&nbsp;</td>
192*10465441SEvalZero          <td class="md" nowrap valign="top">void&nbsp;</td>
193*10465441SEvalZero          <td class="mdname1" valign="top" nowrap>          </td>
194*10465441SEvalZero          <td class="md" valign="top">&nbsp;)&nbsp;</td>
195*10465441SEvalZero          <td class="md" nowrap></td>
196*10465441SEvalZero        </tr>
197*10465441SEvalZero      </table>
198*10465441SEvalZero    </td>
199*10465441SEvalZero  </tr>
200*10465441SEvalZero</table>
201*10465441SEvalZero<table cellspacing="5" cellpadding="0" border="0">
202*10465441SEvalZero  <tr>
203*10465441SEvalZero    <td>
204*10465441SEvalZero      &nbsp;
205*10465441SEvalZero    </td>
206*10465441SEvalZero    <td>
207*10465441SEvalZero
208*10465441SEvalZero<p>
209*10465441SEvalZeroCalculate the TCP checksum of the packet in uip_buf and uip_appdata.
210*10465441SEvalZero<p>
211*10465441SEvalZeroThe TCP checksum is the Internet checksum of data contents of the TCP segment, and a pseudo-header as defined in RFC793.<p>
212*10465441SEvalZero<dl compact><dt><b>Note:</b></dt><dd>The uip_appdata pointer that points to the packet data may point anywhere in memory, so it is not possible to simply calculate the Internet checksum of the contents of the uip_buf buffer.</dd></dl>
213*10465441SEvalZero<dl compact><dt><b>Returns:</b></dt><dd>The TCP checksum of the TCP segment in uip_buf and pointed to by uip_appdata. </dd></dl>
214*10465441SEvalZero    </td>
215*10465441SEvalZero  </tr>
216*10465441SEvalZero</table>
217*10465441SEvalZero<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by&nbsp;
218*10465441SEvalZero<a href="http://www.doxygen.org/index.html">
219*10465441SEvalZero<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
220*10465441SEvalZero</body>
221*10465441SEvalZero</html>
222