$OpenBSD: patch-tcpip_c,v 1.1 2003/04/22 12:08:05 avsm Exp $ --- tcpip.c.orig Tue Sep 22 21:35:43 1998 +++ tcpip.c Mon Apr 14 23:50:21 2003 @@ -40,7 +40,7 @@ interfacerec; typedef struct { struct in_addr addr; - unsigned long naddr; /* netmask */ + u_int32_t naddr; /* netmask */ interfacerec *iface; } routerec; @@ -61,11 +61,11 @@ pcap_t *PCapHdlr=NULL; #endif int sendsock, readsock; -unsigned short ipident; +u_int16_t ipident; /* This function will determine the checksum for a specific packet. Used by */ /* nearly EVERYTHING on the internet */ -unsigned short +u_int16_t inet_checksum (void *addr, int len) { register int nleft = len; @@ -106,16 +106,16 @@ struct psuedohdr { struct in_addr dest_address; unsigned char place_holder; unsigned char protocol; - unsigned short length; + u_int16_t length; } psuedohdr; -unsigned short tcp_checksum(char *packet, +u_int16_t tcp_checksum(char *packet, int length, struct in_addr source_address, struct in_addr dest_address) { char *psuedo_packet; - unsigned short cksum; + u_int16_t cksum; psuedohdr.protocol = IPPROTO_TCP; psuedohdr.length = htons(length); @@ -133,7 +133,7 @@ unsigned short tcp_checksum(char *packet memcpy((psuedo_packet + sizeof(psuedohdr)), packet,length); - cksum = inet_checksum((unsigned short *)psuedo_packet,(length + sizeof(psuedohdr))); + cksum = inet_checksum((u_int16_t *)psuedo_packet,(length + sizeof(psuedohdr))); free(psuedo_packet); return cksum; } @@ -153,7 +153,7 @@ resolve_host (char *host, struct sockadd memset (sa, 0, sizeof (struct sockaddr)); sa->sin_family = AF_INET; sa->sin_addr.s_addr = inet_addr (host); - if ((long) inet_addr (host) == -1) + if ((int32_t) inet_addr (host) == -1) { ent = gethostbyname (host); if (ent != NULL) @@ -173,7 +173,7 @@ resolve_host (char *host, struct sockadd /* Sends a TCP packet */ void -sendtcp (spoofrec * spoof, unsigned short flags, short rep) +sendtcp (spoofrec * spoof, u_int16_t flags, short rep) { struct tcphdr tcp; struct ip ip; @@ -271,6 +271,7 @@ gettcp (spoofrec * spoof, tcprec * dtcp) switch(datalink) { case DLT_EN10MB: offset = 14; break; + case DLT_LOOP: case DLT_NULL: case DLT_PPP: offset = 4; break; @@ -285,6 +286,8 @@ gettcp (spoofrec * spoof, tcprec * dtcp) offset = 8; break; case DLT_IEEE802: offset = 22; break; + case DLT_ENC: + offset = 12; break; default: fprintf(stderr, "unknown datalink type (%d)", datalink); return(0); @@ -319,7 +322,7 @@ gettcp (spoofrec * spoof, tcprec * dtcp) /*-- Linux: Search out IP in Routing tables --*/ /*-- Other: Return hostname ip ---------------*/ struct in_addr -getlocalip (unsigned long dest) +getlocalip (u_int32_t dest) { static struct in_addr ina; #ifdef LINUX /*---------------------------------------------- LINUX --*/ @@ -327,7 +330,7 @@ getlocalip (unsigned long dest) for (i = 0; i < numroutes; i++) { - if ((dest & routes[i].naddr) == (unsigned long) routes[i].addr.s_addr) + if ((dest & routes[i].naddr) == (u_int32_t) routes[i].addr.s_addr) { return (routes[i].iface->addr); } @@ -434,7 +437,7 @@ void init_route_tables(void) else strcpy (iface, ptr); ptr = strtok (NULL, "\t "); /* hack avoiding fscanf */ - routes[i].addr.s_addr=(unsigned long)strtol(ptr,NULL,16); + routes[i].addr.s_addr=(u_int32_t)strtol(ptr,NULL,16); for (i1 = 0; i1 < 6; i1++) { ptr = strtok (NULL, "\t "); /* ignore Gateway Flags RefCnt Use Metric */ @@ -443,7 +446,7 @@ void init_route_tables(void) fputs ("Error parsing /proc/net/route\n", stderr); continue; } - routes[i].naddr=(unsigned long)strtol(ptr,NULL,16); /* Netmask */ + routes[i].naddr=(u_int32_t)strtol(ptr,NULL,16); /* Netmask */ found = 0; for (i1 = 0; i1 < numinterfaces; i1++)