alias_local.h revision 67966
1238438Sdteske/* -*- mode: c; tab-width: 3; c-basic-offset: 3; -*- 2238438Sdteske Alias_local.h contains the function prototypes for alias.c, 3249746Sdteske alias_db.c, alias_util.c and alias_ftp.c, alias_irc.c (as well 4252980Sdteske as any future add-ons). It also includes macros, globals and 5238438Sdteske struct definitions shared by more than one alias*.c file. 6238438Sdteske 7238438Sdteske This include file is intended to be used only within the aliasing 8238438Sdteske software. Outside world interfaces are defined in alias.h 9238438Sdteske 10238438Sdteske This software is placed into the public domain with no restrictions 11238438Sdteske on its distribution. 12238438Sdteske 13238438Sdteske Initial version: August, 1996 (cjm) 14238438Sdteske 15238438Sdteske <updated several times by original author and Eivind Eklund> 16252987Sdteske 17238438Sdteske $FreeBSD: head/sys/netinet/libalias/alias_local.h 67966 2000-10-30 12:39:41Z ru $ 18238438Sdteske*/ 19238438Sdteske#ifndef ALIAS_LOCAL_H 20252987Sdteske#define ALIAS_LOCAL_H 21238438Sdteske 22238438Sdteske#ifndef NULL 23238438Sdteske#define NULL 0 24238438Sdteske#endif 25238438Sdteske 26238438Sdteske/* 27238438Sdteske Macros 28238438Sdteske */ 29238438Sdteske 30238438Sdteske/* 31240684Sdteske The following macro is used to update an 32240684Sdteske internet checksum. "delta" is a 32-bit 33244675Sdteske accumulation of all the changes to the 34240684Sdteske checksum (adding in new 16-bit words and 35240684Sdteske subtracting out old words), and "cksum" 36240684Sdteske is the checksum value to be updated. 37238438Sdteske*/ 38240684Sdteske#define ADJUST_CHECKSUM(acc, cksum) { \ 39238438Sdteske acc += cksum; \ 40238438Sdteske if (acc < 0) \ 41242107Sdteske { \ 42242107Sdteske acc = -acc; \ 43260678Sdteske acc = (acc >> 16) + (acc & 0xffff); \ 44260678Sdteske acc += acc >> 16; \ 45238438Sdteske cksum = (u_short) ~acc; \ 46238438Sdteske } \ 47238438Sdteske else \ 48238438Sdteske { \ 49238438Sdteske acc = (acc >> 16) + (acc & 0xffff); \ 50238438Sdteske acc += acc >> 16; \ 51238438Sdteske cksum = (u_short) acc; \ 52238438Sdteske } \ 53238438Sdteske} 54238438Sdteske 55251264Sdteske 56238438Sdteske/* 57238438Sdteske Globals 58238438Sdteske*/ 59238438Sdteske 60238438Sdteskeextern int packetAliasMode; 61251264Sdteske 62251264Sdteske 63238438Sdteske/* 64251190Sdteske Structs 65251190Sdteske*/ 66251190Sdteske 67251190Sdteskestruct alias_link; /* Incomplete structure */ 68251190Sdteske 69251190Sdteske 70251190Sdteske/* 71238438Sdteske Prototypes 72249751Sdteske*/ 73249751Sdteske 74249751Sdteske/* General utilities */ 75249751Sdteskeu_short IpChecksum(struct ip *); 76249751Sdteskeu_short TcpChecksum(struct ip *); 77249751Sdteskevoid DifferentialChecksum(u_short *, u_short *, u_short *, int); 78249751Sdteske 79249751Sdteske/* Internal data access */ 80249751Sdteskestruct alias_link * 81249751SdteskeFindIcmpIn(struct in_addr, struct in_addr, u_short); 82249751Sdteske 83251236Sdteskestruct alias_link * 84251236SdteskeFindIcmpOut(struct in_addr, struct in_addr, u_short); 85249751Sdteske 86238438Sdteskestruct alias_link * 87238438SdteskeFindFragmentIn1(struct in_addr, struct in_addr, u_short); 88238438Sdteske 89238438Sdteskestruct alias_link * 90241899SdteskeFindFragmentIn2(struct in_addr, struct in_addr, u_short); 91245401Sdteske 92242096Sdteskestruct alias_link * 93249751SdteskeAddFragmentPtrLink(struct in_addr, u_short); 94251190Sdteske 95251190Sdteskestruct alias_link * 96238438SdteskeFindFragmentPtr(struct in_addr, u_short); 97240768Sdteske 98240768Sdteskestruct alias_link * 99240768SdteskeFindProtoIn(struct in_addr, struct in_addr, u_char); 100251236Sdteske 101240768Sdteskestruct alias_link * 102238438SdteskeFindProtoOut(struct in_addr, struct in_addr, u_char); 103238438Sdteske 104238438Sdteskestruct alias_link * 105238438SdteskeFindUdpTcpIn (struct in_addr, struct in_addr, u_short, u_short, u_char); 106238438Sdteske 107238438Sdteskestruct alias_link * 108238438SdteskeFindUdpTcpOut(struct in_addr, struct in_addr, u_short, u_short, u_char); 109238438Sdteske 110238438Sdteskestruct alias_link * 111238438SdteskeAddPptp(struct in_addr, struct in_addr, struct in_addr, u_int16_t); 112250633Sdteske 113238438Sdteskestruct alias_link * 114252178SdteskeFindPptpOutByCallId(struct in_addr, struct in_addr, u_int16_t); 115238438Sdteske 116238438Sdteskestruct alias_link * 117238438SdteskeFindPptpInByCallId(struct in_addr, struct in_addr, u_int16_t); 118238438Sdteske 119238438Sdteskestruct alias_link * 120238438SdteskeFindPptpOutByPeerCallId(struct in_addr, struct in_addr, u_int16_t); 121238438Sdteske 122238438Sdteskestruct alias_link * 123238438SdteskeFindPptpInByPeerCallId(struct in_addr, struct in_addr, u_int16_t); 124238438Sdteske 125238438Sdteskestruct alias_link * 126238438SdteskeQueryUdpTcpIn (struct in_addr, struct in_addr, u_short, u_short, u_char); 127251933Sdteske 128238438Sdteskestruct alias_link * 129241899SdteskeQueryUdpTcpOut(struct in_addr, struct in_addr, u_short, u_short, u_char); 130241899Sdteske 131241899Sdteskestruct alias_link * 132251236SdteskeFindRtspOut(struct in_addr, struct in_addr, u_short, u_short, u_char); 133238438Sdteske 134256181Sdteskestruct in_addr 135242107SdteskeFindOriginalAddress(struct in_addr); 136241899Sdteske 137256181Sdteskestruct in_addr 138241899SdteskeFindAliasAddress(struct in_addr); 139241899Sdteske 140238438Sdteske/* External data access/modification */ 141241899Sdteskeint FindNewPortGroup(struct in_addr, struct in_addr, 142241899Sdteske u_short, u_short, u_short, u_char, u_char); 143241899Sdteskevoid GetFragmentAddr(struct alias_link *, struct in_addr *); 144238438Sdteskevoid SetFragmentAddr(struct alias_link *, struct in_addr); 145238438Sdteskevoid GetFragmentPtr(struct alias_link *, char **); 146260678Sdteskevoid SetFragmentPtr(struct alias_link *, char *); 147260678Sdteskevoid SetStateIn(struct alias_link *, int); 148238438Sdteskevoid SetStateOut(struct alias_link *, int); 149238438Sdteskeint GetStateIn(struct alias_link *); 150260678Sdteskeint GetStateOut(struct alias_link *); 151260678Sdteskestruct in_addr GetOriginalAddress(struct alias_link *); 152260678Sdteskestruct in_addr GetDestAddress(struct alias_link *); 153260678Sdteskestruct in_addr GetAliasAddress(struct alias_link *); 154238438Sdteskestruct in_addr GetDefaultAliasAddress(void); 155238438Sdteskevoid SetDefaultAliasAddress(struct in_addr); 156260678Sdteskeu_short GetOriginalPort(struct alias_link *); 157260678Sdteskeu_short GetAliasPort(struct alias_link *); 158260678Sdteskestruct in_addr GetProxyAddress(struct alias_link *); 159260678Sdteskevoid SetProxyAddress(struct alias_link *, struct in_addr); 160238438Sdteskeu_short GetProxyPort(struct alias_link *); 161238438Sdteskevoid SetProxyPort(struct alias_link *, u_short); 162260678Sdteskevoid SetAckModified(struct alias_link *); 163260678Sdteskeint GetAckModified(struct alias_link *); 164260678Sdteskeint GetDeltaAckIn(struct ip *, struct alias_link *); 165260678Sdteskeint GetDeltaSeqOut(struct ip *, struct alias_link *); 166238438Sdteskevoid AddSeq(struct ip *, struct alias_link *, int); 167252017Sdteskevoid SetExpire(struct alias_link *, int); 168252017Sdteskevoid ClearCheckNewLink(void); 169238438Sdteskevoid SetLastLineCrlfTermed(struct alias_link *, int); 170238438Sdteskeint GetLastLineCrlfTermed(struct alias_link *); 171238438Sdteskevoid SetDestCallId(struct alias_link *, u_int16_t); 172238438Sdteske#ifndef NO_FW_PUNCH 173238438Sdteskevoid PunchFWHole(struct alias_link *); 174238438Sdteske#endif 175238438Sdteske 176 177/* Housekeeping function */ 178void HouseKeeping(void); 179 180/* Tcp specfic routines */ 181/*lint -save -library Suppress flexelint warnings */ 182 183/* FTP routines */ 184void AliasHandleFtpOut(struct ip *, struct alias_link *, int); 185 186/* IRC routines */ 187void AliasHandleIrcOut(struct ip *, struct alias_link *, int); 188 189/* RTSP routines */ 190void AliasHandleRtspOut(struct ip *, struct alias_link *, int); 191 192/* PPTP routines */ 193void AliasHandlePptpOut(struct ip *, struct alias_link *); 194void AliasHandlePptpIn(struct ip *, struct alias_link *); 195int AliasHandlePptpGreOut(struct ip *); 196int AliasHandlePptpGreIn(struct ip *); 197 198/* NetBIOS routines */ 199int AliasHandleUdpNbt(struct ip *, struct alias_link *, struct in_addr *, u_short); 200int AliasHandleUdpNbtNS(struct ip *, struct alias_link *, struct in_addr *, u_short *, struct in_addr *, u_short *); 201 202/* CUSeeMe routines */ 203void AliasHandleCUSeeMeOut(struct ip *, struct alias_link *); 204void AliasHandleCUSeeMeIn(struct ip *, struct in_addr); 205 206/* Transparent proxy routines */ 207int ProxyCheck(struct ip *, struct in_addr *, u_short *); 208void ProxyModify(struct alias_link *, struct ip *, int, int); 209 210 211enum alias_tcp_state { 212 ALIAS_TCP_STATE_NOT_CONNECTED, 213 ALIAS_TCP_STATE_CONNECTED, 214 ALIAS_TCP_STATE_DISCONNECTED 215}; 216/*lint -restore */ 217#endif /* defined(ALIAS_LOCAL_H) */ 218