xref: /freebsd/sys/netinet/libalias/alias_local.h (revision 0b381bf1fd8fbb2df974c318d58643ecfeec44b0)
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$
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 
50 extern int packetAliasMode;
51 
52 /* Prototypes */
53 
54 /* General utilities */
55 u_short	 IpChecksum(struct ip *_pip);
56 u_short	 TcpChecksum(struct ip *_pip);
57 void	 DifferentialChecksum(u_short *_cksum, u_short *_new, u_short *_old,
58 	    int _n);
59 
60 /* Internal data access */
61 struct alias_link *
62 	 FindIcmpIn(struct in_addr _dst_addr, struct in_addr _alias_addr,
63 	    u_short _id_alias, int _create);
64 struct alias_link *
65 	 FindIcmpOut(struct in_addr _src_addr, struct in_addr _dst_addr,
66 	    u_short _id, int _create);
67 struct alias_link *
68 	 FindFragmentIn1(struct in_addr _dst_addr, struct in_addr _alias_addr,
69 	    u_short _ip_id);
70 struct alias_link *
71 	 FindFragmentIn2(struct in_addr _dst_addr, struct in_addr _alias_addr,
72 	    u_short _ip_id);
73 struct alias_link *
74 	 AddFragmentPtrLink(struct in_addr _dst_addr, u_short _ip_id);
75 struct alias_link *
76 	 FindFragmentPtr(struct in_addr _dst_addr, u_short _ip_id);
77 struct alias_link *
78 	 FindProtoIn(struct in_addr _dst_addr, struct in_addr _alias_addr,
79 	    u_char _proto);
80 struct alias_link *
81 	 FindProtoOut(struct in_addr _src_addr, struct in_addr _dst_addr,
82 	    u_char _proto);
83 struct 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);
86 struct 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);
89 struct 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);
92 struct alias_link *
93 	 FindPptpOutByCallId(struct in_addr _src_addr,
94 	    struct in_addr _dst_addr, u_int16_t _src_call_id);
95 struct alias_link *
96 	 FindPptpInByCallId(struct in_addr _dst_addr,
97 	    struct in_addr _alias_addr, u_int16_t _dst_call_id);
98 struct alias_link *
99 	 FindPptpOutByPeerCallId(struct in_addr _src_addr,
100 	    struct in_addr _dst_addr, u_int16_t _dst_call_id);
101 struct alias_link *
102 	 FindPptpInByPeerCallId(struct in_addr _dst_addr,
103 	    struct in_addr _alias_addr, u_int16_t _alias_call_id);
104 struct 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);
107 struct in_addr
108 	 FindOriginalAddress(struct in_addr _alias_addr);
109 struct in_addr
110 	 FindAliasAddress(struct in_addr _original_addr);
111 
112 /* External data access/modification */
113 int	 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);
116 void	 GetFragmentAddr(struct alias_link *_link, struct in_addr *_src_addr);
117 void	 SetFragmentAddr(struct alias_link *_link, struct in_addr _src_addr);
118 void	 GetFragmentPtr(struct alias_link *_link, char **_fptr);
119 void	 SetFragmentPtr(struct alias_link *_link, char *fptr);
120 void	 SetStateIn(struct alias_link *_link, int _state);
121 void	 SetStateOut(struct alias_link *_link, int _state);
122 int	 GetStateIn(struct alias_link *_link);
123 int	 GetStateOut(struct alias_link *_link);
124 struct in_addr
125 	 GetOriginalAddress(struct alias_link *_link);
126 struct in_addr
127 	 GetDestAddress(struct alias_link *_link);
128 struct in_addr
129 	 GetAliasAddress(struct alias_link *_link);
130 struct in_addr
131 	 GetDefaultAliasAddress(void);
132 void	 SetDefaultAliasAddress(struct in_addr _alias_addr);
133 u_short	 GetOriginalPort(struct alias_link *_link);
134 u_short	 GetAliasPort(struct alias_link *_link);
135 struct in_addr
136 	 GetProxyAddress(struct alias_link *_link);
137 void	 SetProxyAddress(struct alias_link *_link, struct in_addr _addr);
138 u_short	 GetProxyPort(struct alias_link *_link);
139 void	 SetProxyPort(struct alias_link *_link, u_short _port);
140 void	 SetAckModified(struct alias_link *_link);
141 int	 GetAckModified(struct alias_link *_link);
142 int	 GetDeltaAckIn(struct ip *_pip, struct alias_link *_link);
143 int	 GetDeltaSeqOut(struct ip *_pip, struct alias_link *_link);
144 void	 AddSeq(struct ip *_pip, struct alias_link *_link, int _delta);
145 void	 SetExpire(struct alias_link *_link, int _expire);
146 void	 ClearCheckNewLink(void);
147 void	 SetProtocolFlags(struct alias_link *_link, int _pflags);
148 int	 GetProtocolFlags(struct alias_link *_link);
149 void	 SetDestCallId(struct alias_link *_link, u_int16_t _cid);
150 #ifndef NO_FW_PUNCH
151 void	 PunchFWHole(struct alias_link *_link);
152 #endif
153 
154 /* Housekeeping function */
155 void	 HouseKeeping(void);
156 
157 /* Tcp specfic routines */
158 /* lint -save -library Suppress flexelint warnings */
159 
160 /* FTP routines */
161 void	 AliasHandleFtpOut(struct ip *_pip, struct alias_link *_link,
162 	    int _maxpacketsize);
163 
164 /* IRC routines */
165 void	 AliasHandleIrcOut(struct ip *_pip, struct alias_link *_link,
166 	    int _maxsize);
167 
168 /* RTSP routines */
169 void	 AliasHandleRtspOut(struct ip *_pip, struct alias_link *_link,
170 	    int _maxpacketsize);
171 
172 /* PPTP routines */
173 void	 AliasHandlePptpOut(struct ip *_pip, struct alias_link *_link);
174 void	 AliasHandlePptpIn(struct ip *_pip, struct alias_link *_link);
175 int	 AliasHandlePptpGreOut(struct ip *_pip);
176 int	 AliasHandlePptpGreIn(struct ip *_pip);
177 
178 /* NetBIOS routines */
179 int	 AliasHandleUdpNbt(struct ip *_pip, struct alias_link *_link,
180 	    struct in_addr *_alias_address, u_short _alias_port);
181 int	 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 */
186 void	 AliasHandleCUSeeMeOut(struct ip *_pip, struct alias_link *_link);
187 void	 AliasHandleCUSeeMeIn(struct ip *_pip, struct in_addr _original_addr);
188 
189 /* Transparent proxy routines */
190 int	 ProxyCheck(struct ip *_pip, struct in_addr *_proxy_server_addr,
191 	    u_short *_proxy_server_port);
192 void	 ProxyModify(struct alias_link *_link, struct ip *_pip,
193 	    int _maxpacketsize, int _proxy_type);
194 
195 enum 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