alias_local.h revision 85964
1132720Skan/*-
2132720Skan * Copyright (c) 2001 Charles Mott <cm@linktel.net>
3169691Skan * All rights reserved.
4132720Skan *
5132720Skan * Redistribution and use in source and binary forms, with or without
6132720Skan * modification, are permitted provided that the following conditions
7132720Skan * are met:
8132720Skan * 1. Redistributions of source code must retain the above copyright
9132720Skan *    notice, this list of conditions and the following disclaimer.
10132720Skan * 2. Redistributions in binary form must reproduce the above copyright
11132720Skan *    notice, this list of conditions and the following disclaimer in the
12132720Skan *    documentation and/or other materials provided with the distribution.
13132720Skan *
14132720Skan * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15132720Skan * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16132720Skan * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17132720Skan * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18132720Skan * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19169691Skan * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20132720Skan * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21132720Skan * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22132720Skan * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23132720Skan * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24132720Skan * SUCH DAMAGE.
25132720Skan *
26132720Skan * $FreeBSD: head/sys/netinet/libalias/alias_local.h 85964 2001-11-03 11:34:09Z brian $
27132720Skan */
28132720Skan
29132720Skan/*
30132720Skan * Alias_local.h contains the function prototypes for alias.c,
31169691Skan * alias_db.c, alias_util.c and alias_ftp.c, alias_irc.c (as well
32169691Skan * as any future add-ons).  It also includes macros, globals and
33169691Skan * struct definitions shared by more than one alias*.c file.
34169691Skan *
35132720Skan * This include file is intended to be used only within the aliasing
36132720Skan * software.  Outside world interfaces are defined in alias.h
37132720Skan *
38132720Skan * This software is placed into the public domain with no restrictions
39132720Skan * on its distribution.
40132720Skan *
41132720Skan * Initial version:  August, 1996  (cjm)
42169691Skan *
43132720Skan * <updated several times by original author and Eivind Eklund>
44169691Skan */
45169691Skan
46132720Skan#ifndef _ALIAS_LOCAL_H_
47132720Skan#define	_ALIAS_LOCAL_H_
48132720Skan
49132720Skan/* Macros */
50132720Skan
51132720Skan/*
52132720Skan * The following macro is used to update an
53132720Skan * internet checksum.  "delta" is a 32-bit
54132720Skan * accumulation of all the changes to the
55169691Skan * checksum (adding in new 16-bit words and
56169691Skan * subtracting out old words), and "cksum"
57132720Skan * is the checksum value to be updated.
58132720Skan */
59132720Skan#define	ADJUST_CHECKSUM(acc, cksum) \
60132720Skan	do { \
61132720Skan		acc += cksum; \
62132720Skan		if (acc < 0) { \
63132720Skan			acc = -acc; \
64132720Skan			acc = (acc >> 16) + (acc & 0xffff); \
65132720Skan			acc += acc >> 16; \
66132720Skan			cksum = (u_short) ~acc; \
67132720Skan		} else { \
68169691Skan			acc = (acc >> 16) + (acc & 0xffff); \
69169691Skan			acc += acc >> 16; \
70132720Skan			cksum = (u_short) acc; \
71132720Skan		} \
72132720Skan	} while (0)
73132720Skan
74132720Skan/* Globals */
75132720Skan
76132720Skanextern int packetAliasMode;
77132720Skan
78132720Skan/* Prototypes */
79132720Skan
80132720Skan/* General utilities */
81132720Skanu_short	 IpChecksum(struct ip *_pip);
82132720Skanu_short	 TcpChecksum(struct ip *_pip);
83132720Skanvoid	 DifferentialChecksum(u_short *_cksum, u_short *_new, u_short *_old,
84132720Skan	    int _n);
85132720Skan
86132720Skan/* Internal data access */
87132720Skanstruct alias_link *
88132720Skan	 FindIcmpIn(struct in_addr _dst_addr, struct in_addr _alias_addr,
89132720Skan	    u_short _id_alias, int _create);
90132720Skanstruct alias_link *
91132720Skan	 FindIcmpOut(struct in_addr _src_addr, struct in_addr _dst_addr,
92132720Skan	    u_short _id, int _create);
93132720Skanstruct alias_link *
94132720Skan	 FindFragmentIn1(struct in_addr _dst_addr, struct in_addr _alias_addr,
95132720Skan	    u_short _ip_id);
96132720Skanstruct alias_link *
97132720Skan	 FindFragmentIn2(struct in_addr _dst_addr, struct in_addr _alias_addr,
98132720Skan	    u_short _ip_id);
99132720Skanstruct alias_link *
100132720Skan	 AddFragmentPtrLink(struct in_addr _dst_addr, u_short _ip_id);
101132720Skanstruct alias_link *
102132720Skan	 FindFragmentPtr(struct in_addr _dst_addr, u_short _ip_id);
103132720Skanstruct alias_link *
104132720Skan	 FindProtoIn(struct in_addr _dst_addr, struct in_addr _alias_addr,
105132720Skan	    u_char _proto);
106132720Skanstruct alias_link *
107132720Skan	 FindProtoOut(struct in_addr _src_addr, struct in_addr _dst_addr,
108132720Skan	    u_char _proto);
109132720Skanstruct alias_link *
110132720Skan	 FindUdpTcpIn(struct in_addr _dst_addr, struct in_addr _alias_addr,
111132720Skan	    u_short _dst_port, u_short _alias_port, u_char _proto, int _create);
112132720Skanstruct alias_link *
113132720Skan	 FindUdpTcpOut(struct in_addr _src_addr, struct in_addr _dst_addr,
114132720Skan	    u_short _src_port, u_short _dst_port, u_char _proto, int _create);
115132720Skanstruct alias_link *
116132720Skan	 AddPptp(struct in_addr _src_addr, struct in_addr _dst_addr,
117132720Skan	    struct in_addr _alias_addr, u_int16_t _src_call_id);
118132720Skanstruct alias_link *
119132720Skan	 FindPptpOutByCallId(struct in_addr _src_addr,
120132720Skan	    struct in_addr _dst_addr, u_int16_t _src_call_id);
121132720Skanstruct alias_link *
122132720Skan	 FindPptpInByCallId(struct in_addr _dst_addr,
123132720Skan	    struct in_addr _alias_addr, u_int16_t _dst_call_id);
124132720Skanstruct alias_link *
125132720Skan	 FindPptpOutByPeerCallId(struct in_addr _src_addr,
126132720Skan	    struct in_addr _dst_addr, u_int16_t _dst_call_id);
127132720Skanstruct alias_link *
128132720Skan	 FindPptpInByPeerCallId(struct in_addr _dst_addr,
129132720Skan	    struct in_addr _alias_addr, u_int16_t _alias_call_id);
130132720Skanstruct alias_link *
131132720Skan	 FindRtspOut(struct in_addr _src_addr, struct in_addr _dst_addr,
132132720Skan	    u_short _src_port, u_short _alias_port, u_char _proto);
133132720Skanstruct in_addr
134132720Skan	 FindOriginalAddress(struct in_addr _alias_addr);
135132720Skanstruct in_addr
136132720Skan	 FindAliasAddress(struct in_addr _original_addr);
137132720Skan
138132720Skan/* External data access/modification */
139132720Skanint	 FindNewPortGroup(struct in_addr _dst_addr, struct in_addr _alias_addr,
140132720Skan                     u_short _src_port, u_short _dst_port, u_short _port_count,
141132720Skan		     u_char _proto, u_char _align);
142132720Skanvoid	 GetFragmentAddr(struct alias_link *_link, struct in_addr *_src_addr);
143132720Skanvoid	 SetFragmentAddr(struct alias_link *_link, struct in_addr _src_addr);
144132720Skanvoid	 GetFragmentPtr(struct alias_link *_link, char **_fptr);
145132720Skanvoid	 SetFragmentPtr(struct alias_link *_link, char *fptr);
146132720Skanvoid	 SetStateIn(struct alias_link *_link, int _state);
147132720Skanvoid	 SetStateOut(struct alias_link *_link, int _state);
148132720Skanint	 GetStateIn(struct alias_link *_link);
149132720Skanint	 GetStateOut(struct alias_link *_link);
150132720Skanstruct in_addr
151132720Skan	 GetOriginalAddress(struct alias_link *_link);
152132720Skanstruct in_addr
153132720Skan	 GetDestAddress(struct alias_link *_link);
154132720Skanstruct in_addr
155132720Skan	 GetAliasAddress(struct alias_link *_link);
156132720Skanstruct in_addr
157132720Skan	 GetDefaultAliasAddress(void);
158132720Skanvoid	 SetDefaultAliasAddress(struct in_addr _alias_addr);
159132720Skanu_short	 GetOriginalPort(struct alias_link *_link);
160132720Skanu_short	 GetAliasPort(struct alias_link *_link);
161132720Skanstruct in_addr
162132720Skan	 GetProxyAddress(struct alias_link *_link);
163132720Skanvoid	 SetProxyAddress(struct alias_link *_link, struct in_addr _addr);
164132720Skanu_short	 GetProxyPort(struct alias_link *_link);
165132720Skanvoid	 SetProxyPort(struct alias_link *_link, u_short _port);
166132720Skanvoid	 SetAckModified(struct alias_link *_link);
167132720Skanint	 GetAckModified(struct alias_link *_link);
168132720Skanint	 GetDeltaAckIn(struct ip *_pip, struct alias_link *_link);
169132720Skanint	 GetDeltaSeqOut(struct ip *_pip, struct alias_link *_link);
170132720Skanvoid	 AddSeq(struct ip *_pip, struct alias_link *_link, int _delta);
171132720Skanvoid	 SetExpire(struct alias_link *_link, int _expire);
172132720Skanvoid	 ClearCheckNewLink(void);
173132720Skanvoid	 SetProtocolFlags(struct alias_link *_link, int _pflags);
174132720Skanint	 GetProtocolFlags(struct alias_link *_link);
175132720Skanvoid	 SetDestCallId(struct alias_link *_link, u_int16_t _cid);
176132720Skan#ifndef NO_FW_PUNCH
177132720Skanvoid	 PunchFWHole(struct alias_link *_link);
178132720Skan#endif
179132720Skan
180132720Skan/* Housekeeping function */
181132720Skanvoid	 HouseKeeping(void);
182132720Skan
183132720Skan/* Tcp specfic routines */
184132720Skan/* lint -save -library Suppress flexelint warnings */
185132720Skan
186132720Skan/* FTP routines */
187132720Skanvoid	 AliasHandleFtpOut(struct ip *_pip, struct alias_link *_link,
188132720Skan	    int _maxpacketsize);
189132720Skan
190132720Skan/* IRC routines */
191132720Skanvoid	 AliasHandleIrcOut(struct ip *_pip, struct alias_link *_link,
192132720Skan	    int _maxsize);
193132720Skan
194132720Skan/* RTSP routines */
195132720Skanvoid	 AliasHandleRtspOut(struct ip *_pip, struct alias_link *_link,
196132720Skan	    int _maxpacketsize);
197132720Skan
198132720Skan/* PPTP routines */
199132720Skanvoid	 AliasHandlePptpOut(struct ip *_pip, struct alias_link *_link);
200132720Skanvoid	 AliasHandlePptpIn(struct ip *_pip, struct alias_link *_link);
201132720Skanint	 AliasHandlePptpGreOut(struct ip *_pip);
202132720Skanint	 AliasHandlePptpGreIn(struct ip *_pip);
203132720Skan
204132720Skan/* NetBIOS routines */
205132720Skanint	 AliasHandleUdpNbt(struct ip *_pip, struct alias_link *_link,
206132720Skan	    struct in_addr *_alias_address, u_short _alias_port);
207132720Skanint	 AliasHandleUdpNbtNS(struct ip *_pip, struct alias_link *_link,
208132720Skan	    struct in_addr *_alias_address, u_short *_alias_port,
209132720Skan	    struct in_addr *_original_address, u_short *_original_port);
210132720Skan
211132720Skan/* CUSeeMe routines */
212132720Skanvoid	 AliasHandleCUSeeMeOut(struct ip *_pip, struct alias_link *_link);
213132720Skanvoid	 AliasHandleCUSeeMeIn(struct ip *_pip, struct in_addr _original_addr);
214132720Skan
215132720Skan/* Transparent proxy routines */
216132720Skanint	 ProxyCheck(struct ip *_pip, struct in_addr *_proxy_server_addr,
217132720Skan	    u_short *_proxy_server_port);
218132720Skanvoid	 ProxyModify(struct alias_link *_link, struct ip *_pip,
219132720Skan	    int _maxpacketsize, int _proxy_type);
220132720Skan
221132720Skanenum alias_tcp_state {
222132720Skan	ALIAS_TCP_STATE_NOT_CONNECTED,
223132720Skan	ALIAS_TCP_STATE_CONNECTED,
224132720Skan	ALIAS_TCP_STATE_DISCONNECTED
225132720Skan};
226132720Skan
227132720Skan/*lint -restore */
228132720Skan
229132720Skan#endif /* !_ALIAS_LOCAL_H_ */
230132720Skan