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