alias_local.h revision 67966
1238438Sdteske/* -*- mode: c; tab-width: 3; c-basic-offset: 3; -*-
2238438Sdteske    Alias_local.h contains the function prototypes for alias.c,
3249746Sdteske    alias_db.c, alias_util.c and alias_ftp.c, alias_irc.c (as well
4252980Sdteske    as any future add-ons).  It also includes macros, globals and
5238438Sdteske    struct definitions shared by more than one alias*.c file.
6238438Sdteske
7238438Sdteske    This include file is intended to be used only within the aliasing
8238438Sdteske    software.  Outside world interfaces are defined in alias.h
9238438Sdteske
10238438Sdteske    This software is placed into the public domain with no restrictions
11238438Sdteske    on its distribution.
12238438Sdteske
13238438Sdteske    Initial version:  August, 1996  (cjm)
14238438Sdteske
15238438Sdteske     <updated several times by original author and Eivind Eklund>
16252987Sdteske
17238438Sdteske    $FreeBSD: head/sys/netinet/libalias/alias_local.h 67966 2000-10-30 12:39:41Z ru $
18238438Sdteske*/
19238438Sdteske#ifndef ALIAS_LOCAL_H
20252987Sdteske#define ALIAS_LOCAL_H
21238438Sdteske
22238438Sdteske#ifndef NULL
23238438Sdteske#define NULL 0
24238438Sdteske#endif
25238438Sdteske
26238438Sdteske/*
27238438Sdteske    Macros
28238438Sdteske */
29238438Sdteske
30238438Sdteske/*
31240684Sdteske   The following macro is used to update an
32240684Sdteske   internet checksum.  "delta" is a 32-bit
33244675Sdteske   accumulation of all the changes to the
34240684Sdteske   checksum (adding in new 16-bit words and
35240684Sdteske   subtracting out old words), and "cksum"
36240684Sdteske   is the checksum value to be updated.
37238438Sdteske*/
38240684Sdteske#define ADJUST_CHECKSUM(acc, cksum) { \
39238438Sdteske    acc += cksum; \
40238438Sdteske    if (acc < 0) \
41242107Sdteske    { \
42242107Sdteske        acc = -acc; \
43260678Sdteske        acc = (acc >> 16) + (acc & 0xffff); \
44260678Sdteske        acc += acc >> 16; \
45238438Sdteske        cksum = (u_short) ~acc; \
46238438Sdteske    } \
47238438Sdteske    else \
48238438Sdteske    { \
49238438Sdteske        acc = (acc >> 16) + (acc & 0xffff); \
50238438Sdteske        acc += acc >> 16; \
51238438Sdteske        cksum = (u_short) acc; \
52238438Sdteske    } \
53238438Sdteske}
54238438Sdteske
55251264Sdteske
56238438Sdteske/*
57238438Sdteske    Globals
58238438Sdteske*/
59238438Sdteske
60238438Sdteskeextern int packetAliasMode;
61251264Sdteske
62251264Sdteske
63238438Sdteske/*
64251190Sdteske    Structs
65251190Sdteske*/
66251190Sdteske
67251190Sdteskestruct alias_link;    /* Incomplete structure */
68251190Sdteske
69251190Sdteske
70251190Sdteske/*
71238438Sdteske    Prototypes
72249751Sdteske*/
73249751Sdteske
74249751Sdteske/* General utilities */
75249751Sdteskeu_short IpChecksum(struct ip *);
76249751Sdteskeu_short TcpChecksum(struct ip *);
77249751Sdteskevoid DifferentialChecksum(u_short *, u_short *, u_short *, int);
78249751Sdteske
79249751Sdteske/* Internal data access */
80249751Sdteskestruct alias_link *
81249751SdteskeFindIcmpIn(struct in_addr, struct in_addr, u_short);
82249751Sdteske
83251236Sdteskestruct alias_link *
84251236SdteskeFindIcmpOut(struct in_addr, struct in_addr, u_short);
85249751Sdteske
86238438Sdteskestruct alias_link *
87238438SdteskeFindFragmentIn1(struct in_addr, struct in_addr, u_short);
88238438Sdteske
89238438Sdteskestruct alias_link *
90241899SdteskeFindFragmentIn2(struct in_addr, struct in_addr, u_short);
91245401Sdteske
92242096Sdteskestruct alias_link *
93249751SdteskeAddFragmentPtrLink(struct in_addr, u_short);
94251190Sdteske
95251190Sdteskestruct alias_link *
96238438SdteskeFindFragmentPtr(struct in_addr, u_short);
97240768Sdteske
98240768Sdteskestruct alias_link *
99240768SdteskeFindProtoIn(struct in_addr, struct in_addr, u_char);
100251236Sdteske
101240768Sdteskestruct alias_link *
102238438SdteskeFindProtoOut(struct in_addr, struct in_addr, u_char);
103238438Sdteske
104238438Sdteskestruct alias_link *
105238438SdteskeFindUdpTcpIn (struct in_addr, struct in_addr, u_short, u_short, u_char);
106238438Sdteske
107238438Sdteskestruct alias_link *
108238438SdteskeFindUdpTcpOut(struct in_addr, struct in_addr, u_short, u_short, u_char);
109238438Sdteske
110238438Sdteskestruct alias_link *
111238438SdteskeAddPptp(struct in_addr, struct in_addr, struct in_addr, u_int16_t);
112250633Sdteske
113238438Sdteskestruct alias_link *
114252178SdteskeFindPptpOutByCallId(struct in_addr, struct in_addr, u_int16_t);
115238438Sdteske
116238438Sdteskestruct alias_link *
117238438SdteskeFindPptpInByCallId(struct in_addr, struct in_addr, u_int16_t);
118238438Sdteske
119238438Sdteskestruct alias_link *
120238438SdteskeFindPptpOutByPeerCallId(struct in_addr, struct in_addr, u_int16_t);
121238438Sdteske
122238438Sdteskestruct alias_link *
123238438SdteskeFindPptpInByPeerCallId(struct in_addr, struct in_addr, u_int16_t);
124238438Sdteske
125238438Sdteskestruct alias_link *
126238438SdteskeQueryUdpTcpIn (struct in_addr, struct in_addr, u_short, u_short, u_char);
127251933Sdteske
128238438Sdteskestruct alias_link *
129241899SdteskeQueryUdpTcpOut(struct in_addr, struct in_addr, u_short, u_short, u_char);
130241899Sdteske
131241899Sdteskestruct alias_link *
132251236SdteskeFindRtspOut(struct in_addr, struct in_addr, u_short, u_short, u_char);
133238438Sdteske
134256181Sdteskestruct in_addr
135242107SdteskeFindOriginalAddress(struct in_addr);
136241899Sdteske
137256181Sdteskestruct in_addr
138241899SdteskeFindAliasAddress(struct in_addr);
139241899Sdteske
140238438Sdteske/* External data access/modification */
141241899Sdteskeint FindNewPortGroup(struct in_addr, struct in_addr,
142241899Sdteske                     u_short, u_short, u_short, u_char, u_char);
143241899Sdteskevoid GetFragmentAddr(struct alias_link *, struct in_addr *);
144238438Sdteskevoid SetFragmentAddr(struct alias_link *, struct in_addr);
145238438Sdteskevoid GetFragmentPtr(struct alias_link *, char **);
146260678Sdteskevoid SetFragmentPtr(struct alias_link *, char *);
147260678Sdteskevoid SetStateIn(struct alias_link *, int);
148238438Sdteskevoid SetStateOut(struct alias_link *, int);
149238438Sdteskeint GetStateIn(struct alias_link *);
150260678Sdteskeint GetStateOut(struct alias_link *);
151260678Sdteskestruct in_addr GetOriginalAddress(struct alias_link *);
152260678Sdteskestruct in_addr GetDestAddress(struct alias_link *);
153260678Sdteskestruct in_addr GetAliasAddress(struct alias_link *);
154238438Sdteskestruct in_addr GetDefaultAliasAddress(void);
155238438Sdteskevoid SetDefaultAliasAddress(struct in_addr);
156260678Sdteskeu_short GetOriginalPort(struct alias_link *);
157260678Sdteskeu_short GetAliasPort(struct alias_link *);
158260678Sdteskestruct in_addr GetProxyAddress(struct alias_link *);
159260678Sdteskevoid SetProxyAddress(struct alias_link *, struct in_addr);
160238438Sdteskeu_short GetProxyPort(struct alias_link *);
161238438Sdteskevoid SetProxyPort(struct alias_link *, u_short);
162260678Sdteskevoid SetAckModified(struct alias_link *);
163260678Sdteskeint GetAckModified(struct alias_link *);
164260678Sdteskeint GetDeltaAckIn(struct ip *, struct alias_link *);
165260678Sdteskeint GetDeltaSeqOut(struct ip *, struct alias_link *);
166238438Sdteskevoid AddSeq(struct ip *, struct alias_link *, int);
167252017Sdteskevoid SetExpire(struct alias_link *, int);
168252017Sdteskevoid ClearCheckNewLink(void);
169238438Sdteskevoid SetLastLineCrlfTermed(struct alias_link *, int);
170238438Sdteskeint GetLastLineCrlfTermed(struct alias_link *);
171238438Sdteskevoid SetDestCallId(struct alias_link *, u_int16_t);
172238438Sdteske#ifndef NO_FW_PUNCH
173238438Sdteskevoid PunchFWHole(struct alias_link *);
174238438Sdteske#endif
175238438Sdteske
176
177/* Housekeeping function */
178void HouseKeeping(void);
179
180/* Tcp specfic routines */
181/*lint -save -library Suppress flexelint warnings */
182
183/* FTP routines */
184void AliasHandleFtpOut(struct ip *, struct alias_link *, int);
185
186/* IRC routines */
187void AliasHandleIrcOut(struct ip *, struct alias_link *, int);
188
189/* RTSP routines */
190void AliasHandleRtspOut(struct ip *, struct alias_link *, int);
191
192/* PPTP routines */
193void AliasHandlePptpOut(struct ip *, struct alias_link *);
194void AliasHandlePptpIn(struct ip *, struct alias_link *);
195int AliasHandlePptpGreOut(struct ip *);
196int AliasHandlePptpGreIn(struct ip *);
197
198/* NetBIOS routines */
199int AliasHandleUdpNbt(struct ip *, struct alias_link *, struct in_addr *, u_short);
200int AliasHandleUdpNbtNS(struct ip *, struct alias_link *, struct in_addr *, u_short *, struct in_addr *, u_short *);
201
202/* CUSeeMe routines */
203void AliasHandleCUSeeMeOut(struct ip *, struct alias_link *);
204void AliasHandleCUSeeMeIn(struct ip *, struct in_addr);
205
206/* Transparent proxy routines */
207int ProxyCheck(struct ip *, struct in_addr *, u_short *);
208void ProxyModify(struct alias_link *, struct ip *, int, int);
209
210
211enum alias_tcp_state {
212    ALIAS_TCP_STATE_NOT_CONNECTED,
213    ALIAS_TCP_STATE_CONNECTED,
214    ALIAS_TCP_STATE_DISCONNECTED
215};
216/*lint -restore */
217#endif /* defined(ALIAS_LOCAL_H) */
218