Main Page | Modules | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

net.c

Go to the documentation of this file.
00001 /*! \file net.c \brief Network support library. */
00002 //*****************************************************************************
00003 //
00004 // File Name    : 'net.c'
00005 // Title        : Network support library
00006 // Author       : Pascal Stang
00007 // Created      : 8/30/2004
00008 // Revised      : 7/3/2005
00009 // Version      : 0.1
00010 // Target MCU   : Atmel AVR series
00011 // Editor Tabs  : 4
00012 //
00013 //*****************************************************************************
00014 
00015 #include <inttypes.h>
00016 #include "global.h"
00017 #include "rprintf.h"
00018 
00019 #include "net.h"
00020 
00021 unsigned long IpMyAddress;
00022 
00023 uint16_t htons(uint16_t val)
00024 {
00025     return (val<<8) | (val>>8);
00026 }
00027 
00028 uint32_t htonl(uint32_t val)
00029 {
00030     return (htons(val>>16) | (uint32_t)htons(val&0x0000FFFF)<<16);
00031 }
00032 
00033 
00034 uint16_t netChecksum(void *data, uint16_t len)
00035 {
00036     register uint32_t sum = 0;
00037 
00038     for (;;) {
00039         if (len < 2)
00040             break;
00041         //sum += *((uint16_t *)data)++;
00042         sum += *((uint16_t *)data);
00043         data+=2;
00044         len -= 2;
00045     }
00046     if (len)
00047         sum += *(uint8_t *) data;
00048 
00049     while ((len = (uint16_t) (sum >> 16)) != 0)
00050         sum = (uint16_t) sum + len;
00051 
00052     return (uint16_t) sum ^ 0xFFFF;
00053 }
00054 
00055 void netPrintEthAddr(struct netEthAddr* ethaddr)
00056 {
00057     rprintfu08(ethaddr->addr[0]);
00058     rprintfChar(':');
00059     rprintfu08(ethaddr->addr[1]);
00060     rprintfChar(':');
00061     rprintfu08(ethaddr->addr[2]);
00062     rprintfChar(':');
00063     rprintfu08(ethaddr->addr[3]);
00064     rprintfChar(':');
00065     rprintfu08(ethaddr->addr[4]);
00066     rprintfChar(':');
00067     rprintfu08(ethaddr->addr[5]);
00068 }
00069 
00070 void netPrintIPAddr(uint32_t ipaddr)
00071 {
00072     rprintf("%d.%d.%d.%d",
00073         ((unsigned char*)&ipaddr)[3],
00074         ((unsigned char*)&ipaddr)[2],
00075         ((unsigned char*)&ipaddr)[1],
00076         ((unsigned char*)&ipaddr)[0]);
00077 }
00078 
00079 void netPrintEthHeader(struct netEthHeader* eth_hdr)
00080 {
00081     rprintfProgStrM("Eth Packet Type: 0x");
00082     rprintfu16(eth_hdr->type);
00083 
00084     rprintfProgStrM(" SRC:");
00085     rprintfu08(eth_hdr->src.addr[0]);
00086     rprintfu08(eth_hdr->src.addr[1]);
00087     rprintfu08(eth_hdr->src.addr[2]);
00088     rprintfu08(eth_hdr->src.addr[3]);
00089     rprintfu08(eth_hdr->src.addr[4]);
00090     rprintfu08(eth_hdr->src.addr[5]);
00091 
00092     rprintfProgStrM("->DST:");
00093     rprintfu08(eth_hdr->dest.addr[0]);
00094     rprintfu08(eth_hdr->dest.addr[1]);
00095     rprintfu08(eth_hdr->dest.addr[2]);
00096     rprintfu08(eth_hdr->dest.addr[3]);
00097     rprintfu08(eth_hdr->dest.addr[4]);
00098     rprintfu08(eth_hdr->dest.addr[5]);
00099     rprintfCRLF();
00100 }

Generated on Tue Sep 20 03:11:43 2005 for Procyon AVRlib by  doxygen 1.4.2