1/* $NetBSD: ip_frag.h,v 1.6 2009/08/19 08:36:10 darrenr Exp $ */ 2 3/* 4 * Copyright (C) 1993-2001 by Darren Reed. 5 * 6 * See the IPFILTER.LICENCE file for details on licencing. 7 * 8 * @(#)ip_frag.h 1.5 3/24/96 9 * Id: ip_frag.h,v 2.23.2.7 2009/01/01 03:53:17 darrenr Exp 10 */ 11 12#ifndef _NETINET_IP_FRAG_H_ 13#define _NETINET_IP_FRAG_H_ 14 15#define IPFT_SIZE 257 16 17typedef struct ipfr { 18 struct ipfr *ipfr_hnext, **ipfr_hprev; 19 struct ipfr *ipfr_next, **ipfr_prev; 20 void *ipfr_data; 21 frentry_t *ipfr_rule; 22 u_long ipfr_ttl; 23 int ipfr_ref; 24 u_short ipfr_off; 25 u_short ipfr_seen0; 26 /* 27 * All of the fields, from ipfr_ifp to ipfr_pass, are compared 28 * using bcmp to see if an identical entry is present. It is 29 * therefore important for this set to remain together. 30 */ 31 void *ipfr_ifp; 32 i6addr_t ipfr_src; 33 i6addr_t ipfr_dst; 34 u_32_t ipfr_optmsk; 35 u_short ipfr_secmsk; 36 u_short ipfr_auth; 37 u_32_t ipfr_id; 38 u_32_t ipfr_p; 39 u_32_t ipfr_tos; 40 u_32_t ipfr_pass; 41} ipfr_t; 42 43 44typedef struct ipfrstat { 45 u_long ifs_exists; /* add & already exists */ 46 u_long ifs_nomem; 47 u_long ifs_new; 48 u_long ifs_hits; 49 u_long ifs_expire; 50 u_long ifs_inuse; 51 u_long ifs_retrans0; 52 u_long ifs_short; 53 struct ipfr **ifs_table; 54 struct ipfr **ifs_nattab; 55} ipfrstat_t; 56 57#define IPFR_CMPSZ (offsetof(ipfr_t, ipfr_pass) - \ 58 offsetof(ipfr_t, ipfr_ifp)) 59 60extern ipfr_t *ipfr_list, **ipfr_tail; 61extern ipfr_t *ipfr_natlist, **ipfr_nattail; 62extern int ipfr_size; 63extern int fr_ipfrttl; 64extern int fr_frag_lock; 65extern int fr_fraginit(void); 66extern void fr_fragunload(void); 67extern ipfrstat_t *fr_fragstats(void); 68 69extern int fr_newfrag(fr_info_t *, u_32_t); 70extern frentry_t *fr_knownfrag(fr_info_t *, u_32_t *); 71 72extern int fr_nat_newfrag(fr_info_t *, u_32_t, struct nat *); 73extern nat_t *fr_nat_knownfrag(fr_info_t *); 74 75extern int fr_ipid_newfrag(fr_info_t *, u_32_t); 76extern u_32_t fr_ipid_knownfrag(fr_info_t *); 77#ifdef USE_MUTEXES 78extern void fr_fragderef(ipfr_t **, ipfrwlock_t *); 79extern int fr_nextfrag(ipftoken_t *, ipfgeniter_t *, ipfr_t **, \ 80 ipfr_t ***, ipfrwlock_t *); 81#else 82extern void fr_fragderef(ipfr_t **); 83extern int fr_nextfrag(ipftoken_t *, ipfgeniter_t *, ipfr_t **, \ 84 ipfr_t ***); 85#endif 86 87extern void fr_forget(void *); 88extern void fr_forgetnat(void *); 89extern void fr_fragclear(void); 90extern void fr_fragexpire(void); 91 92#if defined(_KERNEL) && ((defined(BSD) && (BSD >= 199306)) || SOLARIS || \ 93 defined(__sgi) || defined(__osf__) || (defined(__sgi) && (IRIX >= 60500))) 94# if defined(SOLARIS2) && (SOLARIS2 < 7) 95extern void fr_slowtimer(void); 96# else 97extern void fr_slowtimer(void *); 98# endif 99#else 100# if defined(linux) && defined(_KERNEL) 101extern void fr_slowtimer(long); 102# else 103extern int fr_slowtimer(void); 104# endif 105#endif 106 107#endif /* _NETINET_IP_FRAG_H_ */ 108