alias_local.h revision 74778
155714Skris/*
255714Skris * Alias_local.h contains the function prototypes for alias.c,
355714Skris * alias_db.c, alias_util.c and alias_ftp.c, alias_irc.c (as well
455714Skris * as any future add-ons).  It also includes macros, globals and
555714Skris * struct definitions shared by more than one alias*.c file.
655714Skris *
755714Skris * This include file is intended to be used only within the aliasing
8280304Sjkim * software.  Outside world interfaces are defined in alias.h
955714Skris *
1055714Skris * This software is placed into the public domain with no restrictions
1155714Skris * on its distribution.
1255714Skris *
1355714Skris * Initial version:  August, 1996  (cjm)
1455714Skris *
15280304Sjkim * <updated several times by original author and Eivind Eklund>
1655714Skris *
1755714Skris * $FreeBSD: head/sys/netinet/libalias/alias_local.h 74778 2001-03-25 12:05:10Z brian $
1855714Skris */
1955714Skris
2055714Skris#ifndef _ALIAS_LOCAL_H_
2155714Skris#define	_ALIAS_LOCAL_H_
22280304Sjkim
2355714Skris/* Macros */
2455714Skris
2555714Skris/*
2655714Skris * The following macro is used to update an
2755714Skris * internet checksum.  "delta" is a 32-bit
2855714Skris * accumulation of all the changes to the
2955714Skris * checksum (adding in new 16-bit words and
3055714Skris * subtracting out old words), and "cksum"
3155714Skris * is the checksum value to be updated.
3255714Skris */
3355714Skris#define	ADJUST_CHECKSUM(acc, cksum) \
3455714Skris	do { \
3555714Skris		acc += cksum; \
3655714Skris		if (acc < 0) { \
37280304Sjkim			acc = -acc; \
3855714Skris			acc = (acc >> 16) + (acc & 0xffff); \
3955714Skris			acc += acc >> 16; \
40280304Sjkim			cksum = (u_short) ~acc; \
4155714Skris		} else { \
4255714Skris			acc = (acc >> 16) + (acc & 0xffff); \
4355714Skris			acc += acc >> 16; \
4455714Skris			cksum = (u_short) acc; \
4555714Skris		} \
4655714Skris	} while (0)
4755714Skris
4855714Skris/* Globals */
4955714Skris
5055714Skrisextern int packetAliasMode;
5155714Skris
52280304Sjkim/* Prototypes */
5355714Skris
5455714Skris/* General utilities */
5555714Skrisu_short	 IpChecksum(struct ip *_pip);
5655714Skrisu_short	 TcpChecksum(struct ip *_pip);
5755714Skrisvoid	 DifferentialChecksum(u_short *_cksum, u_short *_new, u_short *_old,
5855714Skris	    int _n);
5955714Skris
6055714Skris/* Internal data access */
6155714Skrisstruct alias_link *
62109998Smarkm	 FindIcmpIn(struct in_addr _dst_addr, struct in_addr _alias_addr,
63280304Sjkim	    u_short _id_alias, int _create);
6455714Skrisstruct alias_link *
6555714Skris	 FindIcmpOut(struct in_addr _src_addr, struct in_addr _dst_addr,
6655714Skris	    u_short _id, int _create);
6755714Skrisstruct alias_link *
6855714Skris	 FindFragmentIn1(struct in_addr _dst_addr, struct in_addr _alias_addr,
69238405Sjkim	    u_short _ip_id);
70280304Sjkimstruct alias_link *
71280304Sjkim	 FindFragmentIn2(struct in_addr _dst_addr, struct in_addr _alias_addr,
72280304Sjkim	    u_short _ip_id);
73280304Sjkimstruct alias_link *
74109998Smarkm	 AddFragmentPtrLink(struct in_addr _dst_addr, u_short _ip_id);
75280304Sjkimstruct alias_link *
7655714Skris	 FindFragmentPtr(struct in_addr _dst_addr, u_short _ip_id);
77280304Sjkimstruct alias_link *
78109998Smarkm	 FindProtoIn(struct in_addr _dst_addr, struct in_addr _alias_addr,
79280304Sjkim	    u_char _proto);
80280304Sjkimstruct alias_link *
8155714Skris	 FindProtoOut(struct in_addr _src_addr, struct in_addr _dst_addr,
82280304Sjkim	    u_char _proto);
83280304Sjkimstruct alias_link *
84280304Sjkim	 FindUdpTcpIn(struct in_addr _dst_addr, struct in_addr _alias_addr,
8555714Skris	    u_short _dst_port, u_short _alias_port, u_char _proto, int _create);
86280304Sjkimstruct alias_link *
87280304Sjkim	 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	 SetLastLineCrlfTermed(struct alias_link *_link, int _yes);
148int	 GetLastLineCrlfTermed(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