alias_local.h revision 77485
1/*
2 * Alias_local.h contains the function prototypes for alias.c,
3 * alias_db.c, alias_util.c and alias_ftp.c, alias_irc.c (as well
4 * as any future add-ons).  It also includes macros, globals and
5 * struct definitions shared by more than one alias*.c file.
6 *
7 * This include file is intended to be used only within the aliasing
8 * software.  Outside world interfaces are defined in alias.h
9 *
10 * This software is placed into the public domain with no restrictions
11 * on its distribution.
12 *
13 * Initial version:  August, 1996  (cjm)
14 *
15 * <updated several times by original author and Eivind Eklund>
16 *
17 * $FreeBSD: head/sys/netinet/libalias/alias_local.h 77485 2001-05-30 14:24:35Z ru $
18 */
19
20#ifndef _ALIAS_LOCAL_H_
21#define	_ALIAS_LOCAL_H_
22
23/* Macros */
24
25/*
26 * The following macro is used to update an
27 * internet checksum.  "delta" is a 32-bit
28 * accumulation of all the changes to the
29 * checksum (adding in new 16-bit words and
30 * subtracting out old words), and "cksum"
31 * is the checksum value to be updated.
32 */
33#define	ADJUST_CHECKSUM(acc, cksum) \
34	do { \
35		acc += cksum; \
36		if (acc < 0) { \
37			acc = -acc; \
38			acc = (acc >> 16) + (acc & 0xffff); \
39			acc += acc >> 16; \
40			cksum = (u_short) ~acc; \
41		} else { \
42			acc = (acc >> 16) + (acc & 0xffff); \
43			acc += acc >> 16; \
44			cksum = (u_short) acc; \
45		} \
46	} while (0)
47
48/* Globals */
49
50extern int packetAliasMode;
51
52/* Prototypes */
53
54/* General utilities */
55u_short	 IpChecksum(struct ip *_pip);
56u_short	 TcpChecksum(struct ip *_pip);
57void	 DifferentialChecksum(u_short *_cksum, u_short *_new, u_short *_old,
58	    int _n);
59
60/* Internal data access */
61struct alias_link *
62	 FindIcmpIn(struct in_addr _dst_addr, struct in_addr _alias_addr,
63	    u_short _id_alias, int _create);
64struct alias_link *
65	 FindIcmpOut(struct in_addr _src_addr, struct in_addr _dst_addr,
66	    u_short _id, int _create);
67struct alias_link *
68	 FindFragmentIn1(struct in_addr _dst_addr, struct in_addr _alias_addr,
69	    u_short _ip_id);
70struct alias_link *
71	 FindFragmentIn2(struct in_addr _dst_addr, struct in_addr _alias_addr,
72	    u_short _ip_id);
73struct alias_link *
74	 AddFragmentPtrLink(struct in_addr _dst_addr, u_short _ip_id);
75struct alias_link *
76	 FindFragmentPtr(struct in_addr _dst_addr, u_short _ip_id);
77struct alias_link *
78	 FindProtoIn(struct in_addr _dst_addr, struct in_addr _alias_addr,
79	    u_char _proto);
80struct alias_link *
81	 FindProtoOut(struct in_addr _src_addr, struct in_addr _dst_addr,
82	    u_char _proto);
83struct alias_link *
84	 FindUdpTcpIn(struct in_addr _dst_addr, struct in_addr _alias_addr,
85	    u_short _dst_port, u_short _alias_port, u_char _proto, int _create);
86struct alias_link *
87	 FindUdpTcpOut(struct in_addr _src_addr, struct in_addr _dst_addr,
88	    u_short _src_port, u_short _dst_port, u_char _proto, int _create);
89struct alias_link *
90	 AddPptp(struct in_addr _src_addr, struct in_addr _dst_addr,
91	    struct in_addr _alias_addr, u_int16_t _src_call_id);
92struct alias_link *
93	 FindPptpOutByCallId(struct in_addr _src_addr,
94	    struct in_addr _dst_addr, u_int16_t _src_call_id);
95struct alias_link *
96	 FindPptpInByCallId(struct in_addr _dst_addr,
97	    struct in_addr _alias_addr, u_int16_t _dst_call_id);
98struct alias_link *
99	 FindPptpOutByPeerCallId(struct in_addr _src_addr,
100	    struct in_addr _dst_addr, u_int16_t _dst_call_id);
101struct alias_link *
102	 FindPptpInByPeerCallId(struct in_addr _dst_addr,
103	    struct in_addr _alias_addr, u_int16_t _alias_call_id);
104struct alias_link *
105	 FindRtspOut(struct in_addr _src_addr, struct in_addr _dst_addr,
106	    u_short _src_port, u_short _alias_port, u_char _proto);
107struct in_addr
108	 FindOriginalAddress(struct in_addr _alias_addr);
109struct in_addr
110	 FindAliasAddress(struct in_addr _original_addr);
111
112/* External data access/modification */
113int	 FindNewPortGroup(struct in_addr _dst_addr, struct in_addr _alias_addr,
114                     u_short _src_port, u_short _dst_port, u_short _port_count,
115		     u_char _proto, u_char _align);
116void	 GetFragmentAddr(struct alias_link *_link, struct in_addr *_src_addr);
117void	 SetFragmentAddr(struct alias_link *_link, struct in_addr _src_addr);
118void	 GetFragmentPtr(struct alias_link *_link, char **_fptr);
119void	 SetFragmentPtr(struct alias_link *_link, char *fptr);
120void	 SetStateIn(struct alias_link *_link, int _state);
121void	 SetStateOut(struct alias_link *_link, int _state);
122int	 GetStateIn(struct alias_link *_link);
123int	 GetStateOut(struct alias_link *_link);
124struct in_addr
125	 GetOriginalAddress(struct alias_link *_link);
126struct in_addr
127	 GetDestAddress(struct alias_link *_link);
128struct in_addr
129	 GetAliasAddress(struct alias_link *_link);
130struct in_addr
131	 GetDefaultAliasAddress(void);
132void	 SetDefaultAliasAddress(struct in_addr _alias_addr);
133u_short	 GetOriginalPort(struct alias_link *_link);
134u_short	 GetAliasPort(struct alias_link *_link);
135struct in_addr
136	 GetProxyAddress(struct alias_link *_link);
137void	 SetProxyAddress(struct alias_link *_link, struct in_addr _addr);
138u_short	 GetProxyPort(struct alias_link *_link);
139void	 SetProxyPort(struct alias_link *_link, u_short _port);
140void	 SetAckModified(struct alias_link *_link);
141int	 GetAckModified(struct alias_link *_link);
142int	 GetDeltaAckIn(struct ip *_pip, struct alias_link *_link);
143int	 GetDeltaSeqOut(struct ip *_pip, struct alias_link *_link);
144void	 AddSeq(struct ip *_pip, struct alias_link *_link, int _delta);
145void	 SetExpire(struct alias_link *_link, int _expire);
146void	 ClearCheckNewLink(void);
147void	 SetProtocolFlags(struct alias_link *_link, int _pflags);
148int	 GetProtocolFlags(struct alias_link *_link);
149void	 SetDestCallId(struct alias_link *_link, u_int16_t _cid);
150#ifndef NO_FW_PUNCH
151void	 PunchFWHole(struct alias_link *_link);
152#endif
153
154/* Housekeeping function */
155void	 HouseKeeping(void);
156
157/* Tcp specfic routines */
158/* lint -save -library Suppress flexelint warnings */
159
160/* FTP routines */
161void	 AliasHandleFtpOut(struct ip *_pip, struct alias_link *_link,
162	    int _maxpacketsize);
163
164/* IRC routines */
165void	 AliasHandleIrcOut(struct ip *_pip, struct alias_link *_link,
166	    int _maxsize);
167
168/* RTSP routines */
169void	 AliasHandleRtspOut(struct ip *_pip, struct alias_link *_link,
170	    int _maxpacketsize);
171
172/* PPTP routines */
173void	 AliasHandlePptpOut(struct ip *_pip, struct alias_link *_link);
174void	 AliasHandlePptpIn(struct ip *_pip, struct alias_link *_link);
175int	 AliasHandlePptpGreOut(struct ip *_pip);
176int	 AliasHandlePptpGreIn(struct ip *_pip);
177
178/* NetBIOS routines */
179int	 AliasHandleUdpNbt(struct ip *_pip, struct alias_link *_link,
180	    struct in_addr *_alias_address, u_short _alias_port);
181int	 AliasHandleUdpNbtNS(struct ip *_pip, struct alias_link *_link,
182	    struct in_addr *_alias_address, u_short *_alias_port,
183	    struct in_addr *_original_address, u_short *_original_port);
184
185/* CUSeeMe routines */
186void	 AliasHandleCUSeeMeOut(struct ip *_pip, struct alias_link *_link);
187void	 AliasHandleCUSeeMeIn(struct ip *_pip, struct in_addr _original_addr);
188
189/* Transparent proxy routines */
190int	 ProxyCheck(struct ip *_pip, struct in_addr *_proxy_server_addr,
191	    u_short *_proxy_server_port);
192void	 ProxyModify(struct alias_link *_link, struct ip *_pip,
193	    int _maxpacketsize, int _proxy_type);
194
195enum alias_tcp_state {
196	ALIAS_TCP_STATE_NOT_CONNECTED,
197	ALIAS_TCP_STATE_CONNECTED,
198	ALIAS_TCP_STATE_DISCONNECTED
199};
200
201/*lint -restore */
202
203#endif /* !_ALIAS_LOCAL_H_ */
204