33#include <sys/kernel.h>
34#include <sys/malloc.h>
36#include <sys/socket.h>
37#include <sys/sockio.h>
44#include <net/ethernet.h>
46#define NG_ATMLLC_HEADER "\252\252\3\0\200\302"
47#define NG_ATMLLC_HEADER_LEN (sizeof(struct atmllc))
48#define NG_ATMLLC_TYPE_ETHERNET_FCS 0x0001
49#define NG_ATMLLC_TYPE_FDDI_FCS 0x0004
50#define NG_ATMLLC_TYPE_ETHERNET_NOFCS 0x0007
51#define NG_ATMLLC_TYPE_FDDI_NOFCS 0x000A
65#define ATM_LLC_TYPE(X) (((X)->type[0] << 8) | ((X)->type[1]))
66#define ATM_LLC_SETTYPE(X, V) do { \
67 (X)->type[0] = ((V) >> 8) & 0xff; \
68 (X)->type[1] = ((V) & 0xff); \
96 priv = malloc(
sizeof(*
priv), M_NETGRAPH, M_WAITOK | M_ZERO);
122 free(
priv, M_NETGRAPH);
137 if (
priv->atm != NULL) {
142 if (
priv->ether != NULL) {
147 if (
priv->fddi != NULL) {
173 if (hook ==
priv->atm) {
175 hdr = mtod(m,
struct atmllc *);
183 if (m->m_len <
sizeof(
struct atmllc) + ETHER_HDR_LEN) {
184 m = m_pullup(m,
sizeof(
struct atmllc) + ETHER_HDR_LEN);
192 hdr = mtod(m,
struct atmllc *);
194 m->m_flags &= ~M_HASFCS;
195 outhook =
priv->ether;
198 m->m_flags |= M_HASFCS;
199 outhook =
priv->ether;
202 m->m_flags &= ~M_HASFCS;
203 outhook =
priv->fddi;
206 m->m_flags |= M_HASFCS;
207 outhook =
priv->fddi;
210 printf(
"ng_atmllc: unknown type: %x\n",
215 m_adj(m,
sizeof(
struct atmllc) + padding);
216 }
else if (hook ==
priv->ether) {
220 printf(
"ng_atmllc: M_PREPEND failed\n");
224 hdr = mtod(m,
struct atmllc *);
225 bzero((
void *)hdr,
sizeof(
struct atmllc) + 2);
227 if ((m->m_flags & M_HASFCS) != 0) {
233 }
else if (hook ==
priv->fddi) {
237 printf(
"ng_atmllc: M_PREPEND failed\n");
241 hdr = mtod(m,
struct atmllc *);
242 bzero((
void *)hdr,
sizeof(
struct atmllc) + 3);
244 if ((m->m_flags & M_HASFCS) != 0) {
252 if (outhook == NULL) {
271 if (hook ==
priv->atm) {
273 }
else if (hook ==
priv->ether) {
275 }
else if (hook ==
priv->fddi) {
#define NG_HOOK_NODE(hook)
int ng_rcvmsg_t(node_p node, item_p item, hook_p lasthook)
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)
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)
#define NG_ATMLLC_TYPE_ETHERNET_NOFCS
#define NG_ATMLLC_HEADER_LEN
static ng_shutdown_t ng_atmllc_shutdown
static struct ng_type ng_atmllc_typestruct
static ng_disconnect_t ng_atmllc_disconnect
static ng_newhook_t ng_atmllc_newhook
#define NG_ATMLLC_TYPE_FDDI_FCS
#define ATM_LLC_SETTYPE(X, V)
static ng_constructor_t ng_atmllc_constructor
#define NG_ATMLLC_TYPE_ETHERNET_FCS
#define NG_ATMLLC_TYPE_FDDI_NOFCS
static ng_rcvmsg_t ng_atmllc_rcvmsg
NETGRAPH_INIT(atmllc, &ng_atmllc_typestruct)
static ng_rcvdata_t ng_atmllc_rcvdata
#define NG_ATMLLC_HOOK_ETHER
#define NG_ATMLLC_HOOK_ATM
#define NG_ATMLLC_NODE_TYPE
#define NG_ATMLLC_HOOK_FDDI
struct ng_mesg::ng_msghdr header