xref: /dragonfly/lib/libalias/alias_local.h (revision 86d7f5d3)
1*86d7f5d3SJohn Marino /*-
2*86d7f5d3SJohn Marino  * Copyright (c) 2001 Charles Mott <cm@linktel.net>
3*86d7f5d3SJohn Marino  * All rights reserved.
4*86d7f5d3SJohn Marino  *
5*86d7f5d3SJohn Marino  * Redistribution and use in source and binary forms, with or without
6*86d7f5d3SJohn Marino  * modification, are permitted provided that the following conditions
7*86d7f5d3SJohn Marino  * are met:
8*86d7f5d3SJohn Marino  * 1. Redistributions of source code must retain the above copyright
9*86d7f5d3SJohn Marino  *    notice, this list of conditions and the following disclaimer.
10*86d7f5d3SJohn Marino  * 2. Redistributions in binary form must reproduce the above copyright
11*86d7f5d3SJohn Marino  *    notice, this list of conditions and the following disclaimer in the
12*86d7f5d3SJohn Marino  *    documentation and/or other materials provided with the distribution.
13*86d7f5d3SJohn Marino  *
14*86d7f5d3SJohn Marino  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15*86d7f5d3SJohn Marino  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16*86d7f5d3SJohn Marino  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17*86d7f5d3SJohn Marino  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18*86d7f5d3SJohn Marino  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19*86d7f5d3SJohn Marino  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20*86d7f5d3SJohn Marino  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21*86d7f5d3SJohn Marino  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22*86d7f5d3SJohn Marino  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23*86d7f5d3SJohn Marino  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24*86d7f5d3SJohn Marino  * SUCH DAMAGE.
25*86d7f5d3SJohn Marino  *
26*86d7f5d3SJohn Marino  * $FreeBSD: src/lib/libalias/alias_local.h,v 1.10.2.7 2001/11/23 13:10:15 brian Exp $
27*86d7f5d3SJohn Marino  * $DragonFly: src/lib/libalias/alias_local.h,v 1.2 2003/06/17 04:26:41 dillon Exp $
28*86d7f5d3SJohn Marino  */
29*86d7f5d3SJohn Marino 
30*86d7f5d3SJohn Marino /*
31*86d7f5d3SJohn Marino  * Alias_local.h contains the function prototypes for alias.c,
32*86d7f5d3SJohn Marino  * alias_db.c, alias_util.c and alias_ftp.c, alias_irc.c (as well
33*86d7f5d3SJohn Marino  * as any future add-ons).  It also includes macros, globals and
34*86d7f5d3SJohn Marino  * struct definitions shared by more than one alias*.c file.
35*86d7f5d3SJohn Marino  *
36*86d7f5d3SJohn Marino  * This include file is intended to be used only within the aliasing
37*86d7f5d3SJohn Marino  * software.  Outside world interfaces are defined in alias.h
38*86d7f5d3SJohn Marino  *
39*86d7f5d3SJohn Marino  * This software is placed into the public domain with no restrictions
40*86d7f5d3SJohn Marino  * on its distribution.
41*86d7f5d3SJohn Marino  *
42*86d7f5d3SJohn Marino  * Initial version:  August, 1996  (cjm)
43*86d7f5d3SJohn Marino  *
44*86d7f5d3SJohn Marino  * <updated several times by original author and Eivind Eklund>
45*86d7f5d3SJohn Marino  */
46*86d7f5d3SJohn Marino 
47*86d7f5d3SJohn Marino #ifndef _ALIAS_LOCAL_H_
48*86d7f5d3SJohn Marino #define	_ALIAS_LOCAL_H_
49*86d7f5d3SJohn Marino 
50*86d7f5d3SJohn Marino /* Macros */
51*86d7f5d3SJohn Marino 
52*86d7f5d3SJohn Marino /*
53*86d7f5d3SJohn Marino  * The following macro is used to update an
54*86d7f5d3SJohn Marino  * internet checksum.  "delta" is a 32-bit
55*86d7f5d3SJohn Marino  * accumulation of all the changes to the
56*86d7f5d3SJohn Marino  * checksum (adding in new 16-bit words and
57*86d7f5d3SJohn Marino  * subtracting out old words), and "cksum"
58*86d7f5d3SJohn Marino  * is the checksum value to be updated.
59*86d7f5d3SJohn Marino  */
60*86d7f5d3SJohn Marino #define	ADJUST_CHECKSUM(acc, cksum) \
61*86d7f5d3SJohn Marino 	do { \
62*86d7f5d3SJohn Marino 		acc += cksum; \
63*86d7f5d3SJohn Marino 		if (acc < 0) { \
64*86d7f5d3SJohn Marino 			acc = -acc; \
65*86d7f5d3SJohn Marino 			acc = (acc >> 16) + (acc & 0xffff); \
66*86d7f5d3SJohn Marino 			acc += acc >> 16; \
67*86d7f5d3SJohn Marino 			cksum = (u_short) ~acc; \
68*86d7f5d3SJohn Marino 		} else { \
69*86d7f5d3SJohn Marino 			acc = (acc >> 16) + (acc & 0xffff); \
70*86d7f5d3SJohn Marino 			acc += acc >> 16; \
71*86d7f5d3SJohn Marino 			cksum = (u_short) acc; \
72*86d7f5d3SJohn Marino 		} \
73*86d7f5d3SJohn Marino 	} while (0)
74*86d7f5d3SJohn Marino 
75*86d7f5d3SJohn Marino /* Globals */
76*86d7f5d3SJohn Marino 
77*86d7f5d3SJohn Marino extern int packetAliasMode;
78*86d7f5d3SJohn Marino 
79*86d7f5d3SJohn Marino /* Prototypes */
80*86d7f5d3SJohn Marino 
81*86d7f5d3SJohn Marino /* General utilities */
82*86d7f5d3SJohn Marino u_short	 IpChecksum(struct ip *_pip);
83*86d7f5d3SJohn Marino u_short	 TcpChecksum(struct ip *_pip);
84*86d7f5d3SJohn Marino void	 DifferentialChecksum(u_short *_cksum, u_short *_new, u_short *_old,
85*86d7f5d3SJohn Marino 	    int _n);
86*86d7f5d3SJohn Marino 
87*86d7f5d3SJohn Marino /* Internal data access */
88*86d7f5d3SJohn Marino struct alias_link *
89*86d7f5d3SJohn Marino 	 FindIcmpIn(struct in_addr _dst_addr, struct in_addr _alias_addr,
90*86d7f5d3SJohn Marino 	    u_short _id_alias, int _create);
91*86d7f5d3SJohn Marino struct alias_link *
92*86d7f5d3SJohn Marino 	 FindIcmpOut(struct in_addr _src_addr, struct in_addr _dst_addr,
93*86d7f5d3SJohn Marino 	    u_short _id, int _create);
94*86d7f5d3SJohn Marino struct alias_link *
95*86d7f5d3SJohn Marino 	 FindFragmentIn1(struct in_addr _dst_addr, struct in_addr _alias_addr,
96*86d7f5d3SJohn Marino 	    u_short _ip_id);
97*86d7f5d3SJohn Marino struct alias_link *
98*86d7f5d3SJohn Marino 	 FindFragmentIn2(struct in_addr _dst_addr, struct in_addr _alias_addr,
99*86d7f5d3SJohn Marino 	    u_short _ip_id);
100*86d7f5d3SJohn Marino struct alias_link *
101*86d7f5d3SJohn Marino 	 AddFragmentPtrLink(struct in_addr _dst_addr, u_short _ip_id);
102*86d7f5d3SJohn Marino struct alias_link *
103*86d7f5d3SJohn Marino 	 FindFragmentPtr(struct in_addr _dst_addr, u_short _ip_id);
104*86d7f5d3SJohn Marino struct alias_link *
105*86d7f5d3SJohn Marino 	 FindProtoIn(struct in_addr _dst_addr, struct in_addr _alias_addr,
106*86d7f5d3SJohn Marino 	    u_char _proto);
107*86d7f5d3SJohn Marino struct alias_link *
108*86d7f5d3SJohn Marino 	 FindProtoOut(struct in_addr _src_addr, struct in_addr _dst_addr,
109*86d7f5d3SJohn Marino 	    u_char _proto);
110*86d7f5d3SJohn Marino struct alias_link *
111*86d7f5d3SJohn Marino 	 FindUdpTcpIn(struct in_addr _dst_addr, struct in_addr _alias_addr,
112*86d7f5d3SJohn Marino 	    u_short _dst_port, u_short _alias_port, u_char _proto, int _create);
113*86d7f5d3SJohn Marino struct alias_link *
114*86d7f5d3SJohn Marino 	 FindUdpTcpOut(struct in_addr _src_addr, struct in_addr _dst_addr,
115*86d7f5d3SJohn Marino 	    u_short _src_port, u_short _dst_port, u_char _proto, int _create);
116*86d7f5d3SJohn Marino struct alias_link *
117*86d7f5d3SJohn Marino 	 AddPptp(struct in_addr _src_addr, struct in_addr _dst_addr,
118*86d7f5d3SJohn Marino 	    struct in_addr _alias_addr, u_int16_t _src_call_id);
119*86d7f5d3SJohn Marino struct alias_link *
120*86d7f5d3SJohn Marino 	 FindPptpOutByCallId(struct in_addr _src_addr,
121*86d7f5d3SJohn Marino 	    struct in_addr _dst_addr, u_int16_t _src_call_id);
122*86d7f5d3SJohn Marino struct alias_link *
123*86d7f5d3SJohn Marino 	 FindPptpInByCallId(struct in_addr _dst_addr,
124*86d7f5d3SJohn Marino 	    struct in_addr _alias_addr, u_int16_t _dst_call_id);
125*86d7f5d3SJohn Marino struct alias_link *
126*86d7f5d3SJohn Marino 	 FindPptpOutByPeerCallId(struct in_addr _src_addr,
127*86d7f5d3SJohn Marino 	    struct in_addr _dst_addr, u_int16_t _dst_call_id);
128*86d7f5d3SJohn Marino struct alias_link *
129*86d7f5d3SJohn Marino 	 FindPptpInByPeerCallId(struct in_addr _dst_addr,
130*86d7f5d3SJohn Marino 	    struct in_addr _alias_addr, u_int16_t _alias_call_id);
131*86d7f5d3SJohn Marino struct alias_link *
132*86d7f5d3SJohn Marino 	 FindRtspOut(struct in_addr _src_addr, struct in_addr _dst_addr,
133*86d7f5d3SJohn Marino 	    u_short _src_port, u_short _alias_port, u_char _proto);
134*86d7f5d3SJohn Marino struct in_addr
135*86d7f5d3SJohn Marino 	 FindOriginalAddress(struct in_addr _alias_addr);
136*86d7f5d3SJohn Marino struct in_addr
137*86d7f5d3SJohn Marino 	 FindAliasAddress(struct in_addr _original_addr);
138*86d7f5d3SJohn Marino 
139*86d7f5d3SJohn Marino /* External data access/modification */
140*86d7f5d3SJohn Marino int	 FindNewPortGroup(struct in_addr _dst_addr, struct in_addr _alias_addr,
141*86d7f5d3SJohn Marino                      u_short _src_port, u_short _dst_port, u_short _port_count,
142*86d7f5d3SJohn Marino 		     u_char _proto, u_char _align);
143*86d7f5d3SJohn Marino void	 GetFragmentAddr(struct alias_link *_link, struct in_addr *_src_addr);
144*86d7f5d3SJohn Marino void	 SetFragmentAddr(struct alias_link *_link, struct in_addr _src_addr);
145*86d7f5d3SJohn Marino void	 GetFragmentPtr(struct alias_link *_link, char **_fptr);
146*86d7f5d3SJohn Marino void	 SetFragmentPtr(struct alias_link *_link, char *fptr);
147*86d7f5d3SJohn Marino void	 SetStateIn(struct alias_link *_link, int _state);
148*86d7f5d3SJohn Marino void	 SetStateOut(struct alias_link *_link, int _state);
149*86d7f5d3SJohn Marino int	 GetStateIn(struct alias_link *_link);
150*86d7f5d3SJohn Marino int	 GetStateOut(struct alias_link *_link);
151*86d7f5d3SJohn Marino struct in_addr
152*86d7f5d3SJohn Marino 	 GetOriginalAddress(struct alias_link *_link);
153*86d7f5d3SJohn Marino struct in_addr
154*86d7f5d3SJohn Marino 	 GetDestAddress(struct alias_link *_link);
155*86d7f5d3SJohn Marino struct in_addr
156*86d7f5d3SJohn Marino 	 GetAliasAddress(struct alias_link *_link);
157*86d7f5d3SJohn Marino struct in_addr
158*86d7f5d3SJohn Marino 	 GetDefaultAliasAddress(void);
159*86d7f5d3SJohn Marino void	 SetDefaultAliasAddress(struct in_addr _alias_addr);
160*86d7f5d3SJohn Marino u_short	 GetOriginalPort(struct alias_link *_link);
161*86d7f5d3SJohn Marino u_short	 GetAliasPort(struct alias_link *_link);
162*86d7f5d3SJohn Marino struct in_addr
163*86d7f5d3SJohn Marino 	 GetProxyAddress(struct alias_link *_link);
164*86d7f5d3SJohn Marino void	 SetProxyAddress(struct alias_link *_link, struct in_addr _addr);
165*86d7f5d3SJohn Marino u_short	 GetProxyPort(struct alias_link *_link);
166*86d7f5d3SJohn Marino void	 SetProxyPort(struct alias_link *_link, u_short _port);
167*86d7f5d3SJohn Marino void	 SetAckModified(struct alias_link *_link);
168*86d7f5d3SJohn Marino int	 GetAckModified(struct alias_link *_link);
169*86d7f5d3SJohn Marino int	 GetDeltaAckIn(struct ip *_pip, struct alias_link *_link);
170*86d7f5d3SJohn Marino int	 GetDeltaSeqOut(struct ip *_pip, struct alias_link *_link);
171*86d7f5d3SJohn Marino void	 AddSeq(struct ip *_pip, struct alias_link *_link, int _delta);
172*86d7f5d3SJohn Marino void	 SetExpire(struct alias_link *_link, int _expire);
173*86d7f5d3SJohn Marino void	 ClearCheckNewLink(void);
174*86d7f5d3SJohn Marino void	 SetLastLineCrlfTermed(struct alias_link *_link, int _yes);
175*86d7f5d3SJohn Marino int	 GetLastLineCrlfTermed(struct alias_link *_link);
176*86d7f5d3SJohn Marino void	 SetDestCallId(struct alias_link *_link, u_int16_t _cid);
177*86d7f5d3SJohn Marino #ifndef NO_FW_PUNCH
178*86d7f5d3SJohn Marino void	 PunchFWHole(struct alias_link *_link);
179*86d7f5d3SJohn Marino #endif
180*86d7f5d3SJohn Marino 
181*86d7f5d3SJohn Marino /* Housekeeping function */
182*86d7f5d3SJohn Marino void	 HouseKeeping(void);
183*86d7f5d3SJohn Marino 
184*86d7f5d3SJohn Marino /* Tcp specfic routines */
185*86d7f5d3SJohn Marino /* lint -save -library Suppress flexelint warnings */
186*86d7f5d3SJohn Marino 
187*86d7f5d3SJohn Marino /* FTP routines */
188*86d7f5d3SJohn Marino void	 AliasHandleFtpOut(struct ip *_pip, struct alias_link *_link,
189*86d7f5d3SJohn Marino 	    int _maxpacketsize);
190*86d7f5d3SJohn Marino 
191*86d7f5d3SJohn Marino /* IRC routines */
192*86d7f5d3SJohn Marino void	 AliasHandleIrcOut(struct ip *_pip, struct alias_link *_link,
193*86d7f5d3SJohn Marino 	    int _maxsize);
194*86d7f5d3SJohn Marino 
195*86d7f5d3SJohn Marino /* RTSP routines */
196*86d7f5d3SJohn Marino void	 AliasHandleRtspOut(struct ip *_pip, struct alias_link *_link,
197*86d7f5d3SJohn Marino 	    int _maxpacketsize);
198*86d7f5d3SJohn Marino 
199*86d7f5d3SJohn Marino /* PPTP routines */
200*86d7f5d3SJohn Marino void	 AliasHandlePptpOut(struct ip *_pip, struct alias_link *_link);
201*86d7f5d3SJohn Marino void	 AliasHandlePptpIn(struct ip *_pip, struct alias_link *_link);
202*86d7f5d3SJohn Marino int	 AliasHandlePptpGreOut(struct ip *_pip);
203*86d7f5d3SJohn Marino int	 AliasHandlePptpGreIn(struct ip *_pip);
204*86d7f5d3SJohn Marino 
205*86d7f5d3SJohn Marino /* NetBIOS routines */
206*86d7f5d3SJohn Marino int	 AliasHandleUdpNbt(struct ip *_pip, struct alias_link *_link,
207*86d7f5d3SJohn Marino 	    struct in_addr *_alias_address, u_short _alias_port);
208*86d7f5d3SJohn Marino int	 AliasHandleUdpNbtNS(struct ip *_pip, struct alias_link *_link,
209*86d7f5d3SJohn Marino 	    struct in_addr *_alias_address, u_short *_alias_port,
210*86d7f5d3SJohn Marino 	    struct in_addr *_original_address, u_short *_original_port);
211*86d7f5d3SJohn Marino 
212*86d7f5d3SJohn Marino /* CUSeeMe routines */
213*86d7f5d3SJohn Marino void	 AliasHandleCUSeeMeOut(struct ip *_pip, struct alias_link *_link);
214*86d7f5d3SJohn Marino void	 AliasHandleCUSeeMeIn(struct ip *_pip, struct in_addr _original_addr);
215*86d7f5d3SJohn Marino 
216*86d7f5d3SJohn Marino /* Transparent proxy routines */
217*86d7f5d3SJohn Marino int	 ProxyCheck(struct ip *_pip, struct in_addr *_proxy_server_addr,
218*86d7f5d3SJohn Marino 	    u_short *_proxy_server_port);
219*86d7f5d3SJohn Marino void	 ProxyModify(struct alias_link *_link, struct ip *_pip,
220*86d7f5d3SJohn Marino 	    int _maxpacketsize, int _proxy_type);
221*86d7f5d3SJohn Marino 
222*86d7f5d3SJohn Marino enum alias_tcp_state {
223*86d7f5d3SJohn Marino 	ALIAS_TCP_STATE_NOT_CONNECTED,
224*86d7f5d3SJohn Marino 	ALIAS_TCP_STATE_CONNECTED,
225*86d7f5d3SJohn Marino 	ALIAS_TCP_STATE_DISCONNECTED
226*86d7f5d3SJohn Marino };
227*86d7f5d3SJohn Marino 
228*86d7f5d3SJohn Marino /*lint -restore */
229*86d7f5d3SJohn Marino 
230*86d7f5d3SJohn Marino #endif /* !_ALIAS_LOCAL_H_ */
231