48#ifndef _ALIAS_LOCAL_H_
49#define _ALIAS_LOCAL_H_
53#include <sys/sysctl.h>
56#include <sys/malloc.h>
62#define INADDR_NONE 0xffffffff
70#define GET_ALIAS_PORT -1
71#define GET_ALIAS_ID GET_ALIAS_PORT
74#define INET_NTOA_BUF(buf) (buf)
76#define INET_NTOA_BUF(buf) (buf), sizeof(buf)
172#define LIBALIAS_LOCK_INIT(l) \
173 mtx_init(&l->mutex, "per-instance libalias mutex", NULL, MTX_DEF)
174#define LIBALIAS_LOCK_ASSERT(l) mtx_assert(&l->mutex, MA_OWNED)
175#define LIBALIAS_LOCK(l) mtx_lock(&l->mutex)
176#define LIBALIAS_UNLOCK(l) mtx_unlock(&l->mutex)
177#define LIBALIAS_LOCK_DESTROY(l) mtx_destroy(&l->mutex)
179#define LIBALIAS_LOCK_INIT(l)
180#define LIBALIAS_LOCK_ASSERT(l)
181#define LIBALIAS_LOCK(l)
182#define LIBALIAS_UNLOCK(l)
183#define LIBALIAS_LOCK_DESTROY(l)
194#define ADJUST_CHECKSUM(acc, cksum) \
199 acc = (acc >> 16) + (acc & 0xffff); \
201 cksum = (u_short) ~acc; \
203 acc = (acc >> 16) + (acc & 0xffff); \
205 cksum = (u_short) acc; \
231u_short IpChecksum(
struct ip *_pip);
232u_short TcpChecksum(
struct ip *_pip);
244 u_short _id_alias,
int _create);
247 u_short _id,
int _create);
266 u_short _dst_port, u_short _alias_port, u_char _proto,
int _create);
269 u_short _src_port, u_short _dst_port, u_char _proto,
int _create);
272 struct in_addr _alias_addr, u_int16_t _src_call_id);
275 struct in_addr _dst_addr, u_int16_t _src_call_id);
278 struct in_addr _alias_addr, u_int16_t _dst_call_id);
281 struct in_addr _dst_addr, u_int16_t _dst_call_id);
284 struct in_addr _alias_addr, u_int16_t _alias_call_id);
287 u_short _src_port, u_short _alias_port, u_char _proto);
297 struct in_addr _alias_addr, u_short _src_port,
298 u_short _dst_port, u_short _port_count, u_char _proto,
324 u_short
ip_len, u_long th_seq, u_int th_off);
341 u_short * proxy_server_port,
struct in_addr src_addr,
342 struct in_addr dst_addr, u_short dst_port, u_char
ip_p);
345 int _maxpacketsize,
int _proxy_type);
356#if defined(_NETINET_IP_H_)
357static __inline
void *
358ip_next(
struct ip *iphdr)
360 char *p = (
char *)iphdr;
361 return (&p[iphdr->
ip_hl * 4]);
365#if defined(_NETINET_TCP_H_)
366static __inline
void *
367tcp_next(
struct tcphdr *tcphdr)
369 char *p = (
char *)tcphdr;
370 return (&p[tcphdr->th_off * 4]);
374#if defined(_NETINET_UDP_H_)
375static __inline
void *
378 return ((
void *)(
udphdr + 1));
struct alias_link * FindPptpInByCallId(struct libalias *la, struct in_addr _dst_addr, struct in_addr _alias_addr, u_int16_t _dst_call_id)
struct alias_link * FindUdpTcpIn(struct libalias *la, struct in_addr _dst_addr, struct in_addr _alias_addr, u_short _dst_port, u_short _alias_port, u_char _proto, int _create)
u_short GetProxyPort(struct alias_link *_lnk)
void SetFragmentPtr(struct alias_link *_lnk, void *fptr)
struct alias_link * FindRtspOut(struct libalias *la, struct in_addr _src_addr, struct in_addr _dst_addr, u_short _src_port, u_short _alias_port, u_char _proto)
int GetStateIn(struct alias_link *_lnk)
int GetStateOut(struct alias_link *_lnk)
struct in_addr FindOriginalAddress(struct libalias *la, struct in_addr _alias_addr)
u_short GetOriginalPort(struct alias_link *_lnk)
int GetDeltaSeqOut(u_long, struct alias_link *lnk)
struct alias_link * FindPptpOutByPeerCallId(struct libalias *la, struct in_addr _src_addr, struct in_addr _dst_addr, u_int16_t _dst_call_id)
int GetAckModified(struct alias_link *_lnk)
struct alias_link * FindFragmentIn1(struct libalias *la, struct in_addr _dst_addr, struct in_addr _alias_addr, u_short _ip_id)
void SetDestCallId(struct alias_link *_lnk, u_int16_t _cid)
struct in_addr GetAliasAddress(struct alias_link *_lnk)
struct alias_link * AddPptp(struct libalias *la, struct in_addr _src_addr, struct in_addr _dst_addr, struct in_addr _alias_addr, u_int16_t _src_call_id)
void SetDefaultAliasAddress(struct libalias *la, struct in_addr _alias_addr)
struct alias_link * FindProtoIn(struct libalias *la, struct in_addr _dst_addr, struct in_addr _alias_addr, u_char _proto)
struct alias_link * FindIcmpIn(struct libalias *la, struct in_addr _dst_addr, struct in_addr _alias_addr, u_short _id_alias, int _create)
void AliasSctpTerm(struct libalias *la)
Cleans-up the SCTP NAT Implementation prior to unloading.
void SetStateOut(struct alias_link *_lnk, int _state)
int FindNewPortGroup(struct libalias *la, struct in_addr _dst_addr, struct in_addr _alias_addr, u_short _src_port, u_short _dst_port, u_short _port_count, u_char _proto, u_char _align)
void SetProtocolFlags(struct alias_link *_lnk, int _pflags)
void PunchFWHole(struct alias_link *_lnk)
int SctpAlias(struct libalias *la, struct ip *ip, int direction)
Handles SCTP packets passed from libalias.
void GetFragmentAddr(struct alias_link *_lnk, struct in_addr *_src_addr)
void SetStateIn(struct alias_link *_lnk, int _state)
int ProxyCheck(struct libalias *la, struct in_addr *proxy_server_addr, u_short *proxy_server_port, struct in_addr src_addr, struct in_addr dst_addr, u_short dst_port, u_char ip_p)
void SetAckModified(struct alias_link *_lnk)
void SetExpire(struct alias_link *_lnk, int _expire)
struct alias_link * FindUdpTcpOut(struct libalias *la, struct in_addr _src_addr, struct in_addr _dst_addr, u_short _src_port, u_short _dst_port, u_char _proto, int _create)
void HouseKeeping(struct libalias *)
int GetDeltaAckIn(u_long, struct alias_link *_lnk)
struct in_addr GetOriginalAddress(struct alias_link *_lnk)
struct alias_link * FindFragmentIn2(struct libalias *la, struct in_addr _dst_addr, struct in_addr _alias_addr, u_short _ip_id)
struct in_addr FindAliasAddress(struct libalias *la, struct in_addr _original_addr)
u_short GetAliasPort(struct alias_link *_lnk)
struct in_addr FindSctpRedirectAddress(struct libalias *la, struct sctp_nat_msg *sm)
void SetProxyPort(struct alias_link *_lnk, u_short _port)
void ProxyModify(struct libalias *la, struct alias_link *_lnk, struct ip *_pip, int _maxpacketsize, int _proxy_type)
struct alias_link * AddFragmentPtrLink(struct libalias *la, struct in_addr _dst_addr, u_short _ip_id)
void SetFragmentAddr(struct alias_link *_lnk, struct in_addr _src_addr)
struct alias_link * FindIcmpOut(struct libalias *la, struct in_addr _src_addr, struct in_addr _dst_addr, u_short _id, int _create)
void AliasSctpInit(struct libalias *la)
Initialises the SCTP NAT Implementation.
void GetFragmentPtr(struct alias_link *_lnk, void **_fptr)
@ ALIAS_TCP_STATE_NOT_CONNECTED
@ ALIAS_TCP_STATE_CONNECTED
@ ALIAS_TCP_STATE_DISCONNECTED
void DifferentialChecksum(u_short *_cksum, void *_new, void *_old, int _n)
struct alias_link * AddLink(struct libalias *la, struct in_addr src_addr, struct in_addr dst_addr, struct in_addr alias_addr, u_short src_port, u_short dst_port, int alias_param, int link_type)
void SetProxyAddress(struct alias_link *_lnk, struct in_addr _addr)
int GetProtocolFlags(struct alias_link *_lnk)
struct alias_link * FindFragmentPtr(struct libalias *la, struct in_addr _dst_addr, u_short _ip_id)
struct in_addr GetDefaultAliasAddress(struct libalias *la)
void AddSeq(struct alias_link *lnk, int delta, u_int ip_hl, u_short ip_len, u_long th_seq, u_int th_off)
struct alias_link * FindProtoOut(struct libalias *la, struct in_addr _src_addr, struct in_addr _dst_addr, u_char _proto)
struct alias_link * FindPptpInByPeerCallId(struct libalias *la, struct in_addr _dst_addr, struct in_addr _alias_addr, u_int16_t _alias_call_id)
struct alias_link * FindPptpOutByCallId(struct libalias *la, struct in_addr _src_addr, struct in_addr _dst_addr, u_int16_t _src_call_id)
struct in_addr GetDestAddress(struct alias_link *_lnk)
struct in_addr GetProxyAddress(struct alias_link *_lnk)
struct in_addr alias_addr
struct in_addr alias_addr
LIST_HEAD(, alias_link) full
LIST_HEAD(, alias_link) pptpList
unsigned int fragmentIdLinkCount
unsigned int pptpLinkCount
SPLAY_HEAD(splay_in, group_in) linkSplayIn
LIST_HEAD(sctpNatTableG, sctp_nat_assoc) *sctpTableGlobal
struct sctp_nat_timer sctpNatTimer
TAILQ_HEAD(, alias_link) checkExpire
unsigned int tcpLinkCount
unsigned int udpLinkCount
SPLAY_HEAD(splay_out, alias_link) linkSplayOut
unsigned int protoLinkCount
struct in_addr targetAddress
struct proxy_entry * proxyList
struct in_addr aliasAddress
unsigned int icmpLinkCount
unsigned int fragmentPtrLinkCount
LIST_ENTRY(libalias) instancelist
LIST_HEAD(sctpNatTableL, sctp_nat_assoc) *sctpTableLocal
sctp association information
sctp nat timer queue structure