1*86d7f5d3SJohn Marino /*- 2*86d7f5d3SJohn Marino * Copyright (c) 2001 Charles Mott <cm@linktel.net> 3*86d7f5d3SJohn Marino * All rights reserved. 4*86d7f5d3SJohn Marino * 5*86d7f5d3SJohn Marino * Redistribution and use in source and binary forms, with or without 6*86d7f5d3SJohn Marino * modification, are permitted provided that the following conditions 7*86d7f5d3SJohn Marino * are met: 8*86d7f5d3SJohn Marino * 1. Redistributions of source code must retain the above copyright 9*86d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer. 10*86d7f5d3SJohn Marino * 2. Redistributions in binary form must reproduce the above copyright 11*86d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer in the 12*86d7f5d3SJohn Marino * documentation and/or other materials provided with the distribution. 13*86d7f5d3SJohn Marino * 14*86d7f5d3SJohn Marino * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15*86d7f5d3SJohn Marino * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16*86d7f5d3SJohn Marino * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17*86d7f5d3SJohn Marino * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18*86d7f5d3SJohn Marino * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19*86d7f5d3SJohn Marino * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20*86d7f5d3SJohn Marino * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21*86d7f5d3SJohn Marino * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22*86d7f5d3SJohn Marino * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23*86d7f5d3SJohn Marino * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24*86d7f5d3SJohn Marino * SUCH DAMAGE. 25*86d7f5d3SJohn Marino * 26*86d7f5d3SJohn Marino * $FreeBSD: src/lib/libalias/alias_local.h,v 1.10.2.7 2001/11/23 13:10:15 brian Exp $ 27*86d7f5d3SJohn Marino * $DragonFly: src/lib/libalias/alias_local.h,v 1.2 2003/06/17 04:26:41 dillon Exp $ 28*86d7f5d3SJohn Marino */ 29*86d7f5d3SJohn Marino 30*86d7f5d3SJohn Marino /* 31*86d7f5d3SJohn Marino * Alias_local.h contains the function prototypes for alias.c, 32*86d7f5d3SJohn Marino * alias_db.c, alias_util.c and alias_ftp.c, alias_irc.c (as well 33*86d7f5d3SJohn Marino * as any future add-ons). It also includes macros, globals and 34*86d7f5d3SJohn Marino * struct definitions shared by more than one alias*.c file. 35*86d7f5d3SJohn Marino * 36*86d7f5d3SJohn Marino * This include file is intended to be used only within the aliasing 37*86d7f5d3SJohn Marino * software. Outside world interfaces are defined in alias.h 38*86d7f5d3SJohn Marino * 39*86d7f5d3SJohn Marino * This software is placed into the public domain with no restrictions 40*86d7f5d3SJohn Marino * on its distribution. 41*86d7f5d3SJohn Marino * 42*86d7f5d3SJohn Marino * Initial version: August, 1996 (cjm) 43*86d7f5d3SJohn Marino * 44*86d7f5d3SJohn Marino * <updated several times by original author and Eivind Eklund> 45*86d7f5d3SJohn Marino */ 46*86d7f5d3SJohn Marino 47*86d7f5d3SJohn Marino #ifndef _ALIAS_LOCAL_H_ 48*86d7f5d3SJohn Marino #define _ALIAS_LOCAL_H_ 49*86d7f5d3SJohn Marino 50*86d7f5d3SJohn Marino /* Macros */ 51*86d7f5d3SJohn Marino 52*86d7f5d3SJohn Marino /* 53*86d7f5d3SJohn Marino * The following macro is used to update an 54*86d7f5d3SJohn Marino * internet checksum. "delta" is a 32-bit 55*86d7f5d3SJohn Marino * accumulation of all the changes to the 56*86d7f5d3SJohn Marino * checksum (adding in new 16-bit words and 57*86d7f5d3SJohn Marino * subtracting out old words), and "cksum" 58*86d7f5d3SJohn Marino * is the checksum value to be updated. 59*86d7f5d3SJohn Marino */ 60*86d7f5d3SJohn Marino #define ADJUST_CHECKSUM(acc, cksum) \ 61*86d7f5d3SJohn Marino do { \ 62*86d7f5d3SJohn Marino acc += cksum; \ 63*86d7f5d3SJohn Marino if (acc < 0) { \ 64*86d7f5d3SJohn Marino acc = -acc; \ 65*86d7f5d3SJohn Marino acc = (acc >> 16) + (acc & 0xffff); \ 66*86d7f5d3SJohn Marino acc += acc >> 16; \ 67*86d7f5d3SJohn Marino cksum = (u_short) ~acc; \ 68*86d7f5d3SJohn Marino } else { \ 69*86d7f5d3SJohn Marino acc = (acc >> 16) + (acc & 0xffff); \ 70*86d7f5d3SJohn Marino acc += acc >> 16; \ 71*86d7f5d3SJohn Marino cksum = (u_short) acc; \ 72*86d7f5d3SJohn Marino } \ 73*86d7f5d3SJohn Marino } while (0) 74*86d7f5d3SJohn Marino 75*86d7f5d3SJohn Marino /* Globals */ 76*86d7f5d3SJohn Marino 77*86d7f5d3SJohn Marino extern int packetAliasMode; 78*86d7f5d3SJohn Marino 79*86d7f5d3SJohn Marino /* Prototypes */ 80*86d7f5d3SJohn Marino 81*86d7f5d3SJohn Marino /* General utilities */ 82*86d7f5d3SJohn Marino u_short IpChecksum(struct ip *_pip); 83*86d7f5d3SJohn Marino u_short TcpChecksum(struct ip *_pip); 84*86d7f5d3SJohn Marino void DifferentialChecksum(u_short *_cksum, u_short *_new, u_short *_old, 85*86d7f5d3SJohn Marino int _n); 86*86d7f5d3SJohn Marino 87*86d7f5d3SJohn Marino /* Internal data access */ 88*86d7f5d3SJohn Marino struct alias_link * 89*86d7f5d3SJohn Marino FindIcmpIn(struct in_addr _dst_addr, struct in_addr _alias_addr, 90*86d7f5d3SJohn Marino u_short _id_alias, int _create); 91*86d7f5d3SJohn Marino struct alias_link * 92*86d7f5d3SJohn Marino FindIcmpOut(struct in_addr _src_addr, struct in_addr _dst_addr, 93*86d7f5d3SJohn Marino u_short _id, int _create); 94*86d7f5d3SJohn Marino struct alias_link * 95*86d7f5d3SJohn Marino FindFragmentIn1(struct in_addr _dst_addr, struct in_addr _alias_addr, 96*86d7f5d3SJohn Marino u_short _ip_id); 97*86d7f5d3SJohn Marino struct alias_link * 98*86d7f5d3SJohn Marino FindFragmentIn2(struct in_addr _dst_addr, struct in_addr _alias_addr, 99*86d7f5d3SJohn Marino u_short _ip_id); 100*86d7f5d3SJohn Marino struct alias_link * 101*86d7f5d3SJohn Marino AddFragmentPtrLink(struct in_addr _dst_addr, u_short _ip_id); 102*86d7f5d3SJohn Marino struct alias_link * 103*86d7f5d3SJohn Marino FindFragmentPtr(struct in_addr _dst_addr, u_short _ip_id); 104*86d7f5d3SJohn Marino struct alias_link * 105*86d7f5d3SJohn Marino FindProtoIn(struct in_addr _dst_addr, struct in_addr _alias_addr, 106*86d7f5d3SJohn Marino u_char _proto); 107*86d7f5d3SJohn Marino struct alias_link * 108*86d7f5d3SJohn Marino FindProtoOut(struct in_addr _src_addr, struct in_addr _dst_addr, 109*86d7f5d3SJohn Marino u_char _proto); 110*86d7f5d3SJohn Marino struct alias_link * 111*86d7f5d3SJohn Marino FindUdpTcpIn(struct in_addr _dst_addr, struct in_addr _alias_addr, 112*86d7f5d3SJohn Marino u_short _dst_port, u_short _alias_port, u_char _proto, int _create); 113*86d7f5d3SJohn Marino struct alias_link * 114*86d7f5d3SJohn Marino FindUdpTcpOut(struct in_addr _src_addr, struct in_addr _dst_addr, 115*86d7f5d3SJohn Marino u_short _src_port, u_short _dst_port, u_char _proto, int _create); 116*86d7f5d3SJohn Marino struct alias_link * 117*86d7f5d3SJohn Marino AddPptp(struct in_addr _src_addr, struct in_addr _dst_addr, 118*86d7f5d3SJohn Marino struct in_addr _alias_addr, u_int16_t _src_call_id); 119*86d7f5d3SJohn Marino struct alias_link * 120*86d7f5d3SJohn Marino FindPptpOutByCallId(struct in_addr _src_addr, 121*86d7f5d3SJohn Marino struct in_addr _dst_addr, u_int16_t _src_call_id); 122*86d7f5d3SJohn Marino struct alias_link * 123*86d7f5d3SJohn Marino FindPptpInByCallId(struct in_addr _dst_addr, 124*86d7f5d3SJohn Marino struct in_addr _alias_addr, u_int16_t _dst_call_id); 125*86d7f5d3SJohn Marino struct alias_link * 126*86d7f5d3SJohn Marino FindPptpOutByPeerCallId(struct in_addr _src_addr, 127*86d7f5d3SJohn Marino struct in_addr _dst_addr, u_int16_t _dst_call_id); 128*86d7f5d3SJohn Marino struct alias_link * 129*86d7f5d3SJohn Marino FindPptpInByPeerCallId(struct in_addr _dst_addr, 130*86d7f5d3SJohn Marino struct in_addr _alias_addr, u_int16_t _alias_call_id); 131*86d7f5d3SJohn Marino struct alias_link * 132*86d7f5d3SJohn Marino FindRtspOut(struct in_addr _src_addr, struct in_addr _dst_addr, 133*86d7f5d3SJohn Marino u_short _src_port, u_short _alias_port, u_char _proto); 134*86d7f5d3SJohn Marino struct in_addr 135*86d7f5d3SJohn Marino FindOriginalAddress(struct in_addr _alias_addr); 136*86d7f5d3SJohn Marino struct in_addr 137*86d7f5d3SJohn Marino FindAliasAddress(struct in_addr _original_addr); 138*86d7f5d3SJohn Marino 139*86d7f5d3SJohn Marino /* External data access/modification */ 140*86d7f5d3SJohn Marino int FindNewPortGroup(struct in_addr _dst_addr, struct in_addr _alias_addr, 141*86d7f5d3SJohn Marino u_short _src_port, u_short _dst_port, u_short _port_count, 142*86d7f5d3SJohn Marino u_char _proto, u_char _align); 143*86d7f5d3SJohn Marino void GetFragmentAddr(struct alias_link *_link, struct in_addr *_src_addr); 144*86d7f5d3SJohn Marino void SetFragmentAddr(struct alias_link *_link, struct in_addr _src_addr); 145*86d7f5d3SJohn Marino void GetFragmentPtr(struct alias_link *_link, char **_fptr); 146*86d7f5d3SJohn Marino void SetFragmentPtr(struct alias_link *_link, char *fptr); 147*86d7f5d3SJohn Marino void SetStateIn(struct alias_link *_link, int _state); 148*86d7f5d3SJohn Marino void SetStateOut(struct alias_link *_link, int _state); 149*86d7f5d3SJohn Marino int GetStateIn(struct alias_link *_link); 150*86d7f5d3SJohn Marino int GetStateOut(struct alias_link *_link); 151*86d7f5d3SJohn Marino struct in_addr 152*86d7f5d3SJohn Marino GetOriginalAddress(struct alias_link *_link); 153*86d7f5d3SJohn Marino struct in_addr 154*86d7f5d3SJohn Marino GetDestAddress(struct alias_link *_link); 155*86d7f5d3SJohn Marino struct in_addr 156*86d7f5d3SJohn Marino GetAliasAddress(struct alias_link *_link); 157*86d7f5d3SJohn Marino struct in_addr 158*86d7f5d3SJohn Marino GetDefaultAliasAddress(void); 159*86d7f5d3SJohn Marino void SetDefaultAliasAddress(struct in_addr _alias_addr); 160*86d7f5d3SJohn Marino u_short GetOriginalPort(struct alias_link *_link); 161*86d7f5d3SJohn Marino u_short GetAliasPort(struct alias_link *_link); 162*86d7f5d3SJohn Marino struct in_addr 163*86d7f5d3SJohn Marino GetProxyAddress(struct alias_link *_link); 164*86d7f5d3SJohn Marino void SetProxyAddress(struct alias_link *_link, struct in_addr _addr); 165*86d7f5d3SJohn Marino u_short GetProxyPort(struct alias_link *_link); 166*86d7f5d3SJohn Marino void SetProxyPort(struct alias_link *_link, u_short _port); 167*86d7f5d3SJohn Marino void SetAckModified(struct alias_link *_link); 168*86d7f5d3SJohn Marino int GetAckModified(struct alias_link *_link); 169*86d7f5d3SJohn Marino int GetDeltaAckIn(struct ip *_pip, struct alias_link *_link); 170*86d7f5d3SJohn Marino int GetDeltaSeqOut(struct ip *_pip, struct alias_link *_link); 171*86d7f5d3SJohn Marino void AddSeq(struct ip *_pip, struct alias_link *_link, int _delta); 172*86d7f5d3SJohn Marino void SetExpire(struct alias_link *_link, int _expire); 173*86d7f5d3SJohn Marino void ClearCheckNewLink(void); 174*86d7f5d3SJohn Marino void SetLastLineCrlfTermed(struct alias_link *_link, int _yes); 175*86d7f5d3SJohn Marino int GetLastLineCrlfTermed(struct alias_link *_link); 176*86d7f5d3SJohn Marino void SetDestCallId(struct alias_link *_link, u_int16_t _cid); 177*86d7f5d3SJohn Marino #ifndef NO_FW_PUNCH 178*86d7f5d3SJohn Marino void PunchFWHole(struct alias_link *_link); 179*86d7f5d3SJohn Marino #endif 180*86d7f5d3SJohn Marino 181*86d7f5d3SJohn Marino /* Housekeeping function */ 182*86d7f5d3SJohn Marino void HouseKeeping(void); 183*86d7f5d3SJohn Marino 184*86d7f5d3SJohn Marino /* Tcp specfic routines */ 185*86d7f5d3SJohn Marino /* lint -save -library Suppress flexelint warnings */ 186*86d7f5d3SJohn Marino 187*86d7f5d3SJohn Marino /* FTP routines */ 188*86d7f5d3SJohn Marino void AliasHandleFtpOut(struct ip *_pip, struct alias_link *_link, 189*86d7f5d3SJohn Marino int _maxpacketsize); 190*86d7f5d3SJohn Marino 191*86d7f5d3SJohn Marino /* IRC routines */ 192*86d7f5d3SJohn Marino void AliasHandleIrcOut(struct ip *_pip, struct alias_link *_link, 193*86d7f5d3SJohn Marino int _maxsize); 194*86d7f5d3SJohn Marino 195*86d7f5d3SJohn Marino /* RTSP routines */ 196*86d7f5d3SJohn Marino void AliasHandleRtspOut(struct ip *_pip, struct alias_link *_link, 197*86d7f5d3SJohn Marino int _maxpacketsize); 198*86d7f5d3SJohn Marino 199*86d7f5d3SJohn Marino /* PPTP routines */ 200*86d7f5d3SJohn Marino void AliasHandlePptpOut(struct ip *_pip, struct alias_link *_link); 201*86d7f5d3SJohn Marino void AliasHandlePptpIn(struct ip *_pip, struct alias_link *_link); 202*86d7f5d3SJohn Marino int AliasHandlePptpGreOut(struct ip *_pip); 203*86d7f5d3SJohn Marino int AliasHandlePptpGreIn(struct ip *_pip); 204*86d7f5d3SJohn Marino 205*86d7f5d3SJohn Marino /* NetBIOS routines */ 206*86d7f5d3SJohn Marino int AliasHandleUdpNbt(struct ip *_pip, struct alias_link *_link, 207*86d7f5d3SJohn Marino struct in_addr *_alias_address, u_short _alias_port); 208*86d7f5d3SJohn Marino int AliasHandleUdpNbtNS(struct ip *_pip, struct alias_link *_link, 209*86d7f5d3SJohn Marino struct in_addr *_alias_address, u_short *_alias_port, 210*86d7f5d3SJohn Marino struct in_addr *_original_address, u_short *_original_port); 211*86d7f5d3SJohn Marino 212*86d7f5d3SJohn Marino /* CUSeeMe routines */ 213*86d7f5d3SJohn Marino void AliasHandleCUSeeMeOut(struct ip *_pip, struct alias_link *_link); 214*86d7f5d3SJohn Marino void AliasHandleCUSeeMeIn(struct ip *_pip, struct in_addr _original_addr); 215*86d7f5d3SJohn Marino 216*86d7f5d3SJohn Marino /* Transparent proxy routines */ 217*86d7f5d3SJohn Marino int ProxyCheck(struct ip *_pip, struct in_addr *_proxy_server_addr, 218*86d7f5d3SJohn Marino u_short *_proxy_server_port); 219*86d7f5d3SJohn Marino void ProxyModify(struct alias_link *_link, struct ip *_pip, 220*86d7f5d3SJohn Marino int _maxpacketsize, int _proxy_type); 221*86d7f5d3SJohn Marino 222*86d7f5d3SJohn Marino enum alias_tcp_state { 223*86d7f5d3SJohn Marino ALIAS_TCP_STATE_NOT_CONNECTED, 224*86d7f5d3SJohn Marino ALIAS_TCP_STATE_CONNECTED, 225*86d7f5d3SJohn Marino ALIAS_TCP_STATE_DISCONNECTED 226*86d7f5d3SJohn Marino }; 227*86d7f5d3SJohn Marino 228*86d7f5d3SJohn Marino /*lint -restore */ 229*86d7f5d3SJohn Marino 230*86d7f5d3SJohn Marino #endif /* !_ALIAS_LOCAL_H_ */ 231