FreeBSD kernel netgraph code
ng_ksocket.c File Reference
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/mbuf.h>
#include <sys/proc.h>
#include <sys/malloc.h>
#include <sys/ctype.h>
#include <sys/protosw.h>
#include <sys/errno.h>
#include <sys/socket.h>
#include <sys/socketvar.h>
#include <sys/uio.h>
#include <sys/un.h>
#include <netgraph/ng_message.h>
#include <netgraph/netgraph.h>
#include <netgraph/ng_parse.h>
#include <netgraph/ng_ksocket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
Include dependency graph for ng_ksocket.c:

Go to the source code of this file.

Data Structures

struct  ng_ksocket_private
 
struct  ng_ksocket_alias
 

Macros

#define M_NETGRAPH_KSOCKET   M_NETGRAPH
 
#define OFFSETOF(s, e)   ((char *)&((s *)0)->e - (char *)((s *)0))
 
#define SADATA_OFFSET   (OFFSETOF(struct sockaddr, sa_data))
 
#define KSF_CONNECTING   0x00000001 /* Waiting for connection complete */
 
#define KSF_ACCEPTING   0x00000002 /* Waiting for accept complete */
 
#define KSF_EOFSEEN   0x00000004 /* Have sent 0-length EOF mbuf */
 
#define KSF_CLONED   0x00000008 /* Cloned from an accepting socket */
 
#define KSF_EMBRYONIC   0x00000010 /* Cloned node with no hooks yet */
 
#define ERROUT(x)   do { error = (x); goto done; } while (0)
 

Typedefs

typedef struct ng_ksocket_privatepriv_p
 

Functions

static int ng_ksocket_accept (priv_p)
 
static int ng_ksocket_incoming (struct socket *so, void *arg, int waitflag)
 
static int ng_ksocket_parse (const struct ng_ksocket_alias *aliases, const char *s, int family)
 
static void ng_ksocket_incoming2 (node_p node, hook_p hook, void *arg1, int arg2)
 
static int ng_parse_generic_sockdata_getLength (const struct ng_parse_type *type, const u_char *start, const u_char *buf)
 
static int ng_ksocket_sockaddr_parse (const struct ng_parse_type *type, const char *s, int *off, const u_char *const start, u_char *const buf, int *buflen)
 
static int ng_ksocket_sockaddr_unparse (const struct ng_parse_type *type, const u_char *data, int *off, char *cbuf, int cbuflen)
 
static int ng_parse_sockoptval_getLength (const struct ng_parse_type *type, const u_char *start, const u_char *buf)
 
 NETGRAPH_INIT (ksocket, &ng_ksocket_typestruct)
 
static int ng_ksocket_constructor (node_p node)
 
static int ng_ksocket_newhook (node_p node, hook_p hook, const char *name0)
 
static int ng_ksocket_connect (hook_p hook)
 
static int ng_ksocket_rcvmsg (node_p node, item_p item, hook_p lasthook)
 
static int ng_ksocket_rcvdata (hook_p hook, item_p item)
 
static int ng_ksocket_shutdown (node_p node)
 
static int ng_ksocket_disconnect (hook_p hook)
 

Variables

static ng_constructor_t ng_ksocket_constructor
 
static ng_rcvmsg_t ng_ksocket_rcvmsg
 
static ng_shutdown_t ng_ksocket_shutdown
 
static ng_newhook_t ng_ksocket_newhook
 
static ng_rcvdata_t ng_ksocket_rcvdata
 
static ng_connect_t ng_ksocket_connect
 
static ng_disconnect_t ng_ksocket_disconnect
 
static const struct ng_ksocket_alias ng_ksocket_families []
 
static const struct ng_ksocket_alias ng_ksocket_types []
 
static const struct ng_ksocket_alias ng_ksocket_protos []
 
static const struct ng_parse_type ng_ksocket_generic_sockdata_type
 
