51#include <sys/kernel.h>
53#include <sys/malloc.h>
61#include <net/ppp_defs.h>
63#ifdef NG_SEPARATE_MALLOC
66#define M_NETGRAPH_ASYNC M_NETGRAPH
91#define ASYNC_BUF_SIZE(smru) (2 * (smru) + 10)
92#define SYNC_BUF_SIZE(amru) ((amru) + 10)
93#define ERROUT(x) do { error = (x); goto done; } while (0)
244 if (hook == sc->
sync)
246 if (hook == sc->
async)
248 panic(
"%s", __func__);
343 bzero(sc,
sizeof(*sc));
359 if (hook == sc->
async)
361 else if (hook == sc->
sync)
364 panic(
"%s", __func__);
366 panic(
"%s 2", __func__);
387 if ((x < 32 && ((1 << x) &
accm))
389 || (x == PPP_FLAG)) {
390 sc->
abuf[(*len)++] = PPP_ESCAPE;
393 sc->
abuf[(*len)++] = x;
409#define ADD_BYTE(x) nga_async_add(sc, &fcs, accm, &alen, (x))
418 rcvif = m->m_pkthdr.rcvif;
422 if (m->m_pkthdr.len >= 4) {
423 static const u_char lcphdr[4] = {
426 (u_char)(PPP_LCP >> 8),
427 (u_char)(PPP_LCP & 0xff)
431 m_copydata(m, 0, 4, (caddr_t)buf);
432 if (bcmp(buf, &lcphdr, 4) == 0)
437 if (m->m_pkthdr.len > sc->
cfg.
smru) {
454 if (time.tv_sec >= sc->
lasttime + 1) {
455 sc->
abuf[alen++] = PPP_FLAG;
461 while (m->m_len > 0) {
473 sc->
abuf[alen++] = PPP_FLAG;
476 if (!(m = m_devget(sc->
abuf, alen, 0, rcvif, NULL))) {
502 rcvif = m->m_pkthdr.rcvif;
506 for (; m->m_len > 0; m->m_data++, m->m_len--) {
507 u_char ch = *mtod(m, u_char *);
510 if (ch == PPP_FLAG) {
529 && sc->
sbuf[0] == PPP_ALLSTATIONS
530 && sc->
sbuf[1] == PPP_UI)
540 if ((n = m_devget(sc->
sbuf + skip,
541 sc->
slen - skip, 0, rcvif, NULL))) {
559 if (ch == PPP_ESCAPE) {
580 sc->
fcs = PPP_FCS(sc->
fcs, ch);
595static const u_int16_t
fcstab[256] = {
596 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
597 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
598 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
599 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
600 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
601 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
602 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
603 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
604 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
605 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
606 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
607 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
608 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
609 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
610 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
611 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
612 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
613 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
614 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
615 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
616 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
617 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
618 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
619 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
620 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
621 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
622 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
623 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
624 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
625 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
626 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
627 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
#define NG_HOOK_NODE(hook)
int ng_rcvmsg_t(node_p node, item_p item, hook_p lasthook)
#define NG_FWD_ITEM_HOOK(error, item, hook)
int ng_disconnect_t(hook_p hook)
#define NG_NODE_SET_PRIVATE(node, val)
#define NG_RESPOND_MSG(error, here, item, resp)
#define NG_NODE_IS_VALID(node)
#define NG_NODE_UNREF(node)
int ng_rmnode_self(node_p here)
#define NG_FWD_NEW_DATA(error, item, hook, m)
#define NG_SEND_DATA_ONLY(error, hook, m)
#define NG_HOOK_FORCE_WRITER(hook)
int ng_rcvdata_t(hook_p hook, item_p item)
int ng_shutdown_t(node_p node)
#define NG_FREE_ITEM(item)
int ng_constructor_t(node_p node)
#define NG_NODE_NUMHOOKS(node)
#define NGI_GET_MSG(i, m)
#define NG_NODE_PRIVATE(node)
int ng_newhook_t(node_p node, hook_p hook, const char *name)
static ng_rcvdata_t nga_rcvdata
static const struct ng_parse_struct_field nga_stats_type_fields[]
struct ng_async_private * sc_p
static ng_rcvmsg_t nga_rcvmsg
static const u_int16_t fcstab[]
static const struct ng_parse_struct_field nga_config_type_fields[]
#define ASYNC_BUF_SIZE(smru)
static struct ng_type typestruct
NETGRAPH_INIT(async, &typestruct)
static int nga_rcv_sync(const sc_p sc, item_p item)
static int nga_rcv_async(const sc_p sc, item_p item)
static const struct ng_cmdlist nga_cmdlist[]
static ng_shutdown_t nga_shutdown
static ng_disconnect_t nga_disconnect
static const struct ng_parse_type nga_stats_type
static __inline void nga_async_add(const sc_p sc, u_int16_t *fcs, u_int32_t accm, int *len, u_char x)
#define SYNC_BUF_SIZE(amru)
static ng_newhook_t nga_newhook
static const struct ng_parse_type nga_config_type
static ng_constructor_t nga_constructor
#define NG_ASYNC_CONFIG_TYPE_INFO
#define NG_ASYNC_DEFAULT_MRU
#define NG_ASYNC_NODE_TYPE
#define NG_ASYNC_HOOK_ASYNC
#define NG_ASYNC_HOOK_SYNC
@ NGM_ASYNC_CMD_GET_CONFIG
@ NGM_ASYNC_CMD_SET_CONFIG
@ NGM_ASYNC_CMD_CLR_STATS
@ NGM_ASYNC_CMD_GET_STATS
#define NG_ASYNC_STATS_TYPE_INFO
MALLOC_DEFINE(M_NG_CCATM, "ng_ccatm", "netgraph uni api node")
#define NG_MKRESPONSE(rsp, msg, len, how)
const struct ng_parse_type ng_parse_struct_type
struct ng_async_stat stats
u_int32_t asyncBadCheckSums
struct ng_mesg::ng_msghdr header