alias_local.h revision 85964
1132720Skan/*- 2132720Skan * Copyright (c) 2001 Charles Mott <cm@linktel.net> 3169691Skan * All rights reserved. 4132720Skan * 5132720Skan * Redistribution and use in source and binary forms, with or without 6132720Skan * modification, are permitted provided that the following conditions 7132720Skan * are met: 8132720Skan * 1. Redistributions of source code must retain the above copyright 9132720Skan * notice, this list of conditions and the following disclaimer. 10132720Skan * 2. Redistributions in binary form must reproduce the above copyright 11132720Skan * notice, this list of conditions and the following disclaimer in the 12132720Skan * documentation and/or other materials provided with the distribution. 13132720Skan * 14132720Skan * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15132720Skan * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16132720Skan * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17132720Skan * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18132720Skan * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19169691Skan * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20132720Skan * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21132720Skan * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22132720Skan * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23132720Skan * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24132720Skan * SUCH DAMAGE. 25132720Skan * 26132720Skan * $FreeBSD: head/sys/netinet/libalias/alias_local.h 85964 2001-11-03 11:34:09Z brian $ 27132720Skan */ 28132720Skan 29132720Skan/* 30132720Skan * Alias_local.h contains the function prototypes for alias.c, 31169691Skan * alias_db.c, alias_util.c and alias_ftp.c, alias_irc.c (as well 32169691Skan * as any future add-ons). It also includes macros, globals and 33169691Skan * struct definitions shared by more than one alias*.c file. 34169691Skan * 35132720Skan * This include file is intended to be used only within the aliasing 36132720Skan * software. Outside world interfaces are defined in alias.h 37132720Skan * 38132720Skan * This software is placed into the public domain with no restrictions 39132720Skan * on its distribution. 40132720Skan * 41132720Skan * Initial version: August, 1996 (cjm) 42169691Skan * 43132720Skan * <updated several times by original author and Eivind Eklund> 44169691Skan */ 45169691Skan 46132720Skan#ifndef _ALIAS_LOCAL_H_ 47132720Skan#define _ALIAS_LOCAL_H_ 48132720Skan 49132720Skan/* Macros */ 50132720Skan 51132720Skan/* 52132720Skan * The following macro is used to update an 53132720Skan * internet checksum. "delta" is a 32-bit 54132720Skan * accumulation of all the changes to the 55169691Skan * checksum (adding in new 16-bit words and 56169691Skan * subtracting out old words), and "cksum" 57132720Skan * is the checksum value to be updated. 58132720Skan */ 59132720Skan#define ADJUST_CHECKSUM(acc, cksum) \ 60132720Skan do { \ 61132720Skan acc += cksum; \ 62132720Skan if (acc < 0) { \ 63132720Skan acc = -acc; \ 64132720Skan acc = (acc >> 16) + (acc & 0xffff); \ 65132720Skan acc += acc >> 16; \ 66132720Skan cksum = (u_short) ~acc; \ 67132720Skan } else { \ 68169691Skan acc = (acc >> 16) + (acc & 0xffff); \ 69169691Skan acc += acc >> 16; \ 70132720Skan cksum = (u_short) acc; \ 71132720Skan } \ 72132720Skan } while (0) 73132720Skan 74132720Skan/* Globals */ 75132720Skan 76132720Skanextern int packetAliasMode; 77132720Skan 78132720Skan/* Prototypes */ 79132720Skan 80132720Skan/* General utilities */ 81132720Skanu_short IpChecksum(struct ip *_pip); 82132720Skanu_short TcpChecksum(struct ip *_pip); 83132720Skanvoid DifferentialChecksum(u_short *_cksum, u_short *_new, u_short *_old, 84132720Skan int _n); 85132720Skan 86132720Skan/* Internal data access */ 87132720Skanstruct alias_link * 88132720Skan FindIcmpIn(struct in_addr _dst_addr, struct in_addr _alias_addr, 89132720Skan u_short _id_alias, int _create); 90132720Skanstruct alias_link * 91132720Skan FindIcmpOut(struct in_addr _src_addr, struct in_addr _dst_addr, 92132720Skan u_short _id, int _create); 93132720Skanstruct alias_link * 94132720Skan FindFragmentIn1(struct in_addr _dst_addr, struct in_addr _alias_addr, 95132720Skan u_short _ip_id); 96132720Skanstruct alias_link * 97132720Skan FindFragmentIn2(struct in_addr _dst_addr, struct in_addr _alias_addr, 98132720Skan u_short _ip_id); 99132720Skanstruct alias_link * 100132720Skan AddFragmentPtrLink(struct in_addr _dst_addr, u_short _ip_id); 101132720Skanstruct alias_link * 102132720Skan FindFragmentPtr(struct in_addr _dst_addr, u_short _ip_id); 103132720Skanstruct alias_link * 104132720Skan FindProtoIn(struct in_addr _dst_addr, struct in_addr _alias_addr, 105132720Skan u_char _proto); 106132720Skanstruct alias_link * 107132720Skan FindProtoOut(struct in_addr _src_addr, struct in_addr _dst_addr, 108132720Skan u_char _proto); 109132720Skanstruct alias_link * 110132720Skan FindUdpTcpIn(struct in_addr _dst_addr, struct in_addr _alias_addr, 111132720Skan u_short _dst_port, u_short _alias_port, u_char _proto, int _create); 112132720Skanstruct alias_link * 113132720Skan FindUdpTcpOut(struct in_addr _src_addr, struct in_addr _dst_addr, 114132720Skan u_short _src_port, u_short _dst_port, u_char _proto, int _create); 115132720Skanstruct alias_link * 116132720Skan AddPptp(struct in_addr _src_addr, struct in_addr _dst_addr, 117132720Skan struct in_addr _alias_addr, u_int16_t _src_call_id); 118132720Skanstruct alias_link * 119132720Skan FindPptpOutByCallId(struct in_addr _src_addr, 120132720Skan struct in_addr _dst_addr, u_int16_t _src_call_id); 121132720Skanstruct alias_link * 122132720Skan FindPptpInByCallId(struct in_addr _dst_addr, 123132720Skan struct in_addr _alias_addr, u_int16_t _dst_call_id); 124132720Skanstruct alias_link * 125132720Skan FindPptpOutByPeerCallId(struct in_addr _src_addr, 126132720Skan struct in_addr _dst_addr, u_int16_t _dst_call_id); 127132720Skanstruct alias_link * 128132720Skan FindPptpInByPeerCallId(struct in_addr _dst_addr, 129132720Skan struct in_addr _alias_addr, u_int16_t _alias_call_id); 130132720Skanstruct alias_link * 131132720Skan FindRtspOut(struct in_addr _src_addr, struct in_addr _dst_addr, 132132720Skan u_short _src_port, u_short _alias_port, u_char _proto); 133132720Skanstruct in_addr 134132720Skan FindOriginalAddress(struct in_addr _alias_addr); 135132720Skanstruct in_addr 136132720Skan FindAliasAddress(struct in_addr _original_addr); 137132720Skan 138132720Skan/* External data access/modification */ 139132720Skanint FindNewPortGroup(struct in_addr _dst_addr, struct in_addr _alias_addr, 140132720Skan u_short _src_port, u_short _dst_port, u_short _port_count, 141132720Skan u_char _proto, u_char _align); 142132720Skanvoid GetFragmentAddr(struct alias_link *_link, struct in_addr *_src_addr); 143132720Skanvoid SetFragmentAddr(struct alias_link *_link, struct in_addr _src_addr); 144132720Skanvoid GetFragmentPtr(struct alias_link *_link, char **_fptr); 145132720Skanvoid SetFragmentPtr(struct alias_link *_link, char *fptr); 146132720Skanvoid SetStateIn(struct alias_link *_link, int _state); 147132720Skanvoid SetStateOut(struct alias_link *_link, int _state); 148132720Skanint GetStateIn(struct alias_link *_link); 149132720Skanint GetStateOut(struct alias_link *_link); 150132720Skanstruct in_addr 151132720Skan GetOriginalAddress(struct alias_link *_link); 152132720Skanstruct in_addr 153132720Skan GetDestAddress(struct alias_link *_link); 154132720Skanstruct in_addr 155132720Skan GetAliasAddress(struct alias_link *_link); 156132720Skanstruct in_addr 157132720Skan GetDefaultAliasAddress(void); 158132720Skanvoid SetDefaultAliasAddress(struct in_addr _alias_addr); 159132720Skanu_short GetOriginalPort(struct alias_link *_link); 160132720Skanu_short GetAliasPort(struct alias_link *_link); 161132720Skanstruct in_addr 162132720Skan GetProxyAddress(struct alias_link *_link); 163132720Skanvoid SetProxyAddress(struct alias_link *_link, struct in_addr _addr); 164132720Skanu_short GetProxyPort(struct alias_link *_link); 165132720Skanvoid SetProxyPort(struct alias_link *_link, u_short _port); 166132720Skanvoid SetAckModified(struct alias_link *_link); 167132720Skanint GetAckModified(struct alias_link *_link); 168132720Skanint GetDeltaAckIn(struct ip *_pip, struct alias_link *_link); 169132720Skanint GetDeltaSeqOut(struct ip *_pip, struct alias_link *_link); 170132720Skanvoid AddSeq(struct ip *_pip, struct alias_link *_link, int _delta); 171132720Skanvoid SetExpire(struct alias_link *_link, int _expire); 172132720Skanvoid ClearCheckNewLink(void); 173132720Skanvoid SetProtocolFlags(struct alias_link *_link, int _pflags); 174132720Skanint GetProtocolFlags(struct alias_link *_link); 175132720Skanvoid SetDestCallId(struct alias_link *_link, u_int16_t _cid); 176132720Skan#ifndef NO_FW_PUNCH 177132720Skanvoid PunchFWHole(struct alias_link *_link); 178132720Skan#endif 179132720Skan 180132720Skan/* Housekeeping function */ 181132720Skanvoid HouseKeeping(void); 182132720Skan 183132720Skan/* Tcp specfic routines */ 184132720Skan/* lint -save -library Suppress flexelint warnings */ 185132720Skan 186132720Skan/* FTP routines */ 187132720Skanvoid AliasHandleFtpOut(struct ip *_pip, struct alias_link *_link, 188132720Skan int _maxpacketsize); 189132720Skan 190132720Skan/* IRC routines */ 191132720Skanvoid AliasHandleIrcOut(struct ip *_pip, struct alias_link *_link, 192132720Skan int _maxsize); 193132720Skan 194132720Skan/* RTSP routines */ 195132720Skanvoid AliasHandleRtspOut(struct ip *_pip, struct alias_link *_link, 196132720Skan int _maxpacketsize); 197132720Skan 198132720Skan/* PPTP routines */ 199132720Skanvoid AliasHandlePptpOut(struct ip *_pip, struct alias_link *_link); 200132720Skanvoid AliasHandlePptpIn(struct ip *_pip, struct alias_link *_link); 201132720Skanint AliasHandlePptpGreOut(struct ip *_pip); 202132720Skanint AliasHandlePptpGreIn(struct ip *_pip); 203132720Skan 204132720Skan/* NetBIOS routines */ 205132720Skanint AliasHandleUdpNbt(struct ip *_pip, struct alias_link *_link, 206132720Skan struct in_addr *_alias_address, u_short _alias_port); 207132720Skanint AliasHandleUdpNbtNS(struct ip *_pip, struct alias_link *_link, 208132720Skan struct in_addr *_alias_address, u_short *_alias_port, 209132720Skan struct in_addr *_original_address, u_short *_original_port); 210132720Skan 211132720Skan/* CUSeeMe routines */ 212132720Skanvoid AliasHandleCUSeeMeOut(struct ip *_pip, struct alias_link *_link); 213132720Skanvoid AliasHandleCUSeeMeIn(struct ip *_pip, struct in_addr _original_addr); 214132720Skan 215132720Skan/* Transparent proxy routines */ 216132720Skanint ProxyCheck(struct ip *_pip, struct in_addr *_proxy_server_addr, 217132720Skan u_short *_proxy_server_port); 218132720Skanvoid ProxyModify(struct alias_link *_link, struct ip *_pip, 219132720Skan int _maxpacketsize, int _proxy_type); 220132720Skan 221132720Skanenum alias_tcp_state { 222132720Skan ALIAS_TCP_STATE_NOT_CONNECTED, 223132720Skan ALIAS_TCP_STATE_CONNECTED, 224132720Skan ALIAS_TCP_STATE_DISCONNECTED 225132720Skan}; 226132720Skan 227132720Skan/*lint -restore */ 228132720Skan 229132720Skan#endif /* !_ALIAS_LOCAL_H_ */ 230132720Skan