static const struct ng_parse_struct_field ng_parse_generic_sockaddr_type_fields []
 
static const struct ng_parse_type ng_ksocket_generic_sockaddr_type
 
static const struct ng_parse_type ng_ksocket_sockaddr_type
 
static const struct ng_parse_type ng_ksocket_sockoptval_type
 
static const struct ng_parse_struct_field ng_ksocket_sockopt_type_fields [] = NG_KSOCKET_SOCKOPT_INFO(&ng_ksocket_sockoptval_type)
 
static const struct ng_parse_type ng_ksocket_sockopt_type
 
static const struct ng_parse_struct_field ng_ksocket_accept_type_fields [] = NGM_KSOCKET_ACCEPT_INFO
 
static const struct ng_parse_type ng_ksocket_accept_type
 
static const struct ng_cmdlist ng_ksocket_cmds []
 
static struct ng_type ng_ksocket_typestruct
 

Macro Definition Documentation

◆ ERROUT

#define ERROUT (   x)    do { error = (x); goto done; } while (0)

Definition at line 501 of file ng_ksocket.c.

◆ KSF_ACCEPTING

#define KSF_ACCEPTING   0x00000002 /* Waiting for accept complete */

Definition at line 97 of file ng_ksocket.c.

◆ KSF_CLONED

#define KSF_CLONED   0x00000008 /* Cloned from an accepting socket */

Definition at line 99 of file ng_ksocket.c.

◆ KSF_CONNECTING

#define KSF_CONNECTING   0x00000001 /* Waiting for connection complete */

Definition at line 96 of file ng_ksocket.c.

◆ KSF_EMBRYONIC

#define KSF_EMBRYONIC   0x00000010 /* Cloned node with no hooks yet */

Definition at line 100 of file ng_ksocket.c.

◆ KSF_EOFSEEN

#define KSF_EOFSEEN   0x00000004 /* Have sent 0-length EOF mbuf */

Definition at line 98 of file ng_ksocket.c.

◆ M_NETGRAPH_KSOCKET

#define M_NETGRAPH_KSOCKET   M_NETGRAPH

Definition at line 75 of file ng_ksocket.c.

◆ OFFSETOF

#define OFFSETOF (   s,
 
)    ((char *)&((s *)0)->e - (char *)((s *)0))

Definition at line 78 of file ng_ksocket.c.

◆ SADATA_OFFSET

#define SADATA_OFFSET   (OFFSETOF(struct sockaddr, sa_data))

Definition at line 79 of file ng_ksocket.c.

Typedef Documentation

◆ priv_p

typedef struct ng_ksocket_private* priv_p

Definition at line 93 of file ng_ksocket.c.

Function Documentation

◆ NETGRAPH_INIT()

NETGRAPH_INIT ( ksocket  ,
ng_ksocket_typestruct 
)

◆ ng_ksocket_accept()

◆ ng_ksocket_connect()

static int ng_ksocket_connect ( hook_p  hook)
static

Definition at line 602 of file ng_ksocket.c.

References KSF_CLONED, NG_HOOK_NODE, ng_ksocket_incoming(), ng_ksocket_incoming2(), NG_NODE_PRIVATE, and ng_send_fn().

Here is the call graph for this function:

◆ ng_ksocket_constructor()

static int ng_ksocket_constructor ( node_p  node)
static

Definition at line 513 of file ng_ksocket.c.

References M_NETGRAPH_KSOCKET, and NG_NODE_SET_PRIVATE.

◆ ng_ksocket_disconnect()

static int ng_ksocket_disconnect ( hook_p  hook)
static

Definition at line 973 of file ng_ksocket.c.

References NG_HOOK_NODE, NG_NODE_IS_VALID, NG_NODE_NUMHOOKS, and ng_rmnode_self().

Here is the call graph for this function:

◆ ng_ksocket_incoming()

static int ng_ksocket_incoming ( struct socket *  so,
void *  arg,
int  waitflag 
)
static

