alias_local.h revision 74778
174778Sbrian/*
274778Sbrian * Alias_local.h contains the function prototypes for alias.c,
374778Sbrian * alias_db.c, alias_util.c and alias_ftp.c, alias_irc.c (as well
474778Sbrian * as any future add-ons).  It also includes macros, globals and
574778Sbrian * struct definitions shared by more than one alias*.c file.
674778Sbrian *
774778Sbrian * This include file is intended to be used only within the aliasing
874778Sbrian * software.  Outside world interfaces are defined in alias.h
974778Sbrian *
1074778Sbrian * This software is placed into the public domain with no restrictions
1174778Sbrian * on its distribution.
1274778Sbrian *
1374778Sbrian * Initial version:  August, 1996  (cjm)
1474778Sbrian *
1574778Sbrian * <updated several times by original author and Eivind Eklund>
1674778Sbrian *
1774778Sbrian * $FreeBSD: head/sys/netinet/libalias/alias_local.h 74778 2001-03-25 12:05:10Z brian $
1874778Sbrian */
1926026Sbrian
2074778Sbrian#ifndef _ALIAS_LOCAL_H_
2174778Sbrian#define	_ALIAS_LOCAL_H_
2244307Sbrian
2374778Sbrian/* Macros */
2426026Sbrian
2544307Sbrian/*
2674778Sbrian * The following macro is used to update an
2774778Sbrian * internet checksum.  "delta" is a 32-bit
2874778Sbrian * accumulation of all the changes to the
2974778Sbrian * checksum (adding in new 16-bit words and
3074778Sbrian * subtracting out old words), and "cksum"
3174778Sbrian * is the checksum value to be updated.
3244307Sbrian */
3374778Sbrian#define	ADJUST_CHECKSUM(acc, cksum) \
3474778Sbrian	do { \
3574778Sbrian		acc += cksum; \
3674778Sbrian		if (acc < 0) { \
3774778Sbrian			acc = -acc; \
3874778Sbrian			acc = (acc >> 16) + (acc & 0xffff); \
3974778Sbrian			acc += acc >> 16; \
4074778Sbrian			cksum = (u_short) ~acc; \
4174778Sbrian		} else { \
4274778Sbrian			acc = (acc >> 16) + (acc & 0xffff); \
4374778Sbrian			acc += acc >> 16; \
4474778Sbrian			cksum = (u_short) acc; \
4574778Sbrian		} \
4674778Sbrian	} while (0)
4744307Sbrian
4874778Sbrian/* Globals */
4944307Sbrian
5026026Sbrianextern int packetAliasMode;
5126026Sbrian
5274778Sbrian/* Prototypes */
5326026Sbrian
5426026Sbrian/* General utilities */
5574778Sbrianu_short	 IpChecksum(struct ip *_pip);
5674778Sbrianu_short	 TcpChecksum(struct ip *_pip);
5774778Sbrianvoid	 DifferentialChecksum(u_short *_cksum, u_short *_new, u_short *_old,
5874778Sbrian	    int _n);
5926026Sbrian
6026026Sbrian/* Internal data access */
6126026Sbrianstruct alias_link *
6274778Sbrian	 FindIcmpIn(struct in_addr _dst_addr, struct in_addr _alias_addr,
6374778Sbrian	    u_short _id_alias, int _create);
6426026Sbrianstruct alias_link *
6574778Sbrian	 FindIcmpOut(struct in_addr _src_addr, struct in_addr _dst_addr,
6674778Sbrian	    u_short _id, int _create);
6726026Sbrianstruct alias_link *
6874778Sbrian	 FindFragmentIn1(struct in_addr _dst_addr, struct in_addr _alias_addr,
6974778Sbrian	    u_short _ip_id);
7026026Sbrianstruct alias_link *
7174778Sbrian	 FindFragmentIn2(struct in_addr _dst_addr, struct in_addr _alias_addr,
7274778Sbrian	    u_short _ip_id);
7326026Sbrianstruct alias_link *
7474778Sbrian	 AddFragmentPtrLink(struct in_addr _dst_addr, u_short _ip_id);
7526026Sbrianstruct alias_link *
7674778Sbrian	 FindFragmentPtr(struct in_addr _dst_addr, u_short _ip_id);
7726026Sbrianstruct alias_link *
7874778Sbrian	 FindProtoIn(struct in_addr _dst_addr, struct in_addr _alias_addr,
7974778Sbrian	    u_char _proto);
8059356Srustruct alias_link *
8174778Sbrian	 FindProtoOut(struct in_addr _src_addr, struct in_addr _dst_addr,
8274778Sbrian	    u_char _proto);
8359356Srustruct alias_link *
8474778Sbrian	 FindUdpTcpIn(struct in_addr _dst_addr, struct in_addr _alias_addr,
8574778Sbrian	    u_short _dst_port, u_short _alias_port, u_char _proto, int _create);
8626026Sbrianstruct alias_link *
8774778Sbrian	 FindUdpTcpOut(struct in_addr _src_addr, struct in_addr _dst_addr,
8874778Sbrian	    u_short _src_port, u_short _dst_port, u_char _proto, int _create);
8961861Srustruct alias_link *
9074778Sbrian	 AddPptp(struct in_addr _src_addr, struct in_addr _dst_addr,
9174778Sbrian	    struct in_addr _alias_addr, u_int16_t _src_call_id);
9261861Srustruct alias_link *
9374778Sbrian	 FindPptpOutByCallId(struct in_addr _src_addr,
9474778Sbrian	    struct in_addr _dst_addr, u_int16_t _src_call_id);
9563899Sarchiestruct alias_link *
9674778Sbrian	 FindPptpInByCallId(struct in_addr _dst_addr,
9774778Sbrian	    struct in_addr _alias_addr, u_int16_t _dst_call_id);
9867966Srustruct alias_link *
9974778Sbrian	 FindPptpOutByPeerCallId(struct in_addr _src_addr,
10074778Sbrian	    struct in_addr _dst_addr, u_int16_t _dst_call_id);
10167966Srustruct alias_link *
10274778Sbrian	 FindPptpInByPeerCallId(struct in_addr _dst_addr,
10374778Sbrian	    struct in_addr _alias_addr, u_int16_t _alias_call_id);
10467966Srustruct alias_link *
10574778Sbrian	 FindRtspOut(struct in_addr _src_addr, struct in_addr _dst_addr,
10674778Sbrian	    u_short _src_port, u_short _alias_port, u_char _proto);
10726026Sbrianstruct in_addr
10874778Sbrian	 FindOriginalAddress(struct in_addr _alias_addr);
10926026Sbrianstruct in_addr
11074778Sbrian	 FindAliasAddress(struct in_addr _original_addr);
11126026Sbrian
11226026Sbrian/* External data access/modification */
11374778Sbrianint	 FindNewPortGroup(struct in_addr _dst_addr, struct in_addr _alias_addr,
11474778Sbrian                     u_short _src_port, u_short _dst_port, u_short _port_count,
11574778Sbrian		     u_char _proto, u_char _align);
11674778Sbrianvoid	 GetFragmentAddr(struct alias_link *_link, struct in_addr *_src_addr);
11774778Sbrianvoid	 SetFragmentAddr(struct alias_link *_link, struct in_addr _src_addr);
11874778Sbrianvoid	 GetFragmentPtr(struct alias_link *_link, char **_fptr);
11974778Sbrianvoid	 SetFragmentPtr(struct alias_link *_link, char *fptr);
12074778Sbrianvoid	 SetStateIn(struct alias_link *_link, int _state);
12174778Sbrianvoid	 SetStateOut(struct alias_link *_link, int _state);
12274778Sbrianint	 GetStateIn(struct alias_link *_link);
12374778Sbrianint	 GetStateOut(struct alias_link *_link);
12474778Sbrianstruct in_addr
12574778Sbrian	 GetOriginalAddress(struct alias_link *_link);
12674778Sbrianstruct in_addr
12774778Sbrian	 GetDestAddress(struct alias_link *_link);
12874778Sbrianstruct in_addr
12974778Sbrian	 GetAliasAddress(struct alias_link *_link);
13074778Sbrianstruct in_addr
13174778Sbrian	 GetDefaultAliasAddress(void);
13274778Sbrianvoid	 SetDefaultAliasAddress(struct in_addr _alias_addr);
13374778Sbrianu_short	 GetOriginalPort(struct alias_link *_link);
13474778Sbrianu_short	 GetAliasPort(struct alias_link *_link);
13574778Sbrianstruct in_addr
13674778Sbrian	 GetProxyAddress(struct alias_link *_link);
13774778Sbrianvoid	 SetProxyAddress(struct alias_link *_link, struct in_addr _addr);
13874778Sbrianu_short	 GetProxyPort(struct alias_link *_link);
13974778Sbrianvoid	 SetProxyPort(struct alias_link *_link, u_short _port);
14074778Sbrianvoid	 SetAckModified(struct alias_link *_link);
14174778Sbrianint	 GetAckModified(struct alias_link *_link);
14274778Sbrianint	 GetDeltaAckIn(struct ip *_pip, struct alias_link *_link);
14374778Sbrianint	 GetDeltaSeqOut(struct ip *_pip, struct alias_link *_link);
14474778Sbrianvoid	 AddSeq(struct ip *_pip, struct alias_link *_link, int _delta);
14574778Sbrianvoid	 SetExpire(struct alias_link *_link, int _expire);
14674778Sbrianvoid	 ClearCheckNewLink(void);
14774778Sbrianvoid	 SetLastLineCrlfTermed(struct alias_link *_link, int _yes);
14874778Sbrianint	 GetLastLineCrlfTermed(struct alias_link *_link);
14974778Sbrianvoid	 SetDestCallId(struct alias_link *_link, u_int16_t _cid);
15036711Sbrian#ifndef NO_FW_PUNCH
15174778Sbrianvoid	 PunchFWHole(struct alias_link *_link);
15236711Sbrian#endif
15326026Sbrian
15426026Sbrian/* Housekeeping function */
15574778Sbrianvoid	 HouseKeeping(void);
15626026Sbrian
15726026Sbrian/* Tcp specfic routines */
15874778Sbrian/* lint -save -library Suppress flexelint warnings */
15944307Sbrian
16044307Sbrian/* FTP routines */
16174778Sbrianvoid	 AliasHandleFtpOut(struct ip *_pip, struct alias_link *_link,
16274778Sbrian	    int _maxpacketsize);
16344307Sbrian
16444307Sbrian/* IRC routines */
16574778Sbrianvoid	 AliasHandleIrcOut(struct ip *_pip, struct alias_link *_link,
16674778Sbrian	    int _maxsize);
16744307Sbrian
16863899Sarchie/* RTSP routines */
16974778Sbrianvoid	 AliasHandleRtspOut(struct ip *_pip, struct alias_link *_link,
17074778Sbrian	    int _maxpacketsize);
17163899Sarchie
17261861Sru/* PPTP routines */
17374778Sbrianvoid	 AliasHandlePptpOut(struct ip *_pip, struct alias_link *_link);
17474778Sbrianvoid	 AliasHandlePptpIn(struct ip *_pip, struct alias_link *_link);
17574778Sbrianint	 AliasHandlePptpGreOut(struct ip *_pip);
17674778Sbrianint	 AliasHandlePptpGreIn(struct ip *_pip);
17761861Sru
17844307Sbrian/* NetBIOS routines */
17974778Sbrianint	 AliasHandleUdpNbt(struct ip *_pip, struct alias_link *_link,
18074778Sbrian	    struct in_addr *_alias_address, u_short _alias_port);
18174778Sbrianint	 AliasHandleUdpNbtNS(struct ip *_pip, struct alias_link *_link,
18274778Sbrian	    struct in_addr *_alias_address, u_short *_alias_port,
18374778Sbrian	    struct in_addr *_original_address, u_short *_original_port);
18444307Sbrian
18544307Sbrian/* CUSeeMe routines */
18674778Sbrianvoid	 AliasHandleCUSeeMeOut(struct ip *_pip, struct alias_link *_link);
18774778Sbrianvoid	 AliasHandleCUSeeMeIn(struct ip *_pip, struct in_addr _original_addr);
18827864Sbrian
18944307Sbrian/* Transparent proxy routines */
19074778Sbrianint	 ProxyCheck(struct ip *_pip, struct in_addr *_proxy_server_addr,
19174778Sbrian	    u_short *_proxy_server_port);
19274778Sbrianvoid	 ProxyModify(struct alias_link *_link, struct ip *_pip,
19374778Sbrian	    int _maxpacketsize, int _proxy_type);
19436321Samurai
19532377Seivindenum alias_tcp_state {
19674778Sbrian	ALIAS_TCP_STATE_NOT_CONNECTED,
19774778Sbrian	ALIAS_TCP_STATE_CONNECTED,
19874778Sbrian	ALIAS_TCP_STATE_DISCONNECTED
19932377Seivind};
20074778Sbrian
20126026Sbrian/*lint -restore */
20274778Sbrian
20374778Sbrian#endif /* !_ALIAS_LOCAL_H_ */
204