inet.c File Reference

#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <sys/param.h>
#include <netdb.h>
#include <sys/socket.h>
#include <unistd.h>
#include "config.h"
#include "inet.h"
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <stdio.h>

Include dependency graph for inet.c:

Go to the source code of this file.

Functions

u_short in_cksum (u_short *addr, int len)
char * InetNtoa (u_int32_t addr)
const char * intoa (u_int32_t addr)
u_int32_t LookupHostAddr (const char *s)
char * LookupHostName (u_int32_t addr)
u_int32_t LookupLocalAddr (void)
void print_ip (struct ip *ip)

Variables

static const char rcsid []


Function Documentation

u_short in_cksum u_short *  addr,
int  len
 

Definition at line 131 of file inet.c.

00134 {   
00135         register int nleft = len;       
00136         register u_short *w = addr;
00137         register int sum = 0;
00138         u_short answer = 0;
00139     
00140         /*                      
00141          * Our algorithm is simple, using a 32 bit accumulator (sum), we add
00142          * sequential 16 bit words to it, and at the end, fold back all the
00143          * carry bits from the top 16 bits into the lower 16 bits.
00144          */      
00145         while (nleft > 1)  {
00146                 sum += *w++;
00147                 nleft -= 2;
00148         }       
00149     
00150         /* mop up an odd byte, if necessary */
00151         if (nleft == 1) {
00152                 *(u_char *)(&answer) = *(u_char *)w ;
00153                 sum += answer;
00154         }
00155 
00156         /* add back carry outs from top 16 bits to low 16 bits */
00157         sum = (sum >> 16) + (sum & 0xffff);     /* add hi 16 to low 16 */
00158         sum += (sum >> 16);                     /* add carry */
00159         answer = ~sum;                          /* truncate to 16 bits */
00160         return(answer);
00161 }

char* InetNtoa u_int32_t  addr  ) 
 

Definition at line 99 of file inet.c.

References intoa().

Referenced by LookupHostName().

00100 {
00101     const char *s = intoa(addr);
00102     char *p = (char *)malloc(strlen(s) + 1);
00103     strcpy(p, s);
00104     return p;
00105 }

Here is the call graph for this function:

const char* intoa u_int32_t  addr  ) 
 

Definition at line 69 of file inet.c.

References NTOHL.

Referenced by InetNtoa().

00070 {
00071     register char *cp;
00072     register u_int byte;
00073     register int n;
00074     static char buf[sizeof(".xxx.xxx.xxx.xxx")];
00075 
00076     NTOHL(addr);
00077     cp = &buf[sizeof buf];
00078     *--cp = '\0';
00079 
00080     n = 4;
00081     do {
00082         byte = addr & 0xff;
00083         *--cp = byte % 10 + '0';
00084         byte /= 10;
00085         if (byte > 0) {
00086             *--cp = byte % 10 + '0';
00087             byte /= 10;
00088             if (byte > 0)
00089                 *--cp = byte + '0';
00090         }
00091         *--cp = '.';
00092         addr >>= 8;
00093     } while (--n > 0);
00094 
00095     return cp + 1;
00096 }

u_int32_t LookupHostAddr const char *  s  ) 
 

Definition at line 38 of file inet.c.

Referenced by IPNetwork::command(), UDPIPNetwork::command(), and LookupLocalAddr().

00039 {
00040     if (isdigit(*s))
00041         return (u_int32_t)inet_addr(s);
00042     else {
00043         struct hostent *hp = gethostbyname(s);
00044         if (hp == 0)
00045             /*XXX*/
00046             return (0);
00047         return *((u_int32_t **)hp->h_addr_list)[0];
00048     }
00049 }

char* LookupHostName u_int32_t  addr  ) 
 

Definition at line 108 of file inet.c.

References InetNtoa().

00109 {
00110     char *p;
00111     struct hostent* hp;
00112 
00113     /*XXX*/
00114     if (IN_MULTICAST(ntohl(addr)))
00115         return (InetNtoa(addr));
00116 
00117     hp = gethostbyaddr((char *)&addr, sizeof(addr), AF_INET);
00118     if (hp == 0) 
00119         return InetNtoa(addr);
00120     p = (char *)malloc(strlen(hp->h_name) + 1);
00121     strcpy(p, hp->h_name);
00122     return p;
00123 }

Here is the call graph for this function:

u_int32_t LookupLocalAddr void   ) 
 

Definition at line 52 of file inet.c.

References LookupHostAddr().

00053 {
00054     static u_int32_t local_addr;
00055     char name[MAXHOSTNAMELEN];
00056     
00057     if (local_addr == 0) {
00058         (void)gethostname(name, sizeof(name));
00059         local_addr = LookupHostAddr(name);
00060     }
00061     return (local_addr);
00062 }

Here is the call graph for this function:

void print_ip struct ip *  ip  ) 
 

Definition at line 167 of file inet.c.

00168 {
00169     char buf[64];
00170     u_short off = ntohs(ip->ip_off);
00171     printf("IP v:%d, ihl:%d, tos:%d, id:%d, off:%d [df:%d, mf:%d], sum:%d, prot:%d\n",
00172         ip->ip_v, ip->ip_hl, ip->ip_tos, ntohs(ip->ip_id),
00173         off & IP_OFFMASK,
00174         (off & IP_DF) ? 1 : 0,
00175         (off & IP_MF) ? 1 : 0,
00176         ip->ip_sum, ip->ip_p);
00177 #ifdef HAVE_ADDR2ASCII
00178     addr2ascii(AF_INET, &ip->ip_src, 4, buf);
00179 #else
00180     inet_ntoa(ip->ip_src);
00181 #endif /* HAVE_ADDR2ASCII */
00182 #ifdef HAVE_ADDR2ASCII
00183     printf("IP len:%d ttl: %d, src: %s, dst: %s\n",
00184         ntohs(ip->ip_len), ip->ip_ttl, buf,
00185             addr2ascii(AF_INET, &ip->ip_dst, 4, 0));
00186 #else
00187     printf("IP len:%d ttl: %d, src: %s, dst: %s\n",
00188         ntohs(ip->ip_len), ip->ip_ttl, buf,
00189            inet_ntoa(ip->ip_src));
00190 #endif /* HAVE_ADDR2ASCII */
00191 }


Variable Documentation

const char rcsid[] [static]
 

Initial value:

    "@(#) $Header: /nfs/jade/vint/CVSROOT/ns-2/emulate/inet.c,v 1.5 2000/02/08 23:35:13 salehi Exp $ (LBL)"

Definition at line 18 of file inet.c.


Generated on Tue Mar 6 16:53:52 2007 for ns2 Network Simulator 2.29 by  doxygen 1.4.6