Definition at line 999 of file ng_ksocket.c.

References ng_ksocket_incoming2(), NG_NODE_PRIVATE, NG_QUEUE, ng_send_fn1(), and NG_WAITOK.

Referenced by ng_ksocket_accept(), and ng_ksocket_connect().

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

◆ ng_ksocket_incoming2()

static void ng_ksocket_incoming2 ( node_p  node,
hook_p  hook,
void *  arg1,
int  arg2 
)
static

◆ ng_ksocket_newhook()

static int ng_ksocket_newhook ( node_p  node,
hook_p  hook,
const char *  name0 
)
static

Definition at line 540 of file ng_ksocket.c.

References KSF_CLONED, KSF_EMBRYONIC, name, NG_HOOK_FORCE_QUEUE, NG_HOOKSIZ, ng_ksocket_families, ng_ksocket_parse(), ng_ksocket_protos, ng_ksocket_types, NG_NODE_PRIVATE, and type.

Here is the call graph for this function:

◆ ng_ksocket_parse()

static int ng_ksocket_parse ( const struct ng_ksocket_alias aliases,
const char *  s,
int  family 
)
static

Definition at line 1253 of file ng_ksocket.c.

References ng_ksocket_alias::name, name, and ng_ksocket_alias::value.

Referenced by ng_ksocket_newhook(), and ng_ksocket_sockaddr_parse().

Here is the caller graph for this function:

◆ ng_ksocket_rcvdata()

static int ng_ksocket_rcvdata ( hook_p  hook,
item_p  item 
)
static

◆ ng_ksocket_rcvmsg()

◆ ng_ksocket_shutdown()

static int ng_ksocket_shutdown ( node_p  node)
static

Definition at line 932 of file ng_ksocket.c.

References KSF_EMBRYONIC, M_NETGRAPH_KSOCKET, NG_NODE_PRIVATE, NG_NODE_SET_PRIVATE, NG_NODE_UNREF, ng_rmnode_self(), and netflow::node.

Here is the call graph for this function:

◆ ng_ksocket_sockaddr_parse()

static int ng_ksocket_sockaddr_parse ( const struct ng_parse_type type,
const char *  s,
int *  off,
const u_char *const  start,
u_char *const  buf,
int *  buflen 
)
static

◆ ng_ksocket_sockaddr_unparse()

static int ng_ksocket_sockaddr_unparse ( const struct ng_parse_type type,
const u_char *  data,
int *  off,
char *  cbuf,
int  cbuflen 
)
static

Definition at line 312 of file ng_ksocket.c.

References data, M_NETGRAPH_KSOCKET, ng_encode_string(), ng_ksocket_generic_sockaddr_type, OFFSETOF, ng_parse_type::supertype, and ng_parse_type::unparse.

Here is the call graph for this function:

◆ ng_parse_generic_sockdata_getLength()

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

Definition at line 169 of file ng_ksocket.c.

References SADATA_OFFSET.

◆ ng_parse_sockoptval_getLength()

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

Definition at line 388 of file ng_ksocket.c.

References ng_mesg::ng_msghdr::arglen, ng_mesg::header, and OFFSETOF.

Variable Documentation

◆ ng_ksocket_accept_type

const struct ng_parse_type ng_ksocket_accept_type
static
Initial value:
= {
}
static const struct ng_parse_struct_field ng_ksocket_accept_type_fields[]
Definition: ng_ksocket.c:419
const struct ng_parse_type ng_parse_struct_type
Definition: ng_parse.c:222

Definition at line 420 of file ng_ksocket.c.

◆ ng_ksocket_accept_type_fields

const struct ng_parse_struct_field ng_ksocket_accept_type_fields[] = NGM_KSOCKET_ACCEPT_INFO
static

Definition at line 418 of file ng_ksocket.c.

◆ ng_ksocket_cmds

const struct ng_cmdlist ng_ksocket_cmds[]
static

Definition at line 426 of file ng_ksocket.c.

◆ ng_ksocket_connect

ng_connect_t ng_ksocket_connect
static

Definition at line 108 of file ng_ksocket.c.

◆ ng_ksocket_constructor

ng_constructor_t ng_ksocket_constructor
static

Definition at line 103 of file ng_ksocket.c.

Referenced by ng_ksocket_accept().

◆ ng_ksocket_disconnect

ng_disconnect_t ng_ksocket_disconnect
static

Definition at line 109 of file ng_ksocket.c.

◆ ng_ksocket_families

const struct ng_ksocket_alias ng_ksocket_families[]
static
Initial value:
= {
{ "local", PF_LOCAL },
{ "inet", PF_INET },
{ "inet6", PF_INET6 },
{ "atm", PF_ATM },
{ NULL, -1 },
}

Definition at line 119 of file ng_ksocket.c.

Referenced by ng_ksocket_newhook(), and ng_ksocket_sockaddr_parse().

◆ ng_ksocket_generic_sockaddr_type

const struct ng_parse_type ng_ksocket_generic_sockaddr_type
static
Initial value:
= {
}
static const struct ng_parse_struct_field ng_parse_generic_sockaddr_type_fields[]
Definition: ng_ksocket.c:186

Definition at line 192 of file ng_ksocket.c.

Referenced by ng_ksocket_sockaddr_parse(), and ng_ksocket_sockaddr_unparse().

◆ ng_ksocket_generic_sockdata_type

const struct ng_parse_type ng_ksocket_generic_sockdata_type
static
Initial value:
= {
}
static int ng_parse_generic_sockdata_getLength(const struct ng_parse_type *type, const u_char *start, const u_char *buf)
Definition: ng_ksocket.c:169
const struct ng_parse_type ng_parse_bytearray_type
Definition: ng_parse.c:1153

Definition at line 179 of file ng_ksocket.c.

◆ ng_ksocket_newhook

ng_newhook_t ng_ksocket_newhook
static

Definition at line 106 of file ng_ksocket.c.

◆ ng_ksocket_protos

const struct ng_ksocket_alias ng_ksocket_protos[]
static
Initial value:
= {
{ "ip", IPPROTO_IP, PF_INET },
{ "raw", IPPROTO_RAW, PF_INET },
{ "icmp", IPPROTO_ICMP, PF_INET },
{ "igmp", IPPROTO_IGMP, PF_INET },
{ "tcp", IPPROTO_TCP, PF_INET },
{ "udp", IPPROTO_UDP, PF_INET },
{ "gre", IPPROTO_GRE, PF_INET },
{ "esp", IPPROTO_ESP, PF_INET },
{ "ah", IPPROTO_AH, PF_INET },
{ "swipe", IPPROTO_SWIPE, PF_INET },
{ "encap", IPPROTO_ENCAP, PF_INET },
{ "divert", IPPROTO_DIVERT, PF_INET },
{ "pim", IPPROTO_PIM, PF_INET },
{ NULL, -1 },
}

Definition at line 138 of file ng_ksocket.c.

Referenced by ng_ksocket_newhook().

◆ ng_ksocket_rcvdata

ng_rcvdata_t ng_ksocket_rcvdata
static

Definition at line 107 of file ng_ksocket.c.

◆ ng_ksocket_rcvmsg

ng_rcvmsg_t ng_ksocket_rcvmsg
static

Definition at line 104 of file ng_ksocket.c.

◆ ng_ksocket_shutdown

ng_shutdown_t ng_ksocket_shutdown
static

Definition at line 105 of file ng_ksocket.c.

◆ ng_ksocket_sockaddr_type

const struct ng_parse_type ng_ksocket_sockaddr_type
static
Initial value:
= {
NULL,
NULL,
NULL,
NULL
}
static int ng_ksocket_sockaddr_parse(const struct ng_parse_type *type, const char *s, int *off, const u_char *const start, u_char *const buf, int *buflen)
Definition: ng_ksocket.c:201
static int ng_ksocket_sockaddr_unparse(const struct ng_parse_type *type, const u_char *data, int *off, char *cbuf, int cbuflen)
Definition: ng_ksocket.c:312

Definition at line 371 of file ng_ksocket.c.

◆ ng_ksocket_sockopt_type

const struct ng_parse_type ng_ksocket_sockopt_type
static
Initial value:
= {
}
static const struct ng_parse_struct_field ng_ksocket_sockopt_type_fields[]
Definition: ng_ksocket.c:411

Definition at line 412 of file ng_ksocket.c.

◆ ng_ksocket_sockopt_type_fields

const struct ng_parse_struct_field ng_ksocket_sockopt_type_fields[] = NG_KSOCKET_SOCKOPT_INFO(&ng_ksocket_sockoptval_type)
static

Definition at line 410 of file ng_ksocket.c.

◆ ng_ksocket_sockoptval_type

const struct ng_parse_type ng_ksocket_sockoptval_type
static
Initial value:
= {
}
static int ng_parse_sockoptval_getLength(const struct ng_parse_type *type, const u_char *start, const u_char *buf)
Definition: ng_ksocket.c:388

Definition at line 404 of file ng_ksocket.c.

◆ ng_ksocket_types

const struct ng_ksocket_alias ng_ksocket_types[]
static
Initial value:
= {
{ "stream", SOCK_STREAM },
{ "dgram", SOCK_DGRAM },
{ "raw", SOCK_RAW },
{ "rdm", SOCK_RDM },
{ "seqpacket", SOCK_SEQPACKET },
{ NULL, -1 },
}

Definition at line 128 of file ng_ksocket.c.

Referenced by ng_ksocket_newhook().

◆ ng_ksocket_typestruct

struct ng_type ng_ksocket_typestruct
static
Initial value:
= {
.version = NG_ABI_VERSION,
.constructor = ng_ksocket_constructor,
.rcvmsg = ng_ksocket_rcvmsg,
.shutdown = ng_ksocket_shutdown,
.newhook = ng_ksocket_newhook,
.connect = ng_ksocket_connect,
.rcvdata = ng_ksocket_rcvdata,
.disconnect = ng_ksocket_disconnect,
.cmdlist = ng_ksocket_cmds,
}
#define NG_ABI_VERSION
Definition: netgraph.h:77
static ng_connect_t ng_ksocket_connect
Definition: ng_ksocket.c:108
static const struct ng_cmdlist ng_ksocket_cmds[]
Definition: ng_ksocket.c:426
static ng_shutdown_t ng_ksocket_shutdown
Definition: ng_ksocket.c:105
static ng_constructor_t ng_ksocket_constructor
Definition: ng_ksocket.c:103
static ng_disconnect_t ng_ksocket_disconnect
Definition: ng_ksocket.c:109
static ng_rcvdata_t ng_ksocket_rcvdata
Definition: ng_ksocket.c:107
static ng_rcvmsg_t ng_ksocket_rcvmsg
Definition: ng_ksocket.c:104
static ng_newhook_t ng_ksocket_newhook
Definition: ng_ksocket.c:106
#define NG_KSOCKET_NODE_TYPE
Definition: ng_ksocket.h:50

Definition at line 487 of file ng_ksocket.c.

Referenced by ng_ksocket_accept().

◆ ng_parse_generic_sockaddr_type_fields

const struct ng_parse_struct_field ng_parse_generic_sockaddr_type_fields[]
static
Initial value:
= {
{ "len", &ng_parse_uint8_type },
{ "family", &ng_parse_uint8_type },
{ NULL }
}
static const struct ng_parse_type ng_ksocket_generic_sockdata_type
Definition: ng_ksocket.c:179
const struct ng_parse_type ng_parse_uint8_type
Definition: ng_parse.c:413

Definition at line 186 of file ng_ksocket.c.