FreeBSD kernel netgraph code
ng_nat.c File Reference
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/mbuf.h>
#include <sys/malloc.h>
#include <sys/ctype.h>
#include <sys/errno.h>
#include <sys/syslog.h>
#include <netinet/in_systm.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/ip_var.h>
#include <netinet/tcp.h>
#include <machine/in_cksum.h>
#include <net/dlt.h>
#include <net/ethernet.h>
#include <netinet/libalias/alias.h>
#include <netinet/libalias/alias_local.h>
#include <netgraph/ng_message.h>
#include <netgraph/ng_parse.h>
#include <netgraph/ng_nat.h>
#include <netgraph/netgraph.h>
Include dependency graph for ng_nat.c:

Go to the source code of this file.

Data Structures

struct  ng_nat_rdr_lst
 
struct  ng_nat_priv
 

Macros

#define NGNAT_CONNECTED   0x1 /* We have both hooks connected */
 
#define NGNAT_ADDR_DEFINED   0x2 /* NGM_NAT_SET_IPADDR happened */
 
#define COPY(F)
 

Typedefs

typedef struct ng_nat_privpriv_p
 

Functions

static unsigned int ng_nat_translate_flags (unsigned int x)
 
static int ng_nat_listrdrs_ary_getLength (const struct ng_parse_type *type, const u_char *start, const u_char *buf)
 
 NETGRAPH_INIT (nat, &typestruct)
 
 MODULE_DEPEND (ng_nat, libalias, 1, 1, 1)
 
 STAILQ_HEAD (rdrhead, ng_nat_rdr_lst)
 
static int ng_nat_constructor (node_p node)
 
static int ng_nat_newhook (node_p node, hook_p hook, const char *name)
 
static int ng_nat_rcvmsg (node_p node, item_p item, hook_p lasthook)
 
static int ng_nat_rcvdata (hook_p hook, item_p item)
 
static int ng_nat_shutdown (node_p node)
 
static int ng_nat_disconnect (hook_p hook)
 

Variables

static ng_constructor_t ng_nat_constructor
 
static ng_rcvmsg_t ng_nat_rcvmsg
 
static ng_shutdown_t ng_nat_shutdown
 
static ng_newhook_t ng_nat_newhook
 
static ng_rcvdata_t ng_nat_rcvdata
 
static ng_disconnect_t ng_nat_disconnect
 
static const struct ng_parse_struct_field ng_nat_mode_fields [] = NG_NAT_MODE_INFO
 
static const struct ng_parse_type ng_nat_mode_type
 
static const struct ng_parse_fixedstring_info ng_nat_description_info = { NG_NAT_DESC_LENGTH }
 
static const struct ng_parse_type ng_nat_description_type
 
static const struct ng_parse_struct_field ng_nat_redirect_port_fields [] = NG_NAT_REDIRECT_PORT_TYPE_INFO(&ng_nat_description_type)
 
static const struct ng_parse_type ng_nat_redirect_port_type
 
static const struct ng_parse_struct_field ng_nat_redirect_addr_fields [] = NG_NAT_REDIRECT_ADDR_TYPE_INFO(&ng_nat_description_type)
 
static const struct ng_parse_type ng_nat_redirect_addr_type
 
static const struct ng_parse_struct_field ng_nat_redirect_proto_fields [] = NG_NAT_REDIRECT_PROTO_TYPE_INFO(&ng_nat_description_type)
 
static const struct ng_parse_type ng_nat_redirect_proto_type
 
static const struct ng_parse_struct_field ng_nat_add_server_fields [] = NG_NAT_ADD_SERVER_TYPE_INFO
 
static const struct ng_parse_type ng_nat_add_server_type
 
static const struct ng_parse_struct_field ng_nat_listrdrs_entry_fields [] = NG_NAT_LISTRDRS_ENTRY_TYPE_INFO(&ng_nat_description_type)
 
static const struct ng_parse_type ng_nat_listrdrs_entry_type
 
static const struct ng_parse_array_info ng_nat_listrdrs_ary_info
 
static const struct ng_parse_type ng_nat_listrdrs_ary_type
 
static const struct ng_parse_struct_field ng_nat_list_redirects_fields [] = NG_NAT_LIST_REDIRECTS_TYPE_INFO(&ng_nat_listrdrs_ary_type)
 
static const struct ng_parse_type ng_nat_list_redirects_type
 
static const struct ng_parse_struct_field ng_nat_libalias_info_fields [] = NG_NAT_LIBALIAS_INFO
 
static const struct ng_parse_type ng_nat_libalias_info_type
 
static const struct ng_cmdlist ng_nat_cmdlist []
 
static struct ng_type typestruct
 

Macro Definition Documentation

◆ COPY

