| /* |
| * Copyright (C) 2010 by Darren Reed. |
| * |
| * See the IPFILTER.LICENCE file for details on licencing. |
| */ |
| #if defined(KERNEL) || defined(_KERNEL) |
| # undef KERNEL |
| # undef _KERNEL |
| # define KERNEL 1 |
| # define _KERNEL 1 |
| #endif |
| #if defined(__osf__) |
| # define _PROTO_NET_H_ |
| #endif |
| #include <sys/param.h> |
| #include <sys/errno.h> |
| #include <sys/types.h> |
| #include <sys/time.h> |
| #include <sys/file.h> |
| #if __FreeBSD_version >= 220000 && defined(_KERNEL) |
| # include <sys/fcntl.h> |
| # include <sys/filio.h> |
| #else |
| # include <sys/ioctl.h> |
| #endif |
| #if !defined(_KERNEL) |
| # include <string.h> |
| # define _KERNEL |
| # ifdef __OpenBSD__ |
| struct file; |
| # endif |
| # include <sys/uio.h> |
| # undef _KERNEL |
| #endif |
| #include <sys/socket.h> |
| #if (defined(__osf__) || defined(AIX) || defined(__hpux) || defined(__sgi)) && defined(_KERNEL) |
| # include "radix_ipf_local.h" |
| # define _RADIX_H_ |
| #endif |
| #include <net/if.h> |
| #if defined(__FreeBSD__) |
| # include <sys/cdefs.h> |
| # include <sys/proc.h> |
| #endif |
| #if defined(_KERNEL) |
| # include <sys/systm.h> |
| # if !defined(__SVR4) && !defined(__svr4__) |
| # include <sys/mbuf.h> |
| # endif |
| #endif |
| #include <netinet/in.h> |
| |
| #include "netinet/ip_compat.h" |
| #include "netinet/ip_fil.h" |
| #include "netinet/ip_pool.h" |
| #include "netinet/ip_htable.h" |
| #include "netinet/ip_lookup.h" |
| #include "netinet/ip_nat.h" |
| #include "netinet/ip_state.h" |
| #include "netinet/ip_proxy.h" |
| #include "netinet/ip_auth.h" |
| /* END OF INCLUDES */ |
| |
| /* |
| * NetBSD has moved to 64bit time_t for all architectures. |
| * For some, such as sparc64, there is no change because long is already |
| * 64bit, but for others (i386), there is... |
| */ |
| #ifdef IPFILTER_COMPAT |
| |
| # ifdef __NetBSD__ |
| typedef struct timeval_l { |
| long tv_sec; |
| long tv_usec; |
| } timeval_l_t; |
| # endif |
| |
| /* ------------------------------------------------------------------------ */ |
| |
| /* |
| * 4.1.34 changed the size of the time structure used for pps (current) |
| * 4.1.16 moved the location of fr_flineno |
| * 4.1.0 base version |
| */ |
| typedef struct frentry_4_1_16 { |
| ipfmutex_t fr_lock; |
| struct frentry *fr_next; |
| struct frentry **fr_grp; |
| struct ipscan *fr_isc; |
| void *fr_ifas[4]; |
| void *fr_ptr; |
| char *fr_comment; |
| int fr_ref; |
| int fr_statecnt; |
| int fr_flineno; |
| U_QUAD_T fr_hits; |
| U_QUAD_T fr_bytes; |
| union { |
| #ifdef __NetBSD__ |
| timeval_l_t frp_lastpkt; |
| #else |
| struct timeval frp_lastpkt; |
| #endif |
| } fr_lpu; |
| int fr_curpps; |
| union { |
| void *fru_data; |
| caddr_t fru_caddr; |
| fripf_t *fru_ipf; |
| frentfunc_t fru_func; |
| } fr_dun; |
| ipfunc_t fr_func; |
| int fr_dsize; |
| int fr_pps; |
| int fr_statemax; |
| u_32_t fr_type; |
| u_32_t fr_flags; |
| u_32_t fr_logtag; |
| u_32_t fr_collect; |
| u_int fr_arg; |
| u_int fr_loglevel; |
| u_int fr_age[2]; |
| u_char fr_v; |
| u_char fr_icode; |
| char fr_group[FR_GROUPLEN]; |
| char fr_grhead[FR_GROUPLEN]; |
| ipftag_t fr_nattag; |
| char fr_ifnames[4][LIFNAMSIZ]; |
| char fr_isctag[16]; |
| frdest_t fr_tifs[2]; |
| frdest_t fr_dif; |
| u_int fr_cksum; |
| } frentry_4_1_16_t; |
| |
| typedef struct frentry_4_1_0 { |
| ipfmutex_t fr_lock; |
| struct frentry *fr_next; |
| struct frentry **fr_grp; |
| struct ipscan *fr_isc; |
| void *fr_ifas[4]; |
| void *fr_ptr; |
| char *fr_comment; |
| int fr_ref; |
| int fr_statecnt; |
| U_QUAD_T fr_hits; |
| U_QUAD_T fr_bytes; |
| union { |
| #ifdef __NetBSD__ |
| timeval_l_t frp_lastpkt; |
| #else |
| struct timeval frp_lastpkt; |
| #endif |
| } fr_lpu; |
| int fr_curpps; |
| |
| union { |
| void *fru_data; |
| caddr_t fru_caddr; |
| fripf_t *fru_ipf; |
| frentfunc_t fru_func; |
| } fr_dun; |
| /* |
| * Fields after this may not change whilst in the kernel. |
| */ |
| ipfunc_t fr_func; |
| int fr_dsize; |
| int fr_pps; |
| int fr_statemax; |
| int fr_flineno; |
| u_32_t fr_type; |
| u_32_t fr_flags; |
| u_32_t fr_logtag; |
| u_32_t fr_collect; |
| u_int fr_arg; |
| u_int fr_loglevel; |
| u_int fr_age[2]; |
| u_char fr_v; |
| u_char fr_icode; |
| char fr_group[FR_GROUPLEN]; |
| char fr_grhead[FR_GROUPLEN]; |
| ipftag_t fr_nattag; |
| char fr_ifnames[4][LIFNAMSIZ]; |
| char fr_isctag[16]; |
| frdest_t fr_tifs[2]; |
| frdest_t fr_dif; |
| u_int fr_cksum; |
| } frentry_4_1_0_t; |
| |
| /* ------------------------------------------------------------------------ */ |
| |
| /* |
| * 4.1.32 removed both fin_state and fin_nat, added fin_pktnum (current) |
| * 4.1.24 added fin_cksum |
| * 4.1.23 added fin_exthdr |
| * 4.1.11 added fin_ifname |
| * 4.1.4 added fin_hbuf |
| */ |
| typedef struct fr_info_4_1_24 { |
| void *fin_ifp; |
| fr_ip_t fin_fi; |
| union { |
| u_short fid_16[2]; |
| u_32_t fid_32; |
| } fin_dat; |
| int fin_out; |
| int fin_rev; |
| u_short fin_hlen; |
| u_char fin_tcpf; |
| u_char fin_icode; |
| u_32_t fin_rule; |
| char fin_group[FR_GROUPLEN]; |
| struct frentry *fin_fr; |
| void *fin_dp; |
| int fin_dlen; |
| int fin_plen; |
| int fin_ipoff; |
| u_short fin_id; |
| u_short fin_off; |
| int fin_depth; |
| int fin_error; |
| int fin_cksum; |
| void *fin_state; |
| void *fin_nat; |
| void *fin_nattag; |
| void *fin_exthdr; |
| ip_t *fin_ip; |
| mb_t **fin_mp; |
| mb_t *fin_m; |
| #ifdef MENTAT |
| mb_t *fin_qfm; |
| void *fin_qpi; |
| char fin_ifname[LIFNAMSIZ]; |
| #endif |
| #ifdef __sgi |
| void *fin_hbuf; |
| #endif |
| } fr_info_4_1_24_t; |
| |
| typedef struct fr_info_4_1_23 { |
| void *fin_ifp; |
| fr_ip_t fin_fi; |
| union { |
| u_short fid_16[2]; |
| u_32_t fid_32; |
| } fin_dat; |
| int fin_out; |
| int fin_rev; |
| u_short fin_hlen; |
| u_char fin_tcpf; |
| u_char fin_icode; |
| u_32_t fin_rule; |
| char fin_group[FR_GROUPLEN]; |
| struct frentry *fin_fr; |
| void *fin_dp; |
| int fin_dlen; |
| int fin_plen; |
| int fin_ipoff; |
| u_short fin_id; |
| u_short fin_off; |
| int fin_depth; |
| int fin_error; |
| void *fin_state; |
| void *fin_nat; |
| void *fin_nattag; |
| void *fin_exthdr; |
| ip_t *fin_ip; |
| mb_t **fin_mp; |
| mb_t *fin_m; |
| #ifdef MENTAT |
| mb_t *fin_qfm; |
| void *fin_qpi; |
| char fin_ifname[LIFNAMSIZ]; |
| #endif |
| #ifdef __sgi |
| void *fin_hbuf; |
| #endif |
| } fr_info_4_1_23_t; |
| |
| typedef struct fr_info_4_1_11 { |
| void *fin_ifp; |
| fr_ip_t fin_fi; |
| union { |
| u_short fid_16[2]; |
| u_32_t fid_32; |
| } fin_dat; |
| int fin_out; |
| int fin_rev; |
| u_short fin_hlen; |
| u_char fin_tcpf; |
| u_char fin_icode; |
| u_32_t fin_rule; |
| char fin_group[FR_GROUPLEN]; |
| struct frentry *fin_fr; |
| void *fin_dp; |
| int fin_dlen; |
| int fin_plen; |
| int fin_ipoff; |
| u_short fin_id; |
| u_short fin_off; |
| int fin_depth; |
| int fin_error; |
| void *fin_state; |
| void *fin_nat; |
| void *fin_nattag; |
| ip_t *fin_ip; |
| mb_t **fin_mp; |
| mb_t *fin_m; |
| #ifdef MENTAT |
| mb_t *fin_qfm; |
| void *fin_qpi; |
| char fin_ifname[LIFNAMSIZ]; |
| #endif |
| #ifdef __sgi |
| void *fin_hbuf; |
| #endif |
| } fr_info_4_1_11_t; |
| |
| /* ------------------------------------------------------------------------ */ |
| |
| /* |
| * 4.1.33 changed the size of f_locks from IPL_LOGMAX to IPL_LOGSIZE (current) |
| */ |
| |
| typedef struct friostat_4_1_0 { |
| struct filterstats f_st[2]; |
| struct frentry *f_ipf[2][2]; |
| struct frentry *f_acct[2][2]; |
| struct frentry *f_ipf6[2][2]; |
| struct frentry *f_acct6[2][2]; |
| struct frentry *f_auth; |
| struct frgroup *f_groups[IPL_LOGSIZE][2]; |
| u_long f_froute[2]; |
| u_long f_ticks; |
| int f_locks[IPL_LOGMAX]; |
| size_t f_kmutex_sz; |
| size_t f_krwlock_sz; |
| int f_defpass; |
| int f_active; |
| int f_running; |
| int f_logging; |
| int f_features; |
| char f_version[32]; |
| } friostat_4_1_0_t; |
| |
| /* |
| * 4.1.14 added in_lock (current) |
| */ |
| typedef struct ipnat_4_1_0 { |
| struct ipnat *in_next; |
| struct ipnat *in_rnext; |
| struct ipnat **in_prnext; |
| struct ipnat *in_mnext; |
| struct ipnat **in_pmnext; |
| struct ipftq *in_tqehead[2]; |
| void *in_ifps[2]; |
| void *in_apr; |
| char *in_comment; |
| i6addr_t in_next6; |
| u_long in_space; |
| u_long in_hits; |
| u_int in_use; |
| u_int in_hv; |
| int in_flineno; |
| u_short in_pnext; |
| u_char in_v; |
| u_char in_xxx; |
| u_32_t in_flags; |
| u_32_t in_mssclamp; |
| u_int in_age[2]; |
| int in_redir; |
| int in_p; |
| i6addr_t in_in[2]; |
| i6addr_t in_out[2]; |
| i6addr_t in_src[2]; |
| frtuc_t in_tuc; |
| u_short in_port[2]; |
| u_short in_ppip; |
| u_short in_ippip; |
| char in_ifnames[2][LIFNAMSIZ]; |
| char in_plabel[APR_LABELLEN]; |
| ipftag_t in_tag; |
| } ipnat_4_1_0_t; |
| |
| /* ------------------------------------------------------------------------ */ |
| |
| /* |
| * 4.1.25 added nat_seqnext (current) |
| * 4.1.14 added nat_redir |
| * 4.1.3 moved nat_rev |
| * 4.1.2 added nat_rev |
| */ |
| typedef struct nat_4_1_14 { |
| ipfmutex_t nat_lock; |
| struct nat *nat_next; |
| struct nat **nat_pnext; |
| struct nat *nat_hnext[2]; |
| struct nat **nat_phnext[2]; |
| struct hostmap *nat_hm; |
| void *nat_data; |
| struct nat **nat_me; |
| struct ipstate *nat_state; |
| struct ap_session *nat_aps; |
| frentry_t *nat_fr; |
| struct ipnat *nat_ptr; |
| void *nat_ifps[2]; |
| void *nat_sync; |
| ipftqent_t nat_tqe; |
| u_32_t nat_flags; |
| u_32_t nat_sumd[2]; |
| u_32_t nat_ipsumd; |
| u_32_t nat_mssclamp; |
| i6addr_t nat_inip6; |
| i6addr_t nat_outip6; |
| i6addr_t nat_oip6; |
| U_QUAD_T nat_pkts[2]; |
| U_QUAD_T nat_bytes[2]; |
| union { |
| udpinfo_t nat_unu; |
| tcpinfo_t nat_unt; |
| icmpinfo_t nat_uni; |
| greinfo_t nat_ugre; |
| } nat_un; |
| u_short nat_oport; |
| u_short nat_use; |
| u_char nat_p; |
| int nat_dir; |
| int nat_ref; |
| int nat_hv[2]; |
| char nat_ifnames[2][LIFNAMSIZ]; |
| int nat_rev; |
| int nat_redir; |
| } nat_4_1_14_t; |
| |
| typedef struct nat_4_1_3 { |
| ipfmutex_t nat_lock; |
| struct nat *nat_next; |
| struct nat **nat_pnext; |
| struct nat *nat_hnext[2]; |
| struct nat **nat_phnext[2]; |
| struct hostmap *nat_hm; |
| void *nat_data; |
| struct nat **nat_me; |
| struct ipstate *nat_state; |
| struct ap_session *nat_aps; |
| frentry_t *nat_fr; |
| struct ipnat *nat_ptr; |
| void *nat_ifps[2]; |
| void *nat_sync; |
| ipftqent_t nat_tqe; |
| u_32_t nat_flags; |
| u_32_t nat_sumd[2]; |
| u_32_t nat_ipsumd; |
| u_32_t nat_mssclamp; |
| i6addr_t nat_inip6; |
| i6addr_t nat_outip6; |
| i6addr_t nat_oip6; |
| U_QUAD_T nat_pkts[2]; |
| U_QUAD_T nat_bytes[2]; |
| union { |
| udpinfo_t nat_unu; |
| tcpinfo_t nat_unt; |
| icmpinfo_t nat_uni; |
| greinfo_t nat_ugre; |
| } nat_un; |
| u_short nat_oport; |
| u_short nat_use; |
| u_char nat_p; |
| int nat_dir; |
| int nat_ref; |
| int nat_hv[2]; |
| char nat_ifnames[2][LIFNAMSIZ]; |
| int nat_rev; |
| } nat_4_1_3_t; |
| |
| |
| typedef struct nat_save_4_1_16 { |
| void *ipn_next; |
| nat_4_1_14_t ipn_nat; |
| ipnat_t ipn_ipnat; |
| frentry_4_1_16_t ipn_fr; |
| int ipn_dsize; |
| char ipn_data[4]; |
| } nat_save_4_1_16_t; |
| |
| typedef struct nat_save_4_1_14 { |
| void *ipn_next; |
| nat_4_1_14_t ipn_nat; |
| ipnat_t ipn_ipnat; |
| frentry_4_1_0_t ipn_fr; |
| int ipn_dsize; |
| char ipn_data[4]; |
| } nat_save_4_1_14_t; |
| |
| typedef struct nat_save_4_1_3 { |
| void *ipn_next; |
| nat_4_1_3_t ipn_nat; |
| ipnat_4_1_0_t ipn_ipnat; |
| frentry_4_1_0_t ipn_fr; |
| int ipn_dsize; |
| char ipn_data[4]; |
| } nat_save_4_1_3_t; |
| |
| /* ------------------------------------------------------------------------ */ |
| |
| /* |
| * 4.1.32 added ns_uncreate (current) |
| * 4.1.27 added ns_orphans |
| * 4.1.16 added ns_ticks |
| */ |
| typedef struct natstat_4_1_27 { |
| u_long ns_mapped[2]; |
| u_long ns_rules; |
| u_long ns_added; |
| u_long ns_expire; |
| u_long ns_inuse; |
| u_long ns_logged; |
| u_long ns_logfail; |
| u_long ns_memfail; |
| u_long ns_badnat; |
| u_long ns_addtrpnt; |
| nat_t **ns_table[2]; |
| hostmap_t **ns_maptable; |
| ipnat_t *ns_list; |
| void *ns_apslist; |
| u_int ns_wilds; |
| u_int ns_nattab_sz; |
| u_int ns_nattab_max; |
| u_int ns_rultab_sz; |
| u_int ns_rdrtab_sz; |
| u_int ns_trpntab_sz; |
| u_int ns_hostmap_sz; |
| nat_t *ns_instances; |
| hostmap_t *ns_maplist; |
| u_long *ns_bucketlen[2]; |
| u_long ns_ticks; |
| u_int ns_orphans; |
| } natstat_4_1_27_t; |
| |
| typedef struct natstat_4_1_16 { |
| u_long ns_mapped[2]; |
| u_long ns_rules; |
| u_long ns_added; |
| u_long ns_expire; |
| u_long ns_inuse; |
| u_long ns_logged; |
| u_long ns_logfail; |
| u_long ns_memfail; |
| u_long ns_badnat; |
| u_long ns_addtrpnt; |
| nat_t **ns_table[2]; |
| hostmap_t **ns_maptable; |
| ipnat_t *ns_list; |
| void *ns_apslist; |
| u_int ns_wilds; |
| u_int ns_nattab_sz; |
| u_int ns_nattab_max; |
| u_int ns_rultab_sz; |
| u_int ns_rdrtab_sz; |
| u_int ns_trpntab_sz; |
| u_int ns_hostmap_sz; |
| nat_t *ns_instances; |
| hostmap_t *ns_maplist; |
| u_long *ns_bucketlen[2]; |
| u_long ns_ticks; |
| } natstat_4_1_16_t; |
| |
| typedef struct natstat_4_1_0 { |
| u_long ns_mapped[2]; |
| u_long ns_rules; |
| u_long ns_added; |
| u_long ns_expire; |
| u_long ns_inuse; |
| u_long ns_logged; |
| u_long ns_logfail; |
| u_long ns_memfail; |
| u_long ns_badnat; |
| u_long ns_addtrpnt; |
| nat_t **ns_table[2]; |
| hostmap_t **ns_maptable; |
| ipnat_t *ns_list; |
| void *ns_apslist; |
| u_int ns_wilds; |
| u_int ns_nattab_sz; |
| u_int ns_nattab_max; |
| u_int ns_rultab_sz; |
| u_int ns_rdrtab_sz; |
| u_int ns_trpntab_sz; |
| u_int ns_hostmap_sz; |
| nat_t *ns_instances; |
| hostmap_t *ns_maplist; |
| u_long *ns_bucketlen[2]; |
| } natstat_4_1_0_t; |
| |
| /* ------------------------------------------------------------------------ */ |
| |
| /* |
| * 4.1.32 fra_info:removed both fin_state & fin_nat, added fin_pktnum (current) |
| * 4.1.29 added fra_flx |
| * 4.1.24 fra_info:added fin_cksum |
| * 4.1.23 fra_info:added fin_exthdr |
| * 4.1.11 fra_info:added fin_ifname |
| * 4.1.4 fra_info:added fin_hbuf |
| */ |
| typedef struct frauth_4_1_29 { |
| int fra_age; |
| int fra_len; |
| int fra_index; |
| u_32_t fra_pass; |
| fr_info_4_1_24_t fra_info; |
| char *fra_buf; |
| u_32_t fra_flx; |
| #ifdef MENTAT |
| queue_t *fra_q; |
| mb_t *fra_m; |
| #endif |
| } frauth_4_1_29_t; |
| |
| typedef struct frauth_4_1_24 { |
| int fra_age; |
| int fra_len; |
| int fra_index; |
| u_32_t fra_pass; |
| fr_info_4_1_24_t fra_info; |
| char *fra_buf; |
| #ifdef MENTAT |
| queue_t *fra_q; |
| mb_t *fra_m; |
| #endif |
| } frauth_4_1_24_t; |
| |
| typedef struct frauth_4_1_23 { |
| int fra_age; |
| int fra_len; |
| int fra_index; |
| u_32_t fra_pass; |
| fr_info_4_1_23_t fra_info; |
| char *fra_buf; |
| #ifdef MENTAT |
| queue_t *fra_q; |
| mb_t *fra_m; |
| #endif |
| } frauth_4_1_23_t; |
| |
| typedef struct frauth_4_1_11 { |
| int fra_age; |
| int fra_len; |
| int fra_index; |
| u_32_t fra_pass; |
| fr_info_4_1_11_t fra_info; |
| char *fra_buf; |
| #ifdef MENTAT |
| queue_t *fra_q; |
| mb_t *fra_m; |
| #endif |
| } frauth_4_1_11_t; |
| |
| /* ------------------------------------------------------------------------ */ |
| |
| /* |
| * 4.1.16 removed is_nat (current) |
| */ |
| typedef struct ipstate_4_1_0 { |
| ipfmutex_t is_lock; |
| struct ipstate *is_next; |
| struct ipstate **is_pnext; |
| struct ipstate *is_hnext; |
| struct ipstate **is_phnext; |
| struct ipstate **is_me; |
| void *is_ifp[4]; |
| void *is_sync; |
| void *is_nat[2]; |
| frentry_t *is_rule; |
| struct ipftq *is_tqehead[2]; |
| struct ipscan *is_isc; |
| U_QUAD_T is_pkts[4]; |
| U_QUAD_T is_bytes[4]; |
| U_QUAD_T is_icmppkts[4]; |
| struct ipftqent is_sti; |
| u_int is_frage[2]; |
| int is_ref; |
| int is_isninc[2]; |
| u_short is_sumd[2]; |
| i6addr_t is_src; |
| i6addr_t is_dst; |
| u_int is_pass; |
| u_char is_p; |
| u_char is_v; |
| u_32_t is_hv; |
| u_32_t is_tag; |
| u_32_t is_opt[2]; |
| u_32_t is_optmsk[2]; |
| u_short is_sec; |
| u_short is_secmsk; |
| u_short is_auth; |
| u_short is_authmsk; |
| union { |
| icmpinfo_t is_ics; |
| tcpinfo_t is_ts; |
| udpinfo_t is_us; |
| greinfo_t is_ug; |
| } is_ps; |
| u_32_t is_flags; |
| int is_flx[2][2]; |
| u_32_t is_rulen; |
| u_32_t is_s0[2]; |
| u_short is_smsk[2]; |
| char is_group[FR_GROUPLEN]; |
| char is_sbuf[2][16]; |
| char is_ifname[4][LIFNAMSIZ]; |
| } ipstate_4_1_0_t; |
| |
| typedef struct ipstate_save_4_1_16 { |
| void *ips_next; |
| ipstate_4_1_0_t ips_is; |
| frentry_4_1_16_t ips_fr; |
| } ipstate_save_4_1_16_t; |
| |
| typedef struct ipstate_save_4_1_0 { |
| void *ips_next; |
| ipstate_4_1_0_t ips_is; |
| frentry_4_1_0_t ips_fr; |
| } ipstate_save_4_1_0_t; |
| |
| /* ------------------------------------------------------------------------ */ |
| |
| /* |
| * 4.1.21 added iss_tcptab (current) |
| */ |
| typedef struct ips_stat_4_1_0 { |
| u_long iss_hits; |
| u_long iss_miss; |
| u_long iss_max; |
| u_long iss_maxref; |
| u_long iss_tcp; |
| u_long iss_udp; |
| u_long iss_icmp; |
| u_long iss_nomem; |
| u_long iss_expire; |
| u_long iss_fin; |
| u_long iss_active; |
| u_long iss_logged; |
| u_long iss_logfail; |
| u_long iss_inuse; |
| u_long iss_wild; |
| u_long iss_killed; |
| u_long iss_ticks; |
| u_long iss_bucketfull; |
| int iss_statesize; |
| int iss_statemax; |
| ipstate_t **iss_table; |
| ipstate_t *iss_list; |
| u_long *iss_bucketlen; |
| } ips_stat_4_1_0_t; |
| |
| /* ------------------------------------------------------------------------ */ |
| |
| static void friostat_current_to_0 __P((void *, friostat_4_1_0_t *, int)); |
| static void ipstate_current_to_0 __P((void *, ipstate_4_1_0_t *)); |
| static void ipnat_current_to_0 __P((void *, ipnat_4_1_0_t *)); |
| static void frauth_current_to_11 __P((void *, frauth_4_1_11_t *)); |
| static void frauth_current_to_23 __P((void *, frauth_4_1_23_t *)); |
| static void frauth_current_to_24 __P((void *, frauth_4_1_24_t *)); |
| static void frauth_current_to_29 __P((void *, frauth_4_1_29_t *)); |
| static void frentry_current_to_0 __P((void *, frentry_4_1_0_t *)); |
| static void frentry_current_to_16 __P((void *, frentry_4_1_16_t *)); |
| static void fr_info_current_to_11 __P((void *, fr_info_4_1_11_t *)); |
| static void fr_info_current_to_23 __P((void *, fr_info_4_1_23_t *)); |
| static void fr_info_current_to_24 __P((void *, fr_info_4_1_24_t *)); |
| static void nat_save_current_to_3 __P((void *, nat_save_4_1_3_t *)); |
| static void nat_save_current_to_14 __P((void *, nat_save_4_1_14_t *)); |
| static void nat_save_current_to_16 __P((void *, nat_save_4_1_16_t *)); |
| |
| static void ipstate_save_current_to_0 __P((void *, ipstate_save_4_1_0_t *)); |
| static void ipstate_save_current_to_16 __P((void *, ipstate_save_4_1_16_t *)); |
| |
| static void friostat_0_to_current __P((friostat_4_1_0_t *, void *)); |
| static void ipnat_0_to_current __P((ipnat_4_1_0_t *, void *)); |
| static void frauth_11_to_current __P((frauth_4_1_11_t *, void *)); |
| static void frauth_23_to_current __P((frauth_4_1_23_t *, void *)); |
| static void frauth_24_to_current __P((frauth_4_1_24_t *, void *)); |
| static void frauth_29_to_current __P((frauth_4_1_29_t *, void *)); |
| static void frentry_0_to_current __P((frentry_4_1_0_t *, void *)); |
| static void frentry_16_to_current __P((frentry_4_1_16_t *, void *)); |
| static void fr_info_11_to_current __P((fr_info_4_1_11_t *, void *)); |
| static void fr_info_23_to_current __P((fr_info_4_1_23_t *, void *)); |
| static void fr_info_24_to_current __P((fr_info_4_1_24_t *, void *)); |
| static void nat_save_3_to_current __P((nat_save_4_1_3_t *, void *)); |
| static void nat_save_14_to_current __P((nat_save_4_1_14_t *, void *)); |
| static void nat_save_16_to_current __P((nat_save_4_1_16_t *, void *)); |
| |
| |
| /* ------------------------------------------------------------------------ */ |
| |
| int fr_in_compat(obj, ptr) |
| ipfobj_t *obj; |
| void *ptr; |
| { |
| int error; |
| int sz; |
| |
| error = EINVAL; |
| |
| switch (obj->ipfo_type) |
| { |
| default : |
| break; |
| |
| case IPFOBJ_FRENTRY : |
| if (obj->ipfo_rev >= 4011600) { |
| frentry_4_1_16_t *old; |
| |
| KMALLOC(old, frentry_4_1_16_t *); |
| if (old == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| error = COPYIN(obj->ipfo_ptr, old, sizeof(*old)); |
| if (error == 0) |
| frentry_16_to_current(old, ptr); |
| } else { |
| frentry_4_1_0_t *old; |
| |
| KMALLOC(old, frentry_4_1_0_t *); |
| if (old == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| error = COPYIN(obj->ipfo_ptr, old, sizeof(*old)); |
| if (error == 0) |
| frentry_0_to_current(old, ptr); |
| KFREE(old); |
| } |
| break; |
| |
| case IPFOBJ_IPFSTAT : |
| { |
| friostat_4_1_0_t *old; |
| |
| KMALLOC(old, friostat_4_1_0_t *); |
| if (old == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| error = COPYIN(obj->ipfo_ptr, old, sizeof(*old)); |
| if (error == 0) |
| friostat_0_to_current(old, ptr); |
| break; |
| } |
| |
| case IPFOBJ_IPFINFO : /* unused */ |
| break; |
| |
| case IPFOBJ_IPNAT : |
| { |
| ipnat_4_1_0_t *old; |
| |
| KMALLOC(old, ipnat_4_1_0_t *); |
| if (old == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| error = COPYIN(obj->ipfo_ptr, old, sizeof(*old)); |
| if (error == 0) |
| ipnat_0_to_current(old, ptr); |
| KFREE(old); |
| break; |
| } |
| |
| case IPFOBJ_NATSTAT : |
| /* |
| * Statistics are not copied in. |
| */ |
| break; |
| |
| case IPFOBJ_NATSAVE : |
| if (obj->ipfo_rev >= 4011600) { |
| nat_save_4_1_16_t *old16; |
| |
| KMALLOC(old16, nat_save_4_1_16_t *); |
| if (old16 == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| error = COPYIN(obj->ipfo_ptr, old16, sizeof(*old16)); |
| if (error == 0) |
| nat_save_16_to_current(old16, ptr); |
| KFREE(old16); |
| } else if (obj->ipfo_rev >= 4011400) { |
| nat_save_4_1_14_t *old14; |
| |
| KMALLOC(old14, nat_save_4_1_14_t *); |
| if (old14 == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| error = COPYIN(obj->ipfo_ptr, old14, sizeof(*old14)); |
| if (error == 0) |
| nat_save_14_to_current(old14, ptr); |
| KFREE(old14); |
| } else if (obj->ipfo_rev >= 4010300) { |
| nat_save_4_1_3_t *old3; |
| |
| KMALLOC(old3, nat_save_4_1_3_t *); |
| if (old3 == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| error = COPYIN(obj->ipfo_ptr, old3, sizeof(*old3)); |
| if (error == 0) |
| nat_save_3_to_current(old3, ptr); |
| KFREE(old3); |
| } |
| break; |
| |
| case IPFOBJ_STATESAVE : |
| if (obj->ipfo_rev >= 4011600) { |
| ipstate_save_4_1_16_t *old; |
| |
| KMALLOC(old, ipstate_save_4_1_16_t *); |
| if (old == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| error = COPYIN(obj->ipfo_ptr, old, sizeof(*old)); |
| if (error == 0) |
| /* ipstate_save_16_to_current(&old, ptr); */ |
| ; |
| KFREE(old); |
| } else { |
| ipstate_save_4_1_0_t *old; |
| |
| KMALLOC(old, ipstate_save_4_1_0_t *); |
| if (old == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| error = COPYIN(obj->ipfo_ptr, old, sizeof(*old)); |
| if (error == 0) |
| /* ipstate_save_0_to_current(&old, ptr); */ |
| ; |
| KFREE(old); |
| } |
| break; |
| |
| case IPFOBJ_IPSTATE : |
| /* |
| * This structure is not copied in by itself. |
| */ |
| break; |
| |
| case IPFOBJ_STATESTAT : |
| /* |
| * Statistics are not copied in. |
| */ |
| break; |
| |
| case IPFOBJ_FRAUTH : |
| if (obj->ipfo_rev >= 4012900) { |
| frauth_4_1_29_t *old29; |
| |
| KMALLOC(old29, frauth_4_1_29_t *); |
| if (old29 == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| error = COPYIN(obj->ipfo_ptr, old29, sizeof(*old29)); |
| if (error == 0) |
| frauth_29_to_current(old29, ptr); |
| KFREE(old29); |
| } else if (obj->ipfo_rev >= 4012400) { |
| frauth_4_1_24_t *old24; |
| |
| KMALLOC(old24, frauth_4_1_24_t *); |
| if (old24 == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| error = COPYIN(obj->ipfo_ptr, old24, sizeof(*old24)); |
| if (error == 0) |
| frauth_24_to_current(old24, ptr); |
| KFREE(old24); |
| } else if (obj->ipfo_rev >= 4012300) { |
| frauth_4_1_23_t *old23; |
| |
| KMALLOC(old23, frauth_4_1_23_t *); |
| if (old23 == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| error = COPYIN(obj->ipfo_ptr, old23, sizeof(*old23)); |
| if (error == 0) |
| frauth_23_to_current(old23, ptr); |
| KFREE(old23); |
| } else if (obj->ipfo_rev >= 4011100) { |
| frauth_4_1_11_t *old11; |
| |
| KMALLOC(old11, frauth_4_1_11_t *); |
| if (old11 == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| error = COPYIN(obj->ipfo_ptr, old11, sizeof(*old11)); |
| if (error == 0) |
| frauth_11_to_current(old11, ptr); |
| KFREE(old11); |
| } |
| break; |
| |
| case IPFOBJ_NAT : |
| if (obj->ipfo_rev >= 4011400) { |
| sz = sizeof(nat_4_1_14_t); |
| } else if (obj->ipfo_rev >= 4010300) { |
| sz = sizeof(nat_4_1_3_t); |
| } else { |
| break; |
| } |
| bzero(ptr, sizeof(nat_t)); |
| error = COPYIN(obj->ipfo_ptr, ptr, sz); |
| break; |
| } |
| |
| return error; |
| } |
| |
| |
| static void frentry_16_to_current(old, current) |
| frentry_4_1_16_t *old; |
| void *current; |
| { |
| frentry_t *fr = (frentry_t *)current; |
| |
| fr->fr_lock = old->fr_lock; |
| fr->fr_next = old->fr_next; |
| fr->fr_grp = old->fr_grp; |
| fr->fr_isc = old->fr_isc; |
| fr->fr_ifas[0] = old->fr_ifas[0]; |
| fr->fr_ifas[1] = old->fr_ifas[1]; |
| fr->fr_ifas[2] = old->fr_ifas[2]; |
| fr->fr_ifas[3] = old->fr_ifas[3]; |
| fr->fr_ptr = old->fr_ptr; |
| fr->fr_comment = old->fr_comment; |
| fr->fr_ref = old->fr_ref; |
| fr->fr_statecnt = old->fr_statecnt; |
| fr->fr_hits = old->fr_hits; |
| fr->fr_bytes = old->fr_bytes; |
| fr->fr_lastpkt.tv_sec = old->fr_lastpkt.tv_sec; |
| fr->fr_lastpkt.tv_usec = old->fr_lastpkt.tv_usec; |
| fr->fr_curpps = old->fr_curpps; |
| bcopy(&old->fr_dun, &fr->fr_dun, sizeof(old->fr_dun)); |
| fr->fr_func = old->fr_func; |
| fr->fr_dsize = old->fr_dsize; |
| fr->fr_pps = old->fr_pps; |
| fr->fr_statemax = old->fr_statemax; |
| fr->fr_flineno = old->fr_flineno; |
| fr->fr_type = old->fr_type; |
| fr->fr_flags = old->fr_flags; |
| fr->fr_logtag = old->fr_logtag; |
| fr->fr_collect = old->fr_collect; |
| fr->fr_arg = old->fr_arg; |
| fr->fr_loglevel = old->fr_loglevel; |
| fr->fr_age[0] = old->fr_age[0]; |
| fr->fr_age[1] = old->fr_age[1]; |
| fr->fr_v = old->fr_v; |
| fr->fr_icode = old->fr_icode; |
| bcopy(&old->fr_group, &fr->fr_group, sizeof(old->fr_group)); |
| bcopy(&old->fr_grhead, &fr->fr_grhead, sizeof(old->fr_grhead)); |
| bcopy(&old->fr_nattag, &fr->fr_nattag, sizeof(old->fr_nattag)); |
| bcopy(&old->fr_ifnames, &fr->fr_ifnames, sizeof(old->fr_ifnames)); |
| bcopy(&old->fr_isctag, &fr->fr_isctag, sizeof(old->fr_isctag)); |
| bcopy(&old->fr_tifs, &fr->fr_tifs, sizeof(old->fr_tifs)); |
| bcopy(&old->fr_dif, &fr->fr_dif, sizeof(old->fr_dif)); |
| fr->fr_cksum = old->fr_cksum; |
| } |
| |
| |
| static void frentry_0_to_current(old, current) |
| frentry_4_1_0_t *old; |
| void *current; |
| { |
| frentry_t *fr = (frentry_t *)current; |
| |
| fr->fr_lock = old->fr_lock; |
| fr->fr_next = old->fr_next; |
| fr->fr_grp = old->fr_grp; |
| fr->fr_isc = old->fr_isc; |
| fr->fr_ifas[0] = old->fr_ifas[0]; |
| fr->fr_ifas[1] = old->fr_ifas[1]; |
| fr->fr_ifas[2] = old->fr_ifas[2]; |
| fr->fr_ifas[3] = old->fr_ifas[3]; |
| fr->fr_ptr = old->fr_ptr; |
| fr->fr_comment = old->fr_comment; |
| fr->fr_ref = old->fr_ref; |
| fr->fr_statecnt = old->fr_statecnt; |
| fr->fr_hits = old->fr_hits; |
| fr->fr_bytes = old->fr_bytes; |
| fr->fr_lastpkt.tv_sec = old->fr_lastpkt.tv_sec; |
| fr->fr_lastpkt.tv_usec = old->fr_lastpkt.tv_usec; |
| fr->fr_curpps = old->fr_curpps; |
| bcopy(&old->fr_dun, &fr->fr_dun, sizeof(old->fr_dun)); |
| fr->fr_func = old->fr_func; |
| fr->fr_dsize = old->fr_dsize; |
| fr->fr_pps = old->fr_pps; |
| fr->fr_statemax = old->fr_statemax; |
| fr->fr_flineno = old->fr_flineno; |
| fr->fr_type = old->fr_type; |
| fr->fr_flags = old->fr_flags; |
| fr->fr_logtag = old->fr_logtag; |
| fr->fr_collect = old->fr_collect; |
| fr->fr_arg = old->fr_arg; |
| fr->fr_loglevel = old->fr_loglevel; |
| fr->fr_age[0] = old->fr_age[0]; |
| fr->fr_age[1] = old->fr_age[1]; |
| fr->fr_v = old->fr_v; |
| fr->fr_icode = old->fr_icode; |
| bcopy(&old->fr_group, &fr->fr_group, sizeof(old->fr_group)); |
| bcopy(&old->fr_grhead, &fr->fr_grhead, sizeof(old->fr_grhead)); |
| bcopy(&old->fr_nattag, &fr->fr_nattag, sizeof(old->fr_nattag)); |
| bcopy(&old->fr_ifnames, &fr->fr_ifnames, sizeof(old->fr_ifnames)); |
| bcopy(&old->fr_isctag, &fr->fr_isctag, sizeof(old->fr_isctag)); |
| bcopy(&old->fr_tifs, &fr->fr_tifs, sizeof(old->fr_tifs)); |
| bcopy(&old->fr_dif, &fr->fr_dif, sizeof(old->fr_dif)); |
| fr->fr_cksum = old->fr_cksum; |
| } |
| |
| |
| static void friostat_0_to_current(old, current) |
| friostat_4_1_0_t *old; |
| void *current; |
| { |
| friostat_t *fiop = (friostat_t *)current; |
| |
| bcopy(&old->f_st, &fiop->f_st, sizeof(old->f_st)); |
| fiop->f_ipf[0][0] = old->f_ipf[0][0]; |
| fiop->f_ipf[0][1] = old->f_ipf[0][1]; |
| fiop->f_ipf[1][0] = old->f_ipf[1][0]; |
| fiop->f_ipf[1][1] = old->f_ipf[1][1]; |
| fiop->f_acct[0][0] = old->f_acct[0][0]; |
| fiop->f_acct[0][1] = old->f_acct[0][1]; |
| fiop->f_acct[1][0] = old->f_acct[1][0]; |
| fiop->f_acct[1][1] = old->f_acct[1][1]; |
| fiop->f_ipf6[0][0] = old->f_ipf6[0][0]; |
| fiop->f_ipf6[0][1] = old->f_ipf6[0][1]; |
| fiop->f_ipf6[1][0] = old->f_ipf6[1][0]; |
| fiop->f_ipf6[1][1] = old->f_ipf6[1][1]; |
| fiop->f_acct6[0][0] = old->f_acct6[0][0]; |
| fiop->f_acct6[0][1] = old->f_acct6[0][1]; |
| fiop->f_acct6[1][0] = old->f_acct6[1][0]; |
| fiop->f_acct6[1][1] = old->f_acct6[1][1]; |
| fiop->f_auth = fiop->f_auth; |
| bcopy(&old->f_groups, &fiop->f_groups, sizeof(old->f_groups)); |
| bcopy(&old->f_froute, &fiop->f_froute, sizeof(old->f_froute)); |
| fiop->f_ticks = old->f_ticks; |
| bcopy(&old->f_locks, &fiop->f_locks, sizeof(old->f_locks)); |
| fiop->f_kmutex_sz = old->f_kmutex_sz; |
| fiop->f_krwlock_sz = old->f_krwlock_sz; |
| fiop->f_defpass = old->f_defpass; |
| fiop->f_active = old->f_active; |
| fiop->f_running = old->f_running; |
| fiop->f_logging = old->f_logging; |
| fiop->f_features = old->f_features; |
| bcopy(old->f_version, fiop->f_version, sizeof(old->f_version)); |
| } |
| |
| |
| static void ipnat_0_to_current(old, current) |
| ipnat_4_1_0_t *old; |
| void *current; |
| { |
| ipnat_t *np = (ipnat_t *)current; |
| |
| np->in_next = old->in_next; |
| np->in_rnext = old->in_rnext; |
| np->in_prnext = old->in_prnext; |
| np->in_mnext = old->in_mnext; |
| np->in_pmnext = old->in_pmnext; |
| np->in_tqehead[0] = old->in_tqehead[0]; |
| np->in_tqehead[1] = old->in_tqehead[1]; |
| np->in_ifps[0] = old->in_ifps[0]; |
| np->in_ifps[1] = old->in_ifps[1]; |
| np->in_apr = old->in_apr; |
| np->in_comment = old->in_comment; |
| np->in_next6 = old->in_next6; |
| np->in_space = old->in_space; |
| np->in_hits = old->in_hits; |
| np->in_use = old->in_use; |
| np->in_hv = old->in_hv; |
| np->in_flineno = old->in_flineno; |
| np->in_pnext = old->in_pnext; |
| np->in_v = old->in_v; |
| np->in_xxx = old->in_xxx; |
| np->in_flags = old->in_flags; |
| np->in_mssclamp = old->in_mssclamp; |
| bcopy(&old->in_age, &np->in_age, sizeof(np->in_age)); |
| np->in_redir = old->in_redir; |
| np->in_p = old->in_p; |
| bcopy(&old->in_in, &np->in_in, sizeof(np->in_in)); |
| bcopy(&old->in_out, &np->in_out, sizeof(np->in_out)); |
| bcopy(&old->in_src, &np->in_src, sizeof(np->in_src)); |
| bcopy(&old->in_tuc, &np->in_tuc, sizeof(np->in_tuc)); |
| np->in_port[0] = old->in_port[0]; |
| np->in_port[1] = old->in_port[1]; |
| np->in_ppip = old->in_ppip; |
| np->in_ippip = old->in_ippip; |
| bcopy(&old->in_ifnames, &np->in_ifnames, sizeof(np->in_ifnames)); |
| bcopy(&old->in_plabel, &np->in_plabel, sizeof(np->in_plabel)); |
| bcopy(&old->in_tag, &np->in_tag, sizeof(np->in_tag)); |
| } |
| |
| |
| static void frauth_29_to_current(old, current) |
| frauth_4_1_29_t *old; |
| void *current; |
| { |
| frauth_t *fra = (frauth_t *)current; |
| |
| fra->fra_age = old->fra_age; |
| fra->fra_len = old->fra_len; |
| fra->fra_index = old->fra_index; |
| fra->fra_pass = old->fra_pass; |
| fr_info_24_to_current(&old->fra_info, &fra->fra_info); |
| fra->fra_buf = old->fra_buf; |
| fra->fra_flx = old->fra_flx; |
| #ifdef MENTAT |
| fra->fra_q = old->fra_q; |
| fra->fra_m = old->fra_m; |
| #endif |
| } |
| |
| |
| static void frauth_24_to_current(old, current) |
| frauth_4_1_24_t *old; |
| void *current; |
| { |
| frauth_t *fra = (frauth_t *)current; |
| |
| fra->fra_age = old->fra_age; |
| fra->fra_len = old->fra_len; |
| fra->fra_index = old->fra_index; |
| fra->fra_pass = old->fra_pass; |
| fr_info_24_to_current(&old->fra_info, &fra->fra_info); |
| fra->fra_buf = old->fra_buf; |
| #ifdef MENTAT |
| fra->fra_q = old->fra_q; |
| fra->fra_m = old->fra_m; |
| #endif |
| } |
| |
| |
| static void frauth_23_to_current(old, current) |
| frauth_4_1_23_t *old; |
| void *current; |
| { |
| frauth_t *fra = (frauth_t *)current; |
| |
| fra->fra_age = old->fra_age; |
| fra->fra_len = old->fra_len; |
| fra->fra_index = old->fra_index; |
| fra->fra_pass = old->fra_pass; |
| fr_info_23_to_current(&old->fra_info, &fra->fra_info); |
| fra->fra_buf = old->fra_buf; |
| #ifdef MENTAT |
| fra->fra_q = old->fra_q; |
| fra->fra_m = old->fra_m; |
| #endif |
| } |
| |
| |
| static void frauth_11_to_current(old, current) |
| frauth_4_1_11_t *old; |
| void *current; |
| { |
| frauth_t *fra = (frauth_t *)current; |
| |
| fra->fra_age = old->fra_age; |
| fra->fra_len = old->fra_len; |
| fra->fra_index = old->fra_index; |
| fra->fra_pass = old->fra_pass; |
| fr_info_11_to_current(&old->fra_info, &fra->fra_info); |
| fra->fra_buf = old->fra_buf; |
| #ifdef MENTAT |
| fra->fra_q = old->fra_q; |
| fra->fra_m = old->fra_m; |
| #endif |
| } |
| |
| |
| static void fr_info_24_to_current(old, current) |
| fr_info_4_1_24_t *old; |
| void *current; |
| { |
| fr_info_t *fin = (fr_info_t *)current; |
| |
| fin->fin_ifp = old->fin_ifp; |
| fin->fin_fi = old->fin_fi; |
| bcopy(&old->fin_dat, &fin->fin_dat, sizeof(old->fin_dat)); |
| fin->fin_out = old->fin_out; |
| fin->fin_rev = old->fin_rev; |
| fin->fin_hlen = old->fin_hlen; |
| fin->fin_tcpf = old->fin_tcpf; |
| fin->fin_icode = old->fin_icode; |
| fin->fin_rule = old->fin_rule; |
| bcopy(old->fin_group, fin->fin_group, sizeof(old->fin_group)); |
| fin->fin_fr = old->fin_fr; |
| fin->fin_dp = old->fin_dp; |
| fin->fin_dlen = old->fin_dlen; |
| fin->fin_plen = old->fin_plen; |
| fin->fin_ipoff = old->fin_ipoff; |
| fin->fin_id = old->fin_id; |
| fin->fin_off = old->fin_off; |
| fin->fin_depth = old->fin_depth; |
| fin->fin_error = old->fin_error; |
| fin->fin_cksum = old->fin_cksum; |
| fin->fin_nattag = old->fin_nattag; |
| fin->fin_exthdr = old->fin_exthdr; |
| fin->fin_ip = old->fin_ip; |
| fin->fin_mp = old->fin_mp; |
| fin->fin_m = old->fin_m; |
| #ifdef MENTAT |
| fin->fin_qfm = old->fin_qfm; |
| fin->fin_qpi = old->fin_qpi; |
| fin->fin_ifname = old_ifname; |
| #endif |
| #ifdef __sgi |
| fin->fin_hbuf = old->fin_hbuf; |
| #endif |
| } |
| |
| |
| static void fr_info_23_to_current(old, current) |
| fr_info_4_1_23_t *old; |
| void *current; |
| { |
| fr_info_t *fin = (fr_info_t *)current; |
| |
| fin->fin_ifp = old->fin_ifp; |
| fin->fin_fi = old->fin_fi; |
| bcopy(&old->fin_dat, &fin->fin_dat, sizeof(old->fin_dat)); |
| fin->fin_out = old->fin_out; |
| fin->fin_rev = old->fin_rev; |
| fin->fin_hlen = old->fin_hlen; |
| fin->fin_tcpf = old->fin_tcpf; |
| fin->fin_icode = old->fin_icode; |
| fin->fin_rule = old->fin_rule; |
| bcopy(old->fin_group, fin->fin_group, sizeof(old->fin_group)); |
| fin->fin_fr = old->fin_fr; |
| fin->fin_dp = old->fin_dp; |
| fin->fin_dlen = old->fin_dlen; |
| fin->fin_plen = old->fin_plen; |
| fin->fin_ipoff = old->fin_ipoff; |
| fin->fin_id = old->fin_id; |
| fin->fin_off = old->fin_off; |
| fin->fin_depth = old->fin_depth; |
| fin->fin_error = old->fin_error; |
| fin->fin_nattag = old->fin_nattag; |
| fin->fin_exthdr = old->fin_exthdr; |
| fin->fin_ip = old->fin_ip; |
| fin->fin_mp = old->fin_mp; |
| fin->fin_m = old->fin_m; |
| #ifdef MENTAT |
| fin->fin_qfm = old->fin_qfm; |
| fin->fin_qpi = old->fin_qpi; |
| fin->fin_ifname = old_ifname; |
| #endif |
| #ifdef __sgi |
| fin->fin_hbuf = fin->fin_hbuf; |
| #endif |
| } |
| |
| |
| static void fr_info_11_to_current(old, current) |
| fr_info_4_1_11_t *old; |
| void *current; |
| { |
| fr_info_t *fin = (fr_info_t *)current; |
| |
| fin->fin_ifp = old->fin_ifp; |
| fin->fin_fi = old->fin_fi; |
| bcopy(&old->fin_dat, &fin->fin_dat, sizeof(old->fin_dat)); |
| fin->fin_out = old->fin_out; |
| fin->fin_rev = old->fin_rev; |
| fin->fin_hlen = old->fin_hlen; |
| fin->fin_tcpf = old->fin_tcpf; |
| fin->fin_icode = old->fin_icode; |
| fin->fin_rule = old->fin_rule; |
| bcopy(old->fin_group, fin->fin_group, sizeof(old->fin_group)); |
| fin->fin_fr = old->fin_fr; |
| fin->fin_dp = old->fin_dp; |
| fin->fin_dlen = old->fin_dlen; |
| fin->fin_plen = old->fin_plen; |
| fin->fin_ipoff = old->fin_ipoff; |
| fin->fin_id = old->fin_id; |
| fin->fin_off = old->fin_off; |
| fin->fin_depth = old->fin_depth; |
| fin->fin_error = old->fin_error; |
| fin->fin_nattag = old->fin_nattag; |
| fin->fin_ip = old->fin_ip; |
| fin->fin_mp = old->fin_mp; |
| fin->fin_m = old->fin_m; |
| #ifdef MENTAT |
| fin->fin_qfm = old->fin_qfm; |
| fin->fin_qpi = old->fin_qpi; |
| fin->fin_ifname = old_ifname; |
| #endif |
| #ifdef __sgi |
| fin->fin_hbuf = fin->fin_hbuf; |
| #endif |
| } |
| |
| |
| static void nat_3_to_current(nat_4_1_3_t *old, nat_t *current) |
| { |
| bzero((void *)current, sizeof(*current)); |
| bcopy((void *)old, (void *)current, sizeof(*old)); |
| } |
| |
| |
| static void nat_14_to_current(nat_4_1_14_t *old, nat_t *current) |
| { |
| bzero((void *)current, sizeof(*current)); |
| bcopy((void *)old, (void *)current, sizeof(*old)); |
| } |
| |
| |
| static void nat_save_16_to_current(old, current) |
| nat_save_4_1_16_t *old; |
| void *current; |
| { |
| nat_save_t *nats = (nat_save_t *)current; |
| |
| nats->ipn_next = old->ipn_next; |
| nat_14_to_current(&old->ipn_nat, &nats->ipn_nat); |
| bcopy(&old->ipn_ipnat, &nats->ipn_ipnat, sizeof(old->ipn_ipnat)); |
| bcopy(&old->ipn_fr, &nats->ipn_fr, sizeof(old->ipn_fr)); |
| nats->ipn_dsize = old->ipn_dsize; |
| bcopy(old->ipn_data, nats->ipn_data, sizeof(nats->ipn_data)); |
| } |
| |
| |
| static void nat_save_14_to_current(old, current) |
| nat_save_4_1_14_t *old; |
| void *current; |
| { |
| nat_save_t *nats = (nat_save_t *)current; |
| |
| nats->ipn_next = old->ipn_next; |
| nat_14_to_current(&old->ipn_nat, &nats->ipn_nat); |
| bcopy(&old->ipn_ipnat, &nats->ipn_ipnat, sizeof(old->ipn_ipnat)); |
| frentry_0_to_current(&old->ipn_fr, &nats->ipn_fr); |
| nats->ipn_dsize = old->ipn_dsize; |
| bcopy(old->ipn_data, nats->ipn_data, sizeof(nats->ipn_data)); |
| } |
| |
| |
| static void nat_save_3_to_current(old, current) |
| nat_save_4_1_3_t *old; |
| void *current; |
| { |
| nat_save_t *nats = (nat_save_t *)current; |
| |
| nats->ipn_next = old->ipn_next; |
| nat_3_to_current(&old->ipn_nat, &nats->ipn_nat); |
| ipnat_0_to_current(&old->ipn_ipnat, &nats->ipn_ipnat); |
| frentry_0_to_current(&old->ipn_fr, &nats->ipn_fr); |
| nats->ipn_dsize = old->ipn_dsize; |
| bcopy(old->ipn_data, nats->ipn_data, sizeof(nats->ipn_data)); |
| } |
| |
| |
| static void ipstate_save_current_to_16(current, old) |
| void *current; |
| ipstate_save_4_1_16_t *old; |
| { |
| ipstate_save_t *ips = (ipstate_save_t *)current; |
| |
| old->ips_next = ips->ips_next; |
| ipstate_current_to_0(&ips->ips_is, &old->ips_is); |
| frentry_current_to_16(&ips->ips_fr, &old->ips_fr); |
| } |
| |
| |
| static void ipstate_save_current_to_0(current, old) |
| void *current; |
| ipstate_save_4_1_0_t *old; |
| { |
| ipstate_save_t *ips = (ipstate_save_t *)current; |
| |
| old->ips_next = ips->ips_next; |
| ipstate_current_to_0(&ips->ips_is, &old->ips_is); |
| frentry_current_to_0(&ips->ips_fr, &old->ips_fr); |
| } |
| |
| |
| int fr_out_compat(obj, ptr) |
| ipfobj_t *obj; |
| void *ptr; |
| { |
| int error; |
| int sz; |
| |
| error = EINVAL; |
| |
| switch (obj->ipfo_type) |
| { |
| default : |
| break; |
| |
| case IPFOBJ_FRENTRY : |
| if (obj->ipfo_rev >= 4011600) { |
| frentry_4_1_16_t *old; |
| |
| KMALLOC(old, frentry_4_1_16_t *); |
| if (old == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| frentry_current_to_16(ptr, old); |
| error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old)); |
| KFREE(old); |
| obj->ipfo_size = sizeof(*old); |
| } else { |
| frentry_4_1_0_t *old; |
| |
| KMALLOC(old, frentry_4_1_0_t *); |
| if (old == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| frentry_current_to_0(ptr, old); |
| error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old)); |
| KFREE(old); |
| obj->ipfo_size = sizeof(*old); |
| } |
| break; |
| |
| case IPFOBJ_IPFSTAT : |
| { |
| friostat_4_1_0_t *old; |
| |
| KMALLOC(old, friostat_4_1_0_t *); |
| if (old == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| friostat_current_to_0(ptr, old, obj->ipfo_rev); |
| error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old)); |
| KFREE(old); |
| break; |
| } |
| |
| case IPFOBJ_IPFINFO : /* unused */ |
| break; |
| |
| case IPFOBJ_IPNAT : |
| { |
| ipnat_4_1_0_t *old; |
| |
| KMALLOC(old, ipnat_4_1_0_t *); |
| if (old == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| ipnat_current_to_0(ptr, old); |
| error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old)); |
| KFREE(old); |
| break; |
| } |
| |
| case IPFOBJ_NATSTAT : |
| if (obj->ipfo_rev >= 4012700) |
| sz = sizeof(natstat_4_1_27_t); |
| else if (obj->ipfo_rev >= 4011600) |
| sz = sizeof(natstat_4_1_16_t); |
| else |
| sz = sizeof(natstat_4_1_0_t); |
| error = COPYOUT(ptr, obj->ipfo_ptr, sz); |
| break; |
| |
| case IPFOBJ_STATESAVE : |
| if (obj->ipfo_rev >= 4011600) { |
| ipstate_save_4_1_16_t *old; |
| |
| KMALLOC(old, ipstate_save_4_1_16_t *); |
| if (old == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| ipstate_save_current_to_16(ptr, old); |
| error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old)); |
| KFREE(old); |
| } else { |
| ipstate_save_4_1_0_t *old; |
| |
| KMALLOC(old, ipstate_save_4_1_0_t *); |
| if (old == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| ipstate_save_current_to_0(ptr, old); |
| error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old)); |
| KFREE(old); |
| } |
| break; |
| |
| case IPFOBJ_NATSAVE : |
| if (obj->ipfo_rev >= 4011600) { |
| nat_save_4_1_16_t *old16; |
| |
| KMALLOC(old16, nat_save_4_1_16_t *); |
| if (old16 == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| nat_save_current_to_16(ptr, old16); |
| error = COPYOUT(&old16, obj->ipfo_ptr, sizeof(*old16)); |
| KFREE(old16); |
| } else if (obj->ipfo_rev >= 4011400) { |
| nat_save_4_1_14_t *old14; |
| |
| KMALLOC(old14, nat_save_4_1_14_t *); |
| if (old14 == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| nat_save_current_to_14(ptr, old14); |
| error = COPYOUT(&old14, obj->ipfo_ptr, sizeof(*old14)); |
| KFREE(old14); |
| } else if (obj->ipfo_rev >= 4010300) { |
| nat_save_4_1_3_t *old3; |
| |
| KMALLOC(old3, nat_save_4_1_3_t *); |
| if (old3 == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| nat_save_current_to_3(ptr, old3); |
| error = COPYOUT(&old3, obj->ipfo_ptr, sizeof(*old3)); |
| KFREE(old3); |
| } |
| break; |
| |
| case IPFOBJ_IPSTATE : |
| { |
| ipstate_4_1_0_t *old; |
| |
| KMALLOC(old, ipstate_4_1_0_t *); |
| if (old == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| ipstate_current_to_0(ptr, old); |
| error = COPYOUT(old, obj->ipfo_ptr, sizeof(*old)); |
| KFREE(old); |
| break; |
| } |
| |
| case IPFOBJ_STATESTAT : |
| error = COPYOUT(ptr, obj->ipfo_ptr, sizeof(ips_stat_4_1_0_t)); |
| break; |
| |
| case IPFOBJ_FRAUTH : |
| if (obj->ipfo_rev >= 4012900) { |
| frauth_4_1_29_t *old29; |
| |
| KMALLOC(old29, frauth_4_1_29_t *); |
| if (old29 == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| frauth_current_to_29(ptr, old29); |
| error = COPYOUT(old29, obj->ipfo_ptr, sizeof(*old29)); |
| KFREE(old29); |
| } else if (obj->ipfo_rev >= 4012400) { |
| frauth_4_1_24_t *old24; |
| |
| KMALLOC(old24, frauth_4_1_24_t *); |
| if (old24 == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| frauth_current_to_24(ptr, old24); |
| error = COPYOUT(old24, obj->ipfo_ptr, sizeof(*old24)); |
| KFREE(old24); |
| } else if (obj->ipfo_rev >= 4012300) { |
| frauth_4_1_23_t *old23; |
| |
| KMALLOC(old23, frauth_4_1_23_t *); |
| if (old23 == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| frauth_current_to_23(ptr, old23); |
| error = COPYOUT(old23, obj->ipfo_ptr, sizeof(*old23)); |
| KFREE(old23); |
| } else if (obj->ipfo_rev >= 4011100) { |
| frauth_4_1_11_t *old11; |
| |
| KMALLOC(old11, frauth_4_1_11_t *); |
| if (old11 == NULL) { |
| error = ENOMEM; |
| break; |
| } |
| frauth_current_to_11(ptr, old11); |
| error = COPYOUT(old11, obj->ipfo_ptr, sizeof(*old11)); |
| KFREE(old11); |
| } |
| break; |
| |
| case IPFOBJ_NAT : |
| if (obj->ipfo_rev >= 4011400) { |
| sz = sizeof(nat_4_1_14_t); |
| } else if (obj->ipfo_rev >= 4010300) { |
| sz = sizeof(nat_4_1_3_t); |
| } else { |
| break; |
| } |
| error = COPYOUT(ptr, obj->ipfo_ptr, sz); |
| break; |
| } |
| return error; |
| } |
| |
| |
| static void friostat_current_to_0(current, old, rev) |
| void *current; |
| friostat_4_1_0_t *old; |
| int rev; |
| { |
| friostat_t *fiop = (friostat_t *)current; |
| |
| bcopy(&fiop->f_st, &old->f_st, sizeof(fiop->f_st)); |
| old->f_ipf[0][0] = fiop->f_ipf[0][0]; |
| old->f_ipf[0][1] = fiop->f_ipf[0][1]; |
| old->f_ipf[1][0] = fiop->f_ipf[1][0]; |
| old->f_ipf[1][1] = fiop->f_ipf[1][1]; |
| old->f_acct[0][0] = fiop->f_acct[0][0]; |
| old->f_acct[0][1] = fiop->f_acct[0][1]; |
| old->f_acct[1][0] = fiop->f_acct[1][0]; |
| old->f_acct[1][1] = fiop->f_acct[1][1]; |
| old->f_ipf6[0][0] = fiop->f_ipf6[0][0]; |
| old->f_ipf6[0][1] = fiop->f_ipf6[0][1]; |
| old->f_ipf6[1][0] = fiop->f_ipf6[1][0]; |
| old->f_ipf6[1][1] = fiop->f_ipf6[1][1]; |
| old->f_acct6[0][0] = fiop->f_acct6[0][0]; |
| old->f_acct6[0][1] = fiop->f_acct6[0][1]; |
| old->f_acct6[1][0] = fiop->f_acct6[1][0]; |
| old->f_acct6[1][1] = fiop->f_acct6[1][1]; |
| old->f_auth = fiop->f_auth; |
| bcopy(&fiop->f_groups, &old->f_groups, sizeof(old->f_groups)); |
| bcopy(&fiop->f_froute, &old->f_froute, sizeof(old->f_froute)); |
| old->f_ticks = fiop->f_ticks; |
| bcopy(&fiop->f_locks, &old->f_locks, sizeof(old->f_locks)); |
| old->f_kmutex_sz = fiop->f_kmutex_sz; |
| old->f_krwlock_sz = fiop->f_krwlock_sz; |
| old->f_defpass = fiop->f_defpass; |
| old->f_active = fiop->f_active; |
| old->f_running = fiop->f_running; |
| old->f_logging = fiop->f_logging; |
| old->f_features = fiop->f_features; |
| sprintf(old->f_version, "IP Filter: v%d.%d.%d", |
| (rev / 1000000) % 100, |
| (rev / 10000) % 100, |
| (rev / 100) % 100); |
| } |
| |
| |
| static void frentry_current_to_16(current, old) |
| void *current; |
| frentry_4_1_16_t *old; |
| { |
| frentry_t *fr = (frentry_t *)current; |
| |
| old->fr_lock = fr->fr_lock; |
| old->fr_next = fr->fr_next; |
| old->fr_grp = fr->fr_grp; |
| old->fr_isc = fr->fr_isc; |
| old->fr_ifas[0] = fr->fr_ifas[0]; |
| old->fr_ifas[1] = fr->fr_ifas[1]; |
| old->fr_ifas[2] = fr->fr_ifas[2]; |
| old->fr_ifas[3] = fr->fr_ifas[3]; |
| old->fr_ptr = fr->fr_ptr; |
| old->fr_comment = fr->fr_comment; |
| old->fr_ref = fr->fr_ref; |
| old->fr_statecnt = fr->fr_statecnt; |
| old->fr_hits = fr->fr_hits; |
| old->fr_bytes = fr->fr_bytes; |
| old->fr_lastpkt.tv_sec = fr->fr_lastpkt.tv_sec; |
| old->fr_lastpkt.tv_usec = fr->fr_lastpkt.tv_usec; |
| old->fr_curpps = fr->fr_curpps; |
| bcopy(&fr->fr_dun, &old->fr_dun, sizeof(fr->fr_dun)); |
| old->fr_func = fr->fr_func; |
| old->fr_dsize = fr->fr_dsize; |
| old->fr_pps = fr->fr_pps; |
| old->fr_statemax = fr->fr_statemax; |
| old->fr_flineno = fr->fr_flineno; |
| old->fr_type = fr->fr_type; |
| old->fr_flags = fr->fr_flags; |
| old->fr_logtag = fr->fr_logtag; |
| old->fr_collect = fr->fr_collect; |
| old->fr_arg = fr->fr_arg; |
| old->fr_loglevel = fr->fr_loglevel; |
| old->fr_age[0] = fr->fr_age[0]; |
| old->fr_age[1] = fr->fr_age[1]; |
| old->fr_v = fr->fr_v; |
| old->fr_icode = fr->fr_icode; |
| bcopy(&fr->fr_group, &old->fr_group, sizeof(fr->fr_group)); |
| bcopy(&fr->fr_grhead, &old->fr_grhead, sizeof(fr->fr_grhead)); |
| bcopy(&fr->fr_nattag, &old->fr_nattag, sizeof(fr->fr_nattag)); |
| bcopy(&fr->fr_ifnames, &old->fr_ifnames, sizeof(fr->fr_ifnames)); |
| bcopy(&fr->fr_isctag, &old->fr_isctag, sizeof(fr->fr_isctag)); |
| bcopy(&fr->fr_tifs, &old->fr_tifs, sizeof(fr->fr_tifs)); |
| bcopy(&fr->fr_dif, &old->fr_dif, sizeof(fr->fr_dif)); |
| old->fr_cksum = fr->fr_cksum; |
| } |
| |
| |
| static void frentry_current_to_0(current, old) |
| void *current; |
| frentry_4_1_0_t *old; |
| { |
| frentry_t *fr = (frentry_t *)current; |
| |
| old->fr_lock = fr->fr_lock; |
| old->fr_next = fr->fr_next; |
| old->fr_grp = fr->fr_grp; |
| old->fr_isc = fr->fr_isc; |
| old->fr_ifas[0] = fr->fr_ifas[0]; |
| old->fr_ifas[1] = fr->fr_ifas[1]; |
| old->fr_ifas[2] = fr->fr_ifas[2]; |
| old->fr_ifas[3] = fr->fr_ifas[3]; |
| old->fr_ptr = fr->fr_ptr; |
| old->fr_comment = fr->fr_comment; |
| old->fr_ref = fr->fr_ref; |
| old->fr_statecnt = fr->fr_statecnt; |
| old->fr_hits = fr->fr_hits; |
| old->fr_bytes = fr->fr_bytes; |
| old->fr_lastpkt.tv_sec = fr->fr_lastpkt.tv_sec; |
| old->fr_lastpkt.tv_usec = fr->fr_lastpkt.tv_usec; |
| old->fr_curpps = fr->fr_curpps; |
| bcopy(&fr->fr_dun, &old->fr_dun, sizeof(fr->fr_dun)); |
| old->fr_func = fr->fr_func; |
| old->fr_dsize = fr->fr_dsize; |
| old->fr_pps = fr->fr_pps; |
| old->fr_statemax = fr->fr_statemax; |
| old->fr_flineno = fr->fr_flineno; |
| old->fr_type = fr->fr_type; |
| old->fr_flags = fr->fr_flags; |
| old->fr_logtag = fr->fr_logtag; |
| old->fr_collect = fr->fr_collect; |
| old->fr_arg = fr->fr_arg; |
| old->fr_loglevel = fr->fr_loglevel; |
| old->fr_age[0] = fr->fr_age[0]; |
| old->fr_age[1] = fr->fr_age[1]; |
| old->fr_v = fr->fr_v; |
| old->fr_icode = fr->fr_icode; |
| bcopy(&fr->fr_group, &old->fr_group, sizeof(fr->fr_group)); |
| bcopy(&fr->fr_grhead, &old->fr_grhead, sizeof(fr->fr_grhead)); |
| bcopy(&fr->fr_nattag, &old->fr_nattag, sizeof(fr->fr_nattag)); |
| bcopy(&fr->fr_ifnames, &old->fr_ifnames, sizeof(fr->fr_ifnames)); |
| bcopy(&fr->fr_isctag, &old->fr_isctag, sizeof(fr->fr_isctag)); |
| bcopy(&fr->fr_tifs, &old->fr_tifs, sizeof(fr->fr_tifs)); |
| bcopy(&fr->fr_dif, &old->fr_dif, sizeof(fr->fr_dif)); |
| old->fr_cksum = fr->fr_cksum; |
| } |
| |
| |
| static void fr_info_current_to_24(current, old) |
| void *current; |
| fr_info_4_1_24_t *old; |
| { |
| fr_info_t *fin = (fr_info_t *)current; |
| |
| old->fin_ifp = fin->fin_ifp; |
| old->fin_fi = fin->fin_fi; |
| bcopy(&fin->fin_dat, &old->fin_dat, sizeof(fin->fin_dat)); |
| old->fin_out = fin->fin_out; |
| old->fin_rev = fin->fin_rev; |
| old->fin_hlen = fin->fin_hlen; |
| old->fin_tcpf = fin->fin_tcpf; |
| old->fin_icode = fin->fin_icode; |
| old->fin_rule = fin->fin_rule; |
| bcopy(fin->fin_group, old->fin_group, sizeof(fin->fin_group)); |
| old->fin_fr = fin->fin_fr; |
| old->fin_dp = fin->fin_dp; |
| old->fin_dlen = fin->fin_dlen; |
| old->fin_plen = fin->fin_plen; |
| old->fin_ipoff = fin->fin_ipoff; |
| old->fin_id = fin->fin_id; |
| old->fin_off = fin->fin_off; |
| old->fin_depth = fin->fin_depth; |
| old->fin_error = fin->fin_error; |
| old->fin_cksum = fin->fin_cksum; |
| old->fin_state = NULL; |
| old->fin_nat = NULL; |
| old->fin_nattag = fin->fin_nattag; |
| old->fin_exthdr = fin->fin_exthdr; |
| old->fin_ip = fin->fin_ip; |
| old->fin_mp = fin->fin_mp; |
| old->fin_m = fin->fin_m; |
| #ifdef MENTAT |
| old->fin_qfm = fin->fin_qfm; |
| old->fin_qpi = fin->fin_qpi; |
| old->fin_ifname = fin_ifname; |
| #endif |
| #ifdef __sgi |
| old->fin_hbuf = fin->fin_hbuf; |
| #endif |
| } |
| |
| |
| static void fr_info_current_to_23(current, old) |
| void *current; |
| fr_info_4_1_23_t *old; |
| { |
| fr_info_t *fin = (fr_info_t *)current; |
| |
| old->fin_ifp = fin->fin_ifp; |
| old->fin_fi = fin->fin_fi; |
| bcopy(&fin->fin_dat, &old->fin_dat, sizeof(fin->fin_dat)); |
| old->fin_out = fin->fin_out; |
| old->fin_rev = fin->fin_rev; |
| old->fin_hlen = fin->fin_hlen; |
| old->fin_tcpf = fin->fin_tcpf; |
| old->fin_icode = fin->fin_icode; |
| old->fin_rule = fin->fin_rule; |
| bcopy(fin->fin_group, old->fin_group, sizeof(fin->fin_group)); |
| old->fin_fr = fin->fin_fr; |
| old->fin_dp = fin->fin_dp; |
| old->fin_dlen = fin->fin_dlen; |
| old->fin_plen = fin->fin_plen; |
| old->fin_ipoff = fin->fin_ipoff; |
| old->fin_id = fin->fin_id; |
| old->fin_off = fin->fin_off; |
| old->fin_depth = fin->fin_depth; |
| old->fin_error = fin->fin_error; |
| old->fin_state = NULL; |
| old->fin_nat = NULL; |
| old->fin_nattag = fin->fin_nattag; |
| old->fin_exthdr = fin->fin_exthdr; |
| old->fin_ip = fin->fin_ip; |
| old->fin_mp = fin->fin_mp; |
| old->fin_m = fin->fin_m; |
| #ifdef MENTAT |
| old->fin_qfm = fin->fin_qfm; |
| old->fin_qpi = fin->fin_qpi; |
| old->fin_ifname = fin_ifname; |
| #endif |
| #ifdef __sgi |
| old->fin_hbuf = fin->fin_hbuf; |
| #endif |
| } |
| |
| |
| static void fr_info_current_to_11(current, old) |
| void *current; |
| fr_info_4_1_11_t *old; |
| { |
| fr_info_t *fin = (fr_info_t *)current; |
| |
| old->fin_ifp = fin->fin_ifp; |
| old->fin_fi = fin->fin_fi; |
| bcopy(&fin->fin_dat, &old->fin_dat, sizeof(fin->fin_dat)); |
| old->fin_out = fin->fin_out; |
| old->fin_rev = fin->fin_rev; |
| old->fin_hlen = fin->fin_hlen; |
| old->fin_tcpf = fin->fin_tcpf; |
| old->fin_icode = fin->fin_icode; |
| old->fin_rule = fin->fin_rule; |
| bcopy(fin->fin_group, old->fin_group, sizeof(fin->fin_group)); |
| old->fin_fr = fin->fin_fr; |
| old->fin_dp = fin->fin_dp; |
| old->fin_dlen = fin->fin_dlen; |
| old->fin_plen = fin->fin_plen; |
| old->fin_ipoff = fin->fin_ipoff; |
| old->fin_id = fin->fin_id; |
| old->fin_off = fin->fin_off; |
| old->fin_depth = fin->fin_depth; |
| old->fin_error = fin->fin_error; |
| old->fin_state = NULL; |
| old->fin_nat = NULL; |
| old->fin_nattag = fin->fin_nattag; |
| old->fin_ip = fin->fin_ip; |
| old->fin_mp = fin->fin_mp; |
| old->fin_m = fin->fin_m; |
| #ifdef MENTAT |
| old->fin_qfm = fin->fin_qfm; |
| old->fin_qpi = fin->fin_qpi; |
| old->fin_ifname = fin_ifname; |
| #endif |
| #ifdef __sgi |
| old->fin_hbuf = fin->fin_hbuf; |
| #endif |
| } |
| |
| |
| static void frauth_current_to_29(current, old) |
| void *current; |
| frauth_4_1_29_t *old; |
| { |
| frauth_t *fra = (frauth_t *)current; |
| |
| old->fra_age = fra->fra_age; |
| old->fra_len = fra->fra_len; |
| old->fra_index = fra->fra_index; |
| old->fra_pass = fra->fra_pass; |
| fr_info_current_to_24(&fra->fra_info, &old->fra_info); |
| old->fra_buf = fra->fra_buf; |
| old->fra_flx = fra->fra_flx; |
| #ifdef MENTAT |
| old->fra_q = fra->fra_q; |
| old->fra_m = fra->fra_m; |
| #endif |
| } |
| |
| |
| static void frauth_current_to_24(current, old) |
| void *current; |
| frauth_4_1_24_t *old; |
| { |
| frauth_t *fra = (frauth_t *)current; |
| |
| old->fra_age = fra->fra_age; |
| old->fra_len = fra->fra_len; |
| old->fra_index = fra->fra_index; |
| old->fra_pass = fra->fra_pass; |
| fr_info_current_to_24(&fra->fra_info, &old->fra_info); |
| old->fra_buf = fra->fra_buf; |
| #ifdef MENTAT |
| old->fra_q = fra->fra_q; |
| old->fra_m = fra->fra_m; |
| #endif |
| } |
| |
| |
| static void frauth_current_to_23(current, old) |
| void *current; |
| frauth_4_1_23_t *old; |
| { |
| frauth_t *fra = (frauth_t *)current; |
| |
| old->fra_age = fra->fra_age; |
| old->fra_len = fra->fra_len; |
| old->fra_index = fra->fra_index; |
| old->fra_pass = fra->fra_pass; |
| fr_info_current_to_23(&fra->fra_info, &old->fra_info); |
| old->fra_buf = fra->fra_buf; |
| #ifdef MENTAT |
| old->fra_q = fra->fra_q; |
| old->fra_m = fra->fra_m; |
| #endif |
| } |
| |
| |
| static void frauth_current_to_11(current, old) |
| void *current; |
| frauth_4_1_11_t *old; |
| { |
| frauth_t *fra = (frauth_t *)current; |
| |
| old->fra_age = fra->fra_age; |
| old->fra_len = fra->fra_len; |
| old->fra_index = fra->fra_index; |
| old->fra_pass = fra->fra_pass; |
| fr_info_current_to_11(&fra->fra_info, &old->fra_info); |
| old->fra_buf = fra->fra_buf; |
| #ifdef MENTAT |
| old->fra_q = fra->fra_q; |
| old->fra_m = fra->fra_m; |
| #endif |
| } |
| |
| |
| static void ipnat_current_to_0(current, old) |
| void *current; |
| ipnat_4_1_0_t *old; |
| { |
| ipnat_t *np = (ipnat_t *)current; |
| |
| old->in_next = np->in_next; |
| old->in_rnext = np->in_rnext; |
| old->in_prnext = np->in_prnext; |
| old->in_mnext = np->in_mnext; |
| old->in_pmnext = np->in_pmnext; |
| old->in_tqehead[0] = np->in_tqehead[0]; |
| old->in_tqehead[1] = np->in_tqehead[1]; |
| old->in_ifps[0] = np->in_ifps[0]; |
| old->in_ifps[1] = np->in_ifps[1]; |
| old->in_apr = np->in_apr; |
| old->in_comment = np->in_comment; |
| old->in_next6 = np->in_next6; |
| old->in_space = np->in_space; |
| old->in_hits = np->in_hits; |
| old->in_use = np->in_use; |
| old->in_hv = np->in_hv; |
| old->in_flineno = np->in_flineno; |
| old->in_pnext = np->in_pnext; |
| old->in_v = np->in_v; |
| old->in_xxx = np->in_xxx; |
| old->in_flags = np->in_flags; |
| old->in_mssclamp = np->in_mssclamp; |
| bcopy(&np->in_age, &old->in_age, sizeof(np->in_age)); |
| old->in_redir = np->in_redir; |
| old->in_p = np->in_p; |
| bcopy(&np->in_in, &old->in_in, sizeof(np->in_in)); |
| bcopy(&np->in_out, &old->in_out, sizeof(np->in_out)); |
| bcopy(&np->in_src, &old->in_src, sizeof(np->in_src)); |
| bcopy(&np->in_tuc, &old->in_tuc, sizeof(np->in_tuc)); |
| old->in_port[0] = np->in_port[0]; |
| old->in_port[1] = np->in_port[1]; |
| old->in_ppip = np->in_ppip; |
| old->in_ippip = np->in_ippip; |
| bcopy(&np->in_ifnames, &old->in_ifnames, sizeof(np->in_ifnames)); |
| bcopy(&np->in_plabel, &old->in_plabel, sizeof(np->in_plabel)); |
| bcopy(&np->in_tag, &old->in_tag, sizeof(np->in_tag)); |
| } |
| |
| |
| static void ipstate_current_to_0(current, old) |
| void *current; |
| ipstate_4_1_0_t *old; |
| { |
| ipstate_t *is = (ipstate_t *)current; |
| |
| old->is_lock = is->is_lock; |
| old->is_next = is->is_next; |
| old->is_pnext = is->is_pnext; |
| old->is_hnext = is->is_hnext; |
| old->is_phnext = is->is_phnext; |
| old->is_me = is->is_me; |
| old->is_ifp[0] = is->is_ifp[0]; |
| old->is_ifp[1] = is->is_ifp[1]; |
| old->is_sync = is->is_sync; |
| bzero(&old->is_nat, sizeof(old->is_nat)); |
| old->is_rule = is->is_rule; |
| old->is_tqehead[0] = is->is_tqehead[0]; |
| old->is_tqehead[1] = is->is_tqehead[1]; |
| old->is_isc = is->is_isc; |
| old->is_pkts[0] = is->is_pkts[0]; |
| old->is_pkts[1] = is->is_pkts[1]; |
| old->is_pkts[2] = is->is_pkts[2]; |
| old->is_pkts[3] = is->is_pkts[3]; |
| old->is_bytes[0] = is->is_bytes[0]; |
| old->is_bytes[1] = is->is_bytes[1]; |
| old->is_bytes[2] = is->is_bytes[2]; |
| old->is_bytes[3] = is->is_bytes[3]; |
| old->is_icmppkts[0] = is->is_icmppkts[0]; |
| old->is_icmppkts[1] = is->is_icmppkts[1]; |
| old->is_icmppkts[2] = is->is_icmppkts[2]; |
| old->is_icmppkts[3] = is->is_icmppkts[3]; |
| old->is_sti = is->is_sti; |
| old->is_frage[0] = is->is_frage[0]; |
| old->is_frage[1] = is->is_frage[1]; |
| old->is_ref = is->is_ref; |
| old->is_isninc[0] = is->is_isninc[0]; |
| old->is_isninc[1] = is->is_isninc[1]; |
| old->is_sumd[0] = is->is_sumd[0]; |
| old->is_sumd[1] = is->is_sumd[1]; |
| old->is_src = is->is_src; |
| old->is_dst = is->is_dst; |
| old->is_pass = is->is_pass; |
| old->is_p = is->is_p; |
| old->is_v = is->is_v; |
| old->is_hv = is->is_hv; |
| old->is_tag = is->is_tag; |
| old->is_opt[0] = is->is_opt[0]; |
| old->is_opt[1] = is->is_opt[1]; |
| old->is_optmsk[0] = is->is_optmsk[0]; |
| old->is_optmsk[1] = is->is_optmsk[1]; |
| old->is_sec = is->is_sec; |
| old->is_secmsk = is->is_secmsk; |
| old->is_auth = is->is_auth; |
| old->is_authmsk = is->is_authmsk; |
| bcopy(&is->is_ps, &old->is_ps, sizeof(is->is_ps)); |
| old->is_flags = is->is_flags; |
| old->is_flx[0][0] = is->is_flx[0][0]; |
| old->is_flx[0][1] = is->is_flx[0][1]; |
| old->is_flx[1][0] = is->is_flx[1][0]; |
| old->is_flx[1][1] = is->is_flx[1][1]; |
| old->is_rulen = is->is_rulen; |
| old->is_s0[0] = is->is_s0[0]; |
| old->is_s0[1] = is->is_s0[1]; |
| old->is_smsk[0] = is->is_smsk[0]; |
| old->is_smsk[1] = is->is_smsk[1]; |
| bcopy(is->is_group, old->is_group, sizeof(is->is_group)); |
| bcopy(is->is_sbuf, old->is_sbuf, sizeof(is->is_sbuf)); |
| bcopy(is->is_ifname, old->is_ifname, sizeof(is->is_ifname)); |
| } |
| |
| |
| static void nat_save_current_to_16(current, old) |
| void *current; |
| nat_save_4_1_16_t *old; |
| { |
| nat_save_t *nats = (nat_save_t *)current; |
| |
| old->ipn_next = nats->ipn_next; |
| bcopy(&nats->ipn_nat, &old->ipn_nat, sizeof(old->ipn_nat)); |
| bcopy(&nats->ipn_ipnat, &old->ipn_ipnat, sizeof(old->ipn_ipnat)); |
| frentry_current_to_16(&nats->ipn_fr, &old->ipn_fr); |
| old->ipn_dsize = nats->ipn_dsize; |
| bcopy(nats->ipn_data, old->ipn_data, sizeof(nats->ipn_data)); |
| } |
| |
| |
| static void nat_save_current_to_14(current, old) |
| void *current; |
| nat_save_4_1_14_t *old; |
| { |
| nat_save_t *nats = (nat_save_t *)current; |
| |
| old->ipn_next = nats->ipn_next; |
| bcopy(&nats->ipn_nat, &old->ipn_nat, sizeof(old->ipn_nat)); |
| bcopy(&nats->ipn_ipnat, &old->ipn_ipnat, sizeof(old->ipn_ipnat)); |
| frentry_current_to_0(&nats->ipn_fr, &old->ipn_fr); |
| old->ipn_dsize = nats->ipn_dsize; |
| bcopy(nats->ipn_data, old->ipn_data, sizeof(nats->ipn_data)); |
| } |
| |
| |
| static void nat_save_current_to_3(current, old) |
| void *current; |
| nat_save_4_1_3_t *old; |
| { |
| nat_save_t *nats = (nat_save_t *)current; |
| |
| old->ipn_next = nats->ipn_next; |
| bcopy(&nats->ipn_nat, &old->ipn_nat, sizeof(old->ipn_nat)); |
| bcopy(&nats->ipn_ipnat, &old->ipn_ipnat, sizeof(old->ipn_ipnat)); |
| frentry_current_to_0(&nats->ipn_fr, &old->ipn_fr); |
| old->ipn_dsize = nats->ipn_dsize; |
| bcopy(nats->ipn_data, old->ipn_data, sizeof(nats->ipn_data)); |
| } |
| |
| #endif /* IPFILTER_COMPAT */ |