FreeBSD kernel IPv4 code
|
#include <sys/cdefs.h>
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/mbuf.h>
#include <sys/sysctl.h>
#include <netinet/in_systm.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>
#include <netinet/tcp.h>
#include <netinet/udp.h>
#include <netinet/libalias/alias.h>
#include <netinet/libalias/alias_local.h>
#include <netinet/libalias/alias_mod.h>
Go to the source code of this file.
Macros | |
#define | MF_ISSET(_pip) (ntohs((_pip)->ip_off) & IP_MF) |
#define | FRAG_NO_HDR(_pip) (ntohs((_pip)->ip_off) & IP_OFFMASK) |
#define | UNREG_ADDR_A_LOWER 0x0a000000 |
#define | UNREG_ADDR_A_UPPER 0x0affffff |
#define | UNREG_ADDR_B_LOWER 0xac100000 |
#define | UNREG_ADDR_B_UPPER 0xac1fffff |
#define | UNREG_ADDR_C_LOWER 0xc0a80000 |
#define | UNREG_ADDR_C_UPPER 0xc0a8ffff |
#define | UNREG_ADDR_CGN_LOWER 0x64400000 |
#define | UNREG_ADDR_CGN_UPPER 0x647fffff |
Functions | |
__FBSDID ("$FreeBSD$") | |
static __inline int | twowords (void *p) |
static void | TcpMonitorIn (u_char, struct alias_link *) |
static void | TcpMonitorOut (u_char, struct alias_link *) |
static int | IcmpAliasIn1 (struct libalias *, struct ip *) |
static int | IcmpAliasIn2 (struct libalias *, struct ip *) |
static int | IcmpAliasIn (struct libalias *, struct ip *) |
static int | IcmpAliasOut1 (struct libalias *, struct ip *, int create) |
static int | IcmpAliasOut2 (struct libalias *, struct ip *) |
static int | IcmpAliasOut (struct libalias *, struct ip *, int create) |
static int | ProtoAliasIn (struct libalias *la, struct in_addr ip_src, struct ip *pip, u_char ip_p, u_short *ip_sum) |
static int | ProtoAliasOut (struct libalias *la, struct ip *pip, struct in_addr ip_dst, u_char ip_p, u_short *ip_sum, int create) |
static int | UdpAliasIn (struct libalias *, struct ip *) |
static int | UdpAliasOut (struct libalias *, struct ip *, int, int create) |
static int | TcpAliasIn (struct libalias *, struct ip *) |
static int | TcpAliasOut (struct libalias *, struct ip *, int, int create) |
static struct udphdr * | ValidateUdpLength (struct ip *pip) |
static int | FragmentIn (struct libalias *la, struct in_addr ip_src, struct ip *pip, u_short ip_id, u_short *ip_sum) |
static int | FragmentOut (struct libalias *, struct ip *pip, u_short *ip_sum) |
int | LibAliasSaveFragment (struct libalias *la, void *ptr) |
void * | LibAliasGetFragment (struct libalias *la, void *ptr) |
void | LibAliasFragmentIn (struct libalias *la, void *ptr, void *ptr_fragment) |
static int | LibAliasOutLocked (struct libalias *la, struct ip *pip, int maxpacketsize, int create) |
static int | LibAliasInLocked (struct libalias *la, struct ip *pip, int maxpacketsize) |
int | LibAliasIn (struct libalias *la, void *ptr, int maxpacketsize) |
int | LibAliasOut (struct libalias *la, void *ptr, int maxpacketsize) |
int | LibAliasOutTry (struct libalias *la, void *ptr, int maxpacketsize, int create) |
int | LibAliasUnaliasOut (struct libalias *la, void *ptr, int maxpacketsize) |
struct mbuf * | m_megapullup (struct mbuf *m, int len) |
#define FRAG_NO_HDR | ( | _pip | ) | (ntohs((_pip)->ip_off) & IP_OFFMASK) |
__FBSDID | ( | "$FreeBSD$" | ) |
|
static |
Definition at line 1206 of file alias.c.
References DifferentialChecksum(), FindFragmentIn2(), GetFragmentAddr(), ip::ip_dst, ip_id, ip_sum, alias_link::la, LIBALIAS_LOCK_ASSERT, PKT_ALIAS_OK, and PKT_ALIAS_UNRESOLVED_FRAGMENT.
Referenced by LibAliasInLocked().
Definition at line 1227 of file alias.c.
References DifferentialChecksum(), FindAliasAddress(), ip_sum, LIBALIAS_LOCK_ASSERT, and PKT_ALIAS_OK.
Referenced by LibAliasOutLocked().
Definition at line 432 of file alias.c.
References ICMP_ADVLEN, ICMP_ADVLENMIN, icmp::icmp_code, ICMP_ECHO, ICMP_ECHOREPLY, ICMP_MINLEN, ICMP_PARAMPROB, ICMP_SOURCEQUENCH, ICMP_TIMXCEED, ICMP_TSTAMP, ICMP_TSTAMPREPLY, icmp::icmp_type, ICMP_UNREACH, IcmpAliasIn1(), IcmpAliasIn2(), ip::ip_hl, ip::ip_len, LIBALIAS_LOCK_ASSERT, libalias::packetAliasMode, PKT_ALIAS_IGNORED, PKT_ALIAS_OK, and PKT_ALIAS_PROXY_ONLY.
Referenced by LibAliasInLocked().
Definition at line 291 of file alias.c.
References ADJUST_CHECKSUM, DifferentialChecksum(), FindIcmpIn(), GetOriginalAddress(), GetOriginalPort(), icmp::icmp_cksum, ip::ip_dst, ip::ip_sum, LIBALIAS_LOCK_ASSERT, PKT_ALIAS_IGNORED, and PKT_ALIAS_OK.
Referenced by IcmpAliasIn().
Definition at line 335 of file alias.c.
References ADJUST_CHECKSUM, DifferentialChecksum(), FindIcmpIn(), FindUdpTcpIn(), GetOriginalAddress(), GetOriginalPort(), icmp::icmp_cksum, ICMP_ECHO, ICMP_TSTAMP, icmp::icmp_type, ip::ip_dst, ip::ip_p, ip::ip_sum, IPPROTO_ICMP, IPPROTO_TCP, IPPROTO_UDP, alias_link::la, LIBALIAS_LOCK_ASSERT, PKT_ALIAS_IGNORED, PKT_ALIAS_OK, twowords(), udphdr::uh_dport, and udphdr::uh_sport.
Referenced by IcmpAliasIn().
Definition at line 620 of file alias.c.
References icmp::icmp_code, ICMP_ECHO, ICMP_ECHOREPLY, ICMP_PARAMPROB, ICMP_SOURCEQUENCH, ICMP_TIMXCEED, ICMP_TSTAMP, ICMP_TSTAMPREPLY, icmp::icmp_type, ICMP_UNREACH, IcmpAliasOut1(), IcmpAliasOut2(), LIBALIAS_LOCK_ASSERT, libalias::packetAliasMode, PKT_ALIAS_IGNORED, PKT_ALIAS_OK, and PKT_ALIAS_PROXY_ONLY.
Referenced by LibAliasOutLocked().
Definition at line 480 of file alias.c.
References ADJUST_CHECKSUM, DifferentialChecksum(), FindIcmpOut(), GetAliasAddress(), GetAliasPort(), icmp::icmp_cksum, ip::ip_dst, ip::ip_sum, LIBALIAS_LOCK_ASSERT, PKT_ALIAS_IGNORED, and PKT_ALIAS_OK.
Referenced by IcmpAliasOut().
Definition at line 524 of file alias.c.
References ADJUST_CHECKSUM, DifferentialChecksum(), FindIcmpOut(), FindUdpTcpOut(), GetAliasAddress(), GetAliasPort(), icmp::icmp_cksum, ICMP_ECHO, ICMP_TSTAMP, icmp::icmp_type, ip::ip_dst, ip::ip_p, ip::ip_sum, IPPROTO_ICMP, IPPROTO_TCP, IPPROTO_UDP, alias_link::la, LIBALIAS_LOCK_ASSERT, PKT_ALIAS_IGNORED, PKT_ALIAS_OK, in_addr::s_addr, twowords(), udphdr::uh_dport, and udphdr::uh_sport.
Referenced by IcmpAliasOut().
void LibAliasFragmentIn | ( | struct libalias * | la, |
void * | ptr, | ||
void * | ptr_fragment | ||
) |
Definition at line 1293 of file alias.c.
References DifferentialChecksum(), ip::ip_dst, ip::ip_sum, LIBALIAS_LOCK, and LIBALIAS_UNLOCK.
void * LibAliasGetFragment | ( | struct libalias * | la, |
void * | ptr | ||
) |
Definition at line 1272 of file alias.c.
References FindFragmentPtr(), GetFragmentPtr(), ip::ip_id, LIBALIAS_LOCK, LIBALIAS_UNLOCK, SetExpire(), and SetFragmentPtr().
int LibAliasIn | ( | struct libalias * | la, |
void * | ptr, | ||
int | maxpacketsize | ||
) |
Definition at line 1321 of file alias.c.
References LIBALIAS_LOCK, LIBALIAS_UNLOCK, and LibAliasInLocked().
Definition at line 1332 of file alias.c.
References alias_link::alias_addr, find_handler(), FindFragmentIn1(), FRAG_NO_HDR, FragmentIn(), HouseKeeping(), IcmpAliasIn(), IN, IP, ip::ip_dst, ip::ip_hl, ip::ip_id, ip::ip_len, ip::ip_p, ip::ip_sum, IPPROTO_ICMP, IPPROTO_SCTP, IPPROTO_TCP, IPPROTO_UDP, alias_link::la, LibAliasOutLocked(), alias_data::lnk, MF_ISSET, libalias::packetAliasMode, PKT_ALIAS_ERROR, PKT_ALIAS_FOUND_HEADER_FRAGMENT, PKT_ALIAS_IGNORED, PKT_ALIAS_OK, PKT_ALIAS_REVERSE, ProtoAliasIn(), SctpAlias(), SetFragmentAddr(), SN_TO_LOCAL, TcpAliasIn(), and UdpAliasIn().
Referenced by LibAliasIn(), and LibAliasOutLocked().
int LibAliasOut | ( | struct libalias * | la, |
void * | ptr, | ||
int | maxpacketsize | ||
) |
Definition at line 1437 of file alias.c.
References alias_link::la, LIBALIAS_LOCK, LIBALIAS_UNLOCK, and LibAliasOutLocked().
|
static |
Definition at line 1459 of file alias.c.
References find_handler(), FRAG_NO_HDR, FragmentOut(), GetDefaultAliasAddress(), HouseKeeping(), IcmpAliasOut(), IP, ip::ip_dst, ip::ip_hl, ip::ip_len, ip::ip_p, ip::ip_sum, IPPROTO_ICMP, IPPROTO_SCTP, IPPROTO_TCP, IPPROTO_UDP, LibAliasInLocked(), alias_data::lnk, OUT, libalias::packetAliasMode, PKT_ALIAS_IGNORED, PKT_ALIAS_OK, PKT_ALIAS_PROXY_ONLY, PKT_ALIAS_REVERSE, PKT_ALIAS_UNREGISTERED_CGN, PKT_ALIAS_UNREGISTERED_ONLY, ProtoAliasOut(), SctpAlias(), SetDefaultAliasAddress(), SN_TO_GLOBAL, TcpAliasOut(), UdpAliasOut(), UNREG_ADDR_A_LOWER, UNREG_ADDR_A_UPPER, UNREG_ADDR_B_LOWER, UNREG_ADDR_B_UPPER, UNREG_ADDR_C_LOWER, UNREG_ADDR_C_UPPER, UNREG_ADDR_CGN_LOWER, and UNREG_ADDR_CGN_UPPER.
Referenced by LibAliasInLocked(), LibAliasOut(), and LibAliasOutTry().
int LibAliasOutTry | ( | struct libalias * | la, |
void * | ptr, | ||
int | maxpacketsize, | ||
int | create | ||
) |
Definition at line 1448 of file alias.c.
References alias_link::la, LIBALIAS_LOCK, LIBALIAS_UNLOCK, and LibAliasOutLocked().
int LibAliasSaveFragment | ( | struct libalias * | la, |
void * | ptr | ||
) |
Definition at line 1253 of file alias.c.
References AddFragmentPtrLink(), ip::ip_id, LIBALIAS_LOCK, LIBALIAS_UNLOCK, PKT_ALIAS_ERROR, PKT_ALIAS_OK, and SetFragmentPtr().
int LibAliasUnaliasOut | ( | struct libalias * | la, |
void * | ptr, | ||
int | maxpacketsize | ||
) |
Definition at line 1562 of file alias.c.
References ADJUST_CHECKSUM, DifferentialChecksum(), FindIcmpIn(), FindUdpTcpIn(), GetOriginalAddress(), GetOriginalPort(), icmp::icmp_cksum, ip::ip_dst, ip::ip_hl, ip::ip_len, ip::ip_p, ip::ip_sum, IPPROTO_ICMP, IPPROTO_TCP, IPPROTO_UDP, alias_link::la, LIBALIAS_LOCK, LIBALIAS_UNLOCK, PKT_ALIAS_IGNORED, PKT_ALIAS_OK, twowords(), udphdr::uh_dport, udphdr::uh_sport, and udphdr::uh_sum.
|
static |
Definition at line 662 of file alias.c.
References DifferentialChecksum(), FindProtoIn(), GetOriginalAddress(), ip::ip_dst, ip_p, ip_sum, alias_link::la, LIBALIAS_LOCK_ASSERT, libalias::packetAliasMode, PKT_ALIAS_IGNORED, PKT_ALIAS_OK, and PKT_ALIAS_PROXY_ONLY.
Referenced by LibAliasInLocked().
|
static |
Definition at line 694 of file alias.c.
References DifferentialChecksum(), FindProtoOut(), GetAliasAddress(), ip_dst, ip_p, ip_sum, alias_link::la, LIBALIAS_LOCK_ASSERT, libalias::packetAliasMode, PKT_ALIAS_IGNORED, PKT_ALIAS_OK, and PKT_ALIAS_PROXY_ONLY.
Referenced by LibAliasOutLocked().
Definition at line 940 of file alias.c.
References ADJUST_CHECKSUM, find_handler(), FindUdpTcpIn(), GetAckModified(), GetAliasAddress(), GetDeltaAckIn(), GetOriginalAddress(), GetOriginalPort(), GetProxyAddress(), GetProxyPort(), IN, ip::ip_dst, ip::ip_hl, ip::ip_len, ip::ip_sum, IPPROTO_TCP, alias_link::la, LIBALIAS_LOCK_ASSERT, alias_data::lnk, libalias::packetAliasMode, PKT_ALIAS_IGNORED, PKT_ALIAS_OK, PKT_ALIAS_PROXY_ONLY, in_addr::s_addr, TCP, TcpMonitorIn(), and twowords().
Referenced by LibAliasInLocked().
|
static |
Definition at line 1067 of file alias.c.
References ADJUST_CHECKSUM, find_handler(), FindUdpTcpOut(), GetAckModified(), GetAliasAddress(), GetAliasPort(), GetDeltaSeqOut(), ip::ip_dst, ip::ip_hl, ip::ip_len, ip::ip_p, ip::ip_sum, IPPROTO_TCP, alias_link::la, LIBALIAS_LOCK_ASSERT, alias_data::lnk, OUT, libalias::packetAliasMode, PKT_ALIAS_IGNORED, PKT_ALIAS_OK, PKT_ALIAS_PROXY_ONLY, ProxyCheck(), ProxyModify(), SetProxyAddress(), SetProxyPort(), TCP, TcpMonitorOut(), and twowords().
Referenced by LibAliasOutLocked().
|
static |
Definition at line 193 of file alias.c.
References ALIAS_TCP_STATE_CONNECTED, ALIAS_TCP_STATE_DISCONNECTED, ALIAS_TCP_STATE_NOT_CONNECTED, GetStateIn(), and SetStateIn().
Referenced by TcpAliasIn().
|
static |
Definition at line 210 of file alias.c.
References ALIAS_TCP_STATE_CONNECTED, ALIAS_TCP_STATE_DISCONNECTED, ALIAS_TCP_STATE_NOT_CONNECTED, GetStateOut(), and SetStateOut().
Referenced by TcpAliasOut().
|
static |
Definition at line 162 of file alias.c.
Referenced by IcmpAliasIn2(), IcmpAliasOut2(), LibAliasUnaliasOut(), TcpAliasIn(), TcpAliasOut(), UdpAliasIn(), and UdpAliasOut().
Definition at line 746 of file alias.c.
References ADJUST_CHECKSUM, DifferentialChecksum(), find_handler(), FindUdpTcpIn(), GetAliasAddress(), GetOriginalAddress(), GetOriginalPort(), GetProxyAddress(), GetProxyPort(), IN, ip::ip_dst, ip::ip_sum, IPPROTO_UDP, alias_link::la, LIBALIAS_LOCK_ASSERT, alias_data::lnk, libalias::packetAliasMode, PKT_ALIAS_IGNORED, PKT_ALIAS_OK, PKT_ALIAS_PROXY_ONLY, in_addr::s_addr, twowords(), UDP, udphdr::uh_dport, udphdr::uh_sport, udphdr::uh_sum, and ValidateUdpLength().
Referenced by LibAliasInLocked().
|
static |
Definition at line 837 of file alias.c.
References ADJUST_CHECKSUM, DifferentialChecksum(), find_handler(), FindUdpTcpOut(), GetAliasAddress(), GetAliasPort(), ip::ip_dst, ip::ip_p, ip::ip_sum, IPPROTO_UDP, LIBALIAS_LOCK_ASSERT, alias_data::lnk, OUT, libalias::packetAliasMode, PKT_ALIAS_IGNORED, PKT_ALIAS_OK, PKT_ALIAS_PROXY_ONLY, ProxyCheck(), ProxyModify(), SetProxyAddress(), SetProxyPort(), twowords(), UDP, udphdr::uh_dport, udphdr::uh_sport, udphdr::uh_sum, and ValidateUdpLength().
Referenced by LibAliasOutLocked().
Definition at line 728 of file alias.c.
References FRAG_NO_HDR, ip::ip_hl, ip::ip_len, MF_ISSET, and udphdr::uh_ulen.
Referenced by UdpAliasIn(), and UdpAliasOut().