#define COPY (   F)
Value:
do { \
if (priv->lib->F >= 0 && priv->lib->F < UINT32_MAX) \
i->F = priv->lib->F; \
else \
i->F = UINT32_MAX; \
} while (0)
Definition: ng_sscfu.c:66

◆ NGNAT_ADDR_DEFINED

#define NGNAT_ADDR_DEFINED   0x2 /* NGM_NAT_SET_IPADDR happened */

Definition at line 303 of file ng_nat.c.

◆ NGNAT_CONNECTED

#define NGNAT_CONNECTED   0x1 /* We have both hooks connected */

Definition at line 302 of file ng_nat.c.

Typedef Documentation

◆ priv_p

typedef struct ng_nat_priv* priv_p

Definition at line 299 of file ng_nat.c.

Function Documentation

◆ MODULE_DEPEND()

MODULE_DEPEND ( ng_nat  ,
libalias  ,
,
,
 
)

◆ NETGRAPH_INIT()

NETGRAPH_INIT ( nat  ,
typestruct 
)

◆ ng_nat_constructor()

static int ng_nat_constructor ( node_p  node)
static

Definition at line 306 of file ng_nat.c.

References NG_NODE_FORCE_WRITER, NG_NODE_SET_PRIVATE, and ng_nat_priv::node.

◆ ng_nat_disconnect()

static int ng_nat_disconnect ( hook_p  hook)
static

Definition at line 928 of file ng_nat.c.

References NG_HOOK_NODE, NG_NODE_PRIVATE, and ng_rmnode_self().

Here is the call graph for this function:

◆ ng_nat_listrdrs_ary_getLength()

static int ng_nat_listrdrs_ary_getLength ( const struct ng_parse_type type,
const u_char *  start,
const u_char *  buf 
)
static

◆ ng_nat_newhook()

static int ng_nat_newhook ( node_p  node,
hook_p  hook,
const char *  name 
)
static

◆ ng_nat_rcvdata()

static int ng_nat_rcvdata ( hook_p  hook,
item_p  item 
)
static

◆ ng_nat_rcvmsg()

static int ng_nat_rcvmsg ( node_p  node,
item_p  item,
hook_p  lasthook 
)
static

Definition at line 359 of file ng_nat.c.

References ng_nat_add_server::addr, ng_nat_redirect_port::alias_addr, ng_nat_redirect_addr::alias_addr, ng_nat_redirect_proto::alias_addr, ng_nat_redirect_port::alias_port, ng_mesg::ng_msghdr::arglen, ng_mesg::ng_msghdr::cmd, COPY, ng_mesg::data, ng_nat_redirect_port::description, ng_nat_redirect_addr::description, ng_nat_redirect_proto::description, ng_nat_mode::flags, ng_nat_libalias_info::fragmentIdLinkCount, ng_nat_libalias_info::fragmentPtrLinkCount, ng_mesg::header, ng_nat_libalias_info::icmpLinkCount, ng_nat_add_server::id, ng_nat_redirect_port::local_addr, ng_nat_redirect_addr::local_addr, ng_nat_redirect_proto::local_addr, ng_nat_redirect_port::local_port, ng_nat_mode::mask, NG_FREE_MSG, NG_MKRESPONSE, NG_NAT_DESC_LENGTH, NG_NAT_REDIRPROTO_ADDR, ng_nat_translate_flags(), NG_NODE_PRIVATE, NG_RESPOND_MSG, NGI_GET_MSG, NGM_NAT_ADD_SERVER, NGM_NAT_COOKIE, NGM_NAT_GET_DLT, NGM_NAT_LIBALIAS_INFO, NGM_NAT_LIST_REDIRECTS, NGM_NAT_PROXY_RULE, NGM_NAT_REDIRECT_ADDR, NGM_NAT_REDIRECT_DELETE, NGM_NAT_REDIRECT_DYNAMIC, NGM_NAT_REDIRECT_PORT, NGM_NAT_REDIRECT_PROTO, NGM_NAT_SET_DLT, NGM_NAT_SET_IPADDR, NGM_NAT_SET_MODE, NGM_NAT_SET_TARGET, NGNAT_ADDR_DEFINED, ng_nat_priv::node, ng_nat_add_server::port, ng_nat_libalias_info::pptpLinkCount, ng_nat_redirect_port::proto, ng_nat_redirect_proto::proto, ng_nat_libalias_info::protoLinkCount, ng_nat_list_redirects::redirects, ng_nat_redirect_port::remote_addr, ng_nat_redirect_proto::remote_addr, ng_nat_redirect_port::remote_port, ng_nat_libalias_info::sctpLinkCount, ng_nat_libalias_info::sockCount, ng_nat_libalias_info::tcpLinkCount, ng_nat_list_redirects::total_count, ng_mesg::ng_msghdr::typecookie, and ng_nat_libalias_info::udpLinkCount.

Here is the call graph for this function:

◆ ng_nat_shutdown()

static int ng_nat_shutdown ( node_p  node)
static

Definition at line 906 of file ng_nat.c.

References NG_NODE_PRIVATE, NG_NODE_SET_PRIVATE, and NG_NODE_UNREF.

◆ ng_nat_translate_flags()

static unsigned int ng_nat_translate_flags ( unsigned int  x)
static

Definition at line 946 of file ng_nat.c.

References NG_NAT_DENY_INCOMING, NG_NAT_LOG, NG_NAT_PROXY_ONLY, NG_NAT_RESET_ON_ADDR_CHANGE, NG_NAT_REVERSE, NG_NAT_SAME_PORTS, NG_NAT_UNREGISTERED_CGN, and NG_NAT_UNREGISTERED_ONLY.

Referenced by ng_nat_rcvmsg().

Here is the caller graph for this function:

◆ STAILQ_HEAD()

STAILQ_HEAD ( rdrhead  ,
ng_nat_rdr_lst   
)

Variable Documentation

◆ ng_nat_add_server_fields

const struct ng_parse_struct_field ng_nat_add_server_fields[] = NG_NAT_ADD_SERVER_TYPE_INFO
static

Definition at line 108 of file ng_nat.c.

◆ ng_nat_add_server_type

const struct ng_parse_type ng_nat_add_server_type
static
Initial value:
= {
}
static const struct ng_parse_struct_field ng_nat_add_server_fields[]
Definition: ng_nat.c:109
const struct ng_parse_type ng_parse_struct_type
Definition: ng_parse.c:222

Definition at line 110 of file ng_nat.c.

◆ ng_nat_cmdlist

const struct ng_cmdlist ng_nat_cmdlist[]
static

Definition at line 162 of file ng_nat.c.

◆ ng_nat_constructor

ng_constructor_t ng_nat_constructor
static

Definition at line 58 of file ng_nat.c.

◆ ng_nat_description_info

const struct ng_parse_fixedstring_info ng_nat_description_info = { NG_NAT_DESC_LENGTH }
static

Definition at line 76 of file ng_nat.c.

◆ ng_nat_description_type

const struct ng_parse_type ng_nat_description_type
static
Initial value:
= {
}
static const struct ng_parse_fixedstring_info ng_nat_description_info
Definition: ng_nat.c:77
const struct ng_parse_type ng_parse_fixedstring_type
Definition: ng_parse.c:830

Definition at line 78 of file ng_nat.c.

◆ ng_nat_disconnect

ng_disconnect_t ng_nat_disconnect
static

Definition at line 63 of file ng_nat.c.

◆ ng_nat_libalias_info_fields

const struct ng_parse_struct_field ng_nat_libalias_info_fields[] = NG_NAT_LIBALIAS_INFO
static

Definition at line 154 of file ng_nat.c.

◆ ng_nat_libalias_info_type

const struct ng_parse_type ng_nat_libalias_info_type
static
Initial value:
= {
}
static const struct ng_parse_struct_field ng_nat_libalias_info_fields[]
Definition: ng_nat.c:155

Definition at line 156 of file ng_nat.c.

◆ ng_nat_list_redirects_fields

const struct ng_parse_struct_field ng_nat_list_redirects_fields[] = NG_NAT_LIST_REDIRECTS_TYPE_INFO(&ng_nat_listrdrs_ary_type)
static

Definition at line 146 of file ng_nat.c.

◆ ng_nat_list_redirects_type

const struct ng_parse_type ng_nat_list_redirects_type
static
Initial value:
= {
}
static const struct ng_parse_struct_field ng_nat_list_redirects_fields[]
Definition: ng_nat.c:147

Definition at line 148 of file ng_nat.c.

◆ ng_nat_listrdrs_ary_info

const struct ng_parse_array_info ng_nat_listrdrs_ary_info
static
Initial value:
= {
NULL
}
static int ng_nat_listrdrs_ary_getLength(const struct ng_parse_type *type, const u_char *start, const u_char *buf)
Definition: ng_nat.c:125
static const struct ng_parse_type ng_nat_listrdrs_entry_type
Definition: ng_nat.c:118

Definition at line 135 of file ng_nat.c.

◆ ng_nat_listrdrs_ary_type

const struct ng_parse_type ng_nat_listrdrs_ary_type
static
Initial value:
= {
}
static const struct ng_parse_array_info ng_nat_listrdrs_ary_info
Definition: ng_nat.c:135
const struct ng_parse_type ng_parse_array_type
Definition: ng_parse.c:318

Definition at line 140 of file ng_nat.c.

◆ ng_nat_listrdrs_entry_fields

const struct ng_parse_struct_field ng_nat_listrdrs_entry_fields[] = NG_NAT_LISTRDRS_ENTRY_TYPE_INFO(&ng_nat_description_type)
static

Definition at line 116 of file ng_nat.c.

◆ ng_nat_listrdrs_entry_type

const struct ng_parse_type ng_nat_listrdrs_entry_type
static
Initial value:
= {
}
static const struct ng_parse_struct_field ng_nat_listrdrs_entry_fields[]
Definition: ng_nat.c:117

Definition at line 118 of file ng_nat.c.

◆ ng_nat_mode_fields

const struct ng_parse_struct_field ng_nat_mode_fields[] = NG_NAT_MODE_INFO
static

Definition at line 68 of file ng_nat.c.

◆ ng_nat_mode_type

const struct ng_parse_type ng_nat_mode_type
static
Initial value:
= {
}
static const struct ng_parse_struct_field ng_nat_mode_fields[]
Definition: ng_nat.c:69

Definition at line 70 of file ng_nat.c.

◆ ng_nat_newhook

ng_newhook_t ng_nat_newhook
static

Definition at line 61 of file ng_nat.c.

◆ ng_nat_rcvdata

ng_rcvdata_t ng_nat_rcvdata
static

Definition at line 62 of file ng_nat.c.

◆ ng_nat_rcvmsg

ng_rcvmsg_t ng_nat_rcvmsg
static

Definition at line 59 of file ng_nat.c.

◆ ng_nat_redirect_addr_fields

const struct ng_parse_struct_field ng_nat_redirect_addr_fields[] = NG_NAT_REDIRECT_ADDR_TYPE_INFO(&ng_nat_description_type)
static

Definition at line 92 of file ng_nat.c.

◆ ng_nat_redirect_addr_type

const struct ng_parse_type ng_nat_redirect_addr_type
static
Initial value:
= {
}
static const struct ng_parse_struct_field ng_nat_redirect_addr_fields[]
Definition: ng_nat.c:93

Definition at line 94 of file ng_nat.c.

◆ ng_nat_redirect_port_fields

const struct ng_parse_struct_field ng_nat_redirect_port_fields[] = NG_NAT_REDIRECT_PORT_TYPE_INFO(&ng_nat_description_type)
static

Definition at line 84 of file ng_nat.c.

◆ ng_nat_redirect_port_type

const struct ng_parse_type ng_nat_redirect_port_type
static
Initial value:
= {
}
static const struct ng_parse_struct_field ng_nat_redirect_port_fields[]
Definition: ng_nat.c:85

Definition at line 86 of file ng_nat.c.

◆ ng_nat_redirect_proto_fields

const struct ng_parse_struct_field ng_nat_redirect_proto_fields[] = NG_NAT_REDIRECT_PROTO_TYPE_INFO(&ng_nat_description_type)
static

Definition at line 100 of file ng_nat.c.

◆ ng_nat_redirect_proto_type

const struct ng_parse_type ng_nat_redirect_proto_type
static
Initial value:
= {
}
static const struct ng_parse_struct_field ng_nat_redirect_proto_fields[]
Definition: ng_nat.c:101

Definition at line 102 of file ng_nat.c.

◆ ng_nat_shutdown

ng_shutdown_t ng_nat_shutdown
static

Definition at line 60 of file ng_nat.c.

◆ typestruct

struct ng_type typestruct
static
Initial value:
= {
.version = NG_ABI_VERSION,
.constructor = ng_nat_constructor,
.rcvmsg = ng_nat_rcvmsg,
.shutdown = ng_nat_shutdown,
.newhook = ng_nat_newhook,
.rcvdata = ng_nat_rcvdata,
.disconnect = ng_nat_disconnect,
.cmdlist = ng_nat_cmdlist,
}
#define NG_ABI_VERSION
Definition: netgraph.h:77
static ng_disconnect_t ng_nat_disconnect
Definition: ng_nat.c:63
static const struct ng_cmdlist ng_nat_cmdlist[]
Definition: ng_nat.c:162
static ng_rcvdata_t ng_nat_rcvdata
Definition: ng_nat.c:62
static ng_rcvmsg_t ng_nat_rcvmsg
Definition: ng_nat.c:59
static ng_constructor_t ng_nat_constructor
Definition: ng_nat.c:58
static ng_shutdown_t ng_nat_shutdown
Definition: ng_nat.c:60
static ng_newhook_t ng_nat_newhook
Definition: ng_nat.c:61
#define NG_NAT_NODE_TYPE
Definition: ng_nat.h:31

Definition at line 265 of file ng_nat.c.