#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 [] |
|
||||||||||||
|
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 }
|
|
|
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: ![]() |
|
|
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 }
|
|
|
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 }
|
|
|
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: ![]() |
|
|
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: ![]() |
|
|
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 }
|
|
|
Initial value:
"@(#) $Header: /nfs/jade/vint/CVSROOT/ns-2/emulate/inet.c,v 1.5 2000/02/08 23:35:13 salehi Exp $ (LBL)"
|
1.4.6