alias_local.h revision 67966
159243Sobrien/* -*- mode: c; tab-width: 3; c-basic-offset: 3; -*-
259243Sobrien    Alias_local.h contains the function prototypes for alias.c,
359243Sobrien    alias_db.c, alias_util.c and alias_ftp.c, alias_irc.c (as well
459243Sobrien    as any future add-ons).  It also includes macros, globals and
559243Sobrien    struct definitions shared by more than one alias*.c file.
659243Sobrien
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: head/sys/netinet/libalias/alias_local.h 67966 2000-10-30 12:39:41Z ru $
18*/
19#ifndef ALIAS_LOCAL_H
20#define ALIAS_LOCAL_H
21
22#ifndef NULL
23#define NULL 0
24#endif
25
26/*
27    Macros
28 */
29
30/*
31   The following macro is used to update an
32   internet checksum.  "delta" is a 32-bit
33   accumulation of all the changes to the
34   checksum (adding in new 16-bit words and
35   subtracting out old words), and "cksum"
36   is the checksum value to be updated.
37*/
38#define ADJUST_CHECKSUM(acc, cksum) { \
39    acc += cksum; \
40    if (acc < 0) \
41    { \
42        acc = -acc; \
43        acc = (acc >> 16) + (acc & 0xffff); \
44        acc += acc >> 16; \
45        cksum = (u_short) ~acc; \
46    } \
47    else \
48    { \
49        acc = (acc >> 16) + (acc & 0xffff); \
50        acc += acc >> 16; \
51        cksum = (u_short) acc; \
52    } \
53}
54
55
56/*
57    Globals
58*/
59
60extern int packetAliasMode;
61
62
63/*
64    Structs
65*/
66
67struct alias_link;    /* Incomplete structure */
68
69
70/*
71    Prototypes
72*/
73
74/* General utilities */
75u_short IpChecksum(struct ip *);
76u_short TcpChecksum(struct ip *);
77void DifferentialChecksum(u_short *, u_short *, u_short *, int);
78
79/* Internal data access */
80struct alias_link *
81FindIcmpIn(struct in_addr, struct in_addr, u_short);
82
83struct alias_link *
84FindIcmpOut(struct in_addr, struct in_addr, u_short);
85
86struct alias_link *
87FindFragmentIn1(struct in_addr, struct in_addr, u_short);
88
89struct alias_link *
90FindFragmentIn2(struct in_addr, struct in_addr, u_short);
91
92struct alias_link *
93AddFragmentPtrLink(struct in_addr, u_short);
94
95struct alias_link *
96FindFragmentPtr(struct in_addr, u_short);
97
98struct alias_link *
99FindProtoIn(struct in_addr, struct in_addr, u_char);
100
101struct alias_link *
102FindProtoOut(struct in_addr, struct in_addr, u_char);
103
104struct alias_link *
105FindUdpTcpIn (struct in_addr, struct in_addr, u_short, u_short, u_char);
106
107struct alias_link *
108FindUdpTcpOut(struct in_addr, struct in_addr, u_short, u_short, u_char);
109
110struct alias_link *
111AddPptp(struct in_addr, struct in_addr, struct in_addr, u_int16_t);
112
113struct alias_link *
114FindPptpOutByCallId(struct in_addr, struct in_addr, u_int16_t);
115
116struct alias_link *
117FindPptpInByCallId(struct in_addr, struct in_addr, u_int16_t);
118
119struct alias_link *
120FindPptpOutByPeerCallId(struct in_addr, struct in_addr, u_int16_t);
121
122struct alias_link *
123FindPptpInByPeerCallId(struct in_addr, struct in_addr, u_int16_t);
124
125struct alias_link *
126QueryUdpTcpIn (struct in_addr, struct in_addr, u_short, u_short, u_char);
127
128struct alias_link *
129QueryUdpTcpOut(struct in_addr, struct in_addr, u_short, u_short, u_char);
130
131struct alias_link *
132FindRtspOut(struct in_addr, struct in_addr, u_short, u_short, u_char);
133
134struct in_addr
135FindOriginalAddress(struct in_addr);
136
137struct in_addr
138FindAliasAddress(struct in_addr);
139
140/* External data access/modification */
141int FindNewPortGroup(struct in_addr, struct in_addr,
142                     u_short, u_short, u_short, u_char, u_char);
143void GetFragmentAddr(struct alias_link *, struct in_addr *);
144void SetFragmentAddr(struct alias_link *, struct in_addr);
145void GetFragmentPtr(struct alias_link *, char **);
146void SetFragmentPtr(struct alias_link *, char *);
147void SetStateIn(struct alias_link *, int);
148void SetStateOut(struct alias_link *, int);
149int GetStateIn(struct alias_link *);
150int GetStateOut(struct alias_link *);
151struct in_addr GetOriginalAddress(struct alias_link *);
152struct in_addr GetDestAddress(struct alias_link *);
153struct in_addr GetAliasAddress(struct alias_link *);
154struct in_addr GetDefaultAliasAddress(void);
155void SetDefaultAliasAddress(struct in_addr);
156u_short GetOriginalPort(struct alias_link *);
157u_short GetAliasPort(struct alias_link *);
158struct in_addr GetProxyAddress(struct alias_link *);
159void SetProxyAddress(struct alias_link *, struct in_addr);
160u_short GetProxyPort(struct alias_link *);
161void SetProxyPort(struct alias_link *, u_short);
162void SetAckModified(struct alias_link *);
163int GetAckModified(struct alias_link *);
164int GetDeltaAckIn(struct ip *, struct alias_link *);
165int GetDeltaSeqOut(struct ip *, struct alias_link *);
166void AddSeq(struct ip *, struct alias_link *, int);
167void SetExpire(struct alias_link *, int);
168void ClearCheckNewLink(void);
169void SetLastLineCrlfTermed(struct alias_link *, int);
170int GetLastLineCrlfTermed(struct alias_link *);
171void SetDestCallId(struct alias_link *, u_int16_t);
172#ifndef NO_FW_PUNCH
173void PunchFWHole(struct alias_link *);
174#endif
175
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