?lang_form? ?lang_select? ?lang_submit? ?lang_endform?
{HEADER END}
{FILE START}

library

?curdirlinks? - Rev 6

?prevdifflink? - Blame - ?getfile?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Procyon AVRlib: net/net.c Source File</title>
<link href="dox.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.2 -->
<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
<div class="nav">
<a class="el" href="dir_000001.html">net</a></div>
<h1>net.c</h1><a href="net_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">/*! \file net.c \brief Network support library. */</span>
00002 <span class="comment">//*****************************************************************************</span>
00003 <span class="comment">//</span>
00004 <span class="comment">// File Name    : 'net.c'</span>
00005 <span class="comment">// Title        : Network support library</span>
00006 <span class="comment">// Author       : Pascal Stang</span>
00007 <span class="comment">// Created      : 8/30/2004</span>
00008 <span class="comment">// Revised      : 7/3/2005</span>
00009 <span class="comment">// Version      : 0.1</span>
00010 <span class="comment">// Target MCU   : Atmel AVR series</span>
00011 <span class="comment">// Editor Tabs  : 4</span>
00012 <span class="comment">//</span>
00013 <span class="comment">//*****************************************************************************</span>
00014 
00015 <span class="preprocessor">#include &lt;inttypes.h&gt;</span>
00016 <span class="preprocessor">#include "<a class="code" href="global_8h.html">global.h</a>"</span>
00017 <span class="preprocessor">#include "<a class="code" href="rprintf_8h.html">rprintf.h</a>"</span>
00018 
00019 <span class="preprocessor">#include "<a class="code" href="net_8h.html">net.h</a>"</span>
00020 
<a name="l00021"></a><a class="code" href="group__net.html#ga2">00021</a> uint16_t <a class="code" href="group__net.html#ga2">htons</a>(uint16_t val)
00022 {
00023     <span class="keywordflow">return</span> (val&lt;&lt;8) | (val&gt;&gt;8);
00024 }
00025 
<a name="l00026"></a><a class="code" href="group__net.html#ga3">00026</a> uint32_t <a class="code" href="group__net.html#ga3">htonl</a>(uint32_t val)
00027 {
00028     <span class="keywordflow">return</span> (<a class="code" href="group__net.html#ga2">htons</a>(val&gt;&gt;16) | (uint32_t)<a class="code" href="group__net.html#ga2">htons</a>(val&amp;0x0000FFFF)&lt;&lt;16);
00029 }
00030 
00031 
<a name="l00032"></a><a class="code" href="group__net.html#ga4">00032</a> uint16_t <a class="code" href="group__net.html#ga4">netChecksum</a>(<span class="keywordtype">void</span> *data, uint16_t len)
00033 {
00034     <span class="keyword">register</span> uint32_t sum = 0;
00035 
00036     <span class="keywordflow">for</span> (;;) {
00037         <span class="keywordflow">if</span> (len &lt; 2)
00038             <span class="keywordflow">break</span>;
00039         <span class="comment">//sum += *((uint16_t *)data)++;</span>
00040         sum += *((uint16_t *)data);
00041         data+=2;
00042         len -= 2;
00043     }
00044     <span class="keywordflow">if</span> (len)
00045         sum += *(uint8_t *) data;
00046 
00047     <span class="keywordflow">while</span> ((len = (uint16_t) (sum &gt;&gt; 16)) != 0)
00048         sum = (uint16_t) sum + len;
00049 
00050     <span class="keywordflow">return</span> (uint16_t) sum ^ 0xFFFF;
00051 }
00052 
<a name="l00053"></a><a class="code" href="group__net.html#ga5">00053</a> <span class="keywordtype">void</span> <a class="code" href="group__net.html#ga5">netPrintEthAddr</a>(<span class="keyword">struct</span> netEthAddr* ethaddr)
00054 {
00055     <a class="code" href="group__rprintf.html#ga7">rprintfu08</a>(ethaddr-&gt;addr[0]);
00056     <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">':'</span>);
00057     <a class="code" href="group__rprintf.html#ga7">rprintfu08</a>(ethaddr-&gt;addr[1]);
00058     <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">':'</span>);
00059     <a class="code" href="group__rprintf.html#ga7">rprintfu08</a>(ethaddr-&gt;addr[2]);
00060     <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">':'</span>);
00061     <a class="code" href="group__rprintf.html#ga7">rprintfu08</a>(ethaddr-&gt;addr[3]);
00062     <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">':'</span>);
00063     <a class="code" href="group__rprintf.html#ga7">rprintfu08</a>(ethaddr-&gt;addr[4]);
00064     <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">':'</span>);
00065     <a class="code" href="group__rprintf.html#ga7">rprintfu08</a>(ethaddr-&gt;addr[5]);
00066 }
00067 
<a name="l00068"></a><a class="code" href="group__net.html#ga6">00068</a> <span class="keywordtype">void</span> <a class="code" href="group__net.html#ga6">netPrintIPAddr</a>(uint32_t ipaddr)
00069 {
00070     rprintf(<span class="stringliteral">"%d.%d.%d.%d"</span>,
00071         ((<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*)&amp;ipaddr)[3],
00072         ((<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*)&amp;ipaddr)[2],
00073         ((<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*)&amp;ipaddr)[1],
00074         ((<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*)&amp;ipaddr)[0]);
00075 }
00076 
00077 <span class="comment">/*</span>
00078 <span class="comment">void netPrintEthHeader(struct netEthHeader* eth_hdr)</span>
00079 <span class="comment">{</span>
00080 <span class="comment">    rprintfProgStrM("Eth Packet Type: 0x");</span>
00081 <span class="comment">    rprintfu16(eth_hdr-&gt;type);</span>
00082 <span class="comment"></span>
00083 <span class="comment">    rprintfProgStrM(" SRC:");</span>
00084 <span class="comment">    netPrintEthAddr(&amp;eth_hdr-&gt;src);</span>
00085 <span class="comment">    rprintfProgStrM("-&gt;DST:");</span>
00086 <span class="comment">    netPrintEthAddr(&amp;eth_hdr-&gt;dest);</span>
00087 <span class="comment">    rprintfCRLF();</span>
00088 <span class="comment">}</span>
00089 <span class="comment"></span>
00090 <span class="comment">void netPrintIpHeader(struct netIpHeader* ipheader)</span>
00091 <span class="comment">{</span>
00092 <span class="comment">    rprintfProgStrM("IP Header\r\n");</span>
00093 <span class="comment">    rprintf("Ver     : %d\r\n", (ipheader-&gt;vhl)&gt;&gt;4);</span>
00094 <span class="comment">    rprintf("Length  : %d\r\n", htons(ipheader-&gt;len));</span>
00095 <span class="comment">    if(ipheader-&gt;proto == IP_PROTO_ICMP)</span>
00096 <span class="comment">        rprintfProgStrM("Protocol: ICMP\r\n");</span>
00097 <span class="comment">    else if(ipheader-&gt;proto == IP_PROTO_TCP)</span>
00098 <span class="comment">        rprintfProgStrM("Protocol: TCP\r\n");</span>
00099 <span class="comment">    else if(ipheader-&gt;proto == IP_PROTO_UDP)</span>
00100 <span class="comment">        rprintfProgStrM("Protocol: UDP\r\n");</span>
00101 <span class="comment">    else</span>
00102 <span class="comment">        rprintf("Protocol: %d\r\n", ipheader-&gt;proto);</span>
00103 <span class="comment">    </span>
00104 <span class="comment">    rprintfProgStrM("SourceIP: "); netPrintIPAddr(htonl(ipheader-&gt;srcipaddr));  rprintfCRLF();</span>
00105 <span class="comment">    rprintfProgStrM("Dest  IP: "); netPrintIPAddr(htonl(ipheader-&gt;destipaddr)); rprintfCRLF();</span>
00106 <span class="comment">}</span>
00107 <span class="comment"></span>
00108 <span class="comment">void netPrintTcpHeader(struct netTcpHeader* tcpheader)</span>
00109 <span class="comment">{</span>
00110 <span class="comment">    rprintfProgStrM("TCP Header\r\n");</span>
00111 <span class="comment">    rprintf("Src Port: %d\r\n", htons(tcpheader-&gt;srcport));</span>
00112 <span class="comment">    rprintf("Dst Port: %d\r\n", htons(tcpheader-&gt;destport));</span>
00113 <span class="comment">    rprintfProgStrM("Seq Num : 0x"); rprintfu32(htonl(tcpheader-&gt;seqno));   rprintfCRLF();</span>
00114 <span class="comment">    rprintfProgStrM("Ack Num : 0x"); rprintfu32(htonl(tcpheader-&gt;ackno));   rprintfCRLF();</span>
00115 <span class="comment">    rprintfProgStrM("Flags   : ");</span>
00116 <span class="comment">    if(tcpheader-&gt;flags &amp; TCP_FLAGS_FIN)</span>
00117 <span class="comment">        rprintfProgStrM("FIN ");</span>
00118 <span class="comment">    if(tcpheader-&gt;flags &amp; TCP_FLAGS_SYN)</span>
00119 <span class="comment">        rprintfProgStrM("SYN ");</span>
00120 <span class="comment">    if(tcpheader-&gt;flags &amp; TCP_FLAGS_RST)</span>
00121 <span class="comment">        rprintfProgStrM("RST ");</span>
00122 <span class="comment">    if(tcpheader-&gt;flags &amp; TCP_FLAGS_PSH)</span>
00123 <span class="comment">        rprintfProgStrM("PSH ");</span>
00124 <span class="comment">    if(tcpheader-&gt;flags &amp; TCP_FLAGS_ACK)</span>
00125 <span class="comment">        rprintfProgStrM("ACK ");</span>
00126 <span class="comment">    if(tcpheader-&gt;flags &amp; TCP_FLAGS_URG)</span>
00127 <span class="comment">        rprintfProgStrM("URG ");</span>
00128 <span class="comment">    rprintfCRLF();</span>
00129 <span class="comment">}</span>
00130 <span class="comment">*/</span>
00131 
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Sun Oct 29 03:41:07 2006 for Procyon AVRlib by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
</body>
</html>
{FILE END}
{FOOTER START}

Powered by WebSVN v2.8.3