ip_fil_compat.c revision 1.1 1 1.1 christos /* $NetBSD: ip_fil_compat.c,v 1.1 2012/03/23 20:36:55 christos Exp $ */
2 1.1 christos
3 1.1 christos /*
4 1.1 christos * Copyright (C) 2002-2003 by Darren Reed.
5 1.1 christos *
6 1.1 christos * See the IPFILTER.LICENCE file for details on licencing.
7 1.1 christos */
8 1.1 christos #if defined(KERNEL) || defined(_KERNEL)
9 1.1 christos # undef KERNEL
10 1.1 christos # undef _KERNEL
11 1.1 christos # define KERNEL 1
12 1.1 christos # define _KERNEL 1
13 1.1 christos #endif
14 1.1 christos #if defined(__osf__)
15 1.1 christos # define _PROTO_NET_H_
16 1.1 christos #endif
17 1.1 christos #include <sys/param.h>
18 1.1 christos #include <sys/errno.h>
19 1.1 christos #include <sys/types.h>
20 1.1 christos #include <sys/time.h>
21 1.1 christos #include <sys/file.h>
22 1.1 christos #if __FreeBSD_version >= 220000 && defined(_KERNEL)
23 1.1 christos # include <sys/fcntl.h>
24 1.1 christos # include <sys/filio.h>
25 1.1 christos #else
26 1.1 christos # include <sys/ioctl.h>
27 1.1 christos #endif
28 1.1 christos #if !defined(_KERNEL)
29 1.1 christos # include <string.h>
30 1.1 christos # define _KERNEL
31 1.1 christos # ifdef __OpenBSD__
32 1.1 christos struct file;
33 1.1 christos # endif
34 1.1 christos # include <sys/uio.h>
35 1.1 christos # undef _KERNEL
36 1.1 christos #endif
37 1.1 christos #include <sys/socket.h>
38 1.1 christos #if (defined(__osf__) || defined(AIX) || defined(__hpux) || defined(__sgi)) && defined(_KERNEL)
39 1.1 christos # include "radix_ipf_local.h"
40 1.1 christos # define _RADIX_H_
41 1.1 christos #endif
42 1.1 christos #include <net/if.h>
43 1.1 christos #if defined(__FreeBSD__)
44 1.1 christos # include <sys/cdefs.h>
45 1.1 christos # include <sys/proc.h>
46 1.1 christos #endif
47 1.1 christos #if defined(_KERNEL)
48 1.1 christos # include <sys/systm.h>
49 1.1 christos # if !defined(__SVR4) && !defined(__svr4__)
50 1.1 christos # include <sys/mbuf.h>
51 1.1 christos # endif
52 1.1 christos #endif
53 1.1 christos #include <netinet/in.h>
54 1.1 christos
55 1.1 christos #include "netinet/ip_compat.h"
56 1.1 christos #include "netinet/ip_fil.h"
57 1.1 christos #include "netinet/ip_pool.h"
58 1.1 christos #include "netinet/ip_htable.h"
59 1.1 christos #include "netinet/ip_lookup.h"
60 1.1 christos #include "netinet/ip_nat.h"
61 1.1 christos #include "netinet/ip_state.h"
62 1.1 christos #include "netinet/ip_proxy.h"
63 1.1 christos #include "netinet/ip_auth.h"
64 1.1 christos /* END OF INCLUDES */
65 1.1 christos
66 1.1 christos /*
67 1.1 christos * NetBSD has moved to 64bit time_t for all architectures.
68 1.1 christos * For some, such as sparc64, there is no change because long is already
69 1.1 christos * 64bit, but for others (i386), there is...
70 1.1 christos */
71 1.1 christos #ifdef IPFILTER_COMPAT
72 1.1 christos
73 1.1 christos # ifdef __NetBSD__
74 1.1 christos typedef struct timeval_l {
75 1.1 christos long tv_sec;
76 1.1 christos long tv_usec;
77 1.1 christos } timeval_l_t;
78 1.1 christos # endif
79 1.1 christos
80 1.1 christos /* ------------------------------------------------------------------------ */
81 1.1 christos
82 1.1 christos typedef struct tcpinfo4 {
83 1.1 christos u_short ts_sport;
84 1.1 christos u_short ts_dport;
85 1.1 christos tcpdata_t ts_data[2];
86 1.1 christos } tcpinfo4_t;
87 1.1 christos
88 1.1 christos static void ipf_v5tcpinfoto4 __P((tcpinfo_t *, tcpinfo4_t *));
89 1.1 christos
90 1.1 christos static void
91 1.1 christos ipf_v5tcpinfoto4(v5, v4)
92 1.1 christos tcpinfo_t *v5;
93 1.1 christos tcpinfo4_t *v4;
94 1.1 christos {
95 1.1 christos v4->ts_sport = v5->ts_sport;
96 1.1 christos v4->ts_dport = v5->ts_dport;
97 1.1 christos v4->ts_data[0] = v5->ts_data[0];
98 1.1 christos v4->ts_data[1] = v5->ts_data[1];
99 1.1 christos }
100 1.1 christos
101 1.1 christos typedef struct fr_ip4 {
102 1.1 christos u_32_t fi_v:4;
103 1.1 christos u_32_t fi_xx:4;
104 1.1 christos u_32_t fi_tos:8;
105 1.1 christos u_32_t fi_ttl:8;
106 1.1 christos u_32_t fi_p:8;
107 1.1 christos u_32_t fi_optmsk;
108 1.1 christos i6addr_t fi_src;
109 1.1 christos i6addr_t fi_dst;
110 1.1 christos u_short ofi_secmsk;
111 1.1 christos u_short ofi_auth;
112 1.1 christos u_32_t fi_flx;
113 1.1 christos u_32_t fi_tcpmsk;
114 1.1 christos u_32_t fi_res1;
115 1.1 christos } frip4_t;
116 1.1 christos
117 1.1 christos typedef struct frpcmp4 {
118 1.1 christos int frp_cmp;
119 1.1 christos u_short frp_port;
120 1.1 christos u_short frp_top;
121 1.1 christos } frpcmp4_t;
122 1.1 christos
123 1.1 christos typedef struct frtuc4 {
124 1.1 christos u_char ftu_tcpfm;
125 1.1 christos u_char ftu_tcpf;
126 1.1 christos frpcmp4_t ftu_src;
127 1.1 christos frpcmp4_t ftu_dst;
128 1.1 christos } frtuc4_t;
129 1.1 christos
130 1.1 christos typedef struct fripf4 {
131 1.1 christos frip4_t fri_ip;
132 1.1 christos frip4_t fri_mip;
133 1.1 christos
134 1.1 christos u_short fri_icmpm;
135 1.1 christos u_short fri_icmp;
136 1.1 christos
137 1.1 christos frtuc4_t fri_tuc;
138 1.1 christos int fri_satype;
139 1.1 christos int fri_datype;
140 1.1 christos int fri_sifpidx;
141 1.1 christos int fri_difpidx;
142 1.1 christos } fripf4_t;
143 1.1 christos
144 1.1 christos typedef struct frdest_4 {
145 1.1 christos void *fd_ifp;
146 1.1 christos i6addr_t ofd_ip6;
147 1.1 christos char fd_ifname[LIFNAMSIZ];
148 1.1 christos } frdest_4_t;
149 1.1 christos
150 1.1 christos /* ------------------------------------------------------------------------ */
151 1.1 christos
152 1.1 christos /* 5.1.0 new release (current)
153 1.1 christos * 4.1.34 changed the size of the time structure used for pps
154 1.1 christos * 4.1.16 moved the location of fr_flineno
155 1.1 christos * 4.1.0 base version
156 1.1 christos */
157 1.1 christos typedef struct frentry_4_1_34 {
158 1.1 christos ipfmutex_t fr_lock;
159 1.1 christos struct frentry *fr_next;
160 1.1 christos struct frentry **fr_grp;
161 1.1 christos struct ipscan *fr_isc;
162 1.1 christos void *fr_ifas[4];
163 1.1 christos void *fr_ptr; /* for use with fr_arg */
164 1.1 christos char *fr_comment; /* text comment for rule */
165 1.1 christos int fr_ref; /* reference count - for grouping */
166 1.1 christos int fr_statecnt; /* state count - for limit rules */
167 1.1 christos int fr_flineno; /* line number from conf file */
168 1.1 christos U_QUAD_T fr_hits;
169 1.1 christos U_QUAD_T fr_bytes;
170 1.1 christos union {
171 1.1 christos struct timeval frp_lastpkt;
172 1.1 christos char frp_bytes[12];
173 1.1 christos } fr_lpu;
174 1.1 christos int fr_curpps;
175 1.1 christos union {
176 1.1 christos void *fru_data;
177 1.1 christos char *fru_caddr;
178 1.1 christos fripf4_t *fru_ipf;
179 1.1 christos frentfunc_t fru_func;
180 1.1 christos } fr_dun;
181 1.1 christos ipfunc_t fr_func; /* call this function */
182 1.1 christos int fr_dsize;
183 1.1 christos int fr_pps;
184 1.1 christos int fr_statemax; /* max reference count */
185 1.1 christos u_32_t fr_type;
186 1.1 christos u_32_t fr_flags; /* per-rule flags && options (see below) */
187 1.1 christos u_32_t fr_logtag; /* user defined log tag # */
188 1.1 christos u_32_t fr_collect; /* collection number */
189 1.1 christos u_int fr_arg; /* misc. numeric arg for rule */
190 1.1 christos u_int fr_loglevel; /* syslog log facility + priority */
191 1.1 christos u_int fr_age[2]; /* non-TCP timeouts */
192 1.1 christos u_char fr_v;
193 1.1 christos u_char fr_icode; /* return ICMP code */
194 1.1 christos char fr_group[FR_GROUPLEN]; /* group to which this rule belongs */
195 1.1 christos char fr_grhead[FR_GROUPLEN]; /* group # which this rule starts */
196 1.1 christos ipftag_t fr_nattag;
197 1.1 christos char fr_ifnames[4][LIFNAMSIZ];
198 1.1 christos char fr_isctag[16];
199 1.1 christos frdest_4_t fr_tifs[2]; /* "to"/"reply-to" interface */
200 1.1 christos frdest_4_t fr_dif; /* duplicate packet interface */
201 1.1 christos u_int fr_cksum; /* checksum on filter rules for performance */
202 1.1 christos } frentry_4_1_34_t;
203 1.1 christos
204 1.1 christos typedef struct frentry_4_1_16 {
205 1.1 christos ipfmutex_t fr_lock;
206 1.1 christos struct frentry *fr_next;
207 1.1 christos struct frentry **fr_grp;
208 1.1 christos struct ipscan *fr_isc;
209 1.1 christos void *fr_ifas[4];
210 1.1 christos void *fr_ptr;
211 1.1 christos char *fr_comment;
212 1.1 christos int fr_ref;
213 1.1 christos int fr_statecnt;
214 1.1 christos int fr_flineno;
215 1.1 christos U_QUAD_T fr_hits;
216 1.1 christos U_QUAD_T fr_bytes;
217 1.1 christos union {
218 1.1 christos #ifdef __NetBSD__
219 1.1 christos timeval_l_t frp_lastpkt;
220 1.1 christos #else
221 1.1 christos struct timeval frp_lastpkt;
222 1.1 christos #endif
223 1.1 christos } fr_lpu;
224 1.1 christos int fr_curpps;
225 1.1 christos union {
226 1.1 christos void *fru_data;
227 1.1 christos caddr_t fru_caddr;
228 1.1 christos fripf4_t *fru_ipf;
229 1.1 christos frentfunc_t fru_func;
230 1.1 christos } fr_dun;
231 1.1 christos ipfunc_t fr_func;
232 1.1 christos int fr_dsize;
233 1.1 christos int fr_pps;
234 1.1 christos int fr_statemax;
235 1.1 christos u_32_t fr_type;
236 1.1 christos u_32_t fr_flags;
237 1.1 christos u_32_t fr_logtag;
238 1.1 christos u_32_t fr_collect;
239 1.1 christos u_int fr_arg;
240 1.1 christos u_int fr_loglevel;
241 1.1 christos u_int fr_age[2];
242 1.1 christos u_char fr_v;
243 1.1 christos u_char fr_icode;
244 1.1 christos char fr_group[FR_GROUPLEN];
245 1.1 christos char fr_grhead[FR_GROUPLEN];
246 1.1 christos ipftag_t fr_nattag;
247 1.1 christos char fr_ifnames[4][LIFNAMSIZ];
248 1.1 christos char fr_isctag[16];
249 1.1 christos frdest_4_t fr_tifs[2];
250 1.1 christos frdest_4_t fr_dif;
251 1.1 christos u_int fr_cksum;
252 1.1 christos } frentry_4_1_16_t;
253 1.1 christos
254 1.1 christos typedef struct frentry_4_1_0 {
255 1.1 christos ipfmutex_t fr_lock;
256 1.1 christos struct frentry *fr_next;
257 1.1 christos struct frentry **fr_grp;
258 1.1 christos struct ipscan *fr_isc;
259 1.1 christos void *fr_ifas[4];
260 1.1 christos void *fr_ptr;
261 1.1 christos char *fr_comment;
262 1.1 christos int fr_ref;
263 1.1 christos int fr_statecnt;
264 1.1 christos U_QUAD_T fr_hits;
265 1.1 christos U_QUAD_T fr_bytes;
266 1.1 christos union {
267 1.1 christos #ifdef __NetBSD__
268 1.1 christos timeval_l_t frp_lastpkt;
269 1.1 christos #else
270 1.1 christos struct timeval frp_lastpkt;
271 1.1 christos #endif
272 1.1 christos } fr_lpu;
273 1.1 christos int fr_curpps;
274 1.1 christos
275 1.1 christos union {
276 1.1 christos void *fru_data;
277 1.1 christos caddr_t fru_caddr;
278 1.1 christos fripf4_t *fru_ipf;
279 1.1 christos frentfunc_t fru_func;
280 1.1 christos } fr_dun;
281 1.1 christos /*
282 1.1 christos * Fields after this may not change whilst in the kernel.
283 1.1 christos */
284 1.1 christos ipfunc_t fr_func;
285 1.1 christos int fr_dsize;
286 1.1 christos int fr_pps;
287 1.1 christos int fr_statemax;
288 1.1 christos int fr_flineno;
289 1.1 christos u_32_t fr_type;
290 1.1 christos u_32_t fr_flags;
291 1.1 christos u_32_t fr_logtag;
292 1.1 christos u_32_t fr_collect;
293 1.1 christos u_int fr_arg;
294 1.1 christos u_int fr_loglevel;
295 1.1 christos u_int fr_age[2];
296 1.1 christos u_char fr_v;
297 1.1 christos u_char fr_icode;
298 1.1 christos char fr_group[FR_GROUPLEN];
299 1.1 christos char fr_grhead[FR_GROUPLEN];
300 1.1 christos ipftag_t fr_nattag;
301 1.1 christos char fr_ifnames[4][LIFNAMSIZ];
302 1.1 christos char fr_isctag[16];
303 1.1 christos frdest_4_t fr_tifs[2];
304 1.1 christos frdest_4_t fr_dif;
305 1.1 christos u_int fr_cksum;
306 1.1 christos } frentry_4_1_0_t;
307 1.1 christos
308 1.1 christos /* ------------------------------------------------------------------------ */
309 1.1 christos
310 1.1 christos /*
311 1.1 christos * 5.1.0 new release (current)
312 1.1 christos * 4.1.32 removed both fin_state and fin_nat, added fin_pktnum
313 1.1 christos * 4.1.24 added fin_cksum
314 1.1 christos * 4.1.23 added fin_exthdr
315 1.1 christos * 4.1.11 added fin_ifname
316 1.1 christos * 4.1.4 added fin_hbuf
317 1.1 christos */
318 1.1 christos typedef struct fr_info_4_1_32 {
319 1.1 christos void *fin_ifp; /* interface packet is `on' */
320 1.1 christos frip4_t fin_fi; /* IP Packet summary */
321 1.1 christos union {
322 1.1 christos u_short fid_16[2]; /* TCP/UDP ports, ICMP code/type */
323 1.1 christos u_32_t fid_32;
324 1.1 christos } fin_dat;
325 1.1 christos int fin_out; /* in or out ? 1 == out, 0 == in */
326 1.1 christos int fin_rev; /* state only: 1 = reverse */
327 1.1 christos u_short fin_hlen; /* length of IP header in bytes */
328 1.1 christos u_char ofin_tcpf; /* TCP header flags (SYN, ACK, etc) */
329 1.1 christos u_char fin_icode; /* ICMP error to return */
330 1.1 christos u_32_t fin_rule; /* rule # last matched */
331 1.1 christos char fin_group[FR_GROUPLEN]; /* group number, -1 for none */
332 1.1 christos struct frentry *fin_fr; /* last matching rule */
333 1.1 christos void *fin_dp; /* start of data past IP header */
334 1.1 christos int fin_dlen; /* length of data portion of packet */
335 1.1 christos int fin_plen;
336 1.1 christos int fin_ipoff; /* # bytes from buffer start to hdr */
337 1.1 christos u_short fin_id; /* IP packet id field */
338 1.1 christos u_short fin_off;
339 1.1 christos int fin_depth; /* Group nesting depth */
340 1.1 christos int fin_error; /* Error code to return */
341 1.1 christos int fin_cksum; /* -1 bad, 1 good, 0 not done */
342 1.1 christos u_int fin_pktnum;
343 1.1 christos void *fin_nattag;
344 1.1 christos void *fin_exthdr;
345 1.1 christos ip_t *ofin_ip;
346 1.1 christos mb_t **fin_mp; /* pointer to pointer to mbuf */
347 1.1 christos mb_t *fin_m; /* pointer to mbuf */
348 1.1 christos #ifdef MENTAT
349 1.1 christos mb_t *fin_qfm; /* pointer to mblk where pkt starts */
350 1.1 christos void *fin_qpi;
351 1.1 christos char fin_ifname[LIFNAMSIZ];
352 1.1 christos #endif
353 1.1 christos #ifdef __sgi
354 1.1 christos void *fin_hbuf;
355 1.1 christos #endif
356 1.1 christos } fr_info_4_1_32_t;
357 1.1 christos
358 1.1 christos typedef struct fr_info_4_1_24 {
359 1.1 christos void *fin_ifp;
360 1.1 christos frip4_t fin_fi;
361 1.1 christos union {
362 1.1 christos u_short fid_16[2];
363 1.1 christos u_32_t fid_32;
364 1.1 christos } fin_dat;
365 1.1 christos int fin_out;
366 1.1 christos int fin_rev;
367 1.1 christos u_short fin_hlen;
368 1.1 christos u_char ofin_tcpf;
369 1.1 christos u_char fin_icode;
370 1.1 christos u_32_t fin_rule;
371 1.1 christos char fin_group[FR_GROUPLEN];
372 1.1 christos struct frentry *fin_fr;
373 1.1 christos void *fin_dp;
374 1.1 christos int fin_dlen;
375 1.1 christos int fin_plen;
376 1.1 christos int fin_ipoff;
377 1.1 christos u_short fin_id;
378 1.1 christos u_short fin_off;
379 1.1 christos int fin_depth;
380 1.1 christos int fin_error;
381 1.1 christos int fin_cksum;
382 1.1 christos void *fin_state;
383 1.1 christos void *fin_nat;
384 1.1 christos void *fin_nattag;
385 1.1 christos void *fin_exthdr;
386 1.1 christos ip_t *ofin_ip;
387 1.1 christos mb_t **fin_mp;
388 1.1 christos mb_t *fin_m;
389 1.1 christos #ifdef MENTAT
390 1.1 christos mb_t *fin_qfm;
391 1.1 christos void *fin_qpi;
392 1.1 christos char fin_ifname[LIFNAMSIZ];
393 1.1 christos #endif
394 1.1 christos #ifdef __sgi
395 1.1 christos void *fin_hbuf;
396 1.1 christos #endif
397 1.1 christos } fr_info_4_1_24_t;
398 1.1 christos
399 1.1 christos typedef struct fr_info_4_1_23 {
400 1.1 christos void *fin_ifp;
401 1.1 christos frip4_t fin_fi;
402 1.1 christos union {
403 1.1 christos u_short fid_16[2];
404 1.1 christos u_32_t fid_32;
405 1.1 christos } fin_dat;
406 1.1 christos int fin_out;
407 1.1 christos int fin_rev;
408 1.1 christos u_short fin_hlen;
409 1.1 christos u_char ofin_tcpf;
410 1.1 christos u_char fin_icode;
411 1.1 christos u_32_t fin_rule;
412 1.1 christos char fin_group[FR_GROUPLEN];
413 1.1 christos struct frentry *fin_fr;
414 1.1 christos void *fin_dp;
415 1.1 christos int fin_dlen;
416 1.1 christos int fin_plen;
417 1.1 christos int fin_ipoff;
418 1.1 christos u_short fin_id;
419 1.1 christos u_short fin_off;
420 1.1 christos int fin_depth;
421 1.1 christos int fin_error;
422 1.1 christos void *fin_state;
423 1.1 christos void *fin_nat;
424 1.1 christos void *fin_nattag;
425 1.1 christos void *fin_exthdr;
426 1.1 christos ip_t *ofin_ip;
427 1.1 christos mb_t **fin_mp;
428 1.1 christos mb_t *fin_m;
429 1.1 christos #ifdef MENTAT
430 1.1 christos mb_t *fin_qfm;
431 1.1 christos void *fin_qpi;
432 1.1 christos char fin_ifname[LIFNAMSIZ];
433 1.1 christos #endif
434 1.1 christos #ifdef __sgi
435 1.1 christos void *fin_hbuf;
436 1.1 christos #endif
437 1.1 christos } fr_info_4_1_23_t;
438 1.1 christos
439 1.1 christos typedef struct fr_info_4_1_11 {
440 1.1 christos void *fin_ifp;
441 1.1 christos frip4_t fin_fi;
442 1.1 christos union {
443 1.1 christos u_short fid_16[2];
444 1.1 christos u_32_t fid_32;
445 1.1 christos } fin_dat;
446 1.1 christos int fin_out;
447 1.1 christos int fin_rev;
448 1.1 christos u_short fin_hlen;
449 1.1 christos u_char ofin_tcpf;
450 1.1 christos u_char fin_icode;
451 1.1 christos u_32_t fin_rule;
452 1.1 christos char fin_group[FR_GROUPLEN];
453 1.1 christos struct frentry *fin_fr;
454 1.1 christos void *fin_dp;
455 1.1 christos int fin_dlen;
456 1.1 christos int fin_plen;
457 1.1 christos int fin_ipoff;
458 1.1 christos u_short fin_id;
459 1.1 christos u_short fin_off;
460 1.1 christos int fin_depth;
461 1.1 christos int fin_error;
462 1.1 christos void *fin_state;
463 1.1 christos void *fin_nat;
464 1.1 christos void *fin_nattag;
465 1.1 christos ip_t *ofin_ip;
466 1.1 christos mb_t **fin_mp;
467 1.1 christos mb_t *fin_m;
468 1.1 christos #ifdef MENTAT
469 1.1 christos mb_t *fin_qfm;
470 1.1 christos void *fin_qpi;
471 1.1 christos char fin_ifname[LIFNAMSIZ];
472 1.1 christos #endif
473 1.1 christos #ifdef __sgi
474 1.1 christos void *fin_hbuf;
475 1.1 christos #endif
476 1.1 christos } fr_info_4_1_11_t;
477 1.1 christos
478 1.1 christos /* ------------------------------------------------------------------------ */
479 1.1 christos
480 1.1 christos typedef struct filterstats_4_1 {
481 1.1 christos u_long fr_pass; /* packets allowed */
482 1.1 christos u_long fr_block; /* packets denied */
483 1.1 christos u_long fr_nom; /* packets which don't match any rule */
484 1.1 christos u_long fr_short; /* packets which are short */
485 1.1 christos u_long fr_ppkl; /* packets allowed and logged */
486 1.1 christos u_long fr_bpkl; /* packets denied and logged */
487 1.1 christos u_long fr_npkl; /* packets unmatched and logged */
488 1.1 christos u_long fr_pkl; /* packets logged */
489 1.1 christos u_long fr_skip; /* packets to be logged but buffer full */
490 1.1 christos u_long fr_ret; /* packets for which a return is sent */
491 1.1 christos u_long fr_acct; /* packets for which counting was performed */
492 1.1 christos u_long fr_bnfr; /* bad attempts to allocate fragment state */
493 1.1 christos u_long fr_nfr; /* new fragment state kept */
494 1.1 christos u_long fr_cfr; /* add new fragment state but complete pkt */
495 1.1 christos u_long fr_bads; /* bad attempts to allocate packet state */
496 1.1 christos u_long fr_ads; /* new packet state kept */
497 1.1 christos u_long fr_chit; /* cached hit */
498 1.1 christos u_long fr_tcpbad; /* TCP checksum check failures */
499 1.1 christos u_long fr_pull[2]; /* good and bad pullup attempts */
500 1.1 christos u_long fr_badsrc; /* source received doesn't match route */
501 1.1 christos u_long fr_badttl; /* TTL in packet doesn't reach minimum */
502 1.1 christos u_long fr_bad; /* bad IP packets to the filter */
503 1.1 christos u_long fr_ipv6; /* IPv6 packets in/out */
504 1.1 christos u_long fr_ppshit; /* dropped because of pps ceiling */
505 1.1 christos u_long fr_ipud; /* IP id update failures */
506 1.1 christos } filterstats_4_1_t;
507 1.1 christos
508 1.1 christos /*
509 1.1 christos * 5.1.0 new release (current)
510 1.1 christos * 4.1.33 changed the size of f_locks from IPL_LOGMAX to IPL_LOGSIZE
511 1.1 christos */
512 1.1 christos typedef struct friostat_4_1_33 {
513 1.1 christos struct filterstats_4_1 of_st[2];
514 1.1 christos struct frentry *f_ipf[2][2];
515 1.1 christos struct frentry *f_acct[2][2];
516 1.1 christos struct frentry *f_ipf6[2][2];
517 1.1 christos struct frentry *f_acct6[2][2];
518 1.1 christos struct frentry *f_auth;
519 1.1 christos struct frgroup *f_groups[IPL_LOGSIZE][2];
520 1.1 christos u_long f_froute[2];
521 1.1 christos u_long f_ticks;
522 1.1 christos int f_locks[IPL_LOGSIZE];
523 1.1 christos size_t f_kmutex_sz;
524 1.1 christos size_t f_krwlock_sz;
525 1.1 christos int f_defpass; /* default pass - from fr_pass */
526 1.1 christos int f_active; /* 1 or 0 - active rule set */
527 1.1 christos int f_running; /* 1 if running, else 0 */
528 1.1 christos int f_logging; /* 1 if enabled, else 0 */
529 1.1 christos int f_features;
530 1.1 christos char f_version[32]; /* version string */
531 1.1 christos } friostat_4_1_33_t;
532 1.1 christos
533 1.1 christos typedef struct friostat_4_1_0 {
534 1.1 christos struct filterstats_4_1 of_st[2];
535 1.1 christos struct frentry *f_ipf[2][2];
536 1.1 christos struct frentry *f_acct[2][2];
537 1.1 christos struct frentry *f_ipf6[2][2];
538 1.1 christos struct frentry *f_acct6[2][2];
539 1.1 christos struct frentry *f_auth;
540 1.1 christos struct frgroup *f_groups[IPL_LOGSIZE][2];
541 1.1 christos u_long f_froute[2];
542 1.1 christos u_long f_ticks;
543 1.1 christos int f_locks[IPL_LOGMAX];
544 1.1 christos size_t f_kmutex_sz;
545 1.1 christos size_t f_krwlock_sz;
546 1.1 christos int f_defpass;
547 1.1 christos int f_active;
548 1.1 christos int f_running;
549 1.1 christos int f_logging;
550 1.1 christos int f_features;
551 1.1 christos char f_version[32];
552 1.1 christos } friostat_4_1_0_t;
553 1.1 christos
554 1.1 christos /* ------------------------------------------------------------------------ */
555 1.1 christos
556 1.1 christos /*
557 1.1 christos * 5.1.0 new release (current)
558 1.1 christos * 4.1.14 added in_lock
559 1.1 christos */
560 1.1 christos typedef struct ipnat_4_1_14 {
561 1.1 christos ipfmutex_t in_lock;
562 1.1 christos struct ipnat *in_next; /* NAT rule list next */
563 1.1 christos struct ipnat *in_rnext; /* rdr rule hash next */
564 1.1 christos struct ipnat **in_prnext; /* prior rdr next ptr */
565 1.1 christos struct ipnat *in_mnext; /* map rule hash next */
566 1.1 christos struct ipnat **in_pmnext; /* prior map next ptr */
567 1.1 christos struct ipftq *in_tqehead[2];
568 1.1 christos void *in_ifps[2];
569 1.1 christos void *in_apr;
570 1.1 christos char *in_comment;
571 1.1 christos i6addr_t in_next6;
572 1.1 christos u_long in_space;
573 1.1 christos u_long in_hits;
574 1.1 christos u_int in_use;
575 1.1 christos u_int in_hv;
576 1.1 christos int in_flineno; /* conf. file line number */
577 1.1 christos u_short in_pnext;
578 1.1 christos u_char in_v;
579 1.1 christos u_char in_xxx;
580 1.1 christos /* From here to the end is covered by IPN_CMPSIZ */
581 1.1 christos u_32_t in_flags;
582 1.1 christos u_32_t in_mssclamp; /* if != 0 clamp MSS to this */
583 1.1 christos u_int in_age[2];
584 1.1 christos int in_redir; /* see below for values */
585 1.1 christos int in_p; /* protocol. */
586 1.1 christos i6addr_t in_in[2];
587 1.1 christos i6addr_t in_out[2];
588 1.1 christos i6addr_t in_src[2];
589 1.1 christos frtuc4_t in_tuc;
590 1.1 christos u_short in_port[2];
591 1.1 christos u_short in_ppip; /* ports per IP. */
592 1.1 christos u_short in_ippip; /* IP #'s per IP# */
593 1.1 christos char in_ifnames[2][LIFNAMSIZ];
594 1.1 christos char in_plabel[APR_LABELLEN]; /* proxy label. */
595 1.1 christos ipftag_t in_tag;
596 1.1 christos } ipnat_4_1_14_t;
597 1.1 christos
598 1.1 christos typedef struct ipnat_4_1_0 {
599 1.1 christos struct ipnat *in_next;
600 1.1 christos struct ipnat *in_rnext;
601 1.1 christos struct ipnat **in_prnext;
602 1.1 christos struct ipnat *in_mnext;
603 1.1 christos struct ipnat **in_pmnext;
604 1.1 christos struct ipftq *in_tqehead[2];
605 1.1 christos void *in_ifps[2];
606 1.1 christos void *in_apr;
607 1.1 christos char *in_comment;
608 1.1 christos i6addr_t in_next6;
609 1.1 christos u_long in_space;
610 1.1 christos u_long in_hits;
611 1.1 christos u_int in_use;
612 1.1 christos u_int in_hv;
613 1.1 christos int in_flineno;
614 1.1 christos u_short in_pnext;
615 1.1 christos u_char in_v;
616 1.1 christos u_char in_xxx;
617 1.1 christos u_32_t in_flags;
618 1.1 christos u_32_t in_mssclamp;
619 1.1 christos u_int in_age[2];
620 1.1 christos int in_redir;
621 1.1 christos int in_p;
622 1.1 christos i6addr_t in_in[2];
623 1.1 christos i6addr_t in_out[2];
624 1.1 christos i6addr_t in_src[2];
625 1.1 christos frtuc4_t in_tuc;
626 1.1 christos u_short in_port[2];
627 1.1 christos u_short in_ppip;
628 1.1 christos u_short in_ippip;
629 1.1 christos char in_ifnames[2][LIFNAMSIZ];
630 1.1 christos char in_plabel[APR_LABELLEN];
631 1.1 christos ipftag_t in_tag;
632 1.1 christos } ipnat_4_1_0_t;
633 1.1 christos
634 1.1 christos /* ------------------------------------------------------------------------ */
635 1.1 christos
636 1.1 christos typedef struct natlookup_4_1_1 {
637 1.1 christos struct in_addr onl_inip;
638 1.1 christos struct in_addr onl_outip;
639 1.1 christos struct in_addr onl_realip;
640 1.1 christos int nl_flags;
641 1.1 christos u_short nl_inport;
642 1.1 christos u_short nl_outport;
643 1.1 christos u_short nl_realport;
644 1.1 christos } natlookup_4_1_1_t;
645 1.1 christos
646 1.1 christos /* ------------------------------------------------------------------------ */
647 1.1 christos
648 1.1 christos /*
649 1.1 christos * 4.1.25 added nat_seqnext (current)
650 1.1 christos * 4.1.14 added nat_redir
651 1.1 christos * 4.1.3 moved nat_rev
652 1.1 christos * 4.1.2 added nat_rev
653 1.1 christos */
654 1.1 christos typedef struct nat_4_1_25 {
655 1.1 christos ipfmutex_t nat_lock;
656 1.1 christos struct nat_4_1_25 *nat_next;
657 1.1 christos struct nat_4_1_25 **nat_pnext;
658 1.1 christos struct nat_4_1_25 *nat_hnext[2];
659 1.1 christos struct nat_4_1_25 **nat_phnext[2];
660 1.1 christos struct hostmap *nat_hm;
661 1.1 christos void *nat_data;
662 1.1 christos struct nat_4_1_25 **nat_me;
663 1.1 christos struct ipstate *nat_state;
664 1.1 christos struct ap_session *nat_aps;
665 1.1 christos frentry_t *nat_fr;
666 1.1 christos struct ipnat_4_1_14 *nat_ptr;
667 1.1 christos void *nat_ifps[2];
668 1.1 christos void *nat_sync;
669 1.1 christos ipftqent_t nat_tqe;
670 1.1 christos u_32_t nat_flags;
671 1.1 christos u_32_t nat_sumd[2];
672 1.1 christos u_32_t nat_ipsumd;
673 1.1 christos u_32_t nat_mssclamp;
674 1.1 christos i6addr_t nat_inip6;
675 1.1 christos i6addr_t nat_outip6;
676 1.1 christos i6addr_t nat_oip6;
677 1.1 christos U_QUAD_T nat_pkts[2];
678 1.1 christos U_QUAD_T nat_bytes[2];
679 1.1 christos union {
680 1.1 christos udpinfo_t nat_unu;
681 1.1 christos tcpinfo4_t nat_unt;
682 1.1 christos icmpinfo_t nat_uni;
683 1.1 christos greinfo_t nat_ugre;
684 1.1 christos } nat_un;
685 1.1 christos u_short nat_oport;
686 1.1 christos u_short nat_use;
687 1.1 christos u_char nat_p;
688 1.1 christos int nat_dir;
689 1.1 christos int nat_ref;
690 1.1 christos int nat_hv[2];
691 1.1 christos char nat_ifnames[2][LIFNAMSIZ];
692 1.1 christos int nat_rev;
693 1.1 christos int nat_redir;
694 1.1 christos u_32_t nat_seqnext[2];
695 1.1 christos } nat_4_1_25_t;
696 1.1 christos
697 1.1 christos typedef struct nat_4_1_14 {
698 1.1 christos ipfmutex_t nat_lock;
699 1.1 christos struct nat *nat_next;
700 1.1 christos struct nat **nat_pnext;
701 1.1 christos struct nat *nat_hnext[2];
702 1.1 christos struct nat **nat_phnext[2];
703 1.1 christos struct hostmap *nat_hm;
704 1.1 christos void *nat_data;
705 1.1 christos struct nat **nat_me;
706 1.1 christos struct ipstate *nat_state;
707 1.1 christos struct ap_session *nat_aps;
708 1.1 christos frentry_t *nat_fr;
709 1.1 christos struct ipnat *nat_ptr;
710 1.1 christos void *nat_ifps[2];
711 1.1 christos void *nat_sync;
712 1.1 christos ipftqent_t nat_tqe;
713 1.1 christos u_32_t nat_flags;
714 1.1 christos u_32_t nat_sumd[2];
715 1.1 christos u_32_t nat_ipsumd;
716 1.1 christos u_32_t nat_mssclamp;
717 1.1 christos i6addr_t nat_inip6;
718 1.1 christos i6addr_t nat_outip6;
719 1.1 christos i6addr_t nat_oip6;
720 1.1 christos U_QUAD_T nat_pkts[2];
721 1.1 christos U_QUAD_T nat_bytes[2];
722 1.1 christos union {
723 1.1 christos udpinfo_t nat_unu;
724 1.1 christos tcpinfo4_t nat_unt;
725 1.1 christos icmpinfo_t nat_uni;
726 1.1 christos greinfo_t nat_ugre;
727 1.1 christos } nat_un;
728 1.1 christos u_short nat_oport;
729 1.1 christos u_short nat_use;
730 1.1 christos u_char nat_p;
731 1.1 christos int nat_dir;
732 1.1 christos int nat_ref;
733 1.1 christos int nat_hv[2];
734 1.1 christos char nat_ifnames[2][LIFNAMSIZ];
735 1.1 christos int nat_rev;
736 1.1 christos int nat_redir;
737 1.1 christos } nat_4_1_14_t;
738 1.1 christos
739 1.1 christos typedef struct nat_4_1_3 {
740 1.1 christos ipfmutex_t nat_lock;
741 1.1 christos struct nat *nat_next;
742 1.1 christos struct nat **nat_pnext;
743 1.1 christos struct nat *nat_hnext[2];
744 1.1 christos struct nat **nat_phnext[2];
745 1.1 christos struct hostmap *nat_hm;
746 1.1 christos void *nat_data;
747 1.1 christos struct nat **nat_me;
748 1.1 christos struct ipstate *nat_state;
749 1.1 christos struct ap_session *nat_aps;
750 1.1 christos frentry_t *nat_fr;
751 1.1 christos struct ipnat *nat_ptr;
752 1.1 christos void *nat_ifps[2];
753 1.1 christos void *nat_sync;
754 1.1 christos ipftqent_t nat_tqe;
755 1.1 christos u_32_t nat_flags;
756 1.1 christos u_32_t nat_sumd[2];
757 1.1 christos u_32_t nat_ipsumd;
758 1.1 christos u_32_t nat_mssclamp;
759 1.1 christos i6addr_t nat_inip6;
760 1.1 christos i6addr_t nat_outip6;
761 1.1 christos i6addr_t nat_oip6;
762 1.1 christos U_QUAD_T nat_pkts[2];
763 1.1 christos U_QUAD_T nat_bytes[2];
764 1.1 christos union {
765 1.1 christos udpinfo_t nat_unu;
766 1.1 christos tcpinfo4_t nat_unt;
767 1.1 christos icmpinfo_t nat_uni;
768 1.1 christos greinfo_t nat_ugre;
769 1.1 christos } nat_un;
770 1.1 christos u_short nat_oport;
771 1.1 christos u_short nat_use;
772 1.1 christos u_char nat_p;
773 1.1 christos int nat_dir;
774 1.1 christos int nat_ref;
775 1.1 christos int nat_hv[2];
776 1.1 christos char nat_ifnames[2][LIFNAMSIZ];
777 1.1 christos int nat_rev;
778 1.1 christos } nat_4_1_3_t;
779 1.1 christos
780 1.1 christos
781 1.1 christos
782 1.1 christos typedef struct nat_save_4_1_34 {
783 1.1 christos void *ipn_next;
784 1.1 christos struct nat_4_1_25 ipn_nat;
785 1.1 christos struct ipnat_4_1_14 ipn_ipnat;
786 1.1 christos struct frentry_4_1_34 ipn_fr;
787 1.1 christos int ipn_dsize;
788 1.1 christos char ipn_data[4];
789 1.1 christos } nat_save_4_1_34_t;
790 1.1 christos
791 1.1 christos typedef struct nat_save_4_1_16 {
792 1.1 christos void *ipn_next;
793 1.1 christos nat_4_1_14_t ipn_nat;
794 1.1 christos ipnat_t ipn_ipnat;
795 1.1 christos frentry_4_1_16_t ipn_fr;
796 1.1 christos int ipn_dsize;
797 1.1 christos char ipn_data[4];
798 1.1 christos } nat_save_4_1_16_t;
799 1.1 christos
800 1.1 christos typedef struct nat_save_4_1_14 {
801 1.1 christos void *ipn_next;
802 1.1 christos nat_4_1_14_t ipn_nat;
803 1.1 christos ipnat_t ipn_ipnat;
804 1.1 christos frentry_4_1_0_t ipn_fr;
805 1.1 christos int ipn_dsize;
806 1.1 christos char ipn_data[4];
807 1.1 christos } nat_save_4_1_14_t;
808 1.1 christos
809 1.1 christos typedef struct nat_save_4_1_3 {
810 1.1 christos void *ipn_next;
811 1.1 christos nat_4_1_3_t ipn_nat;
812 1.1 christos ipnat_4_1_0_t ipn_ipnat;
813 1.1 christos frentry_4_1_0_t ipn_fr;
814 1.1 christos int ipn_dsize;
815 1.1 christos char ipn_data[4];
816 1.1 christos } nat_save_4_1_3_t;
817 1.1 christos
818 1.1 christos /* ------------------------------------------------------------------------ */
819 1.1 christos
820 1.1 christos /*
821 1.1 christos * 5.1.0 new release (current)
822 1.1 christos * 4.1.32 added ns_uncreate
823 1.1 christos * 4.1.27 added ns_orphans
824 1.1 christos * 4.1.16 added ns_ticks
825 1.1 christos */
826 1.1 christos typedef struct natstat_4_1_32 {
827 1.1 christos u_long ns_mapped[2];
828 1.1 christos u_long ns_rules;
829 1.1 christos u_long ns_added;
830 1.1 christos u_long ns_expire;
831 1.1 christos u_long ns_inuse;
832 1.1 christos u_long ns_logged;
833 1.1 christos u_long ns_logfail;
834 1.1 christos u_long ns_memfail;
835 1.1 christos u_long ns_badnat;
836 1.1 christos u_long ns_addtrpnt;
837 1.1 christos nat_t **ns_table[2];
838 1.1 christos hostmap_t **ns_maptable;
839 1.1 christos ipnat_t *ns_list;
840 1.1 christos void *ns_apslist;
841 1.1 christos u_int ns_wilds;
842 1.1 christos u_int ns_nattab_sz;
843 1.1 christos u_int ns_nattab_max;
844 1.1 christos u_int ns_rultab_sz;
845 1.1 christos u_int ns_rdrtab_sz;
846 1.1 christos u_int ns_trpntab_sz;
847 1.1 christos u_int ns_hostmap_sz;
848 1.1 christos nat_t *ns_instances;
849 1.1 christos hostmap_t *ns_maplist;
850 1.1 christos u_long *ns_bucketlen[2];
851 1.1 christos u_long ns_ticks;
852 1.1 christos u_int ns_orphans;
853 1.1 christos u_long ns_uncreate[2][2];
854 1.1 christos } natstat_4_1_32_t;
855 1.1 christos
856 1.1 christos typedef struct natstat_4_1_27 {
857 1.1 christos u_long ns_mapped[2];
858 1.1 christos u_long ns_rules;
859 1.1 christos u_long ns_added;
860 1.1 christos u_long ns_expire;
861 1.1 christos u_long ns_inuse;
862 1.1 christos u_long ns_logged;
863 1.1 christos u_long ns_logfail;
864 1.1 christos u_long ns_memfail;
865 1.1 christos u_long ns_badnat;
866 1.1 christos u_long ns_addtrpnt;
867 1.1 christos nat_t **ns_table[2];
868 1.1 christos hostmap_t **ns_maptable;
869 1.1 christos ipnat_t *ns_list;
870 1.1 christos void *ns_apslist;
871 1.1 christos u_int ns_wilds;
872 1.1 christos u_int ns_nattab_sz;
873 1.1 christos u_int ns_nattab_max;
874 1.1 christos u_int ns_rultab_sz;
875 1.1 christos u_int ns_rdrtab_sz;
876 1.1 christos u_int ns_trpntab_sz;
877 1.1 christos u_int ns_hostmap_sz;
878 1.1 christos nat_t *ns_instances;
879 1.1 christos hostmap_t *ns_maplist;
880 1.1 christos u_long *ns_bucketlen[2];
881 1.1 christos u_long ns_ticks;
882 1.1 christos u_int ns_orphans;
883 1.1 christos } natstat_4_1_27_t;
884 1.1 christos
885 1.1 christos typedef struct natstat_4_1_16 {
886 1.1 christos u_long ns_mapped[2];
887 1.1 christos u_long ns_rules;
888 1.1 christos u_long ns_added;
889 1.1 christos u_long ns_expire;
890 1.1 christos u_long ns_inuse;
891 1.1 christos u_long ns_logged;
892 1.1 christos u_long ns_logfail;
893 1.1 christos u_long ns_memfail;
894 1.1 christos u_long ns_badnat;
895 1.1 christos u_long ns_addtrpnt;
896 1.1 christos nat_t **ns_table[2];
897 1.1 christos hostmap_t **ns_maptable;
898 1.1 christos ipnat_t *ns_list;
899 1.1 christos void *ns_apslist;
900 1.1 christos u_int ns_wilds;
901 1.1 christos u_int ns_nattab_sz;
902 1.1 christos u_int ns_nattab_max;
903 1.1 christos u_int ns_rultab_sz;
904 1.1 christos u_int ns_rdrtab_sz;
905 1.1 christos u_int ns_trpntab_sz;
906 1.1 christos u_int ns_hostmap_sz;
907 1.1 christos nat_t *ns_instances;
908 1.1 christos hostmap_t *ns_maplist;
909 1.1 christos u_long *ns_bucketlen[2];
910 1.1 christos u_long ns_ticks;
911 1.1 christos } natstat_4_1_16_t;
912 1.1 christos
913 1.1 christos typedef struct natstat_4_1_0 {
914 1.1 christos u_long ns_mapped[2];
915 1.1 christos u_long ns_rules;
916 1.1 christos u_long ns_added;
917 1.1 christos u_long ns_expire;
918 1.1 christos u_long ns_inuse;
919 1.1 christos u_long ns_logged;
920 1.1 christos u_long ns_logfail;
921 1.1 christos u_long ns_memfail;
922 1.1 christos u_long ns_badnat;
923 1.1 christos u_long ns_addtrpnt;
924 1.1 christos nat_t **ns_table[2];
925 1.1 christos hostmap_t **ns_maptable;
926 1.1 christos ipnat_t *ns_list;
927 1.1 christos void *ns_apslist;
928 1.1 christos u_int ns_wilds;
929 1.1 christos u_int ns_nattab_sz;
930 1.1 christos u_int ns_nattab_max;
931 1.1 christos u_int ns_rultab_sz;
932 1.1 christos u_int ns_rdrtab_sz;
933 1.1 christos u_int ns_trpntab_sz;
934 1.1 christos u_int ns_hostmap_sz;
935 1.1 christos nat_t *ns_instances;
936 1.1 christos hostmap_t *ns_maplist;
937 1.1 christos u_long *ns_bucketlen[2];
938 1.1 christos } natstat_4_1_0_t;
939 1.1 christos
940 1.1 christos /* ------------------------------------------------------------------------ */
941 1.1 christos
942 1.1 christos /*
943 1.1 christos * 5.1.0 new release (current)
944 1.1 christos * 4.1.32 fra_info:removed both fin_state & fin_nat, added fin_pktnum
945 1.1 christos * 4.1.29 added fra_flx
946 1.1 christos * 4.1.24 fra_info:added fin_cksum
947 1.1 christos * 4.1.23 fra_info:added fin_exthdr
948 1.1 christos * 4.1.11 fra_info:added fin_ifname
949 1.1 christos * 4.1.4 fra_info:added fin_hbuf
950 1.1 christos */
951 1.1 christos
952 1.1 christos typedef struct frauth_4_1_32 {
953 1.1 christos int fra_age;
954 1.1 christos int fra_len;
955 1.1 christos int fra_index;
956 1.1 christos u_32_t fra_pass;
957 1.1 christos fr_info_4_1_32_t fra_info;
958 1.1 christos char *fra_buf;
959 1.1 christos u_32_t fra_flx;
960 1.1 christos #ifdef MENTAT
961 1.1 christos queue_t *fra_q;
962 1.1 christos mb_t *fra_m;
963 1.1 christos #endif
964 1.1 christos } frauth_4_1_32_t;
965 1.1 christos
966 1.1 christos typedef struct frauth_4_1_29 {
967 1.1 christos int fra_age;
968 1.1 christos int fra_len;
969 1.1 christos int fra_index;
970 1.1 christos u_32_t fra_pass;
971 1.1 christos fr_info_4_1_24_t fra_info;
972 1.1 christos char *fra_buf;
973 1.1 christos u_32_t fra_flx;
974 1.1 christos #ifdef MENTAT
975 1.1 christos queue_t *fra_q;
976 1.1 christos mb_t *fra_m;
977 1.1 christos #endif
978 1.1 christos } frauth_4_1_29_t;
979 1.1 christos
980 1.1 christos typedef struct frauth_4_1_24 {
981 1.1 christos int fra_age;
982 1.1 christos int fra_len;
983 1.1 christos int fra_index;
984 1.1 christos u_32_t fra_pass;
985 1.1 christos fr_info_4_1_24_t fra_info;
986 1.1 christos char *fra_buf;
987 1.1 christos #ifdef MENTAT
988 1.1 christos queue_t *fra_q;
989 1.1 christos mb_t *fra_m;
990 1.1 christos #endif
991 1.1 christos } frauth_4_1_24_t;
992 1.1 christos
993 1.1 christos typedef struct frauth_4_1_23 {
994 1.1 christos int fra_age;
995 1.1 christos int fra_len;
996 1.1 christos int fra_index;
997 1.1 christos u_32_t fra_pass;
998 1.1 christos fr_info_4_1_23_t fra_info;
999 1.1 christos char *fra_buf;
1000 1.1 christos #ifdef MENTAT
1001 1.1 christos queue_t *fra_q;
1002 1.1 christos mb_t *fra_m;
1003 1.1 christos #endif
1004 1.1 christos } frauth_4_1_23_t;
1005 1.1 christos
1006 1.1 christos typedef struct frauth_4_1_11 {
1007 1.1 christos int fra_age;
1008 1.1 christos int fra_len;
1009 1.1 christos int fra_index;
1010 1.1 christos u_32_t fra_pass;
1011 1.1 christos fr_info_4_1_11_t fra_info;
1012 1.1 christos char *fra_buf;
1013 1.1 christos #ifdef MENTAT
1014 1.1 christos queue_t *fra_q;
1015 1.1 christos mb_t *fra_m;
1016 1.1 christos #endif
1017 1.1 christos } frauth_4_1_11_t;
1018 1.1 christos
1019 1.1 christos /* ------------------------------------------------------------------------ */
1020 1.1 christos
1021 1.1 christos /*
1022 1.1 christos * 5.1.0 new release (current)
1023 1.1 christos * 4.1.16 removed is_nat
1024 1.1 christos */
1025 1.1 christos typedef struct ipstate_4_1_16 {
1026 1.1 christos ipfmutex_t is_lock;
1027 1.1 christos struct ipstate *is_next;
1028 1.1 christos struct ipstate **is_pnext;
1029 1.1 christos struct ipstate *is_hnext;
1030 1.1 christos struct ipstate **is_phnext;
1031 1.1 christos struct ipstate **is_me;
1032 1.1 christos void *is_ifp[4];
1033 1.1 christos void *is_sync;
1034 1.1 christos frentry_t *is_rule;
1035 1.1 christos struct ipftq *is_tqehead[2];
1036 1.1 christos struct ipscan *is_isc;
1037 1.1 christos U_QUAD_T is_pkts[4];
1038 1.1 christos U_QUAD_T is_bytes[4];
1039 1.1 christos U_QUAD_T is_icmppkts[4];
1040 1.1 christos struct ipftqent is_sti;
1041 1.1 christos u_int is_frage[2];
1042 1.1 christos int is_ref; /* reference count */
1043 1.1 christos int is_isninc[2];
1044 1.1 christos u_short is_sumd[2];
1045 1.1 christos i6addr_t is_src;
1046 1.1 christos i6addr_t is_dst;
1047 1.1 christos u_int is_pass;
1048 1.1 christos u_char is_p; /* Protocol */
1049 1.1 christos u_char is_v;
1050 1.1 christos u_32_t is_hv;
1051 1.1 christos u_32_t is_tag;
1052 1.1 christos u_32_t is_opt[2]; /* packet options set */
1053 1.1 christos u_32_t is_optmsk[2]; /* " " mask */
1054 1.1 christos u_short is_sec; /* security options set */
1055 1.1 christos u_short is_secmsk; /* " " mask */
1056 1.1 christos u_short is_auth; /* authentication options set */
1057 1.1 christos u_short is_authmsk; /* " " mask */
1058 1.1 christos union {
1059 1.1 christos icmpinfo_t is_ics;
1060 1.1 christos tcpinfo4_t is_ts;
1061 1.1 christos udpinfo_t is_us;
1062 1.1 christos greinfo_t is_ug;
1063 1.1 christos } is_ps;
1064 1.1 christos u_32_t is_flags;
1065 1.1 christos int is_flx[2][2];
1066 1.1 christos u_32_t is_rulen; /* rule number when created */
1067 1.1 christos u_32_t is_s0[2];
1068 1.1 christos u_short is_smsk[2];
1069 1.1 christos char is_group[FR_GROUPLEN];
1070 1.1 christos char is_sbuf[2][16];
1071 1.1 christos char is_ifname[4][LIFNAMSIZ];
1072 1.1 christos } ipstate_4_1_16_t;
1073 1.1 christos
1074 1.1 christos typedef struct ipstate_4_1_0 {
1075 1.1 christos ipfmutex_t is_lock;
1076 1.1 christos struct ipstate *is_next;
1077 1.1 christos struct ipstate **is_pnext;
1078 1.1 christos struct ipstate *is_hnext;
1079 1.1 christos struct ipstate **is_phnext;
1080 1.1 christos struct ipstate **is_me;
1081 1.1 christos void *is_ifp[4];
1082 1.1 christos void *is_sync;
1083 1.1 christos void *is_nat[2];
1084 1.1 christos frentry_t *is_rule;
1085 1.1 christos struct ipftq *is_tqehead[2];
1086 1.1 christos struct ipscan *is_isc;
1087 1.1 christos U_QUAD_T is_pkts[4];
1088 1.1 christos U_QUAD_T is_bytes[4];
1089 1.1 christos U_QUAD_T is_icmppkts[4];
1090 1.1 christos struct ipftqent is_sti;
1091 1.1 christos u_int is_frage[2];
1092 1.1 christos int is_ref;
1093 1.1 christos int is_isninc[2];
1094 1.1 christos u_short is_sumd[2];
1095 1.1 christos i6addr_t is_src;
1096 1.1 christos i6addr_t is_dst;
1097 1.1 christos u_int is_pass;
1098 1.1 christos u_char is_p;
1099 1.1 christos u_char is_v;
1100 1.1 christos u_32_t is_hv;
1101 1.1 christos u_32_t is_tag;
1102 1.1 christos u_32_t is_opt[2];
1103 1.1 christos u_32_t is_optmsk[2];
1104 1.1 christos u_short is_sec;
1105 1.1 christos u_short is_secmsk;
1106 1.1 christos u_short is_auth;
1107 1.1 christos u_short is_authmsk;
1108 1.1 christos union {
1109 1.1 christos icmpinfo_t is_ics;
1110 1.1 christos tcpinfo4_t is_ts;
1111 1.1 christos udpinfo_t is_us;
1112 1.1 christos greinfo_t is_ug;
1113 1.1 christos } is_ps;
1114 1.1 christos u_32_t is_flags;
1115 1.1 christos int is_flx[2][2];
1116 1.1 christos u_32_t is_rulen;
1117 1.1 christos u_32_t is_s0[2];
1118 1.1 christos u_short is_smsk[2];
1119 1.1 christos char is_group[FR_GROUPLEN];
1120 1.1 christos char is_sbuf[2][16];
1121 1.1 christos char is_ifname[4][LIFNAMSIZ];
1122 1.1 christos } ipstate_4_1_0_t;
1123 1.1 christos
1124 1.1 christos typedef struct ipstate_save_4_1_34 {
1125 1.1 christos void *ips_next;
1126 1.1 christos struct ipstate_4_1_16 ips_is;
1127 1.1 christos struct frentry_4_1_34 ips_fr;
1128 1.1 christos } ipstate_save_4_1_34_t;
1129 1.1 christos
1130 1.1 christos typedef struct ipstate_save_4_1_16 {
1131 1.1 christos void *ips_next;
1132 1.1 christos ipstate_4_1_0_t ips_is;
1133 1.1 christos frentry_4_1_16_t ips_fr;
1134 1.1 christos } ipstate_save_4_1_16_t;
1135 1.1 christos
1136 1.1 christos typedef struct ipstate_save_4_1_0 {
1137 1.1 christos void *ips_next;
1138 1.1 christos ipstate_4_1_0_t ips_is;
1139 1.1 christos frentry_4_1_0_t ips_fr;
1140 1.1 christos } ipstate_save_4_1_0_t;
1141 1.1 christos
1142 1.1 christos /* ------------------------------------------------------------------------ */
1143 1.1 christos
1144 1.1 christos /*
1145 1.1 christos * 5.1.0 new release (current)
1146 1.1 christos * 4.1.21 added iss_tcptab
1147 1.1 christos */
1148 1.1 christos typedef struct ips_stat_4_1_21 {
1149 1.1 christos u_long iss_hits;
1150 1.1 christos u_long iss_miss;
1151 1.1 christos u_long iss_max;
1152 1.1 christos u_long iss_maxref;
1153 1.1 christos u_long iss_tcp;
1154 1.1 christos u_long iss_udp;
1155 1.1 christos u_long iss_icmp;
1156 1.1 christos u_long iss_nomem;
1157 1.1 christos u_long iss_expire;
1158 1.1 christos u_long iss_fin;
1159 1.1 christos u_long iss_active;
1160 1.1 christos u_long iss_logged;
1161 1.1 christos u_long iss_logfail;
1162 1.1 christos u_long iss_inuse;
1163 1.1 christos u_long iss_wild;
1164 1.1 christos u_long iss_killed;
1165 1.1 christos u_long iss_ticks;
1166 1.1 christos u_long iss_bucketfull;
1167 1.1 christos int iss_statesize;
1168 1.1 christos int iss_statemax;
1169 1.1 christos ipstate_t **iss_table;
1170 1.1 christos ipstate_t *iss_list;
1171 1.1 christos u_long *iss_bucketlen;
1172 1.1 christos ipftq_t *iss_tcptab;
1173 1.1 christos } ips_stat_4_1_21_t;
1174 1.1 christos
1175 1.1 christos typedef struct ips_stat_4_1_0 {
1176 1.1 christos u_long iss_hits;
1177 1.1 christos u_long iss_miss;
1178 1.1 christos u_long iss_max;
1179 1.1 christos u_long iss_maxref;
1180 1.1 christos u_long iss_tcp;
1181 1.1 christos u_long iss_udp;
1182 1.1 christos u_long iss_icmp;
1183 1.1 christos u_long iss_nomem;
1184 1.1 christos u_long iss_expire;
1185 1.1 christos u_long iss_fin;
1186 1.1 christos u_long iss_active;
1187 1.1 christos u_long iss_logged;
1188 1.1 christos u_long iss_logfail;
1189 1.1 christos u_long iss_inuse;
1190 1.1 christos u_long iss_wild;
1191 1.1 christos u_long iss_killed;
1192 1.1 christos u_long iss_ticks;
1193 1.1 christos u_long iss_bucketfull;
1194 1.1 christos int iss_statesize;
1195 1.1 christos int iss_statemax;
1196 1.1 christos ipstate_t **iss_table;
1197 1.1 christos ipstate_t *iss_list;
1198 1.1 christos u_long *iss_bucketlen;
1199 1.1 christos } ips_stat_4_1_0_t;
1200 1.1 christos
1201 1.1 christos /* ------------------------------------------------------------------------ */
1202 1.1 christos
1203 1.1 christos typedef struct ipfrstat_4_1_1 {
1204 1.1 christos u_long ifs_exists; /* add & already exists */
1205 1.1 christos u_long ifs_nomem;
1206 1.1 christos u_long ifs_new;
1207 1.1 christos u_long ifs_hits;
1208 1.1 christos u_long ifs_expire;
1209 1.1 christos u_long ifs_inuse;
1210 1.1 christos u_long ifs_retrans0;
1211 1.1 christos u_long ifs_short;
1212 1.1 christos struct ipfr **ifs_table;
1213 1.1 christos struct ipfr **ifs_nattab;
1214 1.1 christos } ipfrstat_4_1_1_t;
1215 1.1 christos
1216 1.1 christos /* ------------------------------------------------------------------------ */
1217 1.1 christos static int ipf_addfrstr __P((char *, int, char *, int));
1218 1.1 christos static void ipf_v4iptov5 __P((frip4_t *, fr_ip_t *));
1219 1.1 christos static void ipf_v5iptov4 __P((fr_ip_t *, frip4_t *));
1220 1.1 christos static void ipfv4tuctov5 __P((frtuc4_t *, frtuc_t *));
1221 1.1 christos static void ipfv5tuctov4 __P((frtuc_t *, frtuc4_t *));
1222 1.1 christos static int ipf_v4fripftov5 __P((fripf4_t *, char *));
1223 1.1 christos static void ipf_v5fripftov4 __P((fripf_t *, fripf4_t *));
1224 1.1 christos static int fr_frflags4to5 __P((u_32_t));
1225 1.1 christos static int fr_frflags5to4 __P((u_32_t));
1226 1.1 christos
1227 1.1 christos static void friostat_current_to_4_1_0 __P((void *, friostat_4_1_0_t *, int));
1228 1.1 christos static void friostat_current_to_4_1_33 __P((void *, friostat_4_1_33_t *, int));
1229 1.1 christos static void ipstate_current_to_4_1_0 __P((void *, ipstate_4_1_0_t *));
1230 1.1 christos static void ipstate_current_to_4_1_16 __P((void *, ipstate_4_1_16_t *));
1231 1.1 christos static void ipnat_current_to_4_1_0 __P((void *, ipnat_4_1_0_t *));
1232 1.1 christos static void ipnat_current_to_4_1_14 __P((void *, ipnat_4_1_14_t *));
1233 1.1 christos static void frauth_current_to_4_1_11 __P((void *, frauth_4_1_11_t *));
1234 1.1 christos static void frauth_current_to_4_1_23 __P((void *, frauth_4_1_23_t *));
1235 1.1 christos static void frauth_current_to_4_1_24 __P((void *, frauth_4_1_24_t *));
1236 1.1 christos static void frauth_current_to_4_1_29 __P((void *, frauth_4_1_29_t *));
1237 1.1 christos static void frentry_current_to_4_1_0 __P((void *, frentry_4_1_0_t *));
1238 1.1 christos static void frentry_current_to_4_1_16 __P((void *, frentry_4_1_16_t *));
1239 1.1 christos static void frentry_current_to_4_1_34 __P((void *, frentry_4_1_34_t *));
1240 1.1 christos static void fr_info_current_to_4_1_11 __P((void *, fr_info_4_1_11_t *));
1241 1.1 christos static void fr_info_current_to_4_1_23 __P((void *, fr_info_4_1_23_t *));
1242 1.1 christos static void fr_info_current_to_4_1_24 __P((void *, fr_info_4_1_24_t *));
1243 1.1 christos static void nat_save_current_to_4_1_3 __P((void *, nat_save_4_1_3_t *));
1244 1.1 christos static void nat_save_current_to_4_1_14 __P((void *, nat_save_4_1_14_t *));
1245 1.1 christos static void nat_save_current_to_4_1_16 __P((void *, nat_save_4_1_16_t *));
1246 1.1 christos static void ipstate_save_current_to_4_1_0 __P((void *, ipstate_save_4_1_0_t *));
1247 1.1 christos static void ipstate_save_current_to_4_1_16 __P((void *, ipstate_save_4_1_16_t *));
1248 1.1 christos static void ips_stat_current_to_4_1_0 __P((void *, ips_stat_4_1_0_t *));
1249 1.1 christos static void ips_stat_current_to_4_1_21 __P((void *, ips_stat_4_1_21_t *));
1250 1.1 christos static void natstat_current_to_4_1_0 __P((void *, natstat_4_1_0_t *));
1251 1.1 christos static void natstat_current_to_4_1_16 __P((void *, natstat_4_1_16_t *));
1252 1.1 christos static void natstat_current_to_4_1_27 __P((void *, natstat_4_1_27_t *));
1253 1.1 christos static void natstat_current_to_4_1_32 __P((void *, natstat_4_1_32_t *));
1254 1.1 christos static void nat_current_to_4_1_3 __P((void *, nat_4_1_3_t *));
1255 1.1 christos static void nat_current_to_4_1_14 __P((void *, nat_4_1_14_t *));
1256 1.1 christos static void nat_current_to_4_1_25 __P((void *, nat_4_1_25_t *));
1257 1.1 christos
1258 1.1 christos static void friostat_4_1_0_to_current __P((friostat_4_1_0_t *, void *));
1259 1.1 christos static void friostat_4_1_33_to_current __P((friostat_4_1_33_t *, void *));
1260 1.1 christos static void ipnat_4_1_0_to_current __P((ipnat_4_1_0_t *, void *, int));
1261 1.1 christos static void ipnat_4_1_14_to_current __P((ipnat_4_1_14_t *, void *, int));
1262 1.1 christos static void frauth_4_1_11_to_current __P((frauth_4_1_11_t *, void *));
1263 1.1 christos static void frauth_4_1_23_to_current __P((frauth_4_1_23_t *, void *));
1264 1.1 christos static void frauth_4_1_24_to_current __P((frauth_4_1_24_t *, void *));
1265 1.1 christos static void frauth_4_1_29_to_current __P((frauth_4_1_29_t *, void *));
1266 1.1 christos static void frauth_4_1_32_to_current __P((frauth_4_1_32_t *, void *));
1267 1.1 christos static void frentry_4_1_0_to_current __P((ipf_main_softc_t *, frentry_4_1_0_t *, void *, int));
1268 1.1 christos static void frentry_4_1_16_to_current __P((ipf_main_softc_t *, frentry_4_1_16_t *, void *, int));
1269 1.1 christos static void frentry_4_1_34_to_current __P((ipf_main_softc_t *, frentry_4_1_34_t *, void *, int));
1270 1.1 christos static void fr_info_4_1_11_to_current __P((fr_info_4_1_11_t *, void *));
1271 1.1 christos static void fr_info_4_1_23_to_current __P((fr_info_4_1_23_t *, void *));
1272 1.1 christos static void fr_info_4_1_24_to_current __P((fr_info_4_1_24_t *, void *));
1273 1.1 christos static void fr_info_4_1_32_to_current __P((fr_info_4_1_32_t *, void *));
1274 1.1 christos static void nat_save_4_1_3_to_current __P((ipf_main_softc_t *, nat_save_4_1_3_t *, void *));
1275 1.1 christos static void nat_save_4_1_14_to_current __P((ipf_main_softc_t *, nat_save_4_1_14_t *, void *));
1276 1.1 christos static void nat_save_4_1_16_to_current __P((ipf_main_softc_t *, nat_save_4_1_16_t *, void *));
1277 1.1 christos
1278 1.1 christos /* ------------------------------------------------------------------------ */
1279 1.1 christos /* In this section is a series of short routines that deal with translating */
1280 1.1 christos /* the smaller data structures used above as their internal changes make */
1281 1.1 christos /* them inappropriate for simple assignment. */
1282 1.1 christos /* ------------------------------------------------------------------------ */
1283 1.1 christos
1284 1.1 christos
1285 1.1 christos static int
1286 1.1 christos ipf_addfrstr(char *names, int namelen, char *str, int maxlen)
1287 1.1 christos {
1288 1.1 christos char *t;
1289 1.1 christos int i;
1290 1.1 christos
1291 1.1 christos for (i = maxlen, t = str; (*t != '\0') && (i > 0); i--) {
1292 1.1 christos names[namelen++] = *t++;
1293 1.1 christos }
1294 1.1 christos names[namelen++] = '\0';
1295 1.1 christos return namelen;
1296 1.1 christos }
1297 1.1 christos
1298 1.1 christos
1299 1.1 christos static void
1300 1.1 christos ipf_v4iptov5(v4, v5)
1301 1.1 christos frip4_t *v4;
1302 1.1 christos fr_ip_t *v5;
1303 1.1 christos {
1304 1.1 christos v5->fi_v = v4->fi_v;
1305 1.1 christos v5->fi_p = v4->fi_p;
1306 1.1 christos v5->fi_xx = v4->fi_xx;
1307 1.1 christos v5->fi_tos = v4->fi_tos;
1308 1.1 christos v5->fi_ttl = v4->fi_ttl;
1309 1.1 christos v5->fi_p = v4->fi_p;
1310 1.1 christos v5->fi_optmsk = v4->fi_optmsk;
1311 1.1 christos v5->fi_src = v4->fi_src;
1312 1.1 christos v5->fi_dst = v4->fi_dst;
1313 1.1 christos v5->fi_secmsk = v4->ofi_secmsk;
1314 1.1 christos v5->fi_auth = v4->ofi_auth;
1315 1.1 christos v5->fi_flx = v4->fi_flx;
1316 1.1 christos v5->fi_tcpmsk = v4->fi_tcpmsk;
1317 1.1 christos }
1318 1.1 christos
1319 1.1 christos static void
1320 1.1 christos ipf_v5iptov4(v5, v4)
1321 1.1 christos fr_ip_t *v5;
1322 1.1 christos frip4_t *v4;
1323 1.1 christos {
1324 1.1 christos v4->fi_v = v5->fi_v;
1325 1.1 christos v4->fi_p = v5->fi_p;
1326 1.1 christos v4->fi_xx = v5->fi_xx;
1327 1.1 christos v4->fi_tos = v5->fi_tos;
1328 1.1 christos v4->fi_ttl = v5->fi_ttl;
1329 1.1 christos v4->fi_p = v5->fi_p;
1330 1.1 christos v4->fi_optmsk = v5->fi_optmsk;
1331 1.1 christos v4->fi_src = v5->fi_src;
1332 1.1 christos v4->fi_dst = v5->fi_dst;
1333 1.1 christos v4->ofi_secmsk = v5->fi_secmsk;
1334 1.1 christos v4->ofi_auth = v5->fi_auth;
1335 1.1 christos v4->fi_flx = v5->fi_flx;
1336 1.1 christos v4->fi_tcpmsk = v5->fi_tcpmsk;
1337 1.1 christos }
1338 1.1 christos
1339 1.1 christos
1340 1.1 christos static void
1341 1.1 christos ipfv4tuctov5(v4, v5)
1342 1.1 christos frtuc4_t *v4;
1343 1.1 christos frtuc_t *v5;
1344 1.1 christos {
1345 1.1 christos v5->ftu_src.frp_cmp = v4->ftu_src.frp_cmp;
1346 1.1 christos v5->ftu_src.frp_port = v4->ftu_src.frp_port;
1347 1.1 christos v5->ftu_src.frp_top = v4->ftu_src.frp_top;
1348 1.1 christos v5->ftu_dst.frp_cmp = v4->ftu_dst.frp_cmp;
1349 1.1 christos v5->ftu_dst.frp_port = v4->ftu_dst.frp_port;
1350 1.1 christos v5->ftu_dst.frp_top = v4->ftu_dst.frp_top;
1351 1.1 christos }
1352 1.1 christos
1353 1.1 christos
1354 1.1 christos static void
1355 1.1 christos ipfv5tuctov4(v5, v4)
1356 1.1 christos frtuc_t *v5;
1357 1.1 christos frtuc4_t *v4;
1358 1.1 christos {
1359 1.1 christos v4->ftu_src.frp_cmp = v5->ftu_src.frp_cmp;
1360 1.1 christos v4->ftu_src.frp_port = v5->ftu_src.frp_port;
1361 1.1 christos v4->ftu_src.frp_top = v5->ftu_src.frp_top;
1362 1.1 christos v4->ftu_dst.frp_cmp = v5->ftu_dst.frp_cmp;
1363 1.1 christos v4->ftu_dst.frp_port = v5->ftu_dst.frp_port;
1364 1.1 christos v4->ftu_dst.frp_top = v5->ftu_dst.frp_top;
1365 1.1 christos }
1366 1.1 christos
1367 1.1 christos
1368 1.1 christos static int
1369 1.1 christos ipf_v4fripftov5(frp4, dst)
1370 1.1 christos fripf4_t *frp4;
1371 1.1 christos char *dst;
1372 1.1 christos {
1373 1.1 christos fripf_t *frp;
1374 1.1 christos
1375 1.1 christos frp = (fripf_t *)dst;
1376 1.1 christos
1377 1.1 christos ipf_v4iptov5(&frp4->fri_ip, &frp->fri_ip);
1378 1.1 christos ipf_v4iptov5(&frp4->fri_mip, &frp->fri_mip);
1379 1.1 christos frp->fri_icmpm = frp4->fri_icmpm;
1380 1.1 christos frp->fri_icmp = frp4->fri_icmp;
1381 1.1 christos frp->fri_tuc.ftu_tcpfm = frp4->fri_tuc.ftu_tcpfm;
1382 1.1 christos frp->fri_tuc.ftu_tcpf = frp4->fri_tuc.ftu_tcpf;
1383 1.1 christos ipfv4tuctov5(&frp4->fri_tuc, &frp->fri_tuc);
1384 1.1 christos frp->fri_satype = frp4->fri_satype;
1385 1.1 christos frp->fri_datype = frp4->fri_datype;
1386 1.1 christos frp->fri_sifpidx = frp4->fri_sifpidx;
1387 1.1 christos frp->fri_difpidx = frp4->fri_difpidx;
1388 1.1 christos return 0;
1389 1.1 christos }
1390 1.1 christos
1391 1.1 christos
1392 1.1 christos static void
1393 1.1 christos ipf_v5fripftov4(frp, frp4)
1394 1.1 christos fripf_t *frp;
1395 1.1 christos fripf4_t *frp4;
1396 1.1 christos {
1397 1.1 christos
1398 1.1 christos ipf_v5iptov4(&frp->fri_ip, &frp4->fri_ip);
1399 1.1 christos ipf_v5iptov4(&frp->fri_mip, &frp4->fri_mip);
1400 1.1 christos frp4->fri_icmpm = frp->fri_icmpm;
1401 1.1 christos frp4->fri_icmp = frp->fri_icmp;
1402 1.1 christos frp4->fri_tuc.ftu_tcpfm = frp->fri_tuc.ftu_tcpfm;
1403 1.1 christos frp4->fri_tuc.ftu_tcpf = frp->fri_tuc.ftu_tcpf;
1404 1.1 christos ipfv5tuctov4(&frp->fri_tuc, &frp4->fri_tuc);
1405 1.1 christos frp4->fri_satype = frp->fri_satype;
1406 1.1 christos frp4->fri_datype = frp->fri_datype;
1407 1.1 christos frp4->fri_sifpidx = frp->fri_sifpidx;
1408 1.1 christos frp4->fri_difpidx = frp->fri_difpidx;
1409 1.1 christos }
1410 1.1 christos
1411 1.1 christos
1412 1.1 christos /* ------------------------------------------------------------------------ */
1413 1.1 christos /* ipf_in_compat is the first of two service routines. It is responsible for*/
1414 1.1 christos /* converting data structures from user space into what's required by the */
1415 1.1 christos /* kernel module. */
1416 1.1 christos /* ------------------------------------------------------------------------ */
1417 1.1 christos int
1418 1.1 christos ipf_in_compat(softc, obj, ptr, size)
1419 1.1 christos ipf_main_softc_t *softc;
1420 1.1 christos ipfobj_t *obj;
1421 1.1 christos void *ptr;
1422 1.1 christos int size;
1423 1.1 christos {
1424 1.1 christos int error;
1425 1.1 christos int sz;
1426 1.1 christos
1427 1.1 christos IPFERROR(140000);
1428 1.1 christos error = EINVAL;
1429 1.1 christos
1430 1.1 christos switch (obj->ipfo_type)
1431 1.1 christos {
1432 1.1 christos default :
1433 1.1 christos break;
1434 1.1 christos
1435 1.1 christos case IPFOBJ_FRENTRY :
1436 1.1 christos if (obj->ipfo_rev >= 4013400) {
1437 1.1 christos frentry_4_1_34_t *old;
1438 1.1 christos
1439 1.1 christos KMALLOC(old, frentry_4_1_34_t *);
1440 1.1 christos if (old == NULL) {
1441 1.1 christos IPFERROR(140001);
1442 1.1 christos error = ENOMEM;
1443 1.1 christos break;
1444 1.1 christos }
1445 1.1 christos error = COPYIN(obj->ipfo_ptr, old, sizeof(*old));
1446 1.1 christos if (error == 0) {
1447 1.1 christos if (old->fr_type != FR_T_NONE &&
1448 1.1 christos old->fr_type != FR_T_IPF) {
1449 1.1 christos IPFERROR(140002);
1450 1.1 christos error = EINVAL;
1451 1.1 christos KFREE(old);
1452 1.1 christos break;
1453 1.1 christos }
1454 1.1 christos frentry_4_1_34_to_current(softc, old,
1455 1.1 christos ptr, size);
1456 1.1 christos } else {
1457 1.1 christos IPFERROR(140003);
1458 1.1 christos }
1459 1.1 christos KFREE(old);
1460 1.1 christos } else if (obj->ipfo_rev >= 4011600) {
1461 1.1 christos frentry_4_1_16_t *old;
1462 1.1 christos
1463 1.1 christos KMALLOC(old, frentry_4_1_16_t *);
1464 1.1 christos if (old == NULL) {
1465 1.1 christos IPFERROR(140004);
1466 1.1 christos error = ENOMEM;
1467 1.1 christos break;
1468 1.1 christos }
1469 1.1 christos error = COPYIN(obj->ipfo_ptr, old, sizeof(*old));
1470 1.1 christos if (error == 0) {
1471 1.1 christos if (old->fr_type != FR_T_NONE &&
1472 1.1 christos old->fr_type != FR_T_IPF) {
1473 1.1 christos IPFERROR(140005);
1474 1.1 christos error = EINVAL;
1475 1.1 christos KFREE(old);
1476 1.1 christos break;
1477 1.1 christos }
1478 1.1 christos frentry_4_1_16_to_current(softc, old,
1479 1.1 christos ptr, size);
1480 1.1 christos } else {
1481 1.1 christos IPFERROR(140006);
1482 1.1 christos }
1483 1.1 christos KFREE(old);
1484 1.1 christos } else {
1485 1.1 christos frentry_4_1_0_t *old;
1486 1.1 christos
1487 1.1 christos KMALLOC(old, frentry_4_1_0_t *);
1488 1.1 christos if (old == NULL) {
1489 1.1 christos IPFERROR(140007);
1490 1.1 christos error = ENOMEM;
1491 1.1 christos break;
1492 1.1 christos }
1493 1.1 christos error = COPYIN(obj->ipfo_ptr, old, sizeof(*old));
1494 1.1 christos if (error == 0) {
1495 1.1 christos if (old->fr_type != FR_T_NONE &&
1496 1.1 christos old->fr_type != FR_T_IPF) {
1497 1.1 christos IPFERROR(140008);
1498 1.1 christos error = EINVAL;
1499 1.1 christos KFREE(old);
1500 1.1 christos break;
1501 1.1 christos }
1502 1.1 christos frentry_4_1_0_to_current(softc, old, ptr, size);
1503 1.1 christos } else {
1504 1.1 christos IPFERROR(140009);
1505 1.1 christos }
1506 1.1 christos KFREE(old);
1507 1.1 christos }
1508 1.1 christos break;
1509 1.1 christos
1510 1.1 christos case IPFOBJ_IPFSTAT :
1511 1.1 christos if (obj->ipfo_rev >= 4013300) {
1512 1.1 christos friostat_4_1_33_t *old;
1513 1.1 christos
1514 1.1 christos KMALLOC(old, friostat_4_1_33_t *);
1515 1.1 christos if (old == NULL) {
1516 1.1 christos IPFERROR(140010);
1517 1.1 christos error = ENOMEM;
1518 1.1 christos break;
1519 1.1 christos }
1520 1.1 christos error = COPYIN(obj->ipfo_ptr, old, sizeof(*old));
1521 1.1 christos if (error == 0) {
1522 1.1 christos friostat_4_1_33_to_current(old, ptr);
1523 1.1 christos } else {
1524 1.1 christos IPFERROR(140011);
1525 1.1 christos }
1526 1.1 christos } else {
1527 1.1 christos friostat_4_1_0_t *old;
1528 1.1 christos
1529 1.1 christos KMALLOC(old, friostat_4_1_0_t *);
1530 1.1 christos if (old == NULL) {
1531 1.1 christos IPFERROR(140012);
1532 1.1 christos error = ENOMEM;
1533 1.1 christos break;
1534 1.1 christos }
1535 1.1 christos error = COPYIN(obj->ipfo_ptr, old, sizeof(*old));
1536 1.1 christos if (error == 0) {
1537 1.1 christos friostat_4_1_0_to_current(old, ptr);
1538 1.1 christos } else {
1539 1.1 christos IPFERROR(140013);
1540 1.1 christos }
1541 1.1 christos }
1542 1.1 christos break;
1543 1.1 christos
1544 1.1 christos case IPFOBJ_IPFINFO : /* unused */
1545 1.1 christos break;
1546 1.1 christos
1547 1.1 christos case IPFOBJ_IPNAT :
1548 1.1 christos if (obj->ipfo_rev >= 4011400) {
1549 1.1 christos ipnat_4_1_14_t *old;
1550 1.1 christos
1551 1.1 christos KMALLOC(old, ipnat_4_1_14_t *);
1552 1.1 christos if (old == NULL) {
1553 1.1 christos IPFERROR(140014);
1554 1.1 christos error = ENOMEM;
1555 1.1 christos break;
1556 1.1 christos }
1557 1.1 christos error = COPYIN(obj->ipfo_ptr, old, sizeof(*old));
1558 1.1 christos if (error == 0) {
1559 1.1 christos ipnat_4_1_14_to_current(old, ptr, size);
1560 1.1 christos } else {
1561 1.1 christos IPFERROR(140015);
1562 1.1 christos }
1563 1.1 christos KFREE(old);
1564 1.1 christos } else {
1565 1.1 christos ipnat_4_1_0_t *old;
1566 1.1 christos
1567 1.1 christos KMALLOC(old, ipnat_4_1_0_t *);
1568 1.1 christos if (old == NULL) {
1569 1.1 christos IPFERROR(140016);
1570 1.1 christos error = ENOMEM;
1571 1.1 christos break;
1572 1.1 christos }
1573 1.1 christos error = COPYIN(obj->ipfo_ptr, old, sizeof(*old));
1574 1.1 christos if (error == 0) {
1575 1.1 christos ipnat_4_1_0_to_current(old, ptr, size);
1576 1.1 christos } else {
1577 1.1 christos IPFERROR(140017);
1578 1.1 christos }
1579 1.1 christos KFREE(old);
1580 1.1 christos }
1581 1.1 christos break;
1582 1.1 christos
1583 1.1 christos case IPFOBJ_NATSTAT :
1584 1.1 christos /*
1585 1.1 christos * Statistics are not copied in.
1586 1.1 christos */
1587 1.1 christos break;
1588 1.1 christos
1589 1.1 christos case IPFOBJ_NATSAVE :
1590 1.1 christos if (obj->ipfo_rev >= 4011600) {
1591 1.1 christos nat_save_4_1_16_t *old16;
1592 1.1 christos
1593 1.1 christos KMALLOC(old16, nat_save_4_1_16_t *);
1594 1.1 christos if (old16 == NULL) {
1595 1.1 christos IPFERROR(140018);
1596 1.1 christos error = ENOMEM;
1597 1.1 christos break;
1598 1.1 christos }
1599 1.1 christos error = COPYIN(obj->ipfo_ptr, old16, sizeof(*old16));
1600 1.1 christos if (error == 0) {
1601 1.1 christos nat_save_4_1_16_to_current(softc, old16, ptr);
1602 1.1 christos } else {
1603 1.1 christos IPFERROR(140019);
1604 1.1 christos }
1605 1.1 christos KFREE(old16);
1606 1.1 christos } else if (obj->ipfo_rev >= 4011400) {
1607 1.1 christos nat_save_4_1_14_t *old14;
1608 1.1 christos
1609 1.1 christos KMALLOC(old14, nat_save_4_1_14_t *);
1610 1.1 christos if (old14 == NULL) {
1611 1.1 christos IPFERROR(140020);
1612 1.1 christos error = ENOMEM;
1613 1.1 christos break;
1614 1.1 christos }
1615 1.1 christos error = COPYIN(obj->ipfo_ptr, old14, sizeof(*old14));
1616 1.1 christos if (error == 0) {
1617 1.1 christos nat_save_4_1_14_to_current(softc, old14, ptr);
1618 1.1 christos } else {
1619 1.1 christos IPFERROR(140021);
1620 1.1 christos }
1621 1.1 christos KFREE(old14);
1622 1.1 christos } else if (obj->ipfo_rev >= 4010300) {
1623 1.1 christos nat_save_4_1_3_t *old3;
1624 1.1 christos
1625 1.1 christos KMALLOC(old3, nat_save_4_1_3_t *);
1626 1.1 christos if (old3 == NULL) {
1627 1.1 christos IPFERROR(140022);
1628 1.1 christos error = ENOMEM;
1629 1.1 christos break;
1630 1.1 christos }
1631 1.1 christos error = COPYIN(obj->ipfo_ptr, old3, sizeof(*old3));
1632 1.1 christos if (error == 0) {
1633 1.1 christos nat_save_4_1_3_to_current(softc, old3, ptr);
1634 1.1 christos } else {
1635 1.1 christos IPFERROR(140023);
1636 1.1 christos }
1637 1.1 christos KFREE(old3);
1638 1.1 christos }
1639 1.1 christos break;
1640 1.1 christos
1641 1.1 christos case IPFOBJ_STATESAVE :
1642 1.1 christos if (obj->ipfo_rev >= 4013400) {
1643 1.1 christos ipstate_save_4_1_34_t *old;
1644 1.1 christos
1645 1.1 christos KMALLOC(old, ipstate_save_4_1_34_t *);
1646 1.1 christos if (old == NULL) {
1647 1.1 christos IPFERROR(140024);
1648 1.1 christos error = ENOMEM;
1649 1.1 christos break;
1650 1.1 christos }
1651 1.1 christos error = COPYIN(obj->ipfo_ptr, old, sizeof(*old));
1652 1.1 christos if (error != 0) {
1653 1.1 christos IPFERROR(140025);
1654 1.1 christos }
1655 1.1 christos KFREE(old);
1656 1.1 christos } else if (obj->ipfo_rev >= 4011600) {
1657 1.1 christos ipstate_save_4_1_16_t *old;
1658 1.1 christos
1659 1.1 christos KMALLOC(old, ipstate_save_4_1_16_t *);
1660 1.1 christos if (old == NULL) {
1661 1.1 christos IPFERROR(140026);
1662 1.1 christos error = ENOMEM;
1663 1.1 christos break;
1664 1.1 christos }
1665 1.1 christos error = COPYIN(obj->ipfo_ptr, old, sizeof(*old));
1666 1.1 christos if (error != 0) {
1667 1.1 christos IPFERROR(140027);
1668 1.1 christos }
1669 1.1 christos KFREE(old);
1670 1.1 christos } else {
1671 1.1 christos ipstate_save_4_1_0_t *old;
1672 1.1 christos
1673 1.1 christos KMALLOC(old, ipstate_save_4_1_0_t *);
1674 1.1 christos if (old == NULL) {
1675 1.1 christos IPFERROR(140028);
1676 1.1 christos error = ENOMEM;
1677 1.1 christos break;
1678 1.1 christos }
1679 1.1 christos error = COPYIN(obj->ipfo_ptr, old, sizeof(*old));
1680 1.1 christos if (error != 0) {
1681 1.1 christos IPFERROR(140029);
1682 1.1 christos }
1683 1.1 christos KFREE(old);
1684 1.1 christos }
1685 1.1 christos break;
1686 1.1 christos
1687 1.1 christos case IPFOBJ_IPSTATE :
1688 1.1 christos /*
1689 1.1 christos * This structure is not copied in by itself.
1690 1.1 christos */
1691 1.1 christos break;
1692 1.1 christos
1693 1.1 christos case IPFOBJ_STATESTAT :
1694 1.1 christos /*
1695 1.1 christos * Statistics are not copied in.
1696 1.1 christos */
1697 1.1 christos break;
1698 1.1 christos
1699 1.1 christos case IPFOBJ_FRAUTH :
1700 1.1 christos if (obj->ipfo_rev >= 4013200) {
1701 1.1 christos frauth_4_1_32_t *old32;
1702 1.1 christos
1703 1.1 christos KMALLOC(old32, frauth_4_1_32_t *);
1704 1.1 christos if (old32 == NULL) {
1705 1.1 christos IPFERROR(140030);
1706 1.1 christos error = ENOMEM;
1707 1.1 christos break;
1708 1.1 christos }
1709 1.1 christos error = COPYIN(obj->ipfo_ptr, old32, sizeof(*old32));
1710 1.1 christos if (error == 0) {
1711 1.1 christos frauth_4_1_32_to_current(old32, ptr);
1712 1.1 christos } else {
1713 1.1 christos IPFERROR(140031);
1714 1.1 christos }
1715 1.1 christos KFREE(old32);
1716 1.1 christos } else if (obj->ipfo_rev >= 4012900) {
1717 1.1 christos frauth_4_1_29_t *old29;
1718 1.1 christos
1719 1.1 christos KMALLOC(old29, frauth_4_1_29_t *);
1720 1.1 christos if (old29 == NULL) {
1721 1.1 christos IPFERROR(140032);
1722 1.1 christos error = ENOMEM;
1723 1.1 christos break;
1724 1.1 christos }
1725 1.1 christos error = COPYIN(obj->ipfo_ptr, old29, sizeof(*old29));
1726 1.1 christos if (error == 0) {
1727 1.1 christos frauth_4_1_29_to_current(old29, ptr);
1728 1.1 christos } else {
1729 1.1 christos IPFERROR(140033);
1730 1.1 christos }
1731 1.1 christos KFREE(old29);
1732 1.1 christos } else if (obj->ipfo_rev >= 4012400) {
1733 1.1 christos frauth_4_1_24_t *old24;
1734 1.1 christos
1735 1.1 christos KMALLOC(old24, frauth_4_1_24_t *);
1736 1.1 christos if (old24 == NULL) {
1737 1.1 christos IPFERROR(140034);
1738 1.1 christos error = ENOMEM;
1739 1.1 christos break;
1740 1.1 christos }
1741 1.1 christos error = COPYIN(obj->ipfo_ptr, old24, sizeof(*old24));
1742 1.1 christos if (error == 0) {
1743 1.1 christos frauth_4_1_24_to_current(old24, ptr);
1744 1.1 christos } else {
1745 1.1 christos IPFERROR(140035);
1746 1.1 christos }
1747 1.1 christos KFREE(old24);
1748 1.1 christos } else if (obj->ipfo_rev >= 4012300) {
1749 1.1 christos frauth_4_1_23_t *old23;
1750 1.1 christos
1751 1.1 christos KMALLOC(old23, frauth_4_1_23_t *);
1752 1.1 christos if (old23 == NULL) {
1753 1.1 christos IPFERROR(140036);
1754 1.1 christos error = ENOMEM;
1755 1.1 christos break;
1756 1.1 christos }
1757 1.1 christos error = COPYIN(obj->ipfo_ptr, old23, sizeof(*old23));
1758 1.1 christos if (error == 0)
1759 1.1 christos frauth_4_1_23_to_current(old23, ptr);
1760 1.1 christos KFREE(old23);
1761 1.1 christos } else if (obj->ipfo_rev >= 4011100) {
1762 1.1 christos frauth_4_1_11_t *old11;
1763 1.1 christos
1764 1.1 christos KMALLOC(old11, frauth_4_1_11_t *);
1765 1.1 christos if (old11 == NULL) {
1766 1.1 christos IPFERROR(140037);
1767 1.1 christos error = ENOMEM;
1768 1.1 christos break;
1769 1.1 christos }
1770 1.1 christos error = COPYIN(obj->ipfo_ptr, old11, sizeof(*old11));
1771 1.1 christos if (error == 0) {
1772 1.1 christos frauth_4_1_11_to_current(old11, ptr);
1773 1.1 christos } else {
1774 1.1 christos IPFERROR(140038);
1775 1.1 christos }
1776 1.1 christos KFREE(old11);
1777 1.1 christos }
1778 1.1 christos break;
1779 1.1 christos
1780 1.1 christos case IPFOBJ_NAT :
1781 1.1 christos if (obj->ipfo_rev >= 4011400) {
1782 1.1 christos sz = sizeof(nat_4_1_14_t);
1783 1.1 christos } else if (obj->ipfo_rev >= 4010300) {
1784 1.1 christos sz = sizeof(nat_4_1_3_t);
1785 1.1 christos } else {
1786 1.1 christos break;
1787 1.1 christos }
1788 1.1 christos bzero(ptr, sizeof(nat_t));
1789 1.1 christos error = COPYIN(obj->ipfo_ptr, ptr, sz);
1790 1.1 christos if (error != 0) {
1791 1.1 christos IPFERROR(140039);
1792 1.1 christos }
1793 1.1 christos break;
1794 1.1 christos
1795 1.1 christos case IPFOBJ_FRIPF :
1796 1.1 christos if (obj->ipfo_rev < 5000000) {
1797 1.1 christos fripf4_t *old;
1798 1.1 christos
1799 1.1 christos KMALLOC(old, fripf4_t *);
1800 1.1 christos if (old == NULL) {
1801 1.1 christos IPFERROR(140040);
1802 1.1 christos error = ENOMEM;
1803 1.1 christos break;
1804 1.1 christos }
1805 1.1 christos error = COPYIN(obj->ipfo_ptr, old, sizeof(*old));
1806 1.1 christos if (error == 0) {
1807 1.1 christos ipf_v4fripftov5(old, ptr);
1808 1.1 christos } else {
1809 1.1 christos IPFERROR(140041);
1810 1.1 christos }
1811 1.1 christos KFREE(old);
1812 1.1 christos }
1813 1.1 christos break;
1814 1.1 christos }
1815 1.1 christos
1816 1.1 christos return error;
1817 1.1 christos }
1818 1.1 christos /* ------------------------------------------------------------------------ */
1819 1.1 christos
1820 1.1 christos
1821 1.1 christos /*
1822 1.1 christos * flags is v4 flags, returns v5 flags.
1823 1.1 christos */
1824 1.1 christos static int
1825 1.1 christos fr_frflags4to5(flags)
1826 1.1 christos u_32_t flags;
1827 1.1 christos {
1828 1.1 christos u_32_t nflags = 0;
1829 1.1 christos
1830 1.1 christos switch (flags & 0xf) {
1831 1.1 christos case 0x0 :
1832 1.1 christos nflags |= FR_CALL;
1833 1.1 christos break;
1834 1.1 christos case 0x1 :
1835 1.1 christos nflags |= FR_BLOCK;
1836 1.1 christos break;
1837 1.1 christos case 0x2 :
1838 1.1 christos nflags |= FR_PASS;
1839 1.1 christos break;
1840 1.1 christos case 0x3 :
1841 1.1 christos nflags |= FR_AUTH;
1842 1.1 christos break;
1843 1.1 christos case 0x4 :
1844 1.1 christos nflags |= FR_PREAUTH;
1845 1.1 christos break;
1846 1.1 christos case 0x5 :
1847 1.1 christos nflags |= FR_ACCOUNT;
1848 1.1 christos break;
1849 1.1 christos case 0x6 :
1850 1.1 christos nflags |= FR_SKIP;
1851 1.1 christos break;
1852 1.1 christos default :
1853 1.1 christos break;
1854 1.1 christos }
1855 1.1 christos
1856 1.1 christos if (flags & 0x00010)
1857 1.1 christos nflags |= FR_LOG;
1858 1.1 christos if (flags & 0x00020)
1859 1.1 christos nflags |= FR_CALLNOW;
1860 1.1 christos if (flags & 0x00080)
1861 1.1 christos nflags |= FR_NOTSRCIP;
1862 1.1 christos if (flags & 0x00040)
1863 1.1 christos nflags |= FR_NOTDSTIP;
1864 1.1 christos if (flags & 0x00100)
1865 1.1 christos nflags |= FR_QUICK;
1866 1.1 christos if (flags & 0x00200)
1867 1.1 christos nflags |= FR_KEEPFRAG;
1868 1.1 christos if (flags & 0x00400)
1869 1.1 christos nflags |= FR_KEEPSTATE;
1870 1.1 christos if (flags & 0x00800)
1871 1.1 christos nflags |= FR_FASTROUTE;
1872 1.1 christos if (flags & 0x01000)
1873 1.1 christos nflags |= FR_RETRST;
1874 1.1 christos if (flags & 0x02000)
1875 1.1 christos nflags |= FR_RETICMP;
1876 1.1 christos if (flags & 0x03000)
1877 1.1 christos nflags |= FR_FAKEICMP;
1878 1.1 christos if (flags & 0x04000)
1879 1.1 christos nflags |= FR_OUTQUE;
1880 1.1 christos if (flags & 0x08000)
1881 1.1 christos nflags |= FR_INQUE;
1882 1.1 christos if (flags & 0x10000)
1883 1.1 christos nflags |= FR_LOGBODY;
1884 1.1 christos if (flags & 0x20000)
1885 1.1 christos nflags |= FR_LOGFIRST;
1886 1.1 christos if (flags & 0x40000)
1887 1.1 christos nflags |= FR_LOGORBLOCK;
1888 1.1 christos if (flags & 0x100000)
1889 1.1 christos nflags |= FR_FRSTRICT;
1890 1.1 christos if (flags & 0x200000)
1891 1.1 christos nflags |= FR_STSTRICT;
1892 1.1 christos if (flags & 0x400000)
1893 1.1 christos nflags |= FR_NEWISN;
1894 1.1 christos if (flags & 0x800000)
1895 1.1 christos nflags |= FR_NOICMPERR;
1896 1.1 christos if (flags & 0x1000000)
1897 1.1 christos nflags |= FR_STATESYNC;
1898 1.1 christos if (flags & 0x8000000)
1899 1.1 christos nflags |= FR_NOMATCH;
1900 1.1 christos if (flags & 0x40000000)
1901 1.1 christos nflags |= FR_COPIED;
1902 1.1 christos if (flags & 0x80000000)
1903 1.1 christos nflags |= FR_INACTIVE;
1904 1.1 christos
1905 1.1 christos return nflags;
1906 1.1 christos }
1907 1.1 christos
1908 1.1 christos static void
1909 1.1 christos frentry_4_1_34_to_current(softc, old, current, size)
1910 1.1 christos ipf_main_softc_t *softc;
1911 1.1 christos frentry_4_1_34_t *old;
1912 1.1 christos void *current;
1913 1.1 christos int size;
1914 1.1 christos {
1915 1.1 christos frentry_t *fr = (frentry_t *)current;
1916 1.1 christos
1917 1.1 christos fr->fr_comment = -1;
1918 1.1 christos fr->fr_ref = old->fr_ref;
1919 1.1 christos fr->fr_statecnt = old->fr_statecnt;
1920 1.1 christos fr->fr_hits = old->fr_hits;
1921 1.1 christos fr->fr_bytes = old->fr_bytes;
1922 1.1 christos fr->fr_lastpkt.tv_sec = old->fr_lastpkt.tv_sec;
1923 1.1 christos fr->fr_lastpkt.tv_usec = old->fr_lastpkt.tv_usec;
1924 1.1 christos bcopy(&old->fr_dun, &fr->fr_dun, sizeof(old->fr_dun));
1925 1.1 christos fr->fr_func = old->fr_func;
1926 1.1 christos fr->fr_dsize = old->fr_dsize;
1927 1.1 christos fr->fr_pps = old->fr_pps;
1928 1.1 christos fr->fr_statemax = old->fr_statemax;
1929 1.1 christos fr->fr_flineno = old->fr_flineno;
1930 1.1 christos fr->fr_type = old->fr_type;
1931 1.1 christos fr->fr_flags = fr_frflags4to5(old->fr_flags);
1932 1.1 christos fr->fr_logtag = old->fr_logtag;
1933 1.1 christos fr->fr_collect = old->fr_collect;
1934 1.1 christos fr->fr_arg = old->fr_arg;
1935 1.1 christos fr->fr_loglevel = old->fr_loglevel;
1936 1.1 christos fr->fr_age[0] = old->fr_age[0];
1937 1.1 christos fr->fr_age[1] = old->fr_age[1];
1938 1.1 christos fr->fr_tifs[0].fd_ip6 = old->fr_tifs[0].ofd_ip6;
1939 1.1 christos fr->fr_tifs[0].fd_type = FRD_NORMAL;
1940 1.1 christos fr->fr_tifs[1].fd_ip6 = old->fr_tifs[1].ofd_ip6;
1941 1.1 christos fr->fr_tifs[1].fd_type = FRD_NORMAL;
1942 1.1 christos fr->fr_dif.fd_ip6 = old->fr_dif.ofd_ip6;
1943 1.1 christos fr->fr_dif.fd_type = FRD_NORMAL;
1944 1.1 christos if (old->fr_v == 4)
1945 1.1 christos fr->fr_family = AF_INET;
1946 1.1 christos if (old->fr_v == 6)
1947 1.1 christos fr->fr_family = AF_INET6;
1948 1.1 christos fr->fr_icode = old->fr_icode;
1949 1.1 christos fr->fr_cksum = old->fr_cksum;
1950 1.1 christos fr->fr_namelen = 0;
1951 1.1 christos fr->fr_ifnames[0] = -1;
1952 1.1 christos fr->fr_ifnames[1] = -1;
1953 1.1 christos fr->fr_ifnames[2] = -1;
1954 1.1 christos fr->fr_ifnames[3] = -1;
1955 1.1 christos fr->fr_dif.fd_name = -1;
1956 1.1 christos fr->fr_tifs[0].fd_name = -1;
1957 1.1 christos fr->fr_tifs[1].fd_name = -1;
1958 1.1 christos fr->fr_group = -1;
1959 1.1 christos fr->fr_grhead = -1;
1960 1.1 christos fr->fr_icmphead = -1;
1961 1.1 christos if (size == 0) {
1962 1.1 christos fr->fr_size = sizeof(*fr) + LIFNAMSIZ * 7 + FR_GROUPLEN * 2;
1963 1.1 christos fr->fr_size += sizeof(fripf_t) + 16;
1964 1.1 christos fr->fr_size += 9; /* room for \0's */
1965 1.1 christos } else {
1966 1.1 christos char *names = fr->fr_names;
1967 1.1 christos int nlen = fr->fr_namelen;
1968 1.1 christos
1969 1.1 christos fr->fr_size = size;
1970 1.1 christos if (old->fr_ifnames[0][0] != '\0') {
1971 1.1 christos fr->fr_ifnames[0] = nlen;
1972 1.1 christos nlen = ipf_addfrstr(names, nlen, old->fr_ifnames[0],
1973 1.1 christos LIFNAMSIZ);
1974 1.1 christos }
1975 1.1 christos if (old->fr_ifnames[1][0] != '\0') {
1976 1.1 christos fr->fr_ifnames[1] = nlen;
1977 1.1 christos nlen = ipf_addfrstr(names, nlen, old->fr_ifnames[1],
1978 1.1 christos LIFNAMSIZ);
1979 1.1 christos }
1980 1.1 christos if (old->fr_ifnames[2][0] != '\0') {
1981 1.1 christos fr->fr_ifnames[2] = nlen;
1982 1.1 christos nlen = ipf_addfrstr(names, nlen, old->fr_ifnames[2],
1983 1.1 christos LIFNAMSIZ);
1984 1.1 christos }
1985 1.1 christos if (old->fr_ifnames[3][0] != '\0') {
1986 1.1 christos fr->fr_ifnames[3] = nlen;
1987 1.1 christos nlen = ipf_addfrstr(names, nlen, old->fr_ifnames[3],
1988 1.1 christos LIFNAMSIZ);
1989 1.1 christos }
1990 1.1 christos if (old->fr_tifs[0].fd_ifname[0] != '\0') {
1991 1.1 christos fr->fr_tifs[0].fd_name = nlen;
1992 1.1 christos nlen = ipf_addfrstr(names, nlen,
1993 1.1 christos old->fr_tifs[0].fd_ifname,
1994 1.1 christos LIFNAMSIZ);
1995 1.1 christos }
1996 1.1 christos if (old->fr_tifs[1].fd_ifname[0] != '\0') {
1997 1.1 christos fr->fr_tifs[1].fd_name = nlen;
1998 1.1 christos nlen = ipf_addfrstr(names, nlen,
1999 1.1 christos old->fr_tifs[1].fd_ifname,
2000 1.1 christos LIFNAMSIZ);
2001 1.1 christos }
2002 1.1 christos if (old->fr_dif.fd_ifname[0] != '\0') {
2003 1.1 christos fr->fr_dif.fd_name = nlen;
2004 1.1 christos nlen = ipf_addfrstr(names, nlen,
2005 1.1 christos old->fr_dif.fd_ifname, LIFNAMSIZ);
2006 1.1 christos }
2007 1.1 christos if (old->fr_group[0] != '\0') {
2008 1.1 christos fr->fr_group = nlen;
2009 1.1 christos nlen = ipf_addfrstr(names, nlen,
2010 1.1 christos old->fr_group, LIFNAMSIZ);
2011 1.1 christos }
2012 1.1 christos if (old->fr_grhead[0] != '\0') {
2013 1.1 christos fr->fr_grhead = nlen;
2014 1.1 christos nlen = ipf_addfrstr(names, nlen,
2015 1.1 christos old->fr_grhead, LIFNAMSIZ);
2016 1.1 christos }
2017 1.1 christos fr->fr_namelen = nlen;
2018 1.1 christos
2019 1.1 christos if (old->fr_type == FR_T_IPF) {
2020 1.1 christos int offset = fr->fr_namelen;
2021 1.1 christos ipfobj_t obj;
2022 1.1 christos int error;
2023 1.1 christos
2024 1.1 christos obj.ipfo_type = IPFOBJ_FRIPF;
2025 1.1 christos obj.ipfo_rev = 4010100;
2026 1.1 christos obj.ipfo_ptr = old->fr_data;
2027 1.1 christos
2028 1.1 christos if ((offset & 7) != 0)
2029 1.1 christos offset += 8 - (offset & 7);
2030 1.1 christos error = ipf_in_compat(softc, &obj,
2031 1.1 christos fr->fr_names + offset, 0);
2032 1.1 christos if (error == 0) {
2033 1.1 christos fr->fr_data = fr->fr_names + offset;
2034 1.1 christos fr->fr_dsize = sizeof(fripf_t);
2035 1.1 christos }
2036 1.1 christos }
2037 1.1 christos }
2038 1.1 christos }
2039 1.1 christos
2040 1.1 christos static void
2041 1.1 christos frentry_4_1_16_to_current(softc, old, current, size)
2042 1.1 christos ipf_main_softc_t *softc;
2043 1.1 christos frentry_4_1_16_t *old;
2044 1.1 christos void *current;
2045 1.1 christos int size;
2046 1.1 christos {
2047 1.1 christos frentry_t *fr = (frentry_t *)current;
2048 1.1 christos
2049 1.1 christos fr->fr_comment = -1;
2050 1.1 christos fr->fr_ref = old->fr_ref;
2051 1.1 christos fr->fr_statecnt = old->fr_statecnt;
2052 1.1 christos fr->fr_hits = old->fr_hits;
2053 1.1 christos fr->fr_bytes = old->fr_bytes;
2054 1.1 christos fr->fr_lastpkt.tv_sec = old->fr_lastpkt.tv_sec;
2055 1.1 christos fr->fr_lastpkt.tv_usec = old->fr_lastpkt.tv_usec;
2056 1.1 christos bcopy(&old->fr_dun, &fr->fr_dun, sizeof(old->fr_dun));
2057 1.1 christos fr->fr_func = old->fr_func;
2058 1.1 christos fr->fr_dsize = old->fr_dsize;
2059 1.1 christos fr->fr_pps = old->fr_pps;
2060 1.1 christos fr->fr_statemax = old->fr_statemax;
2061 1.1 christos fr->fr_flineno = old->fr_flineno;
2062 1.1 christos fr->fr_type = old->fr_type;
2063 1.1 christos fr->fr_flags = fr_frflags4to5(old->fr_flags);
2064 1.1 christos fr->fr_logtag = old->fr_logtag;
2065 1.1 christos fr->fr_collect = old->fr_collect;
2066 1.1 christos fr->fr_arg = old->fr_arg;
2067 1.1 christos fr->fr_loglevel = old->fr_loglevel;
2068 1.1 christos fr->fr_age[0] = old->fr_age[0];
2069 1.1 christos fr->fr_age[1] = old->fr_age[1];
2070 1.1 christos fr->fr_tifs[0].fd_ip6 = old->fr_tifs[0].ofd_ip6;
2071 1.1 christos fr->fr_tifs[0].fd_type = FRD_NORMAL;
2072 1.1 christos fr->fr_tifs[1].fd_ip6 = old->fr_tifs[1].ofd_ip6;
2073 1.1 christos fr->fr_tifs[1].fd_type = FRD_NORMAL;
2074 1.1 christos fr->fr_dif.fd_ip6 = old->fr_dif.ofd_ip6;
2075 1.1 christos fr->fr_dif.fd_type = FRD_NORMAL;
2076 1.1 christos if (old->fr_v == 4)
2077 1.1 christos fr->fr_family = AF_INET;
2078 1.1 christos if (old->fr_v == 6)
2079 1.1 christos fr->fr_family = AF_INET6;
2080 1.1 christos fr->fr_icode = old->fr_icode;
2081 1.1 christos fr->fr_cksum = old->fr_cksum;
2082 1.1 christos fr->fr_namelen = 0;
2083 1.1 christos fr->fr_ifnames[0] = -1;
2084 1.1 christos fr->fr_ifnames[1] = -1;
2085 1.1 christos fr->fr_ifnames[2] = -1;
2086 1.1 christos fr->fr_ifnames[3] = -1;
2087 1.1 christos fr->fr_dif.fd_name = -1;
2088 1.1 christos fr->fr_tifs[0].fd_name = -1;
2089 1.1 christos fr->fr_tifs[1].fd_name = -1;
2090 1.1 christos fr->fr_group = -1;
2091 1.1 christos fr->fr_grhead = -1;
2092 1.1 christos fr->fr_icmphead = -1;
2093 1.1 christos if (size == 0) {
2094 1.1 christos fr->fr_size = sizeof(*fr) + LIFNAMSIZ * 7 + FR_GROUPLEN * 2;
2095 1.1 christos fr->fr_size += 9; /* room for \0's */
2096 1.1 christos } else {
2097 1.1 christos char *names = fr->fr_names;
2098 1.1 christos int nlen = fr->fr_namelen;
2099 1.1 christos
2100 1.1 christos fr->fr_size = size;
2101 1.1 christos if (old->fr_ifnames[0][0] != '\0') {
2102 1.1 christos fr->fr_ifnames[0] = nlen;
2103 1.1 christos nlen = ipf_addfrstr(names, nlen, old->fr_ifnames[0],
2104 1.1 christos LIFNAMSIZ);
2105 1.1 christos }
2106 1.1 christos if (old->fr_ifnames[1][0] != '\0') {
2107 1.1 christos fr->fr_ifnames[1] = nlen;
2108 1.1 christos nlen = ipf_addfrstr(names, nlen, old->fr_ifnames[1],
2109 1.1 christos LIFNAMSIZ);
2110 1.1 christos }
2111 1.1 christos if (old->fr_ifnames[2][0] != '\0') {
2112 1.1 christos fr->fr_ifnames[2] = nlen;
2113 1.1 christos nlen = ipf_addfrstr(names, nlen, old->fr_ifnames[2],
2114 1.1 christos LIFNAMSIZ);
2115 1.1 christos }
2116 1.1 christos if (old->fr_ifnames[3][0] != '\0') {
2117 1.1 christos fr->fr_ifnames[3] = nlen;
2118 1.1 christos nlen = ipf_addfrstr(names, nlen, old->fr_ifnames[3],
2119 1.1 christos LIFNAMSIZ);
2120 1.1 christos }
2121 1.1 christos if (old->fr_tifs[0].fd_ifname[0] != '\0') {
2122 1.1 christos fr->fr_tifs[0].fd_name = nlen;
2123 1.1 christos nlen = ipf_addfrstr(names, nlen,
2124 1.1 christos old->fr_tifs[0].fd_ifname,
2125 1.1 christos LIFNAMSIZ);
2126 1.1 christos }
2127 1.1 christos if (old->fr_tifs[1].fd_ifname[0] != '\0') {
2128 1.1 christos fr->fr_tifs[1].fd_name = nlen;
2129 1.1 christos nlen = ipf_addfrstr(names, nlen,
2130 1.1 christos old->fr_tifs[1].fd_ifname,
2131 1.1 christos LIFNAMSIZ);
2132 1.1 christos }
2133 1.1 christos if (old->fr_dif.fd_ifname[0] != '\0') {
2134 1.1 christos fr->fr_dif.fd_name = nlen;
2135 1.1 christos nlen = ipf_addfrstr(names, nlen,
2136 1.1 christos old->fr_dif.fd_ifname, LIFNAMSIZ);
2137 1.1 christos }
2138 1.1 christos if (old->fr_group[0] != '\0') {
2139 1.1 christos fr->fr_group = nlen;
2140 1.1 christos nlen = ipf_addfrstr(names, nlen,
2141 1.1 christos old->fr_group, LIFNAMSIZ);
2142 1.1 christos }
2143 1.1 christos if (old->fr_grhead[0] != '\0') {
2144 1.1 christos fr->fr_grhead = nlen;
2145 1.1 christos nlen = ipf_addfrstr(names, nlen,
2146 1.1 christos old->fr_grhead, LIFNAMSIZ);
2147 1.1 christos }
2148 1.1 christos fr->fr_namelen = nlen;
2149 1.1 christos
2150 1.1 christos if (old->fr_type == FR_T_IPF) {
2151 1.1 christos int offset = fr->fr_namelen;
2152 1.1 christos ipfobj_t obj;
2153 1.1 christos int error;
2154 1.1 christos
2155 1.1 christos obj.ipfo_type = IPFOBJ_FRIPF;
2156 1.1 christos obj.ipfo_rev = 4010100;
2157 1.1 christos obj.ipfo_ptr = old->fr_data;
2158 1.1 christos
2159 1.1 christos if ((offset & 7) != 0)
2160 1.1 christos offset += 8 - (offset & 7);
2161 1.1 christos error = ipf_in_compat(softc, &obj,
2162 1.1 christos fr->fr_names + offset, 0);
2163 1.1 christos if (error == 0) {
2164 1.1 christos fr->fr_data = fr->fr_names + offset;
2165 1.1 christos fr->fr_dsize = sizeof(fripf_t);
2166 1.1 christos }
2167 1.1 christos }
2168 1.1 christos }
2169 1.1 christos }
2170 1.1 christos
2171 1.1 christos
2172 1.1 christos static void
2173 1.1 christos frentry_4_1_0_to_current(softc, old, current, size)
2174 1.1 christos ipf_main_softc_t *softc;
2175 1.1 christos frentry_4_1_0_t *old;
2176 1.1 christos void *current;
2177 1.1 christos int size;
2178 1.1 christos {
2179 1.1 christos frentry_t *fr = (frentry_t *)current;
2180 1.1 christos
2181 1.1 christos fr->fr_size = sizeof(*fr);
2182 1.1 christos fr->fr_comment = -1;
2183 1.1 christos fr->fr_ref = old->fr_ref;
2184 1.1 christos fr->fr_statecnt = old->fr_statecnt;
2185 1.1 christos fr->fr_hits = old->fr_hits;
2186 1.1 christos fr->fr_bytes = old->fr_bytes;
2187 1.1 christos fr->fr_lastpkt.tv_sec = old->fr_lastpkt.tv_sec;
2188 1.1 christos fr->fr_lastpkt.tv_usec = old->fr_lastpkt.tv_usec;
2189 1.1 christos bcopy(&old->fr_dun, &fr->fr_dun, sizeof(old->fr_dun));
2190 1.1 christos fr->fr_func = old->fr_func;
2191 1.1 christos fr->fr_dsize = old->fr_dsize;
2192 1.1 christos fr->fr_pps = old->fr_pps;
2193 1.1 christos fr->fr_statemax = old->fr_statemax;
2194 1.1 christos fr->fr_flineno = old->fr_flineno;
2195 1.1 christos fr->fr_type = old->fr_type;
2196 1.1 christos fr->fr_flags = fr_frflags4to5(old->fr_flags);
2197 1.1 christos fr->fr_logtag = old->fr_logtag;
2198 1.1 christos fr->fr_collect = old->fr_collect;
2199 1.1 christos fr->fr_arg = old->fr_arg;
2200 1.1 christos fr->fr_loglevel = old->fr_loglevel;
2201 1.1 christos fr->fr_age[0] = old->fr_age[0];
2202 1.1 christos fr->fr_age[1] = old->fr_age[1];
2203 1.1 christos fr->fr_tifs[0].fd_ip6 = old->fr_tifs[0].ofd_ip6;
2204 1.1 christos fr->fr_tifs[0].fd_type = FRD_NORMAL;
2205 1.1 christos fr->fr_tifs[1].fd_ip6 = old->fr_tifs[1].ofd_ip6;
2206 1.1 christos fr->fr_tifs[1].fd_type = FRD_NORMAL;
2207 1.1 christos fr->fr_dif.fd_ip6 = old->fr_dif.ofd_ip6;
2208 1.1 christos fr->fr_dif.fd_type = FRD_NORMAL;
2209 1.1 christos if (old->fr_v == 4)
2210 1.1 christos fr->fr_family = AF_INET;
2211 1.1 christos if (old->fr_v == 6)
2212 1.1 christos fr->fr_family = AF_INET6;
2213 1.1 christos fr->fr_icode = old->fr_icode;
2214 1.1 christos fr->fr_cksum = old->fr_cksum;
2215 1.1 christos fr->fr_namelen = 0;
2216 1.1 christos fr->fr_ifnames[0] = -1;
2217 1.1 christos fr->fr_ifnames[1] = -1;
2218 1.1 christos fr->fr_ifnames[2] = -1;
2219 1.1 christos fr->fr_ifnames[3] = -1;
2220 1.1 christos fr->fr_dif.fd_name = -1;
2221 1.1 christos fr->fr_tifs[0].fd_name = -1;
2222 1.1 christos fr->fr_tifs[1].fd_name = -1;
2223 1.1 christos fr->fr_group = -1;
2224 1.1 christos fr->fr_grhead = -1;
2225 1.1 christos fr->fr_icmphead = -1;
2226 1.1 christos if (size == 0) {
2227 1.1 christos fr->fr_size = sizeof(*fr) + LIFNAMSIZ * 7 + FR_GROUPLEN * 2;
2228 1.1 christos fr->fr_size += 9; /* room for \0's */
2229 1.1 christos } else {
2230 1.1 christos char *names = fr->fr_names;
2231 1.1 christos int nlen = fr->fr_namelen;
2232 1.1 christos
2233 1.1 christos fr->fr_size = size;
2234 1.1 christos if (old->fr_ifnames[0][0] != '\0') {
2235 1.1 christos fr->fr_ifnames[0] = nlen;
2236 1.1 christos nlen = ipf_addfrstr(names, nlen, old->fr_ifnames[0],
2237 1.1 christos LIFNAMSIZ);
2238 1.1 christos }
2239 1.1 christos if (old->fr_ifnames[1][0] != '\0') {
2240 1.1 christos fr->fr_ifnames[1] = nlen;
2241 1.1 christos nlen = ipf_addfrstr(names, nlen, old->fr_ifnames[1],
2242 1.1 christos LIFNAMSIZ);
2243 1.1 christos }
2244 1.1 christos if (old->fr_ifnames[2][0] != '\0') {
2245 1.1 christos fr->fr_ifnames[2] = nlen;
2246 1.1 christos nlen = ipf_addfrstr(names, nlen, old->fr_ifnames[2],
2247 1.1 christos LIFNAMSIZ);
2248 1.1 christos }
2249 1.1 christos if (old->fr_ifnames[3][0] != '\0') {
2250 1.1 christos fr->fr_ifnames[3] = nlen;
2251 1.1 christos nlen = ipf_addfrstr(names, nlen, old->fr_ifnames[3],
2252 1.1 christos LIFNAMSIZ);
2253 1.1 christos }
2254 1.1 christos if (old->fr_tifs[0].fd_ifname[0] != '\0') {
2255 1.1 christos fr->fr_tifs[0].fd_name = nlen;
2256 1.1 christos nlen = ipf_addfrstr(names, nlen,
2257 1.1 christos old->fr_tifs[0].fd_ifname,
2258 1.1 christos LIFNAMSIZ);
2259 1.1 christos }
2260 1.1 christos if (old->fr_tifs[1].fd_ifname[0] != '\0') {
2261 1.1 christos fr->fr_tifs[1].fd_name = nlen;
2262 1.1 christos nlen = ipf_addfrstr(names, nlen,
2263 1.1 christos old->fr_tifs[1].fd_ifname,
2264 1.1 christos LIFNAMSIZ);
2265 1.1 christos }
2266 1.1 christos if (old->fr_dif.fd_ifname[0] != '\0') {
2267 1.1 christos fr->fr_dif.fd_name = nlen;
2268 1.1 christos nlen = ipf_addfrstr(names, nlen,
2269 1.1 christos old->fr_dif.fd_ifname, LIFNAMSIZ);
2270 1.1 christos }
2271 1.1 christos if (old->fr_group[0] != '\0') {
2272 1.1 christos fr->fr_group = nlen;
2273 1.1 christos nlen = ipf_addfrstr(names, nlen,
2274 1.1 christos old->fr_group, LIFNAMSIZ);
2275 1.1 christos }
2276 1.1 christos if (old->fr_grhead[0] != '\0') {
2277 1.1 christos fr->fr_grhead = nlen;
2278 1.1 christos nlen = ipf_addfrstr(names, nlen,
2279 1.1 christos old->fr_grhead, LIFNAMSIZ);
2280 1.1 christos }
2281 1.1 christos fr->fr_namelen = nlen;
2282 1.1 christos
2283 1.1 christos if (old->fr_type == FR_T_IPF) {
2284 1.1 christos int offset = fr->fr_namelen;
2285 1.1 christos ipfobj_t obj;
2286 1.1 christos int error;
2287 1.1 christos
2288 1.1 christos obj.ipfo_type = IPFOBJ_FRIPF;
2289 1.1 christos obj.ipfo_rev = 4010100;
2290 1.1 christos obj.ipfo_ptr = old->fr_data;
2291 1.1 christos
2292 1.1 christos if ((offset & 7) != 0)
2293 1.1 christos offset += 8 - (offset & 7);
2294 1.1 christos offset += 8 - (offset & 7);
2295 1.1 christos error = ipf_in_compat(softc, &obj,
2296 1.1 christos fr->fr_names + offset, 0);
2297 1.1 christos if (error == 0) {
2298 1.1 christos fr->fr_data = fr->fr_names + offset;
2299 1.1 christos fr->fr_dsize = sizeof(fripf_t);
2300 1.1 christos }
2301 1.1 christos }
2302 1.1 christos }
2303 1.1 christos }
2304 1.1 christos
2305 1.1 christos
2306 1.1 christos static void
2307 1.1 christos friostat_4_1_33_to_current(old, current)
2308 1.1 christos friostat_4_1_33_t *old;
2309 1.1 christos void *current;
2310 1.1 christos {
2311 1.1 christos friostat_t *fiop = (friostat_t *)current;
2312 1.1 christos
2313 1.1 christos bcopy(&old->of_st[0], &fiop->f_st[0].fr_pass, sizeof(old->of_st[0]));
2314 1.1 christos bcopy(&old->of_st[1], &fiop->f_st[1].fr_pass, sizeof(old->of_st[1]));
2315 1.1 christos
2316 1.1 christos fiop->f_ipf[0][0] = old->f_ipf[0][0];
2317 1.1 christos fiop->f_ipf[0][1] = old->f_ipf[0][1];
2318 1.1 christos fiop->f_ipf[1][0] = old->f_ipf[1][0];
2319 1.1 christos fiop->f_ipf[1][1] = old->f_ipf[1][1];
2320 1.1 christos fiop->f_acct[0][0] = old->f_acct[0][0];
2321 1.1 christos fiop->f_acct[0][1] = old->f_acct[0][1];
2322 1.1 christos fiop->f_acct[1][0] = old->f_acct[1][0];
2323 1.1 christos fiop->f_acct[1][1] = old->f_acct[1][1];
2324 1.1 christos fiop->f_auth = fiop->f_auth;
2325 1.1 christos bcopy(&old->f_groups, &fiop->f_groups, sizeof(old->f_groups));
2326 1.1 christos bcopy(&old->f_froute, &fiop->f_froute, sizeof(old->f_froute));
2327 1.1 christos fiop->f_ticks = old->f_ticks;
2328 1.1 christos bcopy(&old->f_locks, &fiop->f_locks, sizeof(old->f_locks));
2329 1.1 christos fiop->f_defpass = old->f_defpass;
2330 1.1 christos fiop->f_active = old->f_active;
2331 1.1 christos fiop->f_running = old->f_running;
2332 1.1 christos fiop->f_logging = old->f_logging;
2333 1.1 christos fiop->f_features = old->f_features;
2334 1.1 christos bcopy(old->f_version, fiop->f_version, sizeof(old->f_version));
2335 1.1 christos }
2336 1.1 christos
2337 1.1 christos
2338 1.1 christos static void
2339 1.1 christos friostat_4_1_0_to_current(old, current)
2340 1.1 christos friostat_4_1_0_t *old;
2341 1.1 christos void *current;
2342 1.1 christos {
2343 1.1 christos friostat_t *fiop = (friostat_t *)current;
2344 1.1 christos
2345 1.1 christos bcopy(&old->of_st[0], &fiop->f_st[0].fr_pass, sizeof(old->of_st[0]));
2346 1.1 christos bcopy(&old->of_st[1], &fiop->f_st[1].fr_pass, sizeof(old->of_st[1]));
2347 1.1 christos
2348 1.1 christos fiop->f_ipf[0][0] = old->f_ipf[0][0];
2349 1.1 christos fiop->f_ipf[0][1] = old->f_ipf[0][1];
2350 1.1 christos fiop->f_ipf[1][0] = old->f_ipf[1][0];
2351 1.1 christos fiop->f_ipf[1][1] = old->f_ipf[1][1];
2352 1.1 christos fiop->f_acct[0][0] = old->f_acct[0][0];
2353 1.1 christos fiop->f_acct[0][1] = old->f_acct[0][1];
2354 1.1 christos fiop->f_acct[1][0] = old->f_acct[1][0];
2355 1.1 christos fiop->f_acct[1][1] = old->f_acct[1][1];
2356 1.1 christos fiop->f_auth = fiop->f_auth;
2357 1.1 christos bcopy(&old->f_groups, &fiop->f_groups, sizeof(old->f_groups));
2358 1.1 christos bcopy(&old->f_froute, &fiop->f_froute, sizeof(old->f_froute));
2359 1.1 christos fiop->f_ticks = old->f_ticks;
2360 1.1 christos bcopy(&old->f_locks, &fiop->f_locks, sizeof(old->f_locks));
2361 1.1 christos fiop->f_defpass = old->f_defpass;
2362 1.1 christos fiop->f_active = old->f_active;
2363 1.1 christos fiop->f_running = old->f_running;
2364 1.1 christos fiop->f_logging = old->f_logging;
2365 1.1 christos fiop->f_features = old->f_features;
2366 1.1 christos bcopy(old->f_version, fiop->f_version, sizeof(old->f_version));
2367 1.1 christos }
2368 1.1 christos
2369 1.1 christos
2370 1.1 christos static void
2371 1.1 christos ipnat_4_1_14_to_current(old, current, size)
2372 1.1 christos ipnat_4_1_14_t *old;
2373 1.1 christos void *current;
2374 1.1 christos int size;
2375 1.1 christos {
2376 1.1 christos ipnat_t *np = (ipnat_t *)current;
2377 1.1 christos
2378 1.1 christos np->in_space = old->in_space;
2379 1.1 christos np->in_hv[0] = old->in_hv;
2380 1.1 christos np->in_hv[1] = old->in_hv;
2381 1.1 christos np->in_flineno = old->in_flineno;
2382 1.1 christos if (old->in_redir == NAT_REDIRECT)
2383 1.1 christos np->in_dpnext = old->in_pnext;
2384 1.1 christos else
2385 1.1 christos np->in_spnext = old->in_pnext;
2386 1.1 christos np->in_v[0] = old->in_v;
2387 1.1 christos np->in_v[1] = old->in_v;
2388 1.1 christos np->in_flags = old->in_flags;
2389 1.1 christos np->in_mssclamp = old->in_mssclamp;
2390 1.1 christos np->in_age[0] = old->in_age[0];
2391 1.1 christos np->in_age[1] = old->in_age[1];
2392 1.1 christos np->in_redir = old->in_redir;
2393 1.1 christos np->in_pr[0] = old->in_p;
2394 1.1 christos np->in_pr[1] = old->in_p;
2395 1.1 christos if (np->in_redir == NAT_REDIRECT) {
2396 1.1 christos np->in_ndst.na_nextaddr = old->in_next6;
2397 1.1 christos np->in_ndst.na_addr[0] = old->in_in[0];
2398 1.1 christos np->in_ndst.na_addr[1] = old->in_in[1];
2399 1.1 christos np->in_ndst.na_atype = FRI_NORMAL;
2400 1.1 christos np->in_odst.na_addr[0] = old->in_out[0];
2401 1.1 christos np->in_odst.na_addr[1] = old->in_out[1];
2402 1.1 christos np->in_odst.na_atype = FRI_NORMAL;
2403 1.1 christos np->in_osrc.na_addr[0] = old->in_src[0];
2404 1.1 christos np->in_osrc.na_addr[1] = old->in_src[1];
2405 1.1 christos np->in_osrc.na_atype = FRI_NORMAL;
2406 1.1 christos } else {
2407 1.1 christos np->in_nsrc.na_nextaddr = old->in_next6;
2408 1.1 christos np->in_nsrc.na_addr[0] = old->in_out[0];
2409 1.1 christos np->in_nsrc.na_addr[1] = old->in_out[1];
2410 1.1 christos np->in_nsrc.na_atype = FRI_NORMAL;
2411 1.1 christos np->in_osrc.na_addr[0] = old->in_in[0];
2412 1.1 christos np->in_osrc.na_addr[1] = old->in_in[1];
2413 1.1 christos np->in_osrc.na_atype = FRI_NORMAL;
2414 1.1 christos np->in_odst.na_addr[0] = old->in_src[0];
2415 1.1 christos np->in_odst.na_addr[1] = old->in_src[1];
2416 1.1 christos np->in_odst.na_atype = FRI_NORMAL;
2417 1.1 christos }
2418 1.1 christos ipfv4tuctov5(&old->in_tuc, &np->in_tuc);
2419 1.1 christos if (np->in_redir == NAT_REDIRECT) {
2420 1.1 christos np->in_dpmin = old->in_port[0];
2421 1.1 christos np->in_dpmax = old->in_port[1];
2422 1.1 christos } else {
2423 1.1 christos np->in_spmin = old->in_port[0];
2424 1.1 christos np->in_spmax = old->in_port[1];
2425 1.1 christos }
2426 1.1 christos np->in_ppip = old->in_ppip;
2427 1.1 christos np->in_ippip = old->in_ippip;
2428 1.1 christos np->in_tag = old->in_tag;
2429 1.1 christos
2430 1.1 christos np->in_namelen = 0;
2431 1.1 christos np->in_plabel = -1;
2432 1.1 christos np->in_ifnames[0] = -1;
2433 1.1 christos np->in_ifnames[1] = -1;
2434 1.1 christos
2435 1.1 christos if (size == 0) {
2436 1.1 christos np->in_size = sizeof(*np);
2437 1.1 christos np->in_size += LIFNAMSIZ * 2 + APR_LABELLEN;
2438 1.1 christos np->in_size += 3;
2439 1.1 christos } else {
2440 1.1 christos int nlen = np->in_namelen;
2441 1.1 christos char *names = np->in_names;
2442 1.1 christos
2443 1.1 christos if (old->in_ifnames[0][0] != '\0') {
2444 1.1 christos np->in_ifnames[0] = nlen;
2445 1.1 christos nlen = ipf_addfrstr(names, nlen, old->in_ifnames[0],
2446 1.1 christos LIFNAMSIZ);
2447 1.1 christos }
2448 1.1 christos if (old->in_ifnames[1][0] != '\0') {
2449 1.1 christos np->in_ifnames[0] = nlen;
2450 1.1 christos nlen = ipf_addfrstr(names, nlen, old->in_ifnames[1],
2451 1.1 christos LIFNAMSIZ);
2452 1.1 christos }
2453 1.1 christos if (old->in_plabel[0] != '\0') {
2454 1.1 christos np->in_plabel = nlen;
2455 1.1 christos nlen = ipf_addfrstr(names, nlen, old->in_plabel,
2456 1.1 christos LIFNAMSIZ);
2457 1.1 christos }
2458 1.1 christos np->in_namelen = nlen;
2459 1.1 christos np->in_size = size;
2460 1.1 christos }
2461 1.1 christos }
2462 1.1 christos
2463 1.1 christos
2464 1.1 christos static void
2465 1.1 christos ipnat_4_1_0_to_current(old, current, size)
2466 1.1 christos ipnat_4_1_0_t *old;
2467 1.1 christos void *current;
2468 1.1 christos int size;
2469 1.1 christos {
2470 1.1 christos ipnat_t *np = (ipnat_t *)current;
2471 1.1 christos
2472 1.1 christos np->in_space = old->in_space;
2473 1.1 christos np->in_hv[0] = old->in_hv;
2474 1.1 christos np->in_hv[1] = old->in_hv;
2475 1.1 christos np->in_flineno = old->in_flineno;
2476 1.1 christos if (old->in_redir == NAT_REDIRECT)
2477 1.1 christos np->in_dpnext = old->in_pnext;
2478 1.1 christos else
2479 1.1 christos np->in_spnext = old->in_pnext;
2480 1.1 christos np->in_v[0] = old->in_v;
2481 1.1 christos np->in_v[1] = old->in_v;
2482 1.1 christos np->in_flags = old->in_flags;
2483 1.1 christos np->in_mssclamp = old->in_mssclamp;
2484 1.1 christos np->in_age[0] = old->in_age[0];
2485 1.1 christos np->in_age[1] = old->in_age[1];
2486 1.1 christos np->in_redir = old->in_redir;
2487 1.1 christos np->in_pr[0] = old->in_p;
2488 1.1 christos np->in_pr[1] = old->in_p;
2489 1.1 christos if (np->in_redir == NAT_REDIRECT) {
2490 1.1 christos np->in_ndst.na_nextaddr = old->in_next6;
2491 1.1 christos bcopy(&old->in_in, &np->in_ndst.na_addr, sizeof(old->in_in));
2492 1.1 christos bcopy(&old->in_out, &np->in_odst.na_addr, sizeof(old->in_out));
2493 1.1 christos bcopy(&old->in_src, &np->in_osrc.na_addr, sizeof(old->in_src));
2494 1.1 christos } else {
2495 1.1 christos np->in_nsrc.na_nextaddr = old->in_next6;
2496 1.1 christos bcopy(&old->in_in, &np->in_osrc.na_addr, sizeof(old->in_in));
2497 1.1 christos bcopy(&old->in_out, &np->in_nsrc.na_addr, sizeof(old->in_out));
2498 1.1 christos bcopy(&old->in_src, &np->in_odst.na_addr, sizeof(old->in_src));
2499 1.1 christos }
2500 1.1 christos ipfv4tuctov5(&old->in_tuc, &np->in_tuc);
2501 1.1 christos if (np->in_redir == NAT_REDIRECT) {
2502 1.1 christos np->in_dpmin = old->in_port[0];
2503 1.1 christos np->in_dpmax = old->in_port[1];
2504 1.1 christos } else {
2505 1.1 christos np->in_spmin = old->in_port[0];
2506 1.1 christos np->in_spmax = old->in_port[1];
2507 1.1 christos }
2508 1.1 christos np->in_ppip = old->in_ppip;
2509 1.1 christos np->in_ippip = old->in_ippip;
2510 1.1 christos bcopy(&old->in_tag, &np->in_tag, sizeof(np->in_tag));
2511 1.1 christos
2512 1.1 christos np->in_namelen = 0;
2513 1.1 christos np->in_plabel = -1;
2514 1.1 christos np->in_ifnames[0] = -1;
2515 1.1 christos np->in_ifnames[1] = -1;
2516 1.1 christos
2517 1.1 christos if (size == 0) {
2518 1.1 christos np->in_size = sizeof(*np);
2519 1.1 christos np->in_size += LIFNAMSIZ * 2 + APR_LABELLEN;
2520 1.1 christos np->in_size += 3;
2521 1.1 christos } else {
2522 1.1 christos int nlen = np->in_namelen;
2523 1.1 christos char *names = np->in_names;
2524 1.1 christos
2525 1.1 christos if (old->in_ifnames[0][0] != '\0') {
2526 1.1 christos np->in_ifnames[0] = nlen;
2527 1.1 christos nlen = ipf_addfrstr(names, nlen, old->in_ifnames[0],
2528 1.1 christos LIFNAMSIZ);
2529 1.1 christos }
2530 1.1 christos if (old->in_ifnames[1][0] != '\0') {
2531 1.1 christos np->in_ifnames[0] = nlen;
2532 1.1 christos nlen = ipf_addfrstr(names, nlen, old->in_ifnames[1],
2533 1.1 christos LIFNAMSIZ);
2534 1.1 christos }
2535 1.1 christos if (old->in_plabel[0] != '\0') {
2536 1.1 christos np->in_plabel = nlen;
2537 1.1 christos nlen = ipf_addfrstr(names, nlen, old->in_plabel,
2538 1.1 christos LIFNAMSIZ);
2539 1.1 christos }
2540 1.1 christos np->in_namelen = nlen;
2541 1.1 christos np->in_size = size;
2542 1.1 christos }
2543 1.1 christos }
2544 1.1 christos
2545 1.1 christos
2546 1.1 christos static void
2547 1.1 christos frauth_4_1_32_to_current(old, current)
2548 1.1 christos frauth_4_1_32_t *old;
2549 1.1 christos void *current;
2550 1.1 christos {
2551 1.1 christos frauth_t *fra = (frauth_t *)current;
2552 1.1 christos
2553 1.1 christos fra->fra_age = old->fra_age;
2554 1.1 christos fra->fra_len = old->fra_len;
2555 1.1 christos fra->fra_index = old->fra_index;
2556 1.1 christos fra->fra_pass = old->fra_pass;
2557 1.1 christos fr_info_4_1_32_to_current(&old->fra_info, &fra->fra_info);
2558 1.1 christos fra->fra_buf = old->fra_buf;
2559 1.1 christos fra->fra_flx = old->fra_flx;
2560 1.1 christos #ifdef MENTAT
2561 1.1 christos fra->fra_q = old->fra_q;
2562 1.1 christos fra->fra_m = old->fra_m;
2563 1.1 christos #endif
2564 1.1 christos }
2565 1.1 christos
2566 1.1 christos
2567 1.1 christos static void
2568 1.1 christos frauth_4_1_29_to_current(old, current)
2569 1.1 christos frauth_4_1_29_t *old;
2570 1.1 christos void *current;
2571 1.1 christos {
2572 1.1 christos frauth_t *fra = (frauth_t *)current;
2573 1.1 christos
2574 1.1 christos fra->fra_age = old->fra_age;
2575 1.1 christos fra->fra_len = old->fra_len;
2576 1.1 christos fra->fra_index = old->fra_index;
2577 1.1 christos fra->fra_pass = old->fra_pass;
2578 1.1 christos fr_info_4_1_24_to_current(&old->fra_info, &fra->fra_info);
2579 1.1 christos fra->fra_buf = old->fra_buf;
2580 1.1 christos fra->fra_flx = old->fra_flx;
2581 1.1 christos #ifdef MENTAT
2582 1.1 christos fra->fra_q = old->fra_q;
2583 1.1 christos fra->fra_m = old->fra_m;
2584 1.1 christos #endif
2585 1.1 christos }
2586 1.1 christos
2587 1.1 christos
2588 1.1 christos static void
2589 1.1 christos frauth_4_1_24_to_current(old, current)
2590 1.1 christos frauth_4_1_24_t *old;
2591 1.1 christos void *current;
2592 1.1 christos {
2593 1.1 christos frauth_t *fra = (frauth_t *)current;
2594 1.1 christos
2595 1.1 christos fra->fra_age = old->fra_age;
2596 1.1 christos fra->fra_len = old->fra_len;
2597 1.1 christos fra->fra_index = old->fra_index;
2598 1.1 christos fra->fra_pass = old->fra_pass;
2599 1.1 christos fr_info_4_1_24_to_current(&old->fra_info, &fra->fra_info);
2600 1.1 christos fra->fra_buf = old->fra_buf;
2601 1.1 christos #ifdef MENTAT
2602 1.1 christos fra->fra_q = old->fra_q;
2603 1.1 christos fra->fra_m = old->fra_m;
2604 1.1 christos #endif
2605 1.1 christos }
2606 1.1 christos
2607 1.1 christos
2608 1.1 christos static void
2609 1.1 christos frauth_4_1_23_to_current(old, current)
2610 1.1 christos frauth_4_1_23_t *old;
2611 1.1 christos void *current;
2612 1.1 christos {
2613 1.1 christos frauth_t *fra = (frauth_t *)current;
2614 1.1 christos
2615 1.1 christos fra->fra_age = old->fra_age;
2616 1.1 christos fra->fra_len = old->fra_len;
2617 1.1 christos fra->fra_index = old->fra_index;
2618 1.1 christos fra->fra_pass = old->fra_pass;
2619 1.1 christos fr_info_4_1_23_to_current(&old->fra_info, &fra->fra_info);
2620 1.1 christos fra->fra_buf = old->fra_buf;
2621 1.1 christos #ifdef MENTAT
2622 1.1 christos fra->fra_q = old->fra_q;
2623 1.1 christos fra->fra_m = old->fra_m;
2624 1.1 christos #endif
2625 1.1 christos }
2626 1.1 christos
2627 1.1 christos
2628 1.1 christos static void
2629 1.1 christos frauth_4_1_11_to_current(old, current)
2630 1.1 christos frauth_4_1_11_t *old;
2631 1.1 christos void *current;
2632 1.1 christos {
2633 1.1 christos frauth_t *fra = (frauth_t *)current;
2634 1.1 christos
2635 1.1 christos fra->fra_age = old->fra_age;
2636 1.1 christos fra->fra_len = old->fra_len;
2637 1.1 christos fra->fra_index = old->fra_index;
2638 1.1 christos fra->fra_pass = old->fra_pass;
2639 1.1 christos fr_info_4_1_11_to_current(&old->fra_info, &fra->fra_info);
2640 1.1 christos fra->fra_buf = old->fra_buf;
2641 1.1 christos #ifdef MENTAT
2642 1.1 christos fra->fra_q = old->fra_q;
2643 1.1 christos fra->fra_m = old->fra_m;
2644 1.1 christos #endif
2645 1.1 christos }
2646 1.1 christos
2647 1.1 christos
2648 1.1 christos static void
2649 1.1 christos fr_info_4_1_32_to_current(old, current)
2650 1.1 christos fr_info_4_1_32_t *old;
2651 1.1 christos void *current;
2652 1.1 christos {
2653 1.1 christos fr_info_t *fin = (fr_info_t *)current;
2654 1.1 christos
2655 1.1 christos fin->fin_ifp = old->fin_ifp;
2656 1.1 christos ipf_v4iptov5(&old->fin_fi, &fin->fin_fi);
2657 1.1 christos bcopy(&old->fin_dat, &fin->fin_dat, sizeof(old->fin_dat));
2658 1.1 christos fin->fin_out = old->fin_out;
2659 1.1 christos fin->fin_rev = old->fin_rev;
2660 1.1 christos fin->fin_hlen = old->fin_hlen;
2661 1.1 christos fin->fin_tcpf = old->ofin_tcpf;
2662 1.1 christos fin->fin_icode = old->fin_icode;
2663 1.1 christos fin->fin_rule = old->fin_rule;
2664 1.1 christos bcopy(old->fin_group, fin->fin_group, sizeof(old->fin_group));
2665 1.1 christos fin->fin_fr = old->fin_fr;
2666 1.1 christos fin->fin_dp = old->fin_dp;
2667 1.1 christos fin->fin_dlen = old->fin_dlen;
2668 1.1 christos fin->fin_plen = old->fin_plen;
2669 1.1 christos fin->fin_ipoff = old->fin_ipoff;
2670 1.1 christos fin->fin_id = old->fin_id;
2671 1.1 christos fin->fin_off = old->fin_off;
2672 1.1 christos fin->fin_depth = old->fin_depth;
2673 1.1 christos fin->fin_error = old->fin_error;
2674 1.1 christos fin->fin_cksum = old->fin_cksum;
2675 1.1 christos fin->fin_nattag = old->fin_nattag;
2676 1.1 christos fin->fin_ip = old->ofin_ip;
2677 1.1 christos fin->fin_mp = old->fin_mp;
2678 1.1 christos fin->fin_m = old->fin_m;
2679 1.1 christos #ifdef MENTAT
2680 1.1 christos fin->fin_qfm = old->fin_qfm;
2681 1.1 christos fin->fin_qpi = old->fin_qpi;
2682 1.1 christos #endif
2683 1.1 christos #ifdef __sgi
2684 1.1 christos fin->fin_hbuf = old->fin_hbuf;
2685 1.1 christos #endif
2686 1.1 christos }
2687 1.1 christos
2688 1.1 christos
2689 1.1 christos static void
2690 1.1 christos fr_info_4_1_24_to_current(old, current)
2691 1.1 christos fr_info_4_1_24_t *old;
2692 1.1 christos void *current;
2693 1.1 christos {
2694 1.1 christos fr_info_t *fin = (fr_info_t *)current;
2695 1.1 christos
2696 1.1 christos fin->fin_ifp = old->fin_ifp;
2697 1.1 christos ipf_v4iptov5(&old->fin_fi, &fin->fin_fi);
2698 1.1 christos bcopy(&old->fin_dat, &fin->fin_dat, sizeof(old->fin_dat));
2699 1.1 christos fin->fin_out = old->fin_out;
2700 1.1 christos fin->fin_rev = old->fin_rev;
2701 1.1 christos fin->fin_hlen = old->fin_hlen;
2702 1.1 christos fin->fin_tcpf = old->ofin_tcpf;
2703 1.1 christos fin->fin_icode = old->fin_icode;
2704 1.1 christos fin->fin_rule = old->fin_rule;
2705 1.1 christos bcopy(old->fin_group, fin->fin_group, sizeof(old->fin_group));
2706 1.1 christos fin->fin_fr = old->fin_fr;
2707 1.1 christos fin->fin_dp = old->fin_dp;
2708 1.1 christos fin->fin_dlen = old->fin_dlen;
2709 1.1 christos fin->fin_plen = old->fin_plen;
2710 1.1 christos fin->fin_ipoff = old->fin_ipoff;
2711 1.1 christos fin->fin_id = old->fin_id;
2712 1.1 christos fin->fin_off = old->fin_off;
2713 1.1 christos fin->fin_depth = old->fin_depth;
2714 1.1 christos fin->fin_error = old->fin_error;
2715 1.1 christos fin->fin_cksum = old->fin_cksum;
2716 1.1 christos fin->fin_nattag = old->fin_nattag;
2717 1.1 christos fin->fin_ip = old->ofin_ip;
2718 1.1 christos fin->fin_mp = old->fin_mp;
2719 1.1 christos fin->fin_m = old->fin_m;
2720 1.1 christos #ifdef MENTAT
2721 1.1 christos fin->fin_qfm = old->fin_qfm;
2722 1.1 christos fin->fin_qpi = old->fin_qpi;
2723 1.1 christos #endif
2724 1.1 christos #ifdef __sgi
2725 1.1 christos fin->fin_hbuf = old->fin_hbuf;
2726 1.1 christos #endif
2727 1.1 christos }
2728 1.1 christos
2729 1.1 christos
2730 1.1 christos static void
2731 1.1 christos fr_info_4_1_23_to_current(old, current)
2732 1.1 christos fr_info_4_1_23_t *old;
2733 1.1 christos void *current;
2734 1.1 christos {
2735 1.1 christos fr_info_t *fin = (fr_info_t *)current;
2736 1.1 christos
2737 1.1 christos fin->fin_ifp = old->fin_ifp;
2738 1.1 christos ipf_v4iptov5(&old->fin_fi, &fin->fin_fi);
2739 1.1 christos bcopy(&old->fin_dat, &fin->fin_dat, sizeof(old->fin_dat));
2740 1.1 christos fin->fin_out = old->fin_out;
2741 1.1 christos fin->fin_rev = old->fin_rev;
2742 1.1 christos fin->fin_hlen = old->fin_hlen;
2743 1.1 christos fin->fin_tcpf = old->ofin_tcpf;
2744 1.1 christos fin->fin_icode = old->fin_icode;
2745 1.1 christos fin->fin_rule = old->fin_rule;
2746 1.1 christos bcopy(old->fin_group, fin->fin_group, sizeof(old->fin_group));
2747 1.1 christos fin->fin_fr = old->fin_fr;
2748 1.1 christos fin->fin_dp = old->fin_dp;
2749 1.1 christos fin->fin_dlen = old->fin_dlen;
2750 1.1 christos fin->fin_plen = old->fin_plen;
2751 1.1 christos fin->fin_ipoff = old->fin_ipoff;
2752 1.1 christos fin->fin_id = old->fin_id;
2753 1.1 christos fin->fin_off = old->fin_off;
2754 1.1 christos fin->fin_depth = old->fin_depth;
2755 1.1 christos fin->fin_error = old->fin_error;
2756 1.1 christos fin->fin_nattag = old->fin_nattag;
2757 1.1 christos fin->fin_ip = old->ofin_ip;
2758 1.1 christos fin->fin_mp = old->fin_mp;
2759 1.1 christos fin->fin_m = old->fin_m;
2760 1.1 christos #ifdef MENTAT
2761 1.1 christos fin->fin_qfm = old->fin_qfm;
2762 1.1 christos fin->fin_qpi = old->fin_qpi;
2763 1.1 christos #endif
2764 1.1 christos #ifdef __sgi
2765 1.1 christos fin->fin_hbuf = fin->fin_hbuf;
2766 1.1 christos #endif
2767 1.1 christos }
2768 1.1 christos
2769 1.1 christos
2770 1.1 christos static void
2771 1.1 christos fr_info_4_1_11_to_current(old, current)
2772 1.1 christos fr_info_4_1_11_t *old;
2773 1.1 christos void *current;
2774 1.1 christos {
2775 1.1 christos fr_info_t *fin = (fr_info_t *)current;
2776 1.1 christos
2777 1.1 christos fin->fin_ifp = old->fin_ifp;
2778 1.1 christos ipf_v4iptov5(&old->fin_fi, &fin->fin_fi);
2779 1.1 christos bcopy(&old->fin_dat, &fin->fin_dat, sizeof(old->fin_dat));
2780 1.1 christos fin->fin_out = old->fin_out;
2781 1.1 christos fin->fin_rev = old->fin_rev;
2782 1.1 christos fin->fin_hlen = old->fin_hlen;
2783 1.1 christos fin->fin_tcpf = old->ofin_tcpf;
2784 1.1 christos fin->fin_icode = old->fin_icode;
2785 1.1 christos fin->fin_rule = old->fin_rule;
2786 1.1 christos bcopy(old->fin_group, fin->fin_group, sizeof(old->fin_group));
2787 1.1 christos fin->fin_fr = old->fin_fr;
2788 1.1 christos fin->fin_dp = old->fin_dp;
2789 1.1 christos fin->fin_dlen = old->fin_dlen;
2790 1.1 christos fin->fin_plen = old->fin_plen;
2791 1.1 christos fin->fin_ipoff = old->fin_ipoff;
2792 1.1 christos fin->fin_id = old->fin_id;
2793 1.1 christos fin->fin_off = old->fin_off;
2794 1.1 christos fin->fin_depth = old->fin_depth;
2795 1.1 christos fin->fin_error = old->fin_error;
2796 1.1 christos fin->fin_nattag = old->fin_nattag;
2797 1.1 christos fin->fin_ip = old->ofin_ip;
2798 1.1 christos fin->fin_mp = old->fin_mp;
2799 1.1 christos fin->fin_m = old->fin_m;
2800 1.1 christos #ifdef MENTAT
2801 1.1 christos fin->fin_qfm = old->fin_qfm;
2802 1.1 christos fin->fin_qpi = old->fin_qpi;
2803 1.1 christos #endif
2804 1.1 christos #ifdef __sgi
2805 1.1 christos fin->fin_hbuf = fin->fin_hbuf;
2806 1.1 christos #endif
2807 1.1 christos }
2808 1.1 christos
2809 1.1 christos
2810 1.1 christos static void
2811 1.1 christos nat_4_1_3_to_current(nat_4_1_3_t *old, nat_t *current)
2812 1.1 christos {
2813 1.1 christos bzero((void *)current, sizeof(*current));
2814 1.1 christos bcopy((void *)old, (void *)current, sizeof(*old));
2815 1.1 christos }
2816 1.1 christos
2817 1.1 christos
2818 1.1 christos static void
2819 1.1 christos nat_4_1_14_to_current(nat_4_1_14_t *old, nat_t *current)
2820 1.1 christos {
2821 1.1 christos bzero((void *)current, sizeof(*current));
2822 1.1 christos bcopy((void *)old, (void *)current, sizeof(*old));
2823 1.1 christos }
2824 1.1 christos
2825 1.1 christos
2826 1.1 christos static void
2827 1.1 christos nat_save_4_1_16_to_current(softc, old, current)
2828 1.1 christos ipf_main_softc_t *softc;
2829 1.1 christos nat_save_4_1_16_t *old;
2830 1.1 christos void *current;
2831 1.1 christos {
2832 1.1 christos nat_save_t *nats = (nat_save_t *)current;
2833 1.1 christos
2834 1.1 christos nats->ipn_next = old->ipn_next;
2835 1.1 christos nat_4_1_14_to_current(&old->ipn_nat, &nats->ipn_nat);
2836 1.1 christos bcopy(&old->ipn_ipnat, &nats->ipn_ipnat, sizeof(old->ipn_ipnat));
2837 1.1 christos frentry_4_1_16_to_current(softc, &old->ipn_fr, &nats->ipn_fr, 0);
2838 1.1 christos nats->ipn_dsize = old->ipn_dsize;
2839 1.1 christos bcopy(old->ipn_data, nats->ipn_data, sizeof(nats->ipn_data));
2840 1.1 christos }
2841 1.1 christos
2842 1.1 christos
2843 1.1 christos static void
2844 1.1 christos nat_save_4_1_14_to_current(softc, old, current)
2845 1.1 christos ipf_main_softc_t *softc;
2846 1.1 christos nat_save_4_1_14_t *old;
2847 1.1 christos void *current;
2848 1.1 christos {
2849 1.1 christos nat_save_t *nats = (nat_save_t *)current;
2850 1.1 christos
2851 1.1 christos nats->ipn_next = old->ipn_next;
2852 1.1 christos nat_4_1_14_to_current(&old->ipn_nat, &nats->ipn_nat);
2853 1.1 christos bcopy(&old->ipn_ipnat, &nats->ipn_ipnat, sizeof(old->ipn_ipnat));
2854 1.1 christos frentry_4_1_0_to_current(softc, &old->ipn_fr, &nats->ipn_fr, 0);
2855 1.1 christos nats->ipn_dsize = old->ipn_dsize;
2856 1.1 christos bcopy(old->ipn_data, nats->ipn_data, sizeof(nats->ipn_data));
2857 1.1 christos }
2858 1.1 christos
2859 1.1 christos
2860 1.1 christos static void
2861 1.1 christos nat_save_4_1_3_to_current(softc, old, current)
2862 1.1 christos ipf_main_softc_t *softc;
2863 1.1 christos nat_save_4_1_3_t *old;
2864 1.1 christos void *current;
2865 1.1 christos {
2866 1.1 christos nat_save_t *nats = (nat_save_t *)current;
2867 1.1 christos
2868 1.1 christos nats->ipn_next = old->ipn_next;
2869 1.1 christos nat_4_1_3_to_current(&old->ipn_nat, &nats->ipn_nat);
2870 1.1 christos ipnat_4_1_0_to_current(&old->ipn_ipnat, &nats->ipn_ipnat, 0);
2871 1.1 christos frentry_4_1_0_to_current(softc, &old->ipn_fr, &nats->ipn_fr, 0);
2872 1.1 christos nats->ipn_dsize = old->ipn_dsize;
2873 1.1 christos bcopy(old->ipn_data, nats->ipn_data, sizeof(nats->ipn_data));
2874 1.1 christos }
2875 1.1 christos
2876 1.1 christos
2877 1.1 christos static void
2878 1.1 christos natstat_current_to_4_1_32(current, old)
2879 1.1 christos void *current;
2880 1.1 christos natstat_4_1_32_t *old;
2881 1.1 christos {
2882 1.1 christos natstat_t *ns = (natstat_t *)current;
2883 1.1 christos
2884 1.1 christos old->ns_mapped[0] = ns->ns_side[0].ns_translated;
2885 1.1 christos old->ns_mapped[1] = ns->ns_side[1].ns_translated;
2886 1.1 christos old->ns_rules = ns->ns_side[0].ns_inuse + ns->ns_side[1].ns_inuse;
2887 1.1 christos old->ns_added = ns->ns_side[0].ns_added + ns->ns_side[1].ns_added;
2888 1.1 christos old->ns_expire = ns->ns_expire;
2889 1.1 christos old->ns_inuse = ns->ns_side[0].ns_inuse + ns->ns_side[1].ns_inuse;
2890 1.1 christos old->ns_logged = ns->ns_log_ok;
2891 1.1 christos old->ns_logfail = ns->ns_log_fail;
2892 1.1 christos old->ns_memfail = ns->ns_side[0].ns_memfail + ns->ns_side[1].ns_memfail;
2893 1.1 christos old->ns_badnat = ns->ns_side[0].ns_badnat + ns->ns_side[1].ns_badnat;
2894 1.1 christos old->ns_addtrpnt = ns->ns_addtrpnt;
2895 1.1 christos old->ns_table[0] = ns->ns_side[0].ns_table;
2896 1.1 christos old->ns_table[1] = ns->ns_side[1].ns_table;
2897 1.1 christos old->ns_maptable = NULL;
2898 1.1 christos old->ns_list = ns->ns_list;
2899 1.1 christos old->ns_apslist = NULL;
2900 1.1 christos old->ns_wilds = ns->ns_wilds;
2901 1.1 christos old->ns_nattab_sz = ns->ns_nattab_sz;
2902 1.1 christos old->ns_nattab_max = ns->ns_nattab_max;
2903 1.1 christos old->ns_rultab_sz = ns->ns_rultab_sz;
2904 1.1 christos old->ns_rdrtab_sz = ns->ns_rdrtab_sz;
2905 1.1 christos old->ns_trpntab_sz = ns->ns_trpntab_sz;
2906 1.1 christos old->ns_hostmap_sz = 0;
2907 1.1 christos old->ns_instances = ns->ns_instances;
2908 1.1 christos old->ns_maplist = ns->ns_maplist;
2909 1.1 christos old->ns_bucketlen[0] = (u_long *)ns->ns_side[0].ns_bucketlen;
2910 1.1 christos old->ns_bucketlen[1] = (u_long *)ns->ns_side[1].ns_bucketlen;
2911 1.1 christos old->ns_ticks = ns->ns_ticks;
2912 1.1 christos old->ns_orphans = ns->ns_orphans;
2913 1.1 christos old->ns_uncreate[0][0] = ns->ns_side[0].ns_uncreate[0];
2914 1.1 christos old->ns_uncreate[0][1] = ns->ns_side[0].ns_uncreate[1];
2915 1.1 christos old->ns_uncreate[1][0] = ns->ns_side[1].ns_uncreate[0];
2916 1.1 christos old->ns_uncreate[1][1] = ns->ns_side[1].ns_uncreate[1];
2917 1.1 christos }
2918 1.1 christos
2919 1.1 christos
2920 1.1 christos static void
2921 1.1 christos natstat_current_to_4_1_27(current, old)
2922 1.1 christos void *current;
2923 1.1 christos natstat_4_1_27_t *old;
2924 1.1 christos {
2925 1.1 christos natstat_t *ns = (natstat_t *)current;
2926 1.1 christos
2927 1.1 christos old->ns_mapped[0] = ns->ns_side[0].ns_translated;
2928 1.1 christos old->ns_mapped[1] = ns->ns_side[1].ns_translated;
2929 1.1 christos old->ns_rules = ns->ns_side[0].ns_inuse + ns->ns_side[1].ns_inuse;
2930 1.1 christos old->ns_added = ns->ns_side[0].ns_added + ns->ns_side[1].ns_added;
2931 1.1 christos old->ns_expire = ns->ns_expire;
2932 1.1 christos old->ns_inuse = ns->ns_side[0].ns_inuse + ns->ns_side[1].ns_inuse;
2933 1.1 christos old->ns_logged = ns->ns_log_ok;
2934 1.1 christos old->ns_logfail = ns->ns_log_fail;
2935 1.1 christos old->ns_memfail = ns->ns_side[0].ns_memfail + ns->ns_side[1].ns_memfail;
2936 1.1 christos old->ns_badnat = ns->ns_side[0].ns_badnat + ns->ns_side[1].ns_badnat;
2937 1.1 christos old->ns_addtrpnt = ns->ns_addtrpnt;
2938 1.1 christos old->ns_table[0] = ns->ns_side[0].ns_table;
2939 1.1 christos old->ns_table[1] = ns->ns_side[1].ns_table;
2940 1.1 christos old->ns_maptable = NULL;
2941 1.1 christos old->ns_list = ns->ns_list;
2942 1.1 christos old->ns_apslist = NULL;
2943 1.1 christos old->ns_wilds = ns->ns_wilds;
2944 1.1 christos old->ns_nattab_sz = ns->ns_nattab_sz;
2945 1.1 christos old->ns_nattab_max = ns->ns_nattab_max;
2946 1.1 christos old->ns_rultab_sz = ns->ns_rultab_sz;
2947 1.1 christos old->ns_rdrtab_sz = ns->ns_rdrtab_sz;
2948 1.1 christos old->ns_trpntab_sz = ns->ns_trpntab_sz;
2949 1.1 christos old->ns_hostmap_sz = 0;
2950 1.1 christos old->ns_instances = ns->ns_instances;
2951 1.1 christos old->ns_maplist = ns->ns_maplist;
2952 1.1 christos old->ns_bucketlen[0] = (u_long *)ns->ns_side[0].ns_bucketlen;
2953 1.1 christos old->ns_bucketlen[1] = (u_long *)ns->ns_side[1].ns_bucketlen;
2954 1.1 christos old->ns_ticks = ns->ns_ticks;
2955 1.1 christos old->ns_orphans = ns->ns_orphans;
2956 1.1 christos }
2957 1.1 christos
2958 1.1 christos
2959 1.1 christos static void
2960 1.1 christos natstat_current_to_4_1_16(current, old)
2961 1.1 christos void *current;
2962 1.1 christos natstat_4_1_16_t *old;
2963 1.1 christos {
2964 1.1 christos natstat_t *ns = (natstat_t *)current;
2965 1.1 christos
2966 1.1 christos old->ns_mapped[0] = ns->ns_side[0].ns_translated;
2967 1.1 christos old->ns_mapped[1] = ns->ns_side[1].ns_translated;
2968 1.1 christos old->ns_rules = ns->ns_side[0].ns_inuse + ns->ns_side[1].ns_inuse;
2969 1.1 christos old->ns_added = ns->ns_side[0].ns_added + ns->ns_side[1].ns_added;
2970 1.1 christos old->ns_expire = ns->ns_expire;
2971 1.1 christos old->ns_inuse = ns->ns_side[0].ns_inuse + ns->ns_side[1].ns_inuse;
2972 1.1 christos old->ns_logged = ns->ns_log_ok;
2973 1.1 christos old->ns_logfail = ns->ns_log_fail;
2974 1.1 christos old->ns_memfail = ns->ns_side[0].ns_memfail + ns->ns_side[1].ns_memfail;
2975 1.1 christos old->ns_badnat = ns->ns_side[0].ns_badnat + ns->ns_side[1].ns_badnat;
2976 1.1 christos old->ns_addtrpnt = ns->ns_addtrpnt;
2977 1.1 christos old->ns_table[0] = ns->ns_side[0].ns_table;
2978 1.1 christos old->ns_table[1] = ns->ns_side[1].ns_table;
2979 1.1 christos old->ns_maptable = NULL;
2980 1.1 christos old->ns_list = ns->ns_list;
2981 1.1 christos old->ns_apslist = NULL;
2982 1.1 christos old->ns_wilds = ns->ns_wilds;
2983 1.1 christos old->ns_nattab_sz = ns->ns_nattab_sz;
2984 1.1 christos old->ns_nattab_max = ns->ns_nattab_max;
2985 1.1 christos old->ns_rultab_sz = ns->ns_rultab_sz;
2986 1.1 christos old->ns_rdrtab_sz = ns->ns_rdrtab_sz;
2987 1.1 christos old->ns_trpntab_sz = ns->ns_trpntab_sz;
2988 1.1 christos old->ns_hostmap_sz = 0;
2989 1.1 christos old->ns_instances = ns->ns_instances;
2990 1.1 christos old->ns_maplist = ns->ns_maplist;
2991 1.1 christos old->ns_bucketlen[0] = (u_long *)ns->ns_side[0].ns_bucketlen;
2992 1.1 christos old->ns_bucketlen[1] = (u_long *)ns->ns_side[1].ns_bucketlen;
2993 1.1 christos old->ns_ticks = ns->ns_ticks;
2994 1.1 christos }
2995 1.1 christos
2996 1.1 christos
2997 1.1 christos static void
2998 1.1 christos natstat_current_to_4_1_0(current, old)
2999 1.1 christos void *current;
3000 1.1 christos natstat_4_1_0_t *old;
3001 1.1 christos {
3002 1.1 christos natstat_t *ns = (natstat_t *)current;
3003 1.1 christos
3004 1.1 christos old->ns_mapped[0] = ns->ns_side[0].ns_translated;
3005 1.1 christos old->ns_mapped[1] = ns->ns_side[1].ns_translated;
3006 1.1 christos old->ns_rules = ns->ns_side[0].ns_inuse + ns->ns_side[1].ns_inuse;
3007 1.1 christos old->ns_added = ns->ns_side[0].ns_added + ns->ns_side[1].ns_added;
3008 1.1 christos old->ns_expire = ns->ns_expire;
3009 1.1 christos old->ns_inuse = ns->ns_side[0].ns_inuse + ns->ns_side[1].ns_inuse;
3010 1.1 christos old->ns_logged = ns->ns_log_ok;
3011 1.1 christos old->ns_logfail = ns->ns_log_fail;
3012 1.1 christos old->ns_memfail = ns->ns_side[0].ns_memfail + ns->ns_side[1].ns_memfail;
3013 1.1 christos old->ns_badnat = ns->ns_side[0].ns_badnat + ns->ns_side[1].ns_badnat;
3014 1.1 christos old->ns_addtrpnt = ns->ns_addtrpnt;
3015 1.1 christos old->ns_table[0] = ns->ns_side[0].ns_table;
3016 1.1 christos old->ns_table[1] = ns->ns_side[1].ns_table;
3017 1.1 christos old->ns_maptable = NULL;
3018 1.1 christos old->ns_list = ns->ns_list;
3019 1.1 christos old->ns_apslist = NULL;
3020 1.1 christos old->ns_wilds = ns->ns_wilds;
3021 1.1 christos old->ns_nattab_sz = ns->ns_nattab_sz;
3022 1.1 christos old->ns_nattab_max = ns->ns_nattab_max;
3023 1.1 christos old->ns_rultab_sz = ns->ns_rultab_sz;
3024 1.1 christos old->ns_rdrtab_sz = ns->ns_rdrtab_sz;
3025 1.1 christos old->ns_trpntab_sz = ns->ns_trpntab_sz;
3026 1.1 christos old->ns_hostmap_sz = 0;
3027 1.1 christos old->ns_instances = ns->ns_instances;
3028 1.1 christos old->ns_maplist = ns->ns_maplist;
3029 1.1 christos old->ns_bucketlen[0] = (u_long *)ns->ns_side[0].ns_bucketlen;
3030 1.1 christos old->ns_bucketlen[1] = (u_long *)ns->ns_side[1].ns_bucketlen;
3031 1.1 christos }
3032 1.1 christos
3033 1.1 christos
3034 1.1 christos static void
3035 1.1 christos ipstate_save_current_to_4_1_16(current, old)
3036 1.1 christos void *current;
3037 1.1 christos ipstate_save_4_1_16_t *old;
3038 1.1 christos {
3039 1.1 christos ipstate_save_t *ips = (ipstate_save_t *)current;
3040 1.1 christos
3041 1.1 christos old->ips_next = ips->ips_next;
3042 1.1 christos ipstate_current_to_4_1_0(&ips->ips_is, &old->ips_is);
3043 1.1 christos frentry_current_to_4_1_16(&ips->ips_fr, &old->ips_fr);
3044 1.1 christos }
3045 1.1 christos
3046 1.1 christos
3047 1.1 christos static void
3048 1.1 christos ipstate_save_current_to_4_1_0(current, old)
3049 1.1 christos void *current;
3050 1.1 christos ipstate_save_4_1_0_t *old;
3051 1.1 christos {
3052 1.1 christos ipstate_save_t *ips = (ipstate_save_t *)current;
3053 1.1 christos
3054 1.1 christos old->ips_next = ips->ips_next;
3055 1.1 christos ipstate_current_to_4_1_0(&ips->ips_is, &old->ips_is);
3056 1.1 christos frentry_current_to_4_1_0(&ips->ips_fr, &old->ips_fr);
3057 1.1 christos }
3058 1.1 christos
3059 1.1 christos
3060 1.1 christos int
3061 1.1 christos ipf_out_compat(softc, obj, ptr)
3062 1.1 christos ipf_main_softc_t *softc;
3063 1.1 christos ipfobj_t *obj;
3064 1.1 christos void *ptr;
3065 1.1 christos {
3066 1.1 christos frentry_t *fr;
3067 1.1 christos int error;
3068 1.1 christos
3069 1.1 christos IPFERROR(140042);
3070 1.1 christos error = EINVAL;
3071 1.1 christos
3072 1.1 christos switch (obj->ipfo_type)
3073 1.1 christos {
3074 1.1 christos default :
3075 1.1 christos break;
3076 1.1 christos
3077 1.1 christos case IPFOBJ_FRENTRY :
3078 1.1 christos if (obj->ipfo_rev >= 4013400) {
3079 1.1 christos frentry_4_1_34_t *old;
3080 1.1 christos
3081 1.1 christos KMALLOC(old, frentry_4_1_34_t *);
3082 1.1 christos if (old == NULL) {
3083 1.1 christos IPFERROR(140043);
3084 1.1 christos error = ENOMEM;
3085 1.1 christos break;
3086 1.1 christos }
3087 1.1 christos frentry_current_to_4_1_34(ptr, old);
3088 1.1 christos error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old));
3089 1.1 christos if (error == 0 && old->fr_dsize > 0) {
3090 1.1 christos char *dst = obj->ipfo_ptr;
3091 1.1 christos
3092 1.1 christos fr = ptr;
3093 1.1 christos dst += sizeof(*old);
3094 1.1 christos error = COPYOUT(fr->fr_data, dst,
3095 1.1 christos old->fr_dsize);
3096 1.1 christos if (error != 0) {
3097 1.1 christos IPFERROR(140044);
3098 1.1 christos }
3099 1.1 christos }
3100 1.1 christos KFREE(old);
3101 1.1 christos obj->ipfo_size = sizeof(*old);
3102 1.1 christos } else if (obj->ipfo_rev >= 4011600) {
3103 1.1 christos frentry_4_1_16_t *old;
3104 1.1 christos
3105 1.1 christos KMALLOC(old, frentry_4_1_16_t *);
3106 1.1 christos if (old == NULL) {
3107 1.1 christos IPFERROR(140045);
3108 1.1 christos error = ENOMEM;
3109 1.1 christos break;
3110 1.1 christos }
3111 1.1 christos frentry_current_to_4_1_16(ptr, old);
3112 1.1 christos error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old));
3113 1.1 christos if (error != 0) {
3114 1.1 christos IPFERROR(140046);
3115 1.1 christos }
3116 1.1 christos KFREE(old);
3117 1.1 christos obj->ipfo_size = sizeof(*old);
3118 1.1 christos } else {
3119 1.1 christos frentry_4_1_0_t *old;
3120 1.1 christos
3121 1.1 christos KMALLOC(old, frentry_4_1_0_t *);
3122 1.1 christos if (old == NULL) {
3123 1.1 christos IPFERROR(140047);
3124 1.1 christos error = ENOMEM;
3125 1.1 christos break;
3126 1.1 christos }
3127 1.1 christos frentry_current_to_4_1_0(ptr, old);
3128 1.1 christos error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old));
3129 1.1 christos if (error != 0) {
3130 1.1 christos IPFERROR(140048);
3131 1.1 christos }
3132 1.1 christos KFREE(old);
3133 1.1 christos obj->ipfo_size = sizeof(*old);
3134 1.1 christos }
3135 1.1 christos break;
3136 1.1 christos
3137 1.1 christos case IPFOBJ_IPFSTAT :
3138 1.1 christos if (obj->ipfo_rev >= 4013300) {
3139 1.1 christos friostat_4_1_33_t *old;
3140 1.1 christos
3141 1.1 christos KMALLOC(old, friostat_4_1_33_t *);
3142 1.1 christos if (old == NULL) {
3143 1.1 christos IPFERROR(140049);
3144 1.1 christos error = ENOMEM;
3145 1.1 christos break;
3146 1.1 christos }
3147 1.1 christos friostat_current_to_4_1_33(ptr, old, obj->ipfo_rev);
3148 1.1 christos error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old));
3149 1.1 christos if (error != 0) {
3150 1.1 christos IPFERROR(140050);
3151 1.1 christos }
3152 1.1 christos KFREE(old);
3153 1.1 christos } else {
3154 1.1 christos friostat_4_1_0_t *old;
3155 1.1 christos
3156 1.1 christos KMALLOC(old, friostat_4_1_0_t *);
3157 1.1 christos if (old == NULL) {
3158 1.1 christos IPFERROR(140051);
3159 1.1 christos error = ENOMEM;
3160 1.1 christos break;
3161 1.1 christos }
3162 1.1 christos friostat_current_to_4_1_0(ptr, old, obj->ipfo_rev);
3163 1.1 christos error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old));
3164 1.1 christos if (error != 0) {
3165 1.1 christos IPFERROR(140052);
3166 1.1 christos }
3167 1.1 christos KFREE(old);
3168 1.1 christos }
3169 1.1 christos break;
3170 1.1 christos
3171 1.1 christos case IPFOBJ_IPFINFO : /* unused */
3172 1.1 christos break;
3173 1.1 christos
3174 1.1 christos case IPFOBJ_IPNAT :
3175 1.1 christos if (obj->ipfo_rev >= 4011400) {
3176 1.1 christos ipnat_4_1_14_t *old;
3177 1.1 christos
3178 1.1 christos KMALLOC(old, ipnat_4_1_14_t *);
3179 1.1 christos if (old == NULL) {
3180 1.1 christos IPFERROR(140053);
3181 1.1 christos error = ENOMEM;
3182 1.1 christos break;
3183 1.1 christos }
3184 1.1 christos ipnat_current_to_4_1_14(ptr, old);
3185 1.1 christos error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old));
3186 1.1 christos if (error != 0) {
3187 1.1 christos IPFERROR(140054);
3188 1.1 christos }
3189 1.1 christos KFREE(old);
3190 1.1 christos } else {
3191 1.1 christos ipnat_4_1_0_t *old;
3192 1.1 christos
3193 1.1 christos KMALLOC(old, ipnat_4_1_0_t *);
3194 1.1 christos if (old == NULL) {
3195 1.1 christos IPFERROR(140055);
3196 1.1 christos error = ENOMEM;
3197 1.1 christos break;
3198 1.1 christos }
3199 1.1 christos ipnat_current_to_4_1_0(ptr, old);
3200 1.1 christos error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old));
3201 1.1 christos if (error != 0) {
3202 1.1 christos IPFERROR(140056);
3203 1.1 christos }
3204 1.1 christos KFREE(old);
3205 1.1 christos }
3206 1.1 christos break;
3207 1.1 christos
3208 1.1 christos case IPFOBJ_NATSTAT :
3209 1.1 christos if (obj->ipfo_rev >= 4013200) {
3210 1.1 christos natstat_4_1_32_t *old;
3211 1.1 christos
3212 1.1 christos KMALLOC(old, natstat_4_1_32_t *);
3213 1.1 christos if (old == NULL) {
3214 1.1 christos IPFERROR(140057);
3215 1.1 christos error = ENOMEM;
3216 1.1 christos break;
3217 1.1 christos }
3218 1.1 christos natstat_current_to_4_1_32(ptr, old);
3219 1.1 christos error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old));
3220 1.1 christos if (error != 0) {
3221 1.1 christos IPFERROR(140058);
3222 1.1 christos }
3223 1.1 christos KFREE(old);
3224 1.1 christos } else if (obj->ipfo_rev >= 4012700) {
3225 1.1 christos natstat_4_1_27_t *old;
3226 1.1 christos
3227 1.1 christos KMALLOC(old, natstat_4_1_27_t *);
3228 1.1 christos if (old == NULL) {
3229 1.1 christos IPFERROR(140059);
3230 1.1 christos error = ENOMEM;
3231 1.1 christos break;
3232 1.1 christos }
3233 1.1 christos natstat_current_to_4_1_27(ptr, old);
3234 1.1 christos error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old));
3235 1.1 christos if (error != 0) {
3236 1.1 christos IPFERROR(140060);
3237 1.1 christos }
3238 1.1 christos KFREE(old);
3239 1.1 christos } else if (obj->ipfo_rev >= 4011600) {
3240 1.1 christos natstat_4_1_16_t *old;
3241 1.1 christos
3242 1.1 christos KMALLOC(old, natstat_4_1_16_t *);
3243 1.1 christos if (old == NULL) {
3244 1.1 christos IPFERROR(140061);
3245 1.1 christos error = ENOMEM;
3246 1.1 christos break;
3247 1.1 christos }
3248 1.1 christos natstat_current_to_4_1_16(ptr, old);
3249 1.1 christos error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old));
3250 1.1 christos if (error != 0) {
3251 1.1 christos IPFERROR(140062);
3252 1.1 christos }
3253 1.1 christos KFREE(old);
3254 1.1 christos } else {
3255 1.1 christos natstat_4_1_0_t *old;
3256 1.1 christos
3257 1.1 christos KMALLOC(old, natstat_4_1_0_t *);
3258 1.1 christos if (old == NULL) {
3259 1.1 christos IPFERROR(140063);
3260 1.1 christos error = ENOMEM;
3261 1.1 christos break;
3262 1.1 christos }
3263 1.1 christos natstat_current_to_4_1_0(ptr, old);
3264 1.1 christos error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old));
3265 1.1 christos if (error != 0) {
3266 1.1 christos IPFERROR(140064);
3267 1.1 christos }
3268 1.1 christos KFREE(old);
3269 1.1 christos }
3270 1.1 christos break;
3271 1.1 christos
3272 1.1 christos case IPFOBJ_STATESAVE :
3273 1.1 christos if (obj->ipfo_rev >= 4011600) {
3274 1.1 christos ipstate_save_4_1_16_t *old;
3275 1.1 christos
3276 1.1 christos KMALLOC(old, ipstate_save_4_1_16_t *);
3277 1.1 christos if (old == NULL) {
3278 1.1 christos IPFERROR(140065);
3279 1.1 christos error = ENOMEM;
3280 1.1 christos break;
3281 1.1 christos }
3282 1.1 christos ipstate_save_current_to_4_1_16(ptr, old);
3283 1.1 christos error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old));
3284 1.1 christos if (error != 0) {
3285 1.1 christos IPFERROR(140066);
3286 1.1 christos }
3287 1.1 christos KFREE(old);
3288 1.1 christos } else {
3289 1.1 christos ipstate_save_4_1_0_t *old;
3290 1.1 christos
3291 1.1 christos KMALLOC(old, ipstate_save_4_1_0_t *);
3292 1.1 christos if (old == NULL) {
3293 1.1 christos IPFERROR(140067);
3294 1.1 christos error = ENOMEM;
3295 1.1 christos break;
3296 1.1 christos }
3297 1.1 christos ipstate_save_current_to_4_1_0(ptr, old);
3298 1.1 christos error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old));
3299 1.1 christos if (error != 0) {
3300 1.1 christos IPFERROR(140068);
3301 1.1 christos }
3302 1.1 christos KFREE(old);
3303 1.1 christos }
3304 1.1 christos break;
3305 1.1 christos
3306 1.1 christos case IPFOBJ_NATSAVE :
3307 1.1 christos if (obj->ipfo_rev >= 4011600) {
3308 1.1 christos nat_save_4_1_16_t *old16;
3309 1.1 christos
3310 1.1 christos KMALLOC(old16, nat_save_4_1_16_t *);
3311 1.1 christos if (old16 == NULL) {
3312 1.1 christos IPFERROR(140069);
3313 1.1 christos error = ENOMEM;
3314 1.1 christos break;
3315 1.1 christos }
3316 1.1 christos nat_save_current_to_4_1_16(ptr, old16);
3317 1.1 christos error = COPYOUT(&old16, obj->ipfo_ptr, sizeof(*old16));
3318 1.1 christos if (error != 0) {
3319 1.1 christos IPFERROR(140070);
3320 1.1 christos }
3321 1.1 christos KFREE(old16);
3322 1.1 christos } else if (obj->ipfo_rev >= 4011400) {
3323 1.1 christos nat_save_4_1_14_t *old14;
3324 1.1 christos
3325 1.1 christos KMALLOC(old14, nat_save_4_1_14_t *);
3326 1.1 christos if (old14 == NULL) {
3327 1.1 christos IPFERROR(140071);
3328 1.1 christos error = ENOMEM;
3329 1.1 christos break;
3330 1.1 christos }
3331 1.1 christos nat_save_current_to_4_1_14(ptr, old14);
3332 1.1 christos error = COPYOUT(&old14, obj->ipfo_ptr, sizeof(*old14));
3333 1.1 christos if (error != 0) {
3334 1.1 christos IPFERROR(140072);
3335 1.1 christos }
3336 1.1 christos KFREE(old14);
3337 1.1 christos } else if (obj->ipfo_rev >= 4010300) {
3338 1.1 christos nat_save_4_1_3_t *old3;
3339 1.1 christos
3340 1.1 christos KMALLOC(old3, nat_save_4_1_3_t *);
3341 1.1 christos if (old3 == NULL) {
3342 1.1 christos IPFERROR(140073);
3343 1.1 christos error = ENOMEM;
3344 1.1 christos break;
3345 1.1 christos }
3346 1.1 christos nat_save_current_to_4_1_3(ptr, old3);
3347 1.1 christos error = COPYOUT(&old3, obj->ipfo_ptr, sizeof(*old3));
3348 1.1 christos if (error != 0) {
3349 1.1 christos IPFERROR(140074);
3350 1.1 christos }
3351 1.1 christos KFREE(old3);
3352 1.1 christos }
3353 1.1 christos break;
3354 1.1 christos
3355 1.1 christos case IPFOBJ_IPSTATE :
3356 1.1 christos if (obj->ipfo_rev >= 4011600) {
3357 1.1 christos ipstate_4_1_16_t *old;
3358 1.1 christos
3359 1.1 christos KMALLOC(old, ipstate_4_1_16_t *);
3360 1.1 christos if (old == NULL) {
3361 1.1 christos IPFERROR(140075);
3362 1.1 christos error = ENOMEM;
3363 1.1 christos break;
3364 1.1 christos }
3365 1.1 christos ipstate_current_to_4_1_16(ptr, old);
3366 1.1 christos error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old));
3367 1.1 christos if (error != 0) {
3368 1.1 christos IPFERROR(140076);
3369 1.1 christos }
3370 1.1 christos KFREE(old);
3371 1.1 christos } else {
3372 1.1 christos ipstate_4_1_0_t *old;
3373 1.1 christos
3374 1.1 christos KMALLOC(old, ipstate_4_1_0_t *);
3375 1.1 christos if (old == NULL) {
3376 1.1 christos IPFERROR(140077);
3377 1.1 christos error = ENOMEM;
3378 1.1 christos break;
3379 1.1 christos }
3380 1.1 christos ipstate_current_to_4_1_0(ptr, old);
3381 1.1 christos error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old));
3382 1.1 christos if (error != 0) {
3383 1.1 christos IPFERROR(140078);
3384 1.1 christos }
3385 1.1 christos KFREE(old);
3386 1.1 christos }
3387 1.1 christos break;
3388 1.1 christos
3389 1.1 christos case IPFOBJ_STATESTAT :
3390 1.1 christos if (obj->ipfo_rev >= 4012100) {
3391 1.1 christos ips_stat_4_1_21_t *old;
3392 1.1 christos
3393 1.1 christos KMALLOC(old, ips_stat_4_1_21_t *);
3394 1.1 christos if (old == NULL) {
3395 1.1 christos IPFERROR(140079);
3396 1.1 christos error = ENOMEM;
3397 1.1 christos break;
3398 1.1 christos }
3399 1.1 christos ips_stat_current_to_4_1_21(ptr, old);
3400 1.1 christos error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old));
3401 1.1 christos if (error != 0) {
3402 1.1 christos IPFERROR(140080);
3403 1.1 christos }
3404 1.1 christos KFREE(old);
3405 1.1 christos } else {
3406 1.1 christos ips_stat_4_1_0_t *old;
3407 1.1 christos
3408 1.1 christos KMALLOC(old, ips_stat_4_1_0_t *);
3409 1.1 christos if (old == NULL) {
3410 1.1 christos IPFERROR(140081);
3411 1.1 christos error = ENOMEM;
3412 1.1 christos break;
3413 1.1 christos }
3414 1.1 christos ips_stat_current_to_4_1_0(ptr, old);
3415 1.1 christos error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old));
3416 1.1 christos if (error != 0) {
3417 1.1 christos IPFERROR(140082);
3418 1.1 christos }
3419 1.1 christos KFREE(old);
3420 1.1 christos }
3421 1.1 christos break;
3422 1.1 christos
3423 1.1 christos case IPFOBJ_FRAUTH :
3424 1.1 christos if (obj->ipfo_rev >= 4012900) {
3425 1.1 christos frauth_4_1_29_t *old29;
3426 1.1 christos
3427 1.1 christos KMALLOC(old29, frauth_4_1_29_t *);
3428 1.1 christos if (old29 == NULL) {
3429 1.1 christos IPFERROR(140083);
3430 1.1 christos error = ENOMEM;
3431 1.1 christos break;
3432 1.1 christos }
3433 1.1 christos frauth_current_to_4_1_29(ptr, old29);
3434 1.1 christos error = COPYOUT(old29, obj->ipfo_ptr, sizeof(*old29));
3435 1.1 christos if (error != 0) {
3436 1.1 christos IPFERROR(140084);
3437 1.1 christos }
3438 1.1 christos KFREE(old29);
3439 1.1 christos } else if (obj->ipfo_rev >= 4012400) {
3440 1.1 christos frauth_4_1_24_t *old24;
3441 1.1 christos
3442 1.1 christos KMALLOC(old24, frauth_4_1_24_t *);
3443 1.1 christos if (old24 == NULL) {
3444 1.1 christos IPFERROR(140085);
3445 1.1 christos error = ENOMEM;
3446 1.1 christos break;
3447 1.1 christos }
3448 1.1 christos frauth_current_to_4_1_24(ptr, old24);
3449 1.1 christos error = COPYOUT(old24, obj->ipfo_ptr, sizeof(*old24));
3450 1.1 christos if (error != 0) {
3451 1.1 christos IPFERROR(140086);
3452 1.1 christos }
3453 1.1 christos KFREE(old24);
3454 1.1 christos } else if (obj->ipfo_rev >= 4012300) {
3455 1.1 christos frauth_4_1_23_t *old23;
3456 1.1 christos
3457 1.1 christos KMALLOC(old23, frauth_4_1_23_t *);
3458 1.1 christos if (old23 == NULL) {
3459 1.1 christos IPFERROR(140087);
3460 1.1 christos error = ENOMEM;
3461 1.1 christos break;
3462 1.1 christos }
3463 1.1 christos frauth_current_to_4_1_23(ptr, old23);
3464 1.1 christos error = COPYOUT(old23, obj->ipfo_ptr, sizeof(*old23));
3465 1.1 christos if (error != 0) {
3466 1.1 christos IPFERROR(140088);
3467 1.1 christos }
3468 1.1 christos KFREE(old23);
3469 1.1 christos } else if (obj->ipfo_rev >= 4011100) {
3470 1.1 christos frauth_4_1_11_t *old11;
3471 1.1 christos
3472 1.1 christos KMALLOC(old11, frauth_4_1_11_t *);
3473 1.1 christos if (old11 == NULL) {
3474 1.1 christos IPFERROR(140089);
3475 1.1 christos error = ENOMEM;
3476 1.1 christos break;
3477 1.1 christos }
3478 1.1 christos frauth_current_to_4_1_11(ptr, old11);
3479 1.1 christos error = COPYOUT(old11, obj->ipfo_ptr, sizeof(*old11));
3480 1.1 christos if (error != 0) {
3481 1.1 christos IPFERROR(140090);
3482 1.1 christos }
3483 1.1 christos KFREE(old11);
3484 1.1 christos }
3485 1.1 christos break;
3486 1.1 christos
3487 1.1 christos case IPFOBJ_NAT :
3488 1.1 christos if (obj->ipfo_rev >= 4012500) {
3489 1.1 christos nat_4_1_25_t *old;
3490 1.1 christos
3491 1.1 christos KMALLOC(old, nat_4_1_25_t *);
3492 1.1 christos if (old == NULL) {
3493 1.1 christos IPFERROR(140091);
3494 1.1 christos error = ENOMEM;
3495 1.1 christos break;
3496 1.1 christos }
3497 1.1 christos nat_current_to_4_1_25(ptr, old);
3498 1.1 christos error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old));
3499 1.1 christos if (error != 0) {
3500 1.1 christos IPFERROR(140092);
3501 1.1 christos }
3502 1.1 christos KFREE(old);
3503 1.1 christos } else if (obj->ipfo_rev >= 4011400) {
3504 1.1 christos nat_4_1_14_t *old;
3505 1.1 christos
3506 1.1 christos KMALLOC(old, nat_4_1_14_t *);
3507 1.1 christos if (old == NULL) {
3508 1.1 christos IPFERROR(140093);
3509 1.1 christos error = ENOMEM;
3510 1.1 christos break;
3511 1.1 christos }
3512 1.1 christos nat_current_to_4_1_14(ptr, old);
3513 1.1 christos error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old));
3514 1.1 christos if (error != 0) {
3515 1.1 christos IPFERROR(140094);
3516 1.1 christos }
3517 1.1 christos KFREE(old);
3518 1.1 christos } else if (obj->ipfo_rev >= 4010300) {
3519 1.1 christos nat_4_1_3_t *old;
3520 1.1 christos
3521 1.1 christos KMALLOC(old, nat_4_1_3_t *);
3522 1.1 christos if (old == NULL) {
3523 1.1 christos IPFERROR(140095);
3524 1.1 christos error = ENOMEM;
3525 1.1 christos break;
3526 1.1 christos }
3527 1.1 christos nat_current_to_4_1_3(ptr, old);
3528 1.1 christos error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old));
3529 1.1 christos if (error != 0) {
3530 1.1 christos IPFERROR(140096);
3531 1.1 christos }
3532 1.1 christos KFREE(old);
3533 1.1 christos }
3534 1.1 christos break;
3535 1.1 christos
3536 1.1 christos case IPFOBJ_FRIPF :
3537 1.1 christos if (obj->ipfo_rev < 5000000) {
3538 1.1 christos fripf4_t *old;
3539 1.1 christos
3540 1.1 christos KMALLOC(old, fripf4_t *);
3541 1.1 christos if (old == NULL) {
3542 1.1 christos IPFERROR(140097);
3543 1.1 christos error = ENOMEM;
3544 1.1 christos break;
3545 1.1 christos }
3546 1.1 christos ipf_v5fripftov4(ptr, old);
3547 1.1 christos error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old));
3548 1.1 christos if (error != 0) {
3549 1.1 christos IPFERROR(140098);
3550 1.1 christos }
3551 1.1 christos KFREE(old);
3552 1.1 christos }
3553 1.1 christos break;
3554 1.1 christos }
3555 1.1 christos return error;
3556 1.1 christos }
3557 1.1 christos
3558 1.1 christos
3559 1.1 christos static void
3560 1.1 christos friostat_current_to_4_1_33(current, old, rev)
3561 1.1 christos void *current;
3562 1.1 christos friostat_4_1_33_t *old;
3563 1.1 christos int rev;
3564 1.1 christos {
3565 1.1 christos friostat_t *fiop = (friostat_t *)current;
3566 1.1 christos
3567 1.1 christos bcopy(&fiop->f_st[0].fr_pass, &old->of_st[0], sizeof(old->of_st[0]));
3568 1.1 christos bcopy(&fiop->f_st[1].fr_pass, &old->of_st[1], sizeof(old->of_st[1]));
3569 1.1 christos
3570 1.1 christos old->f_ipf[0][0] = fiop->f_ipf[0][0];
3571 1.1 christos old->f_ipf[0][1] = fiop->f_ipf[0][1];
3572 1.1 christos old->f_ipf[1][0] = fiop->f_ipf[1][0];
3573 1.1 christos old->f_ipf[1][1] = fiop->f_ipf[1][1];
3574 1.1 christos old->f_acct[0][0] = fiop->f_acct[0][0];
3575 1.1 christos old->f_acct[0][1] = fiop->f_acct[0][1];
3576 1.1 christos old->f_acct[1][0] = fiop->f_acct[1][0];
3577 1.1 christos old->f_acct[1][1] = fiop->f_acct[1][1];
3578 1.1 christos old->f_ipf6[0][0] = NULL;
3579 1.1 christos old->f_ipf6[0][1] = NULL;
3580 1.1 christos old->f_ipf6[1][0] = NULL;
3581 1.1 christos old->f_ipf6[1][1] = NULL;
3582 1.1 christos old->f_acct6[0][0] = NULL;
3583 1.1 christos old->f_acct6[0][1] = NULL;
3584 1.1 christos old->f_acct6[1][0] = NULL;
3585 1.1 christos old->f_acct6[1][1] = NULL;
3586 1.1 christos old->f_auth = fiop->f_auth;
3587 1.1 christos bcopy(&fiop->f_groups, &old->f_groups, sizeof(old->f_groups));
3588 1.1 christos bcopy(&fiop->f_froute, &old->f_froute, sizeof(old->f_froute));
3589 1.1 christos old->f_ticks = fiop->f_ticks;
3590 1.1 christos bcopy(&fiop->f_locks, &old->f_locks, sizeof(old->f_locks));
3591 1.1 christos old->f_kmutex_sz = 0;
3592 1.1 christos old->f_krwlock_sz = 0;
3593 1.1 christos old->f_defpass = fiop->f_defpass;
3594 1.1 christos old->f_active = fiop->f_active;
3595 1.1 christos old->f_running = fiop->f_running;
3596 1.1 christos old->f_logging = fiop->f_logging;
3597 1.1 christos old->f_features = fiop->f_features;
3598 1.1 christos sprintf(old->f_version, "IP Filter: v%d.%d.%d",
3599 1.1 christos (rev / 1000000) % 100,
3600 1.1 christos (rev / 10000) % 100,
3601 1.1 christos (rev / 100) % 100);
3602 1.1 christos }
3603 1.1 christos
3604 1.1 christos
3605 1.1 christos static void
3606 1.1 christos friostat_current_to_4_1_0(current, old, rev)
3607 1.1 christos void *current;
3608 1.1 christos friostat_4_1_0_t *old;
3609 1.1 christos int rev;
3610 1.1 christos {
3611 1.1 christos friostat_t *fiop = (friostat_t *)current;
3612 1.1 christos
3613 1.1 christos bcopy(&fiop->f_st[0].fr_pass, &old->of_st[0], sizeof(old->of_st[0]));
3614 1.1 christos bcopy(&fiop->f_st[1].fr_pass, &old->of_st[1], sizeof(old->of_st[1]));
3615 1.1 christos
3616 1.1 christos old->f_ipf[0][0] = fiop->f_ipf[0][0];
3617 1.1 christos old->f_ipf[0][1] = fiop->f_ipf[0][1];
3618 1.1 christos old->f_ipf[1][0] = fiop->f_ipf[1][0];
3619 1.1 christos old->f_ipf[1][1] = fiop->f_ipf[1][1];
3620 1.1 christos old->f_acct[0][0] = fiop->f_acct[0][0];
3621 1.1 christos old->f_acct[0][1] = fiop->f_acct[0][1];
3622 1.1 christos old->f_acct[1][0] = fiop->f_acct[1][0];
3623 1.1 christos old->f_acct[1][1] = fiop->f_acct[1][1];
3624 1.1 christos old->f_ipf6[0][0] = NULL;
3625 1.1 christos old->f_ipf6[0][1] = NULL;
3626 1.1 christos old->f_ipf6[1][0] = NULL;
3627 1.1 christos old->f_ipf6[1][1] = NULL;
3628 1.1 christos old->f_acct6[0][0] = NULL;
3629 1.1 christos old->f_acct6[0][1] = NULL;
3630 1.1 christos old->f_acct6[1][0] = NULL;
3631 1.1 christos old->f_acct6[1][1] = NULL;
3632 1.1 christos old->f_auth = fiop->f_auth;
3633 1.1 christos bcopy(&fiop->f_groups, &old->f_groups, sizeof(old->f_groups));
3634 1.1 christos bcopy(&fiop->f_froute, &old->f_froute, sizeof(old->f_froute));
3635 1.1 christos old->f_ticks = fiop->f_ticks;
3636 1.1 christos old->f_ipf[0][0] = fiop->f_ipf[0][0];
3637 1.1 christos old->f_ipf[0][1] = fiop->f_ipf[0][1];
3638 1.1 christos old->f_ipf[1][0] = fiop->f_ipf[1][0];
3639 1.1 christos old->f_ipf[1][1] = fiop->f_ipf[1][1];
3640 1.1 christos old->f_acct[0][0] = fiop->f_acct[0][0];
3641 1.1 christos old->f_acct[0][1] = fiop->f_acct[0][1];
3642 1.1 christos old->f_acct[1][0] = fiop->f_acct[1][0];
3643 1.1 christos old->f_acct[1][1] = fiop->f_acct[1][1];
3644 1.1 christos old->f_ipf6[0][0] = NULL;
3645 1.1 christos old->f_ipf6[0][1] = NULL;
3646 1.1 christos old->f_ipf6[1][0] = NULL;
3647 1.1 christos old->f_ipf6[1][1] = NULL;
3648 1.1 christos old->f_acct6[0][0] = NULL;
3649 1.1 christos old->f_acct6[0][1] = NULL;
3650 1.1 christos old->f_acct6[1][0] = NULL;
3651 1.1 christos old->f_acct6[1][1] = NULL;
3652 1.1 christos old->f_auth = fiop->f_auth;
3653 1.1 christos bcopy(&fiop->f_groups, &old->f_groups, sizeof(old->f_groups));
3654 1.1 christos bcopy(&fiop->f_froute, &old->f_froute, sizeof(old->f_froute));
3655 1.1 christos old->f_ticks = fiop->f_ticks;
3656 1.1 christos bcopy(&fiop->f_locks, &old->f_locks, sizeof(old->f_locks));
3657 1.1 christos old->f_kmutex_sz = 0;
3658 1.1 christos old->f_krwlock_sz = 0;
3659 1.1 christos old->f_defpass = fiop->f_defpass;
3660 1.1 christos old->f_active = fiop->f_active;
3661 1.1 christos old->f_running = fiop->f_running;
3662 1.1 christos old->f_logging = fiop->f_logging;
3663 1.1 christos old->f_features = fiop->f_features;
3664 1.1 christos sprintf(old->f_version, "IP Filter: v%d.%d.%d",
3665 1.1 christos (rev / 1000000) % 100,
3666 1.1 christos (rev / 10000) % 100,
3667 1.1 christos (rev / 100) % 100);
3668 1.1 christos }
3669 1.1 christos
3670 1.1 christos
3671 1.1 christos /*
3672 1.1 christos * nflags is v5 flags, returns v4 flags.
3673 1.1 christos */
3674 1.1 christos static int
3675 1.1 christos fr_frflags5to4(nflags)
3676 1.1 christos u_32_t nflags;
3677 1.1 christos {
3678 1.1 christos u_32_t oflags = 0;
3679 1.1 christos
3680 1.1 christos switch (nflags & FR_CMDMASK) {
3681 1.1 christos case FR_CALL :
3682 1.1 christos oflags = 0x0;
3683 1.1 christos break;
3684 1.1 christos case FR_BLOCK :
3685 1.1 christos oflags = 0x1;
3686 1.1 christos break;
3687 1.1 christos case FR_PASS :
3688 1.1 christos oflags = 0x2;
3689 1.1 christos break;
3690 1.1 christos case FR_AUTH :
3691 1.1 christos oflags = 0x3;
3692 1.1 christos break;
3693 1.1 christos case FR_PREAUTH :
3694 1.1 christos oflags = 0x4;
3695 1.1 christos break;
3696 1.1 christos case FR_ACCOUNT :
3697 1.1 christos oflags = 0x5;
3698 1.1 christos break;
3699 1.1 christos case FR_SKIP :
3700 1.1 christos oflags = 0x6;
3701 1.1 christos break;
3702 1.1 christos default :
3703 1.1 christos break;
3704 1.1 christos }
3705 1.1 christos
3706 1.1 christos if (nflags & FR_LOG)
3707 1.1 christos oflags |= 0x00010;
3708 1.1 christos if (nflags & FR_CALLNOW)
3709 1.1 christos oflags |= 0x00020;
3710 1.1 christos if (nflags & FR_NOTSRCIP)
3711 1.1 christos oflags |= 0x00080;
3712 1.1 christos if (nflags & FR_NOTDSTIP)
3713 1.1 christos oflags |= 0x00040;
3714 1.1 christos if (nflags & FR_QUICK)
3715 1.1 christos oflags |= 0x00100;
3716 1.1 christos if (nflags & FR_KEEPFRAG)
3717 1.1 christos oflags |= 0x00200;
3718 1.1 christos if (nflags & FR_KEEPSTATE)
3719 1.1 christos oflags |= 0x00400;
3720 1.1 christos if (nflags & FR_FASTROUTE)
3721 1.1 christos oflags |= 0x00800;
3722 1.1 christos if (nflags & FR_RETRST)
3723 1.1 christos oflags |= 0x01000;
3724 1.1 christos if (nflags & FR_RETICMP)
3725 1.1 christos oflags |= 0x02000;
3726 1.1 christos if (nflags & FR_FAKEICMP)
3727 1.1 christos oflags |= 0x03000;
3728 1.1 christos if (nflags & FR_OUTQUE)
3729 1.1 christos oflags |= 0x04000;
3730 1.1 christos if (nflags & FR_INQUE)
3731 1.1 christos oflags |= 0x08000;
3732 1.1 christos if (nflags & FR_LOGBODY)
3733 1.1 christos oflags |= 0x10000;
3734 1.1 christos if (nflags & FR_LOGFIRST)
3735 1.1 christos oflags |= 0x20000;
3736 1.1 christos if (nflags & FR_LOGORBLOCK)
3737 1.1 christos oflags |= 0x40000;
3738 1.1 christos if (nflags & FR_FRSTRICT)
3739 1.1 christos oflags |= 0x100000;
3740 1.1 christos if (nflags & FR_STSTRICT)
3741 1.1 christos oflags |= 0x200000;
3742 1.1 christos if (nflags & FR_NEWISN)
3743 1.1 christos oflags |= 0x400000;
3744 1.1 christos if (nflags & FR_NOICMPERR)
3745 1.1 christos oflags |= 0x800000;
3746 1.1 christos if (nflags & FR_STATESYNC)
3747 1.1 christos oflags |= 0x1000000;
3748 1.1 christos if (nflags & FR_NOMATCH)
3749 1.1 christos oflags |= 0x8000000;
3750 1.1 christos if (nflags & FR_COPIED)
3751 1.1 christos oflags |= 0x40000000;
3752 1.1 christos if (nflags & FR_INACTIVE)
3753 1.1 christos oflags |= 0x80000000;
3754 1.1 christos
3755 1.1 christos return oflags;
3756 1.1 christos }
3757 1.1 christos
3758 1.1 christos
3759 1.1 christos static void
3760 1.1 christos frentry_current_to_4_1_34(current, old)
3761 1.1 christos void *current;
3762 1.1 christos frentry_4_1_34_t *old;
3763 1.1 christos {
3764 1.1 christos frentry_t *fr = (frentry_t *)current;
3765 1.1 christos
3766 1.1 christos old->fr_lock = fr->fr_lock;
3767 1.1 christos old->fr_next = fr->fr_next;
3768 1.1 christos old->fr_grp = fr->fr_grp;
3769 1.1 christos old->fr_isc = fr->fr_isc;
3770 1.1 christos old->fr_ifas[0] = fr->fr_ifas[0];
3771 1.1 christos old->fr_ifas[1] = fr->fr_ifas[1];
3772 1.1 christos old->fr_ifas[2] = fr->fr_ifas[2];
3773 1.1 christos old->fr_ifas[3] = fr->fr_ifas[3];
3774 1.1 christos old->fr_ptr = fr->fr_ptr;
3775 1.1 christos old->fr_comment = NULL;
3776 1.1 christos old->fr_ref = fr->fr_ref;
3777 1.1 christos old->fr_statecnt = fr->fr_statecnt;
3778 1.1 christos old->fr_hits = fr->fr_hits;
3779 1.1 christos old->fr_bytes = fr->fr_bytes;
3780 1.1 christos old->fr_lastpkt.tv_sec = fr->fr_lastpkt.tv_sec;
3781 1.1 christos old->fr_lastpkt.tv_usec = fr->fr_lastpkt.tv_usec;
3782 1.1 christos old->fr_curpps = fr->fr_curpps;
3783 1.1 christos old->fr_dun.fru_data = fr->fr_dun.fru_data;
3784 1.1 christos old->fr_func = fr->fr_func;
3785 1.1 christos old->fr_dsize = fr->fr_dsize;
3786 1.1 christos old->fr_pps = fr->fr_pps;
3787 1.1 christos old->fr_statemax = fr->fr_statemax;
3788 1.1 christos old->fr_flineno = fr->fr_flineno;
3789 1.1 christos old->fr_type = fr->fr_type;
3790 1.1 christos old->fr_flags = fr_frflags5to4(fr->fr_flags);
3791 1.1 christos old->fr_logtag = fr->fr_logtag;
3792 1.1 christos old->fr_collect = fr->fr_collect;
3793 1.1 christos old->fr_arg = fr->fr_arg;
3794 1.1 christos old->fr_loglevel = fr->fr_loglevel;
3795 1.1 christos old->fr_age[0] = fr->fr_age[0];
3796 1.1 christos old->fr_age[1] = fr->fr_age[1];
3797 1.1 christos if (fr->fr_family == AF_INET)
3798 1.1 christos old->fr_v = 4;
3799 1.1 christos if (fr->fr_family == AF_INET6)
3800 1.1 christos old->fr_v = 6;
3801 1.1 christos old->fr_icode = fr->fr_icode;
3802 1.1 christos old->fr_cksum = fr->fr_cksum;
3803 1.1 christos old->fr_tifs[0].ofd_ip6 = fr->fr_tifs[0].fd_ip6;
3804 1.1 christos old->fr_tifs[1].ofd_ip6 = fr->fr_tifs[0].fd_ip6;
3805 1.1 christos old->fr_dif.ofd_ip6 = fr->fr_dif.fd_ip6;
3806 1.1 christos if (fr->fr_ifnames[0] >= 0) {
3807 1.1 christos strncpy(old->fr_ifnames[0], fr->fr_names + fr->fr_ifnames[0],
3808 1.1 christos LIFNAMSIZ);
3809 1.1 christos old->fr_ifnames[0][LIFNAMSIZ - 1] = '\0';
3810 1.1 christos }
3811 1.1 christos if (fr->fr_ifnames[1] >= 0) {
3812 1.1 christos strncpy(old->fr_ifnames[1], fr->fr_names + fr->fr_ifnames[1],
3813 1.1 christos LIFNAMSIZ);
3814 1.1 christos old->fr_ifnames[1][LIFNAMSIZ - 1] = '\0';
3815 1.1 christos }
3816 1.1 christos if (fr->fr_ifnames[2] >= 0) {
3817 1.1 christos strncpy(old->fr_ifnames[2], fr->fr_names + fr->fr_ifnames[2],
3818 1.1 christos LIFNAMSIZ);
3819 1.1 christos old->fr_ifnames[2][LIFNAMSIZ - 1] = '\0';
3820 1.1 christos }
3821 1.1 christos if (fr->fr_ifnames[3] >= 0) {
3822 1.1 christos strncpy(old->fr_ifnames[3], fr->fr_names + fr->fr_ifnames[3],
3823 1.1 christos LIFNAMSIZ);
3824 1.1 christos old->fr_ifnames[3][LIFNAMSIZ - 1] = '\0';
3825 1.1 christos }
3826 1.1 christos if (fr->fr_tifs[0].fd_name >= 0) {
3827 1.1 christos strncpy(old->fr_tifs[0].fd_ifname,
3828 1.1 christos fr->fr_names + fr->fr_tifs[0].fd_name, LIFNAMSIZ);
3829 1.1 christos old->fr_tifs[0].fd_ifname[LIFNAMSIZ - 1] = '\0';
3830 1.1 christos }
3831 1.1 christos if (fr->fr_tifs[1].fd_name >= 0) {
3832 1.1 christos strncpy(old->fr_tifs[1].fd_ifname,
3833 1.1 christos fr->fr_names + fr->fr_tifs[1].fd_name, LIFNAMSIZ);
3834 1.1 christos old->fr_tifs[1].fd_ifname[LIFNAMSIZ - 1] = '\0';
3835 1.1 christos }
3836 1.1 christos if (fr->fr_dif.fd_name >= 0) {
3837 1.1 christos strncpy(old->fr_dif.fd_ifname,
3838 1.1 christos fr->fr_names + fr->fr_dif.fd_name, LIFNAMSIZ);
3839 1.1 christos old->fr_dif.fd_ifname[LIFNAMSIZ - 1] = '\0';
3840 1.1 christos }
3841 1.1 christos if (fr->fr_group >= 0) {
3842 1.1 christos strncpy(old->fr_group, fr->fr_names + fr->fr_group,
3843 1.1 christos FR_GROUPLEN);
3844 1.1 christos old->fr_group[FR_GROUPLEN - 1] = '\0';
3845 1.1 christos }
3846 1.1 christos if (fr->fr_grhead >= 0) {
3847 1.1 christos strncpy(old->fr_grhead, fr->fr_names + fr->fr_grhead,
3848 1.1 christos FR_GROUPLEN);
3849 1.1 christos old->fr_grhead[FR_GROUPLEN - 1] = '\0';
3850 1.1 christos }
3851 1.1 christos }
3852 1.1 christos
3853 1.1 christos
3854 1.1 christos static void
3855 1.1 christos frentry_current_to_4_1_16(current, old)
3856 1.1 christos void *current;
3857 1.1 christos frentry_4_1_16_t *old;
3858 1.1 christos {
3859 1.1 christos frentry_t *fr = (frentry_t *)current;
3860 1.1 christos
3861 1.1 christos old->fr_lock = fr->fr_lock;
3862 1.1 christos old->fr_next = fr->fr_next;
3863 1.1 christos old->fr_grp = fr->fr_grp;
3864 1.1 christos old->fr_isc = fr->fr_isc;
3865 1.1 christos old->fr_ifas[0] = fr->fr_ifas[0];
3866 1.1 christos old->fr_ifas[1] = fr->fr_ifas[1];
3867 1.1 christos old->fr_ifas[2] = fr->fr_ifas[2];
3868 1.1 christos old->fr_ifas[3] = fr->fr_ifas[3];
3869 1.1 christos old->fr_ptr = fr->fr_ptr;
3870 1.1 christos old->fr_comment = NULL;
3871 1.1 christos old->fr_ref = fr->fr_ref;
3872 1.1 christos old->fr_statecnt = fr->fr_statecnt;
3873 1.1 christos old->fr_hits = fr->fr_hits;
3874 1.1 christos old->fr_bytes = fr->fr_bytes;
3875 1.1 christos old->fr_lastpkt.tv_sec = fr->fr_lastpkt.tv_sec;
3876 1.1 christos old->fr_lastpkt.tv_usec = fr->fr_lastpkt.tv_usec;
3877 1.1 christos old->fr_curpps = fr->fr_curpps;
3878 1.1 christos old->fr_dun.fru_data = fr->fr_dun.fru_data;
3879 1.1 christos old->fr_func = fr->fr_func;
3880 1.1 christos old->fr_dsize = fr->fr_dsize;
3881 1.1 christos old->fr_pps = fr->fr_pps;
3882 1.1 christos old->fr_statemax = fr->fr_statemax;
3883 1.1 christos old->fr_flineno = fr->fr_flineno;
3884 1.1 christos old->fr_type = fr->fr_type;
3885 1.1 christos old->fr_flags = fr_frflags5to4(fr->fr_flags);
3886 1.1 christos old->fr_logtag = fr->fr_logtag;
3887 1.1 christos old->fr_collect = fr->fr_collect;
3888 1.1 christos old->fr_arg = fr->fr_arg;
3889 1.1 christos old->fr_loglevel = fr->fr_loglevel;
3890 1.1 christos old->fr_age[0] = fr->fr_age[0];
3891 1.1 christos old->fr_age[1] = fr->fr_age[1];
3892 1.1 christos if (old->fr_v == 4)
3893 1.1 christos fr->fr_family = AF_INET;
3894 1.1 christos if (old->fr_v == 6)
3895 1.1 christos fr->fr_family = AF_INET6;
3896 1.1 christos old->fr_icode = fr->fr_icode;
3897 1.1 christos old->fr_cksum = fr->fr_cksum;
3898 1.1 christos old->fr_tifs[0].ofd_ip6 = fr->fr_tifs[0].fd_ip6;
3899 1.1 christos old->fr_tifs[1].ofd_ip6 = fr->fr_tifs[0].fd_ip6;
3900 1.1 christos old->fr_dif.ofd_ip6 = fr->fr_dif.fd_ip6;
3901 1.1 christos if (fr->fr_ifnames[0] >= 0) {
3902 1.1 christos strncpy(old->fr_ifnames[0], fr->fr_names + fr->fr_ifnames[0],
3903 1.1 christos LIFNAMSIZ);
3904 1.1 christos old->fr_ifnames[0][LIFNAMSIZ - 1] = '\0';
3905 1.1 christos }
3906 1.1 christos if (fr->fr_ifnames[1] >= 0) {
3907 1.1 christos strncpy(old->fr_ifnames[1], fr->fr_names + fr->fr_ifnames[1],
3908 1.1 christos LIFNAMSIZ);
3909 1.1 christos old->fr_ifnames[1][LIFNAMSIZ - 1] = '\0';
3910 1.1 christos }
3911 1.1 christos if (fr->fr_ifnames[2] >= 0) {
3912 1.1 christos strncpy(old->fr_ifnames[2], fr->fr_names + fr->fr_ifnames[2],
3913 1.1 christos LIFNAMSIZ);
3914 1.1 christos old->fr_ifnames[2][LIFNAMSIZ - 1] = '\0';
3915 1.1 christos }
3916 1.1 christos if (fr->fr_ifnames[3] >= 0) {
3917 1.1 christos strncpy(old->fr_ifnames[3], fr->fr_names + fr->fr_ifnames[3],
3918 1.1 christos LIFNAMSIZ);
3919 1.1 christos old->fr_ifnames[3][LIFNAMSIZ - 1] = '\0';
3920 1.1 christos }
3921 1.1 christos if (fr->fr_tifs[0].fd_name >= 0) {
3922 1.1 christos strncpy(old->fr_tifs[0].fd_ifname,
3923 1.1 christos fr->fr_names + fr->fr_tifs[0].fd_name, LIFNAMSIZ);
3924 1.1 christos old->fr_tifs[0].fd_ifname[LIFNAMSIZ - 1] = '\0';
3925 1.1 christos }
3926 1.1 christos if (fr->fr_tifs[1].fd_name >= 0) {
3927 1.1 christos strncpy(old->fr_tifs[1].fd_ifname,
3928 1.1 christos fr->fr_names + fr->fr_tifs[1].fd_name, LIFNAMSIZ);
3929 1.1 christos old->fr_tifs[1].fd_ifname[LIFNAMSIZ - 1] = '\0';
3930 1.1 christos }
3931 1.1 christos if (fr->fr_dif.fd_name >= 0) {
3932 1.1 christos strncpy(old->fr_dif.fd_ifname,
3933 1.1 christos fr->fr_names + fr->fr_dif.fd_name, LIFNAMSIZ);
3934 1.1 christos old->fr_dif.fd_ifname[LIFNAMSIZ - 1] = '\0';
3935 1.1 christos }
3936 1.1 christos if (fr->fr_group >= 0) {
3937 1.1 christos strncpy(old->fr_group, fr->fr_names + fr->fr_group,
3938 1.1 christos FR_GROUPLEN);
3939 1.1 christos old->fr_group[FR_GROUPLEN - 1] = '\0';
3940 1.1 christos }
3941 1.1 christos if (fr->fr_grhead >= 0) {
3942 1.1 christos strncpy(old->fr_grhead, fr->fr_names + fr->fr_grhead,
3943 1.1 christos FR_GROUPLEN);
3944 1.1 christos old->fr_grhead[FR_GROUPLEN - 1] = '\0';
3945 1.1 christos }
3946 1.1 christos }
3947 1.1 christos
3948 1.1 christos
3949 1.1 christos static void
3950 1.1 christos frentry_current_to_4_1_0(current, old)
3951 1.1 christos void *current;
3952 1.1 christos frentry_4_1_0_t *old;
3953 1.1 christos {
3954 1.1 christos frentry_t *fr = (frentry_t *)current;
3955 1.1 christos
3956 1.1 christos old->fr_lock = fr->fr_lock;
3957 1.1 christos old->fr_next = fr->fr_next;
3958 1.1 christos old->fr_grp = fr->fr_grp;
3959 1.1 christos old->fr_isc = fr->fr_isc;
3960 1.1 christos old->fr_ifas[0] = fr->fr_ifas[0];
3961 1.1 christos old->fr_ifas[1] = fr->fr_ifas[1];
3962 1.1 christos old->fr_ifas[2] = fr->fr_ifas[2];
3963 1.1 christos old->fr_ifas[3] = fr->fr_ifas[3];
3964 1.1 christos old->fr_ptr = fr->fr_ptr;
3965 1.1 christos old->fr_comment = NULL;
3966 1.1 christos old->fr_ref = fr->fr_ref;
3967 1.1 christos old->fr_statecnt = fr->fr_statecnt;
3968 1.1 christos old->fr_hits = fr->fr_hits;
3969 1.1 christos old->fr_bytes = fr->fr_bytes;
3970 1.1 christos old->fr_lastpkt.tv_sec = fr->fr_lastpkt.tv_sec;
3971 1.1 christos old->fr_lastpkt.tv_usec = fr->fr_lastpkt.tv_usec;
3972 1.1 christos old->fr_curpps = fr->fr_curpps;
3973 1.1 christos old->fr_dun.fru_data = fr->fr_dun.fru_data;
3974 1.1 christos old->fr_func = fr->fr_func;
3975 1.1 christos old->fr_dsize = fr->fr_dsize;
3976 1.1 christos old->fr_pps = fr->fr_pps;
3977 1.1 christos old->fr_statemax = fr->fr_statemax;
3978 1.1 christos old->fr_flineno = fr->fr_flineno;
3979 1.1 christos old->fr_type = fr->fr_type;
3980 1.1 christos old->fr_flags = fr_frflags5to4(fr->fr_flags);
3981 1.1 christos old->fr_logtag = fr->fr_logtag;
3982 1.1 christos old->fr_collect = fr->fr_collect;
3983 1.1 christos old->fr_arg = fr->fr_arg;
3984 1.1 christos old->fr_loglevel = fr->fr_loglevel;
3985 1.1 christos old->fr_age[0] = fr->fr_age[0];
3986 1.1 christos old->fr_age[1] = fr->fr_age[1];
3987 1.1 christos if (old->fr_v == 4)
3988 1.1 christos fr->fr_family = AF_INET;
3989 1.1 christos if (old->fr_v == 6)
3990 1.1 christos fr->fr_family = AF_INET6;
3991 1.1 christos old->fr_icode = fr->fr_icode;
3992 1.1 christos old->fr_cksum = fr->fr_cksum;
3993 1.1 christos old->fr_tifs[0].ofd_ip6 = fr->fr_tifs[0].fd_ip6;
3994 1.1 christos old->fr_tifs[1].ofd_ip6 = fr->fr_tifs[0].fd_ip6;
3995 1.1 christos old->fr_dif.ofd_ip6 = fr->fr_dif.fd_ip6;
3996 1.1 christos if (fr->fr_ifnames[0] >= 0) {
3997 1.1 christos strncpy(old->fr_ifnames[0], fr->fr_names + fr->fr_ifnames[0],
3998 1.1 christos LIFNAMSIZ);
3999 1.1 christos old->fr_ifnames[0][LIFNAMSIZ - 1] = '\0';
4000 1.1 christos }
4001 1.1 christos if (fr->fr_ifnames[1] >= 0) {
4002 1.1 christos strncpy(old->fr_ifnames[1], fr->fr_names + fr->fr_ifnames[1],
4003 1.1 christos LIFNAMSIZ);
4004 1.1 christos old->fr_ifnames[1][LIFNAMSIZ - 1] = '\0';
4005 1.1 christos }
4006 1.1 christos if (fr->fr_ifnames[2] >= 0) {
4007 1.1 christos strncpy(old->fr_ifnames[2], fr->fr_names + fr->fr_ifnames[2],
4008 1.1 christos LIFNAMSIZ);
4009 1.1 christos old->fr_ifnames[2][LIFNAMSIZ - 1] = '\0';
4010 1.1 christos }
4011 1.1 christos if (fr->fr_ifnames[3] >= 0) {
4012 1.1 christos strncpy(old->fr_ifnames[3], fr->fr_names + fr->fr_ifnames[3],
4013 1.1 christos LIFNAMSIZ);
4014 1.1 christos old->fr_ifnames[3][LIFNAMSIZ - 1] = '\0';
4015 1.1 christos }
4016 1.1 christos if (fr->fr_tifs[0].fd_name >= 0) {
4017 1.1 christos strncpy(old->fr_tifs[0].fd_ifname,
4018 1.1 christos fr->fr_names + fr->fr_tifs[0].fd_name, LIFNAMSIZ);
4019 1.1 christos old->fr_tifs[0].fd_ifname[LIFNAMSIZ - 1] = '\0';
4020 1.1 christos }
4021 1.1 christos if (fr->fr_tifs[1].fd_name >= 0) {
4022 1.1 christos strncpy(old->fr_tifs[1].fd_ifname,
4023 1.1 christos fr->fr_names + fr->fr_tifs[1].fd_name, LIFNAMSIZ);
4024 1.1 christos old->fr_tifs[1].fd_ifname[LIFNAMSIZ - 1] = '\0';
4025 1.1 christos }
4026 1.1 christos if (fr->fr_dif.fd_name >= 0) {
4027 1.1 christos strncpy(old->fr_dif.fd_ifname,
4028 1.1 christos fr->fr_names + fr->fr_dif.fd_name, LIFNAMSIZ);
4029 1.1 christos old->fr_dif.fd_ifname[LIFNAMSIZ - 1] = '\0';
4030 1.1 christos }
4031 1.1 christos if (fr->fr_group >= 0) {
4032 1.1 christos strncpy(old->fr_group, fr->fr_names + fr->fr_group,
4033 1.1 christos FR_GROUPLEN);
4034 1.1 christos old->fr_group[FR_GROUPLEN - 1] = '\0';
4035 1.1 christos }
4036 1.1 christos if (fr->fr_grhead >= 0) {
4037 1.1 christos strncpy(old->fr_grhead, fr->fr_names + fr->fr_grhead,
4038 1.1 christos FR_GROUPLEN);
4039 1.1 christos old->fr_grhead[FR_GROUPLEN - 1] = '\0';
4040 1.1 christos }
4041 1.1 christos }
4042 1.1 christos
4043 1.1 christos
4044 1.1 christos static void
4045 1.1 christos fr_info_current_to_4_1_24(current, old)
4046 1.1 christos void *current;
4047 1.1 christos fr_info_4_1_24_t *old;
4048 1.1 christos {
4049 1.1 christos fr_info_t *fin = (fr_info_t *)current;
4050 1.1 christos
4051 1.1 christos old->fin_ifp = fin->fin_ifp;
4052 1.1 christos ipf_v5iptov4(&fin->fin_fi, &old->fin_fi);
4053 1.1 christos bcopy(&fin->fin_dat, &old->fin_dat, sizeof(fin->fin_dat));
4054 1.1 christos old->fin_out = fin->fin_out;
4055 1.1 christos old->fin_rev = fin->fin_rev;
4056 1.1 christos old->fin_hlen = fin->fin_hlen;
4057 1.1 christos old->ofin_tcpf = fin->fin_tcpf;
4058 1.1 christos old->fin_icode = fin->fin_icode;
4059 1.1 christos old->fin_rule = fin->fin_rule;
4060 1.1 christos bcopy(fin->fin_group, old->fin_group, sizeof(fin->fin_group));
4061 1.1 christos old->fin_fr = fin->fin_fr;
4062 1.1 christos old->fin_dp = fin->fin_dp;
4063 1.1 christos old->fin_dlen = fin->fin_dlen;
4064 1.1 christos old->fin_plen = fin->fin_plen;
4065 1.1 christos old->fin_ipoff = fin->fin_ipoff;
4066 1.1 christos old->fin_id = fin->fin_id;
4067 1.1 christos old->fin_off = fin->fin_off;
4068 1.1 christos old->fin_depth = fin->fin_depth;
4069 1.1 christos old->fin_error = fin->fin_error;
4070 1.1 christos old->fin_cksum = fin->fin_cksum;
4071 1.1 christos old->fin_state = NULL;
4072 1.1 christos old->fin_nat = NULL;
4073 1.1 christos old->fin_nattag = fin->fin_nattag;
4074 1.1 christos old->fin_exthdr = NULL;
4075 1.1 christos old->ofin_ip = fin->fin_ip;
4076 1.1 christos old->fin_mp = fin->fin_mp;
4077 1.1 christos old->fin_m = fin->fin_m;
4078 1.1 christos #ifdef MENTAT
4079 1.1 christos old->fin_qfm = fin->fin_qfm;
4080 1.1 christos old->fin_qpi = fin->fin_qpi;
4081 1.1 christos old->fin_ifname[0] = '\0';
4082 1.1 christos #endif
4083 1.1 christos #ifdef __sgi
4084 1.1 christos old->fin_hbuf = fin->fin_hbuf;
4085 1.1 christos #endif
4086 1.1 christos }
4087 1.1 christos
4088 1.1 christos
4089 1.1 christos static void
4090 1.1 christos fr_info_current_to_4_1_23(current, old)
4091 1.1 christos void *current;
4092 1.1 christos fr_info_4_1_23_t *old;
4093 1.1 christos {
4094 1.1 christos fr_info_t *fin = (fr_info_t *)current;
4095 1.1 christos
4096 1.1 christos old->fin_ifp = fin->fin_ifp;
4097 1.1 christos ipf_v5iptov4(&fin->fin_fi, &old->fin_fi);
4098 1.1 christos bcopy(&fin->fin_dat, &old->fin_dat, sizeof(fin->fin_dat));
4099 1.1 christos old->fin_out = fin->fin_out;
4100 1.1 christos old->fin_rev = fin->fin_rev;
4101 1.1 christos old->fin_hlen = fin->fin_hlen;
4102 1.1 christos old->ofin_tcpf = fin->fin_tcpf;
4103 1.1 christos old->fin_icode = fin->fin_icode;
4104 1.1 christos old->fin_rule = fin->fin_rule;
4105 1.1 christos bcopy(fin->fin_group, old->fin_group, sizeof(fin->fin_group));
4106 1.1 christos old->fin_fr = fin->fin_fr;
4107 1.1 christos old->fin_dp = fin->fin_dp;
4108 1.1 christos old->fin_dlen = fin->fin_dlen;
4109 1.1 christos old->fin_plen = fin->fin_plen;
4110 1.1 christos old->fin_ipoff = fin->fin_ipoff;
4111 1.1 christos old->fin_id = fin->fin_id;
4112 1.1 christos old->fin_off = fin->fin_off;
4113 1.1 christos old->fin_depth = fin->fin_depth;
4114 1.1 christos old->fin_error = fin->fin_error;
4115 1.1 christos old->fin_state = NULL;
4116 1.1 christos old->fin_nat = NULL;
4117 1.1 christos old->fin_nattag = fin->fin_nattag;
4118 1.1 christos old->ofin_ip = fin->fin_ip;
4119 1.1 christos old->fin_mp = fin->fin_mp;
4120 1.1 christos old->fin_m = fin->fin_m;
4121 1.1 christos #ifdef MENTAT
4122 1.1 christos old->fin_qfm = fin->fin_qfm;
4123 1.1 christos old->fin_qpi = fin->fin_qpi;
4124 1.1 christos old->fin_ifname[0] = '\0';
4125 1.1 christos #endif
4126 1.1 christos #ifdef __sgi
4127 1.1 christos old->fin_hbuf = fin->fin_hbuf;
4128 1.1 christos #endif
4129 1.1 christos }
4130 1.1 christos
4131 1.1 christos
4132 1.1 christos static void
4133 1.1 christos fr_info_current_to_4_1_11(current, old)
4134 1.1 christos void *current;
4135 1.1 christos fr_info_4_1_11_t *old;
4136 1.1 christos {
4137 1.1 christos fr_info_t *fin = (fr_info_t *)current;
4138 1.1 christos
4139 1.1 christos old->fin_ifp = fin->fin_ifp;
4140 1.1 christos ipf_v5iptov4(&fin->fin_fi, &old->fin_fi);
4141 1.1 christos bcopy(&fin->fin_dat, &old->fin_dat, sizeof(fin->fin_dat));
4142 1.1 christos old->fin_out = fin->fin_out;
4143 1.1 christos old->fin_rev = fin->fin_rev;
4144 1.1 christos old->fin_hlen = fin->fin_hlen;
4145 1.1 christos old->ofin_tcpf = fin->fin_tcpf;
4146 1.1 christos old->fin_icode = fin->fin_icode;
4147 1.1 christos old->fin_rule = fin->fin_rule;
4148 1.1 christos bcopy(fin->fin_group, old->fin_group, sizeof(fin->fin_group));
4149 1.1 christos old->fin_fr = fin->fin_fr;
4150 1.1 christos old->fin_dp = fin->fin_dp;
4151 1.1 christos old->fin_dlen = fin->fin_dlen;
4152 1.1 christos old->fin_plen = fin->fin_plen;
4153 1.1 christos old->fin_ipoff = fin->fin_ipoff;
4154 1.1 christos old->fin_id = fin->fin_id;
4155 1.1 christos old->fin_off = fin->fin_off;
4156 1.1 christos old->fin_depth = fin->fin_depth;
4157 1.1 christos old->fin_error = fin->fin_error;
4158 1.1 christos old->fin_state = NULL;
4159 1.1 christos old->fin_nat = NULL;
4160 1.1 christos old->fin_nattag = fin->fin_nattag;
4161 1.1 christos old->ofin_ip = fin->fin_ip;
4162 1.1 christos old->fin_mp = fin->fin_mp;
4163 1.1 christos old->fin_m = fin->fin_m;
4164 1.1 christos #ifdef MENTAT
4165 1.1 christos old->fin_qfm = fin->fin_qfm;
4166 1.1 christos old->fin_qpi = fin->fin_qpi;
4167 1.1 christos old->fin_ifname[0] = '\0';
4168 1.1 christos #endif
4169 1.1 christos #ifdef __sgi
4170 1.1 christos old->fin_hbuf = fin->fin_hbuf;
4171 1.1 christos #endif
4172 1.1 christos }
4173 1.1 christos
4174 1.1 christos
4175 1.1 christos static void
4176 1.1 christos frauth_current_to_4_1_29(current, old)
4177 1.1 christos void *current;
4178 1.1 christos frauth_4_1_29_t *old;
4179 1.1 christos {
4180 1.1 christos frauth_t *fra = (frauth_t *)current;
4181 1.1 christos
4182 1.1 christos old->fra_age = fra->fra_age;
4183 1.1 christos old->fra_len = fra->fra_len;
4184 1.1 christos old->fra_index = fra->fra_index;
4185 1.1 christos old->fra_pass = fra->fra_pass;
4186 1.1 christos fr_info_current_to_4_1_24(&fra->fra_info, &old->fra_info);
4187 1.1 christos old->fra_buf = fra->fra_buf;
4188 1.1 christos old->fra_flx = fra->fra_flx;
4189 1.1 christos #ifdef MENTAT
4190 1.1 christos old->fra_q = fra->fra_q;
4191 1.1 christos old->fra_m = fra->fra_m;
4192 1.1 christos #endif
4193 1.1 christos }
4194 1.1 christos
4195 1.1 christos
4196 1.1 christos static void
4197 1.1 christos frauth_current_to_4_1_24(current, old)
4198 1.1 christos void *current;
4199 1.1 christos frauth_4_1_24_t *old;
4200 1.1 christos {
4201 1.1 christos frauth_t *fra = (frauth_t *)current;
4202 1.1 christos
4203 1.1 christos old->fra_age = fra->fra_age;
4204 1.1 christos old->fra_len = fra->fra_len;
4205 1.1 christos old->fra_index = fra->fra_index;
4206 1.1 christos old->fra_pass = fra->fra_pass;
4207 1.1 christos fr_info_current_to_4_1_24(&fra->fra_info, &old->fra_info);
4208 1.1 christos old->fra_buf = fra->fra_buf;
4209 1.1 christos #ifdef MENTAT
4210 1.1 christos old->fra_q = fra->fra_q;
4211 1.1 christos old->fra_m = fra->fra_m;
4212 1.1 christos #endif
4213 1.1 christos }
4214 1.1 christos
4215 1.1 christos
4216 1.1 christos static void
4217 1.1 christos frauth_current_to_4_1_23(current, old)
4218 1.1 christos void *current;
4219 1.1 christos frauth_4_1_23_t *old;
4220 1.1 christos {
4221 1.1 christos frauth_t *fra = (frauth_t *)current;
4222 1.1 christos
4223 1.1 christos old->fra_age = fra->fra_age;
4224 1.1 christos old->fra_len = fra->fra_len;
4225 1.1 christos old->fra_index = fra->fra_index;
4226 1.1 christos old->fra_pass = fra->fra_pass;
4227 1.1 christos fr_info_current_to_4_1_23(&fra->fra_info, &old->fra_info);
4228 1.1 christos old->fra_buf = fra->fra_buf;
4229 1.1 christos #ifdef MENTAT
4230 1.1 christos old->fra_q = fra->fra_q;
4231 1.1 christos old->fra_m = fra->fra_m;
4232 1.1 christos #endif
4233 1.1 christos }
4234 1.1 christos
4235 1.1 christos
4236 1.1 christos static void
4237 1.1 christos frauth_current_to_4_1_11(current, old)
4238 1.1 christos void *current;
4239 1.1 christos frauth_4_1_11_t *old;
4240 1.1 christos {
4241 1.1 christos frauth_t *fra = (frauth_t *)current;
4242 1.1 christos
4243 1.1 christos old->fra_age = fra->fra_age;
4244 1.1 christos old->fra_len = fra->fra_len;
4245 1.1 christos old->fra_index = fra->fra_index;
4246 1.1 christos old->fra_pass = fra->fra_pass;
4247 1.1 christos fr_info_current_to_4_1_11(&fra->fra_info, &old->fra_info);
4248 1.1 christos old->fra_buf = fra->fra_buf;
4249 1.1 christos #ifdef MENTAT
4250 1.1 christos old->fra_q = fra->fra_q;
4251 1.1 christos old->fra_m = fra->fra_m;
4252 1.1 christos #endif
4253 1.1 christos }
4254 1.1 christos
4255 1.1 christos
4256 1.1 christos static void
4257 1.1 christos ipnat_current_to_4_1_14(current, old)
4258 1.1 christos void *current;
4259 1.1 christos ipnat_4_1_14_t *old;
4260 1.1 christos {
4261 1.1 christos ipnat_t *np = (ipnat_t *)current;
4262 1.1 christos
4263 1.1 christos old->in_next = np->in_next;
4264 1.1 christos old->in_rnext = np->in_rnext;
4265 1.1 christos old->in_prnext = np->in_prnext;
4266 1.1 christos old->in_mnext = np->in_mnext;
4267 1.1 christos old->in_pmnext = np->in_pmnext;
4268 1.1 christos old->in_tqehead[0] = np->in_tqehead[0];
4269 1.1 christos old->in_tqehead[1] = np->in_tqehead[1];
4270 1.1 christos old->in_ifps[0] = np->in_ifps[0];
4271 1.1 christos old->in_ifps[1] = np->in_ifps[1];
4272 1.1 christos old->in_apr = np->in_apr;
4273 1.1 christos old->in_comment = np->in_comment;
4274 1.1 christos old->in_space = np->in_space;
4275 1.1 christos old->in_hits = np->in_hits;
4276 1.1 christos old->in_use = np->in_use;
4277 1.1 christos old->in_hv = np->in_hv[0];
4278 1.1 christos old->in_flineno = np->in_flineno;
4279 1.1 christos if (old->in_redir == NAT_REDIRECT)
4280 1.1 christos old->in_pnext = np->in_dpnext;
4281 1.1 christos else
4282 1.1 christos old->in_pnext = np->in_spnext;
4283 1.1 christos old->in_v = np->in_v[0];
4284 1.1 christos old->in_flags = np->in_flags;
4285 1.1 christos old->in_mssclamp = np->in_mssclamp;
4286 1.1 christos old->in_age[0] = np->in_age[0];
4287 1.1 christos old->in_age[1] = np->in_age[1];
4288 1.1 christos old->in_redir = np->in_redir;
4289 1.1 christos old->in_p = np->in_pr[0];
4290 1.1 christos if (np->in_redir == NAT_REDIRECT) {
4291 1.1 christos old->in_next6 = np->in_ndst.na_nextaddr;
4292 1.1 christos old->in_in[0] = np->in_ndst.na_addr[0];
4293 1.1 christos old->in_in[1] = np->in_ndst.na_addr[1];
4294 1.1 christos old->in_out[0] = np->in_odst.na_addr[0];
4295 1.1 christos old->in_out[1] = np->in_odst.na_addr[1];
4296 1.1 christos old->in_src[0] = np->in_osrc.na_addr[0];
4297 1.1 christos old->in_src[1] = np->in_osrc.na_addr[1];
4298 1.1 christos } else {
4299 1.1 christos old->in_next6 = np->in_nsrc.na_nextaddr;
4300 1.1 christos old->in_out[0] = np->in_nsrc.na_addr[0];
4301 1.1 christos old->in_out[1] = np->in_nsrc.na_addr[1];
4302 1.1 christos old->in_in[0] = np->in_osrc.na_addr[0];
4303 1.1 christos old->in_in[1] = np->in_osrc.na_addr[1];
4304 1.1 christos old->in_src[0] = np->in_odst.na_addr[0];
4305 1.1 christos old->in_src[1] = np->in_odst.na_addr[1];
4306 1.1 christos }
4307 1.1 christos ipfv5tuctov4(&np->in_tuc, &old->in_tuc);
4308 1.1 christos if (np->in_redir == NAT_REDIRECT) {
4309 1.1 christos old->in_port[0] = np->in_dpmin;
4310 1.1 christos old->in_port[1] = np->in_dpmax;
4311 1.1 christos } else {
4312 1.1 christos old->in_port[0] = np->in_spmin;
4313 1.1 christos old->in_port[1] = np->in_spmax;
4314 1.1 christos }
4315 1.1 christos old->in_ppip = np->in_ppip;
4316 1.1 christos old->in_ippip = np->in_ippip;
4317 1.1 christos bcopy(&np->in_tag, &old->in_tag, sizeof(np->in_tag));
4318 1.1 christos
4319 1.1 christos if (np->in_ifnames[0] >= 0) {
4320 1.1 christos strncpy(old->in_ifnames[0], np->in_names + np->in_ifnames[0],
4321 1.1 christos LIFNAMSIZ);
4322 1.1 christos old->in_ifnames[0][LIFNAMSIZ - 1] = '\0';
4323 1.1 christos }
4324 1.1 christos if (np->in_ifnames[1] >= 0) {
4325 1.1 christos strncpy(old->in_ifnames[1], np->in_names + np->in_ifnames[1],
4326 1.1 christos LIFNAMSIZ);
4327 1.1 christos old->in_ifnames[1][LIFNAMSIZ - 1] = '\0';
4328 1.1 christos }
4329 1.1 christos if (np->in_plabel >= 0) {
4330 1.1 christos strncpy(old->in_plabel, np->in_names + np->in_plabel,
4331 1.1 christos APR_LABELLEN);
4332 1.1 christos old->in_plabel[APR_LABELLEN - 1] = '\0';
4333 1.1 christos }
4334 1.1 christos }
4335 1.1 christos
4336 1.1 christos
4337 1.1 christos static void
4338 1.1 christos ipnat_current_to_4_1_0(current, old)
4339 1.1 christos void *current;
4340 1.1 christos ipnat_4_1_0_t *old;
4341 1.1 christos {
4342 1.1 christos ipnat_t *np = (ipnat_t *)current;
4343 1.1 christos
4344 1.1 christos old->in_next = np->in_next;
4345 1.1 christos old->in_rnext = np->in_rnext;
4346 1.1 christos old->in_prnext = np->in_prnext;
4347 1.1 christos old->in_mnext = np->in_mnext;
4348 1.1 christos old->in_pmnext = np->in_pmnext;
4349 1.1 christos old->in_tqehead[0] = np->in_tqehead[0];
4350 1.1 christos old->in_tqehead[1] = np->in_tqehead[1];
4351 1.1 christos old->in_ifps[0] = np->in_ifps[0];
4352 1.1 christos old->in_ifps[1] = np->in_ifps[1];
4353 1.1 christos old->in_apr = np->in_apr;
4354 1.1 christos old->in_comment = np->in_comment;
4355 1.1 christos old->in_space = np->in_space;
4356 1.1 christos old->in_hits = np->in_hits;
4357 1.1 christos old->in_use = np->in_use;
4358 1.1 christos old->in_hv = np->in_hv[0];
4359 1.1 christos old->in_flineno = np->in_flineno;
4360 1.1 christos if (old->in_redir == NAT_REDIRECT)
4361 1.1 christos old->in_pnext = np->in_dpnext;
4362 1.1 christos else
4363 1.1 christos old->in_pnext = np->in_spnext;
4364 1.1 christos old->in_v = np->in_v[0];
4365 1.1 christos old->in_flags = np->in_flags;
4366 1.1 christos old->in_mssclamp = np->in_mssclamp;
4367 1.1 christos old->in_age[0] = np->in_age[0];
4368 1.1 christos old->in_age[1] = np->in_age[1];
4369 1.1 christos old->in_redir = np->in_redir;
4370 1.1 christos old->in_p = np->in_pr[0];
4371 1.1 christos if (np->in_redir == NAT_REDIRECT) {
4372 1.1 christos old->in_next6 = np->in_ndst.na_nextaddr;
4373 1.1 christos old->in_in[0] = np->in_ndst.na_addr[0];
4374 1.1 christos old->in_in[1] = np->in_ndst.na_addr[1];
4375 1.1 christos old->in_out[0] = np->in_odst.na_addr[0];
4376 1.1 christos old->in_out[1] = np->in_odst.na_addr[1];
4377 1.1 christos old->in_src[0] = np->in_osrc.na_addr[0];
4378 1.1 christos old->in_src[1] = np->in_osrc.na_addr[1];
4379 1.1 christos } else {
4380 1.1 christos old->in_next6 = np->in_nsrc.na_nextaddr;
4381 1.1 christos old->in_out[0] = np->in_nsrc.na_addr[0];
4382 1.1 christos old->in_out[1] = np->in_nsrc.na_addr[1];
4383 1.1 christos old->in_in[0] = np->in_osrc.na_addr[0];
4384 1.1 christos old->in_in[1] = np->in_osrc.na_addr[1];
4385 1.1 christos old->in_src[0] = np->in_odst.na_addr[0];
4386 1.1 christos old->in_src[1] = np->in_odst.na_addr[1];
4387 1.1 christos }
4388 1.1 christos ipfv5tuctov4(&np->in_tuc, &old->in_tuc);
4389 1.1 christos if (np->in_redir == NAT_REDIRECT) {
4390 1.1 christos old->in_port[0] = np->in_dpmin;
4391 1.1 christos old->in_port[1] = np->in_dpmax;
4392 1.1 christos } else {
4393 1.1 christos old->in_port[0] = np->in_spmin;
4394 1.1 christos old->in_port[1] = np->in_spmax;
4395 1.1 christos }
4396 1.1 christos old->in_ppip = np->in_ppip;
4397 1.1 christos old->in_ippip = np->in_ippip;
4398 1.1 christos bcopy(&np->in_tag, &old->in_tag, sizeof(np->in_tag));
4399 1.1 christos
4400 1.1 christos if (np->in_ifnames[0] >= 0) {
4401 1.1 christos strncpy(old->in_ifnames[0], np->in_names + np->in_ifnames[0],
4402 1.1 christos LIFNAMSIZ);
4403 1.1 christos old->in_ifnames[0][LIFNAMSIZ - 1] = '\0';
4404 1.1 christos }
4405 1.1 christos if (np->in_ifnames[1] >= 0) {
4406 1.1 christos strncpy(old->in_ifnames[1], np->in_names + np->in_ifnames[1],
4407 1.1 christos LIFNAMSIZ);
4408 1.1 christos old->in_ifnames[1][LIFNAMSIZ - 1] = '\0';
4409 1.1 christos }
4410 1.1 christos if (np->in_plabel >= 0) {
4411 1.1 christos strncpy(old->in_plabel, np->in_names + np->in_plabel,
4412 1.1 christos APR_LABELLEN);
4413 1.1 christos old->in_plabel[APR_LABELLEN - 1] = '\0';
4414 1.1 christos }
4415 1.1 christos }
4416 1.1 christos
4417 1.1 christos
4418 1.1 christos static void
4419 1.1 christos ipstate_current_to_4_1_16(current, old)
4420 1.1 christos void *current;
4421 1.1 christos ipstate_4_1_16_t *old;
4422 1.1 christos {
4423 1.1 christos ipstate_t *is = (ipstate_t *)current;
4424 1.1 christos
4425 1.1 christos old->is_lock = is->is_lock;
4426 1.1 christos old->is_next = is->is_next;
4427 1.1 christos old->is_pnext = is->is_pnext;
4428 1.1 christos old->is_hnext = is->is_hnext;
4429 1.1 christos old->is_phnext = is->is_phnext;
4430 1.1 christos old->is_me = is->is_me;
4431 1.1 christos old->is_ifp[0] = is->is_ifp[0];
4432 1.1 christos old->is_ifp[1] = is->is_ifp[1];
4433 1.1 christos old->is_sync = is->is_sync;
4434 1.1 christos old->is_rule = is->is_rule;
4435 1.1 christos old->is_tqehead[0] = is->is_tqehead[0];
4436 1.1 christos old->is_tqehead[1] = is->is_tqehead[1];
4437 1.1 christos old->is_isc = is->is_isc;
4438 1.1 christos old->is_pkts[0] = is->is_pkts[0];
4439 1.1 christos old->is_pkts[1] = is->is_pkts[1];
4440 1.1 christos old->is_pkts[2] = is->is_pkts[2];
4441 1.1 christos old->is_pkts[3] = is->is_pkts[3];
4442 1.1 christos old->is_bytes[0] = is->is_bytes[0];
4443 1.1 christos old->is_bytes[1] = is->is_bytes[1];
4444 1.1 christos old->is_bytes[2] = is->is_bytes[2];
4445 1.1 christos old->is_bytes[3] = is->is_bytes[3];
4446 1.1 christos old->is_icmppkts[0] = is->is_icmppkts[0];
4447 1.1 christos old->is_icmppkts[1] = is->is_icmppkts[1];
4448 1.1 christos old->is_icmppkts[2] = is->is_icmppkts[2];
4449 1.1 christos old->is_icmppkts[3] = is->is_icmppkts[3];
4450 1.1 christos old->is_sti = is->is_sti;
4451 1.1 christos old->is_frage[0] = is->is_frage[0];
4452 1.1 christos old->is_frage[1] = is->is_frage[1];
4453 1.1 christos old->is_ref = is->is_ref;
4454 1.1 christos old->is_isninc[0] = is->is_isninc[0];
4455 1.1 christos old->is_isninc[1] = is->is_isninc[1];
4456 1.1 christos old->is_sumd[0] = is->is_sumd[0];
4457 1.1 christos old->is_sumd[1] = is->is_sumd[1];
4458 1.1 christos old->is_src = is->is_src;
4459 1.1 christos old->is_dst = is->is_dst;
4460 1.1 christos old->is_pass = is->is_pass;
4461 1.1 christos old->is_p = is->is_p;
4462 1.1 christos old->is_v = is->is_v;
4463 1.1 christos old->is_hv = is->is_hv;
4464 1.1 christos old->is_tag = is->is_tag;
4465 1.1 christos old->is_opt[0] = is->is_opt[0];
4466 1.1 christos old->is_opt[1] = is->is_opt[1];
4467 1.1 christos old->is_optmsk[0] = is->is_optmsk[0];
4468 1.1 christos old->is_optmsk[1] = is->is_optmsk[1];
4469 1.1 christos old->is_sec = is->is_sec;
4470 1.1 christos old->is_secmsk = is->is_secmsk;
4471 1.1 christos old->is_auth = is->is_auth;
4472 1.1 christos old->is_authmsk = is->is_authmsk;
4473 1.1 christos ipf_v5tcpinfoto4(&is->is_tcp, &old->is_tcp);
4474 1.1 christos old->is_flags = is->is_flags;
4475 1.1 christos old->is_flx[0][0] = is->is_flx[0][0];
4476 1.1 christos old->is_flx[0][1] = is->is_flx[0][1];
4477 1.1 christos old->is_flx[1][0] = is->is_flx[1][0];
4478 1.1 christos old->is_flx[1][1] = is->is_flx[1][1];
4479 1.1 christos old->is_rulen = is->is_rulen;
4480 1.1 christos old->is_s0[0] = is->is_s0[0];
4481 1.1 christos old->is_s0[1] = is->is_s0[1];
4482 1.1 christos old->is_smsk[0] = is->is_smsk[0];
4483 1.1 christos old->is_smsk[1] = is->is_smsk[1];
4484 1.1 christos bcopy(is->is_group, old->is_group, sizeof(is->is_group));
4485 1.1 christos bcopy(is->is_sbuf, old->is_sbuf, sizeof(is->is_sbuf));
4486 1.1 christos bcopy(is->is_ifname, old->is_ifname, sizeof(is->is_ifname));
4487 1.1 christos }
4488 1.1 christos
4489 1.1 christos
4490 1.1 christos static void
4491 1.1 christos ipstate_current_to_4_1_0(current, old)
4492 1.1 christos void *current;
4493 1.1 christos ipstate_4_1_0_t *old;
4494 1.1 christos {
4495 1.1 christos ipstate_t *is = (ipstate_t *)current;
4496 1.1 christos
4497 1.1 christos old->is_lock = is->is_lock;
4498 1.1 christos old->is_next = is->is_next;
4499 1.1 christos old->is_pnext = is->is_pnext;
4500 1.1 christos old->is_hnext = is->is_hnext;
4501 1.1 christos old->is_phnext = is->is_phnext;
4502 1.1 christos old->is_me = is->is_me;
4503 1.1 christos old->is_ifp[0] = is->is_ifp[0];
4504 1.1 christos old->is_ifp[1] = is->is_ifp[1];
4505 1.1 christos old->is_sync = is->is_sync;
4506 1.1 christos bzero(&old->is_nat, sizeof(old->is_nat));
4507 1.1 christos old->is_rule = is->is_rule;
4508 1.1 christos old->is_tqehead[0] = is->is_tqehead[0];
4509 1.1 christos old->is_tqehead[1] = is->is_tqehead[1];
4510 1.1 christos old->is_isc = is->is_isc;
4511 1.1 christos old->is_pkts[0] = is->is_pkts[0];
4512 1.1 christos old->is_pkts[1] = is->is_pkts[1];
4513 1.1 christos old->is_pkts[2] = is->is_pkts[2];
4514 1.1 christos old->is_pkts[3] = is->is_pkts[3];
4515 1.1 christos old->is_bytes[0] = is->is_bytes[0];
4516 1.1 christos old->is_bytes[1] = is->is_bytes[1];
4517 1.1 christos old->is_bytes[2] = is->is_bytes[2];
4518 1.1 christos old->is_bytes[3] = is->is_bytes[3];
4519 1.1 christos old->is_icmppkts[0] = is->is_icmppkts[0];
4520 1.1 christos old->is_icmppkts[1] = is->is_icmppkts[1];
4521 1.1 christos old->is_icmppkts[2] = is->is_icmppkts[2];
4522 1.1 christos old->is_icmppkts[3] = is->is_icmppkts[3];
4523 1.1 christos old->is_sti = is->is_sti;
4524 1.1 christos old->is_frage[0] = is->is_frage[0];
4525 1.1 christos old->is_frage[1] = is->is_frage[1];
4526 1.1 christos old->is_ref = is->is_ref;
4527 1.1 christos old->is_isninc[0] = is->is_isninc[0];
4528 1.1 christos old->is_isninc[1] = is->is_isninc[1];
4529 1.1 christos old->is_sumd[0] = is->is_sumd[0];
4530 1.1 christos old->is_sumd[1] = is->is_sumd[1];
4531 1.1 christos old->is_src = is->is_src;
4532 1.1 christos old->is_dst = is->is_dst;
4533 1.1 christos old->is_pass = is->is_pass;
4534 1.1 christos old->is_p = is->is_p;
4535 1.1 christos old->is_v = is->is_v;
4536 1.1 christos old->is_hv = is->is_hv;
4537 1.1 christos old->is_tag = is->is_tag;
4538 1.1 christos old->is_opt[0] = is->is_opt[0];
4539 1.1 christos old->is_opt[1] = is->is_opt[1];
4540 1.1 christos old->is_optmsk[0] = is->is_optmsk[0];
4541 1.1 christos old->is_optmsk[1] = is->is_optmsk[1];
4542 1.1 christos old->is_sec = is->is_sec;
4543 1.1 christos old->is_secmsk = is->is_secmsk;
4544 1.1 christos old->is_auth = is->is_auth;
4545 1.1 christos old->is_authmsk = is->is_authmsk;
4546 1.1 christos ipf_v5tcpinfoto4(&is->is_tcp, &old->is_tcp);
4547 1.1 christos old->is_flags = is->is_flags;
4548 1.1 christos old->is_flx[0][0] = is->is_flx[0][0];
4549 1.1 christos old->is_flx[0][1] = is->is_flx[0][1];
4550 1.1 christos old->is_flx[1][0] = is->is_flx[1][0];
4551 1.1 christos old->is_flx[1][1] = is->is_flx[1][1];
4552 1.1 christos old->is_rulen = is->is_rulen;
4553 1.1 christos old->is_s0[0] = is->is_s0[0];
4554 1.1 christos old->is_s0[1] = is->is_s0[1];
4555 1.1 christos old->is_smsk[0] = is->is_smsk[0];
4556 1.1 christos old->is_smsk[1] = is->is_smsk[1];
4557 1.1 christos bcopy(is->is_group, old->is_group, sizeof(is->is_group));
4558 1.1 christos bcopy(is->is_sbuf, old->is_sbuf, sizeof(is->is_sbuf));
4559 1.1 christos bcopy(is->is_ifname, old->is_ifname, sizeof(is->is_ifname));
4560 1.1 christos }
4561 1.1 christos
4562 1.1 christos
4563 1.1 christos static void
4564 1.1 christos ips_stat_current_to_4_1_21(current, old)
4565 1.1 christos void *current;
4566 1.1 christos ips_stat_4_1_21_t *old;
4567 1.1 christos {
4568 1.1 christos ips_stat_t *st = (ips_stat_t *)current;
4569 1.1 christos
4570 1.1 christos old->iss_hits = st->iss_hits;
4571 1.1 christos old->iss_miss = st->iss_check_miss;
4572 1.1 christos old->iss_max = st->iss_max;
4573 1.1 christos old->iss_maxref = st->iss_max_ref;
4574 1.1 christos old->iss_tcp = st->iss_proto[IPPROTO_TCP];
4575 1.1 christos old->iss_udp = st->iss_proto[IPPROTO_UDP];
4576 1.1 christos old->iss_icmp = st->iss_proto[IPPROTO_ICMP];
4577 1.1 christos old->iss_nomem = st->iss_nomem;
4578 1.1 christos old->iss_expire = st->iss_expire;
4579 1.1 christos old->iss_fin = st->iss_fin;
4580 1.1 christos old->iss_active = st->iss_active;
4581 1.1 christos old->iss_logged = st->iss_log_ok;
4582 1.1 christos old->iss_logfail = st->iss_log_fail;
4583 1.1 christos old->iss_inuse = st->iss_inuse;
4584 1.1 christos old->iss_wild = st->iss_wild;
4585 1.1 christos old->iss_ticks = st->iss_ticks;
4586 1.1 christos old->iss_bucketfull = st->iss_bucket_full;
4587 1.1 christos old->iss_statesize = st->iss_state_size;
4588 1.1 christos old->iss_statemax = st->iss_state_max;
4589 1.1 christos old->iss_table = st->iss_table;
4590 1.1 christos old->iss_list = st->iss_list;
4591 1.1 christos old->iss_bucketlen = (void *)st->iss_bucketlen;
4592 1.1 christos old->iss_tcptab = st->iss_tcptab;
4593 1.1 christos }
4594 1.1 christos
4595 1.1 christos
4596 1.1 christos static void
4597 1.1 christos ips_stat_current_to_4_1_0(current, old)
4598 1.1 christos void *current;
4599 1.1 christos ips_stat_4_1_0_t *old;
4600 1.1 christos {
4601 1.1 christos ips_stat_t *st = (ips_stat_t *)current;
4602 1.1 christos
4603 1.1 christos old->iss_hits = st->iss_hits;
4604 1.1 christos old->iss_miss = st->iss_check_miss;
4605 1.1 christos old->iss_max = st->iss_max;
4606 1.1 christos old->iss_maxref = st->iss_max_ref;
4607 1.1 christos old->iss_tcp = st->iss_proto[IPPROTO_TCP];
4608 1.1 christos old->iss_udp = st->iss_proto[IPPROTO_UDP];
4609 1.1 christos old->iss_icmp = st->iss_proto[IPPROTO_ICMP];
4610 1.1 christos old->iss_nomem = st->iss_nomem;
4611 1.1 christos old->iss_expire = st->iss_expire;
4612 1.1 christos old->iss_fin = st->iss_fin;
4613 1.1 christos old->iss_active = st->iss_active;
4614 1.1 christos old->iss_logged = st->iss_log_ok;
4615 1.1 christos old->iss_logfail = st->iss_log_fail;
4616 1.1 christos old->iss_inuse = st->iss_inuse;
4617 1.1 christos old->iss_wild = st->iss_wild;
4618 1.1 christos old->iss_ticks = st->iss_ticks;
4619 1.1 christos old->iss_bucketfull = st->iss_bucket_full;
4620 1.1 christos old->iss_statesize = st->iss_state_size;
4621 1.1 christos old->iss_statemax = st->iss_state_max;
4622 1.1 christos old->iss_table = st->iss_table;
4623 1.1 christos old->iss_list = st->iss_list;
4624 1.1 christos old->iss_bucketlen = (void *)st->iss_bucketlen;
4625 1.1 christos }
4626 1.1 christos
4627 1.1 christos
4628 1.1 christos static void
4629 1.1 christos nat_save_current_to_4_1_16(current, old)
4630 1.1 christos void *current;
4631 1.1 christos nat_save_4_1_16_t *old;
4632 1.1 christos {
4633 1.1 christos nat_save_t *nats = (nat_save_t *)current;
4634 1.1 christos
4635 1.1 christos old->ipn_next = nats->ipn_next;
4636 1.1 christos bcopy(&nats->ipn_nat, &old->ipn_nat, sizeof(old->ipn_nat));
4637 1.1 christos bcopy(&nats->ipn_ipnat, &old->ipn_ipnat, sizeof(old->ipn_ipnat));
4638 1.1 christos frentry_current_to_4_1_16(&nats->ipn_fr, &old->ipn_fr);
4639 1.1 christos old->ipn_dsize = nats->ipn_dsize;
4640 1.1 christos bcopy(nats->ipn_data, old->ipn_data, sizeof(nats->ipn_data));
4641 1.1 christos }
4642 1.1 christos
4643 1.1 christos
4644 1.1 christos static void
4645 1.1 christos nat_save_current_to_4_1_14(current, old)
4646 1.1 christos void *current;
4647 1.1 christos nat_save_4_1_14_t *old;
4648 1.1 christos {
4649 1.1 christos nat_save_t *nats = (nat_save_t *)current;
4650 1.1 christos
4651 1.1 christos old->ipn_next = nats->ipn_next;
4652 1.1 christos bcopy(&nats->ipn_nat, &old->ipn_nat, sizeof(old->ipn_nat));
4653 1.1 christos bcopy(&nats->ipn_ipnat, &old->ipn_ipnat, sizeof(old->ipn_ipnat));
4654 1.1 christos frentry_current_to_4_1_0(&nats->ipn_fr, &old->ipn_fr);
4655 1.1 christos old->ipn_dsize = nats->ipn_dsize;
4656 1.1 christos bcopy(nats->ipn_data, old->ipn_data, sizeof(nats->ipn_data));
4657 1.1 christos }
4658 1.1 christos
4659 1.1 christos
4660 1.1 christos static void
4661 1.1 christos nat_save_current_to_4_1_3(current, old)
4662 1.1 christos void *current;
4663 1.1 christos nat_save_4_1_3_t *old;
4664 1.1 christos {
4665 1.1 christos nat_save_t *nats = (nat_save_t *)current;
4666 1.1 christos
4667 1.1 christos old->ipn_next = nats->ipn_next;
4668 1.1 christos bcopy(&nats->ipn_nat, &old->ipn_nat, sizeof(old->ipn_nat));
4669 1.1 christos bcopy(&nats->ipn_ipnat, &old->ipn_ipnat, sizeof(old->ipn_ipnat));
4670 1.1 christos frentry_current_to_4_1_0(&nats->ipn_fr, &old->ipn_fr);
4671 1.1 christos old->ipn_dsize = nats->ipn_dsize;
4672 1.1 christos bcopy(nats->ipn_data, old->ipn_data, sizeof(nats->ipn_data));
4673 1.1 christos }
4674 1.1 christos
4675 1.1 christos
4676 1.1 christos static void
4677 1.1 christos nat_current_to_4_1_25(current, old)
4678 1.1 christos void *current;
4679 1.1 christos nat_4_1_25_t *old;
4680 1.1 christos {
4681 1.1 christos nat_t *nat = (nat_t *)current;
4682 1.1 christos
4683 1.1 christos old->nat_lock = nat->nat_lock;
4684 1.1 christos old->nat_next = (void *)nat->nat_next;
4685 1.1 christos old->nat_pnext = (void *)nat->nat_pnext;
4686 1.1 christos old->nat_hnext[0] = (void *)nat->nat_hnext[0];
4687 1.1 christos old->nat_hnext[1] = (void *)nat->nat_hnext[1];
4688 1.1 christos old->nat_phnext[0] = (void *)nat->nat_phnext[0];
4689 1.1 christos old->nat_phnext[1] = (void *)nat->nat_phnext[1];
4690 1.1 christos old->nat_hm = nat->nat_hm;
4691 1.1 christos old->nat_data = nat->nat_data;
4692 1.1 christos old->nat_me = (void *)nat->nat_me;
4693 1.1 christos old->nat_state = nat->nat_state;
4694 1.1 christos old->nat_aps = nat->nat_aps;
4695 1.1 christos old->nat_fr = nat->nat_fr;
4696 1.1 christos old->nat_ptr = (void *)nat->nat_ptr;
4697 1.1 christos old->nat_ifps[0] = nat->nat_ifps[0];
4698 1.1 christos old->nat_ifps[1] = nat->nat_ifps[1];
4699 1.1 christos old->nat_sync = nat->nat_sync;
4700 1.1 christos old->nat_tqe = nat->nat_tqe;
4701 1.1 christos old->nat_flags = nat->nat_flags;
4702 1.1 christos old->nat_sumd[0] = nat->nat_sumd[0];
4703 1.1 christos old->nat_sumd[1] = nat->nat_sumd[1];
4704 1.1 christos old->nat_ipsumd = nat->nat_ipsumd;
4705 1.1 christos old->nat_mssclamp = nat->nat_mssclamp;
4706 1.1 christos old->nat_pkts[0] = nat->nat_pkts[0];
4707 1.1 christos old->nat_pkts[1] = nat->nat_pkts[1];
4708 1.1 christos old->nat_bytes[0] = nat->nat_bytes[0];
4709 1.1 christos old->nat_bytes[1] = nat->nat_bytes[1];
4710 1.1 christos old->nat_ref = nat->nat_ref;
4711 1.1 christos old->nat_dir = nat->nat_dir;
4712 1.1 christos old->nat_p = nat->nat_pr[0];
4713 1.1 christos old->nat_use = nat->nat_use;
4714 1.1 christos old->nat_hv[0] = nat->nat_hv[0];
4715 1.1 christos old->nat_hv[1] = nat->nat_hv[1];
4716 1.1 christos old->nat_rev = nat->nat_rev;
4717 1.1 christos old->nat_redir = nat->nat_redir;
4718 1.1 christos bcopy(nat->nat_ifnames[0], old->nat_ifnames[0], LIFNAMSIZ);
4719 1.1 christos bcopy(nat->nat_ifnames[1], old->nat_ifnames[1], LIFNAMSIZ);
4720 1.1 christos
4721 1.1 christos if (nat->nat_redir == NAT_REDIRECT) {
4722 1.1 christos old->nat_inip6 = nat->nat_ndst6;
4723 1.1 christos old->nat_outip6 = nat->nat_odst6;
4724 1.1 christos old->nat_oip6 = nat->nat_osrc6;
4725 1.1 christos old->nat_un.nat_unt.ts_sport = nat->nat_ndport;
4726 1.1 christos old->nat_un.nat_unt.ts_dport = nat->nat_odport;
4727 1.1 christos } else {
4728 1.1 christos old->nat_inip6 = nat->nat_osrc6;
4729 1.1 christos old->nat_outip6 = nat->nat_nsrc6;
4730 1.1 christos old->nat_oip6 = nat->nat_odst6;
4731 1.1 christos old->nat_un.nat_unt.ts_sport = nat->nat_osport;
4732 1.1 christos old->nat_un.nat_unt.ts_dport = nat->nat_nsport;
4733 1.1 christos }
4734 1.1 christos }
4735 1.1 christos
4736 1.1 christos
4737 1.1 christos static void
4738 1.1 christos nat_current_to_4_1_14(current, old)
4739 1.1 christos void *current;
4740 1.1 christos nat_4_1_14_t *old;
4741 1.1 christos {
4742 1.1 christos nat_t *nat = (nat_t *)current;
4743 1.1 christos
4744 1.1 christos old->nat_lock = nat->nat_lock;
4745 1.1 christos old->nat_next = nat->nat_next;
4746 1.1 christos old->nat_pnext = NULL;
4747 1.1 christos old->nat_hnext[0] = NULL;
4748 1.1 christos old->nat_hnext[1] = NULL;
4749 1.1 christos old->nat_phnext[0] = NULL;
4750 1.1 christos old->nat_phnext[1] = NULL;
4751 1.1 christos old->nat_hm = nat->nat_hm;
4752 1.1 christos old->nat_data = nat->nat_data;
4753 1.1 christos old->nat_me = (void *)nat->nat_me;
4754 1.1 christos old->nat_state = nat->nat_state;
4755 1.1 christos old->nat_aps = nat->nat_aps;
4756 1.1 christos old->nat_fr = nat->nat_fr;
4757 1.1 christos old->nat_ptr = nat->nat_ptr;
4758 1.1 christos old->nat_ifps[0] = nat->nat_ifps[0];
4759 1.1 christos old->nat_ifps[1] = nat->nat_ifps[1];
4760 1.1 christos old->nat_sync = nat->nat_sync;
4761 1.1 christos old->nat_tqe = nat->nat_tqe;
4762 1.1 christos old->nat_flags = nat->nat_flags;
4763 1.1 christos old->nat_sumd[0] = nat->nat_sumd[0];
4764 1.1 christos old->nat_sumd[1] = nat->nat_sumd[1];
4765 1.1 christos old->nat_ipsumd = nat->nat_ipsumd;
4766 1.1 christos old->nat_mssclamp = nat->nat_mssclamp;
4767 1.1 christos old->nat_pkts[0] = nat->nat_pkts[0];
4768 1.1 christos old->nat_pkts[1] = nat->nat_pkts[1];
4769 1.1 christos old->nat_bytes[0] = nat->nat_bytes[0];
4770 1.1 christos old->nat_bytes[1] = nat->nat_bytes[1];
4771 1.1 christos old->nat_ref = nat->nat_ref;
4772 1.1 christos old->nat_dir = nat->nat_dir;
4773 1.1 christos old->nat_p = nat->nat_pr[0];
4774 1.1 christos old->nat_use = nat->nat_use;
4775 1.1 christos old->nat_hv[0] = nat->nat_hv[0];
4776 1.1 christos old->nat_hv[1] = nat->nat_hv[1];
4777 1.1 christos old->nat_rev = nat->nat_rev;
4778 1.1 christos bcopy(nat->nat_ifnames[0], old->nat_ifnames[0], LIFNAMSIZ);
4779 1.1 christos bcopy(nat->nat_ifnames[1], old->nat_ifnames[1], LIFNAMSIZ);
4780 1.1 christos
4781 1.1 christos if (nat->nat_redir == NAT_REDIRECT) {
4782 1.1 christos old->nat_inip6 = nat->nat_ndst6;
4783 1.1 christos old->nat_outip6 = nat->nat_odst6;
4784 1.1 christos old->nat_oip6 = nat->nat_osrc6;
4785 1.1 christos old->nat_un.nat_unt.ts_sport = nat->nat_ndport;
4786 1.1 christos old->nat_un.nat_unt.ts_dport = nat->nat_odport;
4787 1.1 christos } else {
4788 1.1 christos old->nat_inip6 = nat->nat_osrc6;
4789 1.1 christos old->nat_outip6 = nat->nat_nsrc6;
4790 1.1 christos old->nat_oip6 = nat->nat_odst6;
4791 1.1 christos old->nat_un.nat_unt.ts_sport = nat->nat_osport;
4792 1.1 christos old->nat_un.nat_unt.ts_dport = nat->nat_nsport;
4793 1.1 christos }
4794 1.1 christos }
4795 1.1 christos
4796 1.1 christos
4797 1.1 christos static void
4798 1.1 christos nat_current_to_4_1_3(current, old)
4799 1.1 christos void *current;
4800 1.1 christos nat_4_1_3_t *old;
4801 1.1 christos {
4802 1.1 christos nat_t *nat = (nat_t *)current;
4803 1.1 christos
4804 1.1 christos old->nat_lock = nat->nat_lock;
4805 1.1 christos old->nat_next = nat->nat_next;
4806 1.1 christos old->nat_pnext = NULL;
4807 1.1 christos old->nat_hnext[0] = NULL;
4808 1.1 christos old->nat_hnext[1] = NULL;
4809 1.1 christos old->nat_phnext[0] = NULL;
4810 1.1 christos old->nat_phnext[1] = NULL;
4811 1.1 christos old->nat_hm = nat->nat_hm;
4812 1.1 christos old->nat_data = nat->nat_data;
4813 1.1 christos old->nat_me = (void *)nat->nat_me;
4814 1.1 christos old->nat_state = nat->nat_state;
4815 1.1 christos old->nat_aps = nat->nat_aps;
4816 1.1 christos old->nat_fr = nat->nat_fr;
4817 1.1 christos old->nat_ptr = nat->nat_ptr;
4818 1.1 christos old->nat_ifps[0] = nat->nat_ifps[0];
4819 1.1 christos old->nat_ifps[1] = nat->nat_ifps[1];
4820 1.1 christos old->nat_sync = nat->nat_sync;
4821 1.1 christos old->nat_tqe = nat->nat_tqe;
4822 1.1 christos old->nat_flags = nat->nat_flags;
4823 1.1 christos old->nat_sumd[0] = nat->nat_sumd[0];
4824 1.1 christos old->nat_sumd[1] = nat->nat_sumd[1];
4825 1.1 christos old->nat_ipsumd = nat->nat_ipsumd;
4826 1.1 christos old->nat_mssclamp = nat->nat_mssclamp;
4827 1.1 christos old->nat_pkts[0] = nat->nat_pkts[0];
4828 1.1 christos old->nat_pkts[1] = nat->nat_pkts[1];
4829 1.1 christos old->nat_bytes[0] = nat->nat_bytes[0];
4830 1.1 christos old->nat_bytes[1] = nat->nat_bytes[1];
4831 1.1 christos old->nat_ref = nat->nat_ref;
4832 1.1 christos old->nat_dir = nat->nat_dir;
4833 1.1 christos old->nat_p = nat->nat_pr[0];
4834 1.1 christos old->nat_use = nat->nat_use;
4835 1.1 christos old->nat_hv[0] = nat->nat_hv[0];
4836 1.1 christos old->nat_hv[1] = nat->nat_hv[1];
4837 1.1 christos old->nat_rev = nat->nat_rev;
4838 1.1 christos bcopy(nat->nat_ifnames[0], old->nat_ifnames[0], LIFNAMSIZ);
4839 1.1 christos bcopy(nat->nat_ifnames[1], old->nat_ifnames[1], LIFNAMSIZ);
4840 1.1 christos
4841 1.1 christos if (nat->nat_redir == NAT_REDIRECT) {
4842 1.1 christos old->nat_inip6 = nat->nat_ndst6;
4843 1.1 christos old->nat_outip6 = nat->nat_odst6;
4844 1.1 christos old->nat_oip6 = nat->nat_osrc6;
4845 1.1 christos old->nat_un.nat_unt.ts_sport = nat->nat_ndport;
4846 1.1 christos old->nat_un.nat_unt.ts_dport = nat->nat_odport;
4847 1.1 christos } else {
4848 1.1 christos old->nat_inip6 = nat->nat_osrc6;
4849 1.1 christos old->nat_outip6 = nat->nat_nsrc6;
4850 1.1 christos old->nat_oip6 = nat->nat_odst6;
4851 1.1 christos old->nat_un.nat_unt.ts_sport = nat->nat_osport;
4852 1.1 christos old->nat_un.nat_unt.ts_dport = nat->nat_nsport;
4853 1.1 christos }
4854 1.1 christos }
4855 1.1 christos
4856 1.1 christos #endif /* IPFILTER_COMPAT */
4857