1 1.1 christos /* $NetBSD: ip_fil_compat.c,v 1.1.1.2 2012/07/22 13:44:16 darrenr Exp $ */ 2 1.1 christos 3 1.1 christos /* 4 1.1.1.2 darrenr * Copyright (C) 2002-2012 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.1.2 darrenr old->fr_grp = (void *)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.1.2 darrenr old->fr_grp = (void *)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.1.2 darrenr old->fr_grp = (void *)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