?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 Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="annotated.html">Data Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Data Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related 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 <inttypes.h></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<<8) | (val>>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>>16) | (uint32_t)<a class="code" href="group__net.html#ga2">htons</a>(val&0x0000FFFF)<<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 < 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 >> 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->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->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->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->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->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->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>*)&ipaddr)[3],
00072 ((<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*)&ipaddr)[2],
00073 ((<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*)&ipaddr)[1],
00074 ((<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*)&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->type);</span>
00082 <span class="comment"></span>
00083 <span class="comment"> rprintfProgStrM(" SRC:");</span>
00084 <span class="comment"> netPrintEthAddr(&eth_hdr->src);</span>
00085 <span class="comment"> rprintfProgStrM("->DST:");</span>
00086 <span class="comment"> netPrintEthAddr(&eth_hdr->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->vhl)>>4);</span>
00094 <span class="comment"> rprintf("Length : %d\r\n", htons(ipheader->len));</span>
00095 <span class="comment"> if(ipheader->proto == IP_PROTO_ICMP)</span>
00096 <span class="comment"> rprintfProgStrM("Protocol: ICMP\r\n");</span>
00097 <span class="comment"> else if(ipheader->proto == IP_PROTO_TCP)</span>
00098 <span class="comment"> rprintfProgStrM("Protocol: TCP\r\n");</span>
00099 <span class="comment"> else if(ipheader->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->proto);</span>
00103 <span class="comment"> </span>
00104 <span class="comment"> rprintfProgStrM("SourceIP: "); netPrintIPAddr(htonl(ipheader->srcipaddr)); rprintfCRLF();</span>
00105 <span class="comment"> rprintfProgStrM("Dest IP: "); netPrintIPAddr(htonl(ipheader->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->srcport));</span>
00112 <span class="comment"> rprintf("Dst Port: %d\r\n", htons(tcpheader->destport));</span>
00113 <span class="comment"> rprintfProgStrM("Seq Num : 0x"); rprintfu32(htonl(tcpheader->seqno)); rprintfCRLF();</span>
00114 <span class="comment"> rprintfProgStrM("Ack Num : 0x"); rprintfu32(htonl(tcpheader->ackno)); rprintfCRLF();</span>
00115 <span class="comment"> rprintfProgStrM("Flags : ");</span>
00116 <span class="comment"> if(tcpheader->flags & TCP_FLAGS_FIN)</span>
00117 <span class="comment"> rprintfProgStrM("FIN ");</span>
00118 <span class="comment"> if(tcpheader->flags & TCP_FLAGS_SYN)</span>
00119 <span class="comment"> rprintfProgStrM("SYN ");</span>
00120 <span class="comment"> if(tcpheader->flags & TCP_FLAGS_RST)</span>
00121 <span class="comment"> rprintfProgStrM("RST ");</span>
00122 <span class="comment"> if(tcpheader->flags & TCP_FLAGS_PSH)</span>
00123 <span class="comment"> rprintfProgStrM("PSH ");</span>
00124 <span class="comment"> if(tcpheader->flags & TCP_FLAGS_ACK)</span>
00125 <span class="comment"> rprintfProgStrM("ACK ");</span>
00126 <span class="comment"> if(tcpheader->flags & 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
<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