1/* $FreeBSD$ */ 2 3/* 4 * (C)opyright 1995 by Darren Reed. 5 * 6 * This code may be freely distributed as long as it retains this notice 7 * and is not changed in any way. The author accepts no responsibility 8 * for the use of this software. I hate legaleese, don't you ? 9 * 10 * @(#)ip_compat.h 1.2 12/7/95 11 */ 12 13/* 14 * These #ifdef's are here mainly for linux, but who knows, they may 15 * not be in other places or maybe one day linux will grow up and some 16 * of these will turn up there too. 17 */ 18#ifndef ICMP_UNREACH 19# define ICMP_UNREACH ICMP_DEST_UNREACH 20#endif 21#ifndef ICMP_SOURCEQUENCH 22# define ICMP_SOURCEQUENCH ICMP_SOURCE_QUENCH 23#endif 24#ifndef ICMP_TIMXCEED 25# define ICMP_TIMXCEED ICMP_TIME_EXCEEDED 26#endif 27#ifndef ICMP_PARAMPROB 28# define ICMP_PARAMPROB ICMP_PARAMETERPROB 29#endif 30#ifndef IPVERSION 31# define IPVERSION 4 32#endif 33#ifndef IPOPT_MINOFF 34# define IPOPT_MINOFF 4 35#endif 36#ifndef IPOPT_COPIED 37# define IPOPT_COPIED(x) ((x)&0x80) 38#endif 39#ifndef IPOPT_EOL 40# define IPOPT_EOL 0 41#endif 42#ifndef IPOPT_NOP 43# define IPOPT_NOP 1 44#endif 45#ifndef IP_MF 46# define IP_MF ((u_short)0x2000) 47#endif 48#ifndef ETHERTYPE_IP 49# define ETHERTYPE_IP ((u_short)0x0800) 50#endif 51#ifndef TH_FIN 52# define TH_FIN 0x01 53#endif 54#ifndef TH_SYN 55# define TH_SYN 0x02 56#endif 57#ifndef TH_RST 58# define TH_RST 0x04 59#endif 60#ifndef TH_PUSH 61# define TH_PUSH 0x08 62#endif 63#ifndef TH_ACK 64# define TH_ACK 0x10 65#endif 66#ifndef TH_URG 67# define TH_URG 0x20 68#endif 69#ifndef IPOPT_EOL 70# define IPOPT_EOL 0 71#endif 72#ifndef IPOPT_NOP 73# define IPOPT_NOP 1 74#endif 75#ifndef IPOPT_RR 76# define IPOPT_RR 7 77#endif 78#ifndef IPOPT_TS 79# define IPOPT_TS 68 80#endif 81#ifndef IPOPT_SECURITY 82# define IPOPT_SECURITY 130 83#endif 84#ifndef IPOPT_LSRR 85# define IPOPT_LSRR 131 86#endif 87#ifndef IPOPT_SATID 88# define IPOPT_SATID 136 89#endif 90#ifndef IPOPT_SSRR 91# define IPOPT_SSRR 137 92#endif 93#ifndef IPOPT_SECUR_UNCLASS 94# define IPOPT_SECUR_UNCLASS ((u_short)0x0000) 95#endif 96#ifndef IPOPT_SECUR_CONFID 97# define IPOPT_SECUR_CONFID ((u_short)0xf135) 98#endif 99#ifndef IPOPT_SECUR_EFTO 100# define IPOPT_SECUR_EFTO ((u_short)0x789a) 101#endif 102#ifndef IPOPT_SECUR_MMMM 103# define IPOPT_SECUR_MMMM ((u_short)0xbc4d) 104#endif 105#ifndef IPOPT_SECUR_RESTR 106# define IPOPT_SECUR_RESTR ((u_short)0xaf13) 107#endif 108#ifndef IPOPT_SECUR_SECRET 109# define IPOPT_SECUR_SECRET ((u_short)0xd788) 110#endif 111#ifndef IPOPT_SECUR_TOPSECRET 112# define IPOPT_SECUR_TOPSECRET ((u_short)0x6bc5) 113#endif 114 115#ifdef linux 116# if LINUX < 0200 117# define icmp icmphdr 118# define icmp_type type 119# define icmp_code code 120# endif 121 122/* 123 * From /usr/include/netinet/ip_var.h 124 * !%@#!$@# linux... 125 */ 126struct ipovly { 127 caddr_t ih_next, ih_prev; /* for protocol sequence q's */ 128 u_char ih_x1; /* (unused) */ 129 u_char ih_pr; /* protocol */ 130 short ih_len; /* protocol length */ 131 struct in_addr ih_src; /* source internet address */ 132 struct in_addr ih_dst; /* destination internet address */ 133}; 134 135typedef struct { 136 __u16 th_sport; 137 __u16 th_dport; 138 __u32 th_seq; 139 __u32 th_ack; 140# if defined(__i386__) || defined(__MIPSEL__) || defined(__alpha__) ||\ 141 defined(vax) 142 __u8 th_res:4; 143 __u8 th_off:4; 144#else 145 __u8 th_off:4; 146 __u8 th_res:4; 147#endif 148 __u8 th_flags; 149 __u16 th_win; 150 __u16 th_sum; 151 __u16 th_urp; 152} tcphdr_t; 153 154typedef struct { 155 __u16 uh_sport; 156 __u16 uh_dport; 157 __s16 uh_ulen; 158 __u16 uh_sum; 159} udphdr_t; 160 161typedef struct { 162# if defined(__i386__) || defined(__MIPSEL__) || defined(__alpha__) ||\ 163 defined(vax) 164 __u8 ip_hl:4; 165 __u8 ip_v:4; 166# else 167 __u8 ip_hl:4; 168 __u8 ip_v:4; 169# endif 170 __u8 ip_tos; 171 __u16 ip_len; 172 __u16 ip_id; 173 __u16 ip_off; 174 __u8 ip_ttl; 175 __u8 ip_p; 176 __u16 ip_sum; 177 struct in_addr ip_src; 178 struct in_addr ip_dst; 179} ip_t; 180 181typedef struct { 182 __u8 ether_dhost[6]; 183 __u8 ether_shost[6]; 184 __u16 ether_type; 185} ether_header_t; 186 187typedef struct icmp { 188 u_char icmp_type; /* type of message, see below */ 189 u_char icmp_code; /* type sub code */ 190 u_short icmp_cksum; /* ones complement cksum of struct */ 191 union { 192 u_char ih_pptr; /* ICMP_PARAMPROB */ 193 struct in_addr ih_gwaddr; /* ICMP_REDIRECT */ 194 struct ih_idseq { 195 n_short icd_id; 196 n_short icd_seq; 197 } ih_idseq; 198 int ih_void; 199 } icmp_hun; 200#define icmp_pptr icmp_hun.ih_pptr 201#define icmp_gwaddr icmp_hun.ih_gwaddr 202#define icmp_id icmp_hun.ih_idseq.icd_id 203#define icmp_seq icmp_hun.ih_idseq.icd_seq 204#define icmp_void icmp_hun.ih_void 205 union { 206 struct id_ts { 207 n_time its_otime; 208 n_time its_rtime; 209 n_time its_ttime; 210 } id_ts; 211 struct id_ip { 212 ip_t idi_ip; 213 /* options and then 64 bits of data */ 214 } id_ip; 215 u_long id_mask; 216 char id_data[1]; 217 } icmp_dun; 218#define icmp_otime icmp_dun.id_ts.its_otime 219#define icmp_rtime icmp_dun.id_ts.its_rtime 220#define icmp_ttime icmp_dun.id_ts.its_ttime 221#define icmp_ip icmp_dun.id_ip.idi_ip 222#define icmp_mask icmp_dun.id_mask 223#define icmp_data icmp_dun.id_data 224} icmphdr_t; 225 226# define bcopy(a,b,c) memmove(b,a,c) 227# define bcmp(a,b,c) memcmp(a,b,c) 228 229# define ifnet device 230 231#else 232 233typedef struct udphdr udphdr_t; 234typedef struct tcphdr tcphdr_t; 235typedef struct ip ip_t; 236typedef struct ether_header ether_header_t; 237 238#endif 239 240#if defined(__SVR4) || defined(__svr4__) 241# define bcopy(a,b,c) memmove(b,a,c) 242# define bcmp(a,b,c) memcmp(a,b,c) 243# define bzero(a,b) memset(a,0,b) 244#endif 245