FreeBSD kernel IPv4 code
alias.c File Reference
#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>
Include dependency graph for alias.c:

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 udphdrValidateUdpLength (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)
 

Macro Definition Documentation

◆ FRAG_NO_HDR

#define FRAG_NO_HDR (   _pip)    (ntohs((_pip)->ip_off) & IP_OFFMASK)

Definition at line 725 of file alias.c.

◆ MF_ISSET

#define MF_ISSET (   _pip)    (ntohs((_pip)->ip_off) & IP_MF)

Definition at line 724 of file alias.c.

◆ UNREG_ADDR_A_LOWER

#define UNREG_ADDR_A_LOWER   0x0a000000

Definition at line 1421 of file alias.c.

◆ UNREG_ADDR_A_UPPER

#define UNREG_ADDR_A_UPPER   0x0affffff

Definition at line 1422 of file alias.c.

◆ UNREG_ADDR_B_LOWER

#define UNREG_ADDR_B_LOWER   0xac100000

Definition at line 1425 of file alias.c.

◆ UNREG_ADDR_B_UPPER

#define UNREG_ADDR_B_UPPER   0xac1fffff

Definition at line 1426 of file alias.c.

◆ UNREG_ADDR_C_LOWER

#define UNREG_ADDR_C_LOWER   0xc0a80000

Definition at line 1429 of file alias.c.

◆ UNREG_ADDR_C_UPPER

#define UNREG_ADDR_C_UPPER   0xc0a8ffff

Definition at line 1430 of file alias.c.

◆ UNREG_ADDR_CGN_LOWER

#define UNREG_ADDR_CGN_LOWER   0x64400000

Definition at line 1433 of file alias.c.

◆ UNREG_ADDR_CGN_UPPER

#define UNREG_ADDR_CGN_UPPER   0x647fffff

Definition at line 1434 of file alias.c.

Function Documentation

◆ __FBSDID()

__FBSDID ( "$FreeBSD$"  )

◆ FragmentIn()

static int FragmentIn ( struct libalias la,
struct in_addr  ip_src,
struct ip pip,
u_short  ip_id,
u_short *  ip_sum 
)
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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ FragmentOut()

static int FragmentOut ( struct libalias la,
struct ip pip,
u_short *  ip_sum 
)
static

Definition at line 1227 of file alias.c.

References DifferentialChecksum(), FindAliasAddress(), ip_sum, LIBALIAS_LOCK_ASSERT, and PKT_ALIAS_OK.

Referenced by LibAliasOutLocked().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ IcmpAliasIn()

static int IcmpAliasIn ( struct libalias la,
struct ip pip 
)
static

◆ IcmpAliasIn1()

static int IcmpAliasIn1 ( struct libalias la,
struct ip pip 
)
static

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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ IcmpAliasIn2()

static int IcmpAliasIn2 ( struct libalias la,
struct ip pip 
)
static

◆ IcmpAliasOut()

static int IcmpAliasOut ( struct libalias la,
struct ip pip,
int  create 
)
static

◆ IcmpAliasOut1()

static int IcmpAliasOut1 ( struct libalias la,
struct ip pip,
int  create 
)
static

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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ IcmpAliasOut2()

static int IcmpAliasOut2 ( struct libalias la,
struct ip pip 
)
static

◆ LibAliasFragmentIn()

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.

Here is the call graph for this function:

◆ LibAliasGetFragment()

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().

Here is the call graph for this function:

◆ LibAliasIn()

int LibAliasIn ( struct libalias la,
void *  ptr,
int  maxpacketsize 
)

Definition at line 1321 of file alias.c.

References LIBALIAS_LOCK, LIBALIAS_UNLOCK, and LibAliasInLocked().

Here is the call graph for this function:

◆ LibAliasInLocked()

◆ LibAliasOut()

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().

Here is the call graph for this function:

◆ LibAliasOutLocked()

◆ 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().

Here is the call graph for this function:

◆ LibAliasSaveFragment()

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().

Here is the call graph for this function:

◆ LibAliasUnaliasOut()

◆ m_megapullup()

struct mbuf * m_megapullup ( struct mbuf *  m,
int  len 
)

Definition at line 1776 of file alias.c.

◆ ProtoAliasIn()

static int ProtoAliasIn ( struct libalias la,
struct in_addr  ip_src,
struct ip pip,
u_char  ip_p,
u_short *  ip_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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ProtoAliasOut()

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

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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ TcpAliasIn()

◆ TcpAliasOut()

static int TcpAliasOut ( struct libalias la,
struct ip pip,
int  maxpacketsize,
int  create 
)
static

◆ TcpMonitorIn()

static void TcpMonitorIn ( u_char  th_flags,
struct alias_link lnk 
)
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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ TcpMonitorOut()

static void TcpMonitorOut ( u_char  th_flags,
struct alias_link lnk 
)
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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ twowords()

static __inline int twowords ( void *  p)
static

Definition at line 162 of file alias.c.

Referenced by IcmpAliasIn2(), IcmpAliasOut2(), LibAliasUnaliasOut(), TcpAliasIn(), TcpAliasOut(), UdpAliasIn(), and UdpAliasOut().

Here is the caller graph for this function:

◆ UdpAliasIn()

◆ UdpAliasOut()

static int UdpAliasOut ( struct libalias la,
struct ip pip,
int  maxpacketsize,
int  create 
)
static

◆ ValidateUdpLength()

static struct udphdr * ValidateUdpLength ( struct ip pip)
static

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().

Here is the caller graph for this function: