alias_local.h revision 59726
155714Skris/* -*- mode: c; tab-width: 3; c-basic-offset: 3; -*-
255714Skris    Alias_local.h contains the function prototypes for alias.c,
355714Skris    alias_db.c, alias_util.c and alias_ftp.c, alias_irc.c (as well
455714Skris    as any future add-ons).  It also includes macros, globals and
555714Skris    struct definitions shared by more than one alias*.c file.
655714Skris
755714Skris    This include file is intended to be used only within the aliasing
8280304Sjkim    software.  Outside world interfaces are defined in alias.h
955714Skris
1055714Skris    This software is placed into the public domain with no restrictions
1155714Skris    on its distribution.
1255714Skris
1355714Skris    Initial version:  August, 1996  (cjm)
1455714Skris
15280304Sjkim     <updated several times by original author and Eivind Eklund>
1655714Skris
1755714Skris    $FreeBSD: head/sys/netinet/libalias/alias_local.h 59726 2000-04-28 13:44:49Z ru $
1855714Skris*/
1955714Skris#ifndef ALIAS_LOCAL_H
2055714Skris#define ALIAS_LOCAL_H
2155714Skris
22280304Sjkim#ifndef NULL
2355714Skris#define NULL 0
2455714Skris#endif
2555714Skris
2655714Skris/*
2755714Skris    Macros
2855714Skris */
2955714Skris
3055714Skris/*
3155714Skris   The following macro is used to update an
3255714Skris   internet checksum.  "delta" is a 32-bit
3355714Skris   accumulation of all the changes to the
3455714Skris   checksum (adding in new 16-bit words and
3555714Skris   subtracting out old words), and "cksum"
3655714Skris   is the checksum value to be updated.
37280304Sjkim*/
3855714Skris#define ADJUST_CHECKSUM(acc, cksum) { \
3955714Skris    acc += cksum; \
40280304Sjkim    if (acc < 0) \
4155714Skris    { \
4255714Skris        acc = -acc; \
4355714Skris        acc = (acc >> 16) + (acc & 0xffff); \
4455714Skris        acc += acc >> 16; \
4555714Skris        cksum = (u_short) ~acc; \
4655714Skris    } \
4755714Skris    else \
4855714Skris    { \
4955714Skris        acc = (acc >> 16) + (acc & 0xffff); \
5055714Skris        acc += acc >> 16; \
5155714Skris        cksum = (u_short) acc; \
52280304Sjkim    } \
5355714Skris}
5455714Skris
5555714Skris
5655714Skris/*
5755714Skris    Globals
5855714Skris*/
5955714Skris
6055714Skrisextern int packetAliasMode;
6155714Skris
62109998Smarkm
63280304Sjkim/*
6455714Skris    Structs
6555714Skris*/
6655714Skris
6755714Skrisstruct alias_link;    /* Incomplete structure */
6855714Skris
69238405Sjkim
70280304Sjkim/*
71280304Sjkim    Prototypes
72280304Sjkim*/
73280304Sjkim
74109998Smarkm/* General utilities */
75280304Sjkimu_short IpChecksum(struct ip *);
7655714Skrisu_short TcpChecksum(struct ip *);
77280304Sjkimvoid DifferentialChecksum(u_short *, u_short *, u_short *, int);
78109998Smarkm
79280304Sjkim/* Internal data access */
80280304Sjkimstruct alias_link *
8155714SkrisFindIcmpIn(struct in_addr, struct in_addr, u_short);
82280304Sjkim
83280304Sjkimstruct alias_link *
84280304SjkimFindIcmpOut(struct in_addr, struct in_addr, u_short);
8555714Skris
86280304Sjkimstruct alias_link *
87280304SjkimFindFragmentIn1(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 in_addr
111FindOriginalAddress(struct in_addr);
112
113struct in_addr
114FindAliasAddress(struct in_addr);
115
116/* External data access/modification */
117void GetFragmentAddr(struct alias_link *, struct in_addr *);
118void SetFragmentAddr(struct alias_link *, struct in_addr);
119void GetFragmentPtr(struct alias_link *, char **);
120void SetFragmentPtr(struct alias_link *, char *);
121void SetStateIn(struct alias_link *, int);
122void SetStateOut(struct alias_link *, int);
123int GetStateIn(struct alias_link *);
124int GetStateOut(struct alias_link *);
125struct in_addr GetOriginalAddress(struct alias_link *);
126struct in_addr GetDestAddress(struct alias_link *);
127struct in_addr GetAliasAddress(struct alias_link *);
128struct in_addr GetDefaultAliasAddress(void);
129void SetDefaultAliasAddress(struct in_addr);
130u_short GetOriginalPort(struct alias_link *);
131u_short GetAliasPort(struct alias_link *);
132struct in_addr GetProxyAddress(struct alias_link *);
133void SetProxyAddress(struct alias_link *, struct in_addr);
134u_short GetProxyPort(struct alias_link *);
135void SetProxyPort(struct alias_link *, u_short);
136void SetAckModified(struct alias_link *);
137int GetAckModified(struct alias_link *);
138int GetDeltaAckIn(struct ip *, struct alias_link *);
139int GetDeltaSeqOut(struct ip *, struct alias_link *);
140void AddSeq(struct ip *, struct alias_link *, int);
141void SetExpire(struct alias_link *, int);
142void ClearCheckNewLink(void);
143#ifndef NO_FW_PUNCH
144void PunchFWHole(struct alias_link *);
145#endif
146
147
148/* Housekeeping function */
149void HouseKeeping(void);
150
151/* Tcp specfic routines */
152/*lint -save -library Suppress flexelint warnings */
153
154/* FTP routines */
155void AliasHandleFtpOut(struct ip *, struct alias_link *, int);
156
157/* IRC routines */
158void AliasHandleIrcOut(struct ip *, struct alias_link *, int);
159
160/* NetBIOS routines */
161int AliasHandleUdpNbt(struct ip *, struct alias_link *, struct in_addr *, u_short);
162int AliasHandleUdpNbtNS(struct ip *, struct alias_link *, struct in_addr *, u_short *, struct in_addr *, u_short *);
163
164/* CUSeeMe routines */
165void AliasHandleCUSeeMeOut(struct ip *, struct alias_link *);
166void AliasHandleCUSeeMeIn(struct ip *, struct in_addr);
167
168/* Transparent proxy routines */
169int ProxyCheck(struct ip *, struct in_addr *, u_short *);
170void ProxyModify(struct alias_link *, struct ip *, int, int);
171
172
173enum alias_tcp_state {
174    ALIAS_TCP_STATE_NOT_CONNECTED,
175    ALIAS_TCP_STATE_CONNECTED,
176    ALIAS_TCP_STATE_DISCONNECTED
177};
178/*lint -restore */
179#endif /* defined(ALIAS_LOCAL_H) */
180