alias_local.h revision 74778
155714Skris/* 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 74778 2001-03-25 12:05:10Z brian $ 1855714Skris */ 1955714Skris 2055714Skris#ifndef _ALIAS_LOCAL_H_ 2155714Skris#define _ALIAS_LOCAL_H_ 22280304Sjkim 2355714Skris/* Macros */ 2455714Skris 2555714Skris/* 2655714Skris * The following macro is used to update an 2755714Skris * internet checksum. "delta" is a 32-bit 2855714Skris * accumulation of all the changes to the 2955714Skris * checksum (adding in new 16-bit words and 3055714Skris * subtracting out old words), and "cksum" 3155714Skris * is the checksum value to be updated. 3255714Skris */ 3355714Skris#define ADJUST_CHECKSUM(acc, cksum) \ 3455714Skris do { \ 3555714Skris acc += cksum; \ 3655714Skris if (acc < 0) { \ 37280304Sjkim acc = -acc; \ 3855714Skris acc = (acc >> 16) + (acc & 0xffff); \ 3955714Skris acc += acc >> 16; \ 40280304Sjkim cksum = (u_short) ~acc; \ 4155714Skris } else { \ 4255714Skris acc = (acc >> 16) + (acc & 0xffff); \ 4355714Skris acc += acc >> 16; \ 4455714Skris cksum = (u_short) acc; \ 4555714Skris } \ 4655714Skris } while (0) 4755714Skris 4855714Skris/* Globals */ 4955714Skris 5055714Skrisextern int packetAliasMode; 5155714Skris 52280304Sjkim/* Prototypes */ 5355714Skris 5455714Skris/* General utilities */ 5555714Skrisu_short IpChecksum(struct ip *_pip); 5655714Skrisu_short TcpChecksum(struct ip *_pip); 5755714Skrisvoid DifferentialChecksum(u_short *_cksum, u_short *_new, u_short *_old, 5855714Skris int _n); 5955714Skris 6055714Skris/* Internal data access */ 6155714Skrisstruct alias_link * 62109998Smarkm FindIcmpIn(struct in_addr _dst_addr, struct in_addr _alias_addr, 63280304Sjkim u_short _id_alias, int _create); 6455714Skrisstruct alias_link * 6555714Skris FindIcmpOut(struct in_addr _src_addr, struct in_addr _dst_addr, 6655714Skris u_short _id, int _create); 6755714Skrisstruct alias_link * 6855714Skris FindFragmentIn1(struct in_addr _dst_addr, struct in_addr _alias_addr, 69238405Sjkim u_short _ip_id); 70280304Sjkimstruct alias_link * 71280304Sjkim FindFragmentIn2(struct in_addr _dst_addr, struct in_addr _alias_addr, 72280304Sjkim u_short _ip_id); 73280304Sjkimstruct alias_link * 74109998Smarkm AddFragmentPtrLink(struct in_addr _dst_addr, u_short _ip_id); 75280304Sjkimstruct alias_link * 7655714Skris FindFragmentPtr(struct in_addr _dst_addr, u_short _ip_id); 77280304Sjkimstruct alias_link * 78109998Smarkm FindProtoIn(struct in_addr _dst_addr, struct in_addr _alias_addr, 79280304Sjkim u_char _proto); 80280304Sjkimstruct alias_link * 8155714Skris FindProtoOut(struct in_addr _src_addr, struct in_addr _dst_addr, 82280304Sjkim u_char _proto); 83280304Sjkimstruct alias_link * 84280304Sjkim FindUdpTcpIn(struct in_addr _dst_addr, struct in_addr _alias_addr, 8555714Skris u_short _dst_port, u_short _alias_port, u_char _proto, int _create); 86280304Sjkimstruct alias_link * 87280304Sjkim 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); 89struct 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); 92struct alias_link * 93 FindPptpOutByCallId(struct in_addr _src_addr, 94 struct in_addr _dst_addr, u_int16_t _src_call_id); 95struct alias_link * 96 FindPptpInByCallId(struct in_addr _dst_addr, 97 struct in_addr _alias_addr, u_int16_t _dst_call_id); 98struct alias_link * 99 FindPptpOutByPeerCallId(struct in_addr _src_addr, 100 struct in_addr _dst_addr, u_int16_t _dst_call_id); 101struct alias_link * 102 FindPptpInByPeerCallId(struct in_addr _dst_addr, 103 struct in_addr _alias_addr, u_int16_t _alias_call_id); 104struct 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); 107struct in_addr 108 FindOriginalAddress(struct in_addr _alias_addr); 109struct in_addr 110 FindAliasAddress(struct in_addr _original_addr); 111 112/* External data access/modification */ 113int 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); 116void GetFragmentAddr(struct alias_link *_link, struct in_addr *_src_addr); 117void SetFragmentAddr(struct alias_link *_link, struct in_addr _src_addr); 118void GetFragmentPtr(struct alias_link *_link, char **_fptr); 119void SetFragmentPtr(struct alias_link *_link, char *fptr); 120void SetStateIn(struct alias_link *_link, int _state); 121void SetStateOut(struct alias_link *_link, int _state); 122int GetStateIn(struct alias_link *_link); 123int GetStateOut(struct alias_link *_link); 124struct in_addr 125 GetOriginalAddress(struct alias_link *_link); 126struct in_addr 127 GetDestAddress(struct alias_link *_link); 128struct in_addr 129 GetAliasAddress(struct alias_link *_link); 130struct in_addr 131 GetDefaultAliasAddress(void); 132void SetDefaultAliasAddress(struct in_addr _alias_addr); 133u_short GetOriginalPort(struct alias_link *_link); 134u_short GetAliasPort(struct alias_link *_link); 135struct in_addr 136 GetProxyAddress(struct alias_link *_link); 137void SetProxyAddress(struct alias_link *_link, struct in_addr _addr); 138u_short GetProxyPort(struct alias_link *_link); 139void SetProxyPort(struct alias_link *_link, u_short _port); 140void SetAckModified(struct alias_link *_link); 141int GetAckModified(struct alias_link *_link); 142int GetDeltaAckIn(struct ip *_pip, struct alias_link *_link); 143int GetDeltaSeqOut(struct ip *_pip, struct alias_link *_link); 144void AddSeq(struct ip *_pip, struct alias_link *_link, int _delta); 145void SetExpire(struct alias_link *_link, int _expire); 146void ClearCheckNewLink(void); 147void SetLastLineCrlfTermed(struct alias_link *_link, int _yes); 148int GetLastLineCrlfTermed(struct alias_link *_link); 149void SetDestCallId(struct alias_link *_link, u_int16_t _cid); 150#ifndef NO_FW_PUNCH 151void PunchFWHole(struct alias_link *_link); 152#endif 153 154/* Housekeeping function */ 155void HouseKeeping(void); 156 157/* Tcp specfic routines */ 158/* lint -save -library Suppress flexelint warnings */ 159 160/* FTP routines */ 161void AliasHandleFtpOut(struct ip *_pip, struct alias_link *_link, 162 int _maxpacketsize); 163 164/* IRC routines */ 165void AliasHandleIrcOut(struct ip *_pip, struct alias_link *_link, 166 int _maxsize); 167 168/* RTSP routines */ 169void AliasHandleRtspOut(struct ip *_pip, struct alias_link *_link, 170 int _maxpacketsize); 171 172/* PPTP routines */ 173void AliasHandlePptpOut(struct ip *_pip, struct alias_link *_link); 174void AliasHandlePptpIn(struct ip *_pip, struct alias_link *_link); 175int AliasHandlePptpGreOut(struct ip *_pip); 176int AliasHandlePptpGreIn(struct ip *_pip); 177 178/* NetBIOS routines */ 179int AliasHandleUdpNbt(struct ip *_pip, struct alias_link *_link, 180 struct in_addr *_alias_address, u_short _alias_port); 181int 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 */ 186void AliasHandleCUSeeMeOut(struct ip *_pip, struct alias_link *_link); 187void AliasHandleCUSeeMeIn(struct ip *_pip, struct in_addr _original_addr); 188 189/* Transparent proxy routines */ 190int ProxyCheck(struct ip *_pip, struct in_addr *_proxy_server_addr, 191 u_short *_proxy_server_port); 192void ProxyModify(struct alias_link *_link, struct ip *_pip, 193 int _maxpacketsize, int _proxy_type); 194 195enum 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