alias_local.h revision 77485
1/* 2 * Alias_local.h contains the function prototypes for alias.c, 3 * alias_db.c, alias_util.c and alias_ftp.c, alias_irc.c (as well 4 * as any future add-ons). It also includes macros, globals and 5 * struct definitions shared by more than one alias*.c file. 6 * 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 77485 2001-05-30 14:24:35Z ru $ 18 */ 19 20#ifndef _ALIAS_LOCAL_H_ 21#define _ALIAS_LOCAL_H_ 22 23/* Macros */ 24 25/* 26 * The following macro is used to update an 27 * internet checksum. "delta" is a 32-bit 28 * accumulation of all the changes to the 29 * checksum (adding in new 16-bit words and 30 * subtracting out old words), and "cksum" 31 * is the checksum value to be updated. 32 */ 33#define ADJUST_CHECKSUM(acc, cksum) \ 34 do { \ 35 acc += cksum; \ 36 if (acc < 0) { \ 37 acc = -acc; \ 38 acc = (acc >> 16) + (acc & 0xffff); \ 39 acc += acc >> 16; \ 40 cksum = (u_short) ~acc; \ 41 } else { \ 42 acc = (acc >> 16) + (acc & 0xffff); \ 43 acc += acc >> 16; \ 44 cksum = (u_short) acc; \ 45 } \ 46 } while (0) 47 48/* Globals */ 49 50extern int packetAliasMode; 51 52/* Prototypes */ 53 54/* General utilities */ 55u_short IpChecksum(struct ip *_pip); 56u_short TcpChecksum(struct ip *_pip); 57void DifferentialChecksum(u_short *_cksum, u_short *_new, u_short *_old, 58 int _n); 59 60/* Internal data access */ 61struct alias_link * 62 FindIcmpIn(struct in_addr _dst_addr, struct in_addr _alias_addr, 63 u_short _id_alias, int _create); 64struct alias_link * 65 FindIcmpOut(struct in_addr _src_addr, struct in_addr _dst_addr, 66 u_short _id, int _create); 67struct alias_link * 68 FindFragmentIn1(struct in_addr _dst_addr, struct in_addr _alias_addr, 69 u_short _ip_id); 70struct alias_link * 71 FindFragmentIn2(struct in_addr _dst_addr, struct in_addr _alias_addr, 72 u_short _ip_id); 73struct alias_link * 74 AddFragmentPtrLink(struct in_addr _dst_addr, u_short _ip_id); 75struct alias_link * 76 FindFragmentPtr(struct in_addr _dst_addr, u_short _ip_id); 77struct alias_link * 78 FindProtoIn(struct in_addr _dst_addr, struct in_addr _alias_addr, 79 u_char _proto); 80struct alias_link * 81 FindProtoOut(struct in_addr _src_addr, struct in_addr _dst_addr, 82 u_char _proto); 83struct alias_link * 84 FindUdpTcpIn(struct in_addr _dst_addr, struct in_addr _alias_addr, 85 u_short _dst_port, u_short _alias_port, u_char _proto, int _create); 86struct alias_link * 87 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 SetProtocolFlags(struct alias_link *_link, int _pflags); 148int GetProtocolFlags(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