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