2 * Copyright (C) 1997-2001 by Darren Reed.
4 * See the IPFILTER.LICENCE file for details on licencing.
6 * $Id: ip_proxy.h,v 2.8.2.14 2002/09/02 12:19:26 darrenr Exp $
10 #define __IP_PROXY_H__
13 #define SOLARIS (defined(sun) && (defined(__svr4__) || defined(__SVR4)))
17 #define APR_LABELLEN 16
19 #define AP_SESS_SIZE 53
24 typedef struct ap_tcp {
25 u_short apt_sport; /* source port */
26 u_short apt_dport; /* destination port */
27 short apt_sel[2]; /* {seq,ack}{off,min} set selector */
28 short apt_seqoff[2]; /* sequence # difference */
29 tcp_seq apt_seqmin[2]; /* don't change seq-off until after this */
30 short apt_ackoff[2]; /* sequence # difference */
31 tcp_seq apt_ackmin[2]; /* don't change seq-off until after this */
32 u_char apt_state[2]; /* connection state */
35 typedef struct ap_udp {
36 u_short apu_sport; /* source port */
37 u_short apu_dport; /* destination port */
40 typedef struct ap_session {
41 struct aproxy *aps_apr;
43 struct ap_tcp apu_tcp;
44 struct ap_udp apu_udp;
47 U_QUAD_T aps_bytes; /* bytes sent */
48 U_QUAD_T aps_pkts; /* packets sent */
49 void *aps_nat; /* pointer back to nat struct */
50 void *aps_data; /* private data */
51 int aps_p; /* protocol */
52 int aps_psiz; /* size of private data */
53 struct ap_session *aps_hnext;
54 struct ap_session *aps_next;
57 #define aps_sport aps_un.apu_tcp.apt_sport
58 #define aps_dport aps_un.apu_tcp.apt_dport
59 #define aps_sel aps_un.apu_tcp.apt_sel
60 #define aps_seqoff aps_un.apu_tcp.apt_seqoff
61 #define aps_seqmin aps_un.apu_tcp.apt_seqmin
62 #define aps_state aps_un.apu_tcp.apt_state
63 #define aps_ackoff aps_un.apu_tcp.apt_ackoff
64 #define aps_ackmin aps_un.apu_tcp.apt_ackmin
67 typedef struct aproxy {
68 struct aproxy *apr_next;
69 char apr_label[APR_LABELLEN]; /* Proxy label # */
70 u_char apr_p; /* protocol */
71 int apr_ref; /* +1 per rule referencing it */
73 int (* apr_init) __P((void));
74 void (* apr_fini) __P((void));
75 int (* apr_new) __P((fr_info_t *, ip_t *,
76 ap_session_t *, struct nat *));
77 void (* apr_del) __P((ap_session_t *));
78 int (* apr_inpkt) __P((fr_info_t *, ip_t *,
79 ap_session_t *, struct nat *));
80 int (* apr_outpkt) __P((fr_info_t *, ip_t *,
81 ap_session_t *, struct nat *));
82 int (* apr_match) __P((fr_info_t *, ap_session_t *, struct nat *));
87 #define APR_ERR(x) (((x) & 0xffff) << 16)
88 #define APR_EXIT(x) (((x) >> 16) & 0xffff)
89 #define APR_INC(x) ((x) & 0xffff)
95 typedef struct ftpside {
103 char ftps_buf[FTP_BUFSZ];
106 typedef struct ftpinfo {
109 ftpside_t ftp_side[2];
113 * Real audio proxy structure and #defines
115 typedef struct raudio_s {
119 int rap_eos; /* End Of Startup */
128 u_32_t rap_sbf; /* flag to indicate which of the 19 bytes have
136 #define RA_ID_ROBUST 7
139 #define RAP_M_ROBUST 2
141 #define RAP_M_UDP_ROBUST (RAP_M_UDP|RAP_M_ROBUST)
146 typedef u_32_t ipsec_cookie_t[2];
148 typedef struct ipsec_pxy {
149 ipsec_cookie_t ipsc_icookie;
150 ipsec_cookie_t ipsc_rcookie;
154 ipstate_t *ipsc_state;
157 extern ap_session_t *ap_sess_tab[AP_SESS_SIZE];
158 extern ap_session_t *ap_sess_list;
159 extern aproxy_t ap_proxies[];
160 extern int ippr_ftp_pasvonly;
162 extern int appr_add __P((aproxy_t *));
163 extern int appr_del __P((aproxy_t *));
164 extern int appr_init __P((void));
165 extern void appr_unload __P((void));
166 extern int appr_ok __P((ip_t *, tcphdr_t *, struct ipnat *));
167 extern int appr_match __P((fr_info_t *, struct nat *));
168 extern void appr_free __P((aproxy_t *));
169 extern void aps_free __P((ap_session_t *));
170 extern int appr_check __P((ip_t *, fr_info_t *, struct nat *));
171 extern aproxy_t *appr_lookup __P((u_int, char *));
172 extern int appr_new __P((fr_info_t *, ip_t *, struct nat *));
174 #endif /* __IP_PROXY_H__ */