ng_hole.c revision 52419
1186557Skmacy
2186557Skmacy/*
3186557Skmacy * ng_hole.c
4255040Sgibbs *
5186557Skmacy * Copyright (c) 1996-1999 Whistle Communications, Inc.
6255040Sgibbs * All rights reserved.
7255040Sgibbs *
8255040Sgibbs * Subject to the following obligations and disclaimer of warranty, use and
9255040Sgibbs * redistribution of this software, in source or object code forms, with or
10255040Sgibbs * without modifications are expressly permitted by Whistle Communications;
11255040Sgibbs * provided, however, that:
12255040Sgibbs * 1. Any and all reproductions of the source or object code must include the
13255040Sgibbs *    copyright notice above and the following disclaimer of warranties; and
14255040Sgibbs * 2. No rights are granted, in any manner or form, to use Whistle
15255040Sgibbs *    Communications, Inc. trademarks, including the mark "WHISTLE
16255040Sgibbs *    COMMUNICATIONS" on advertising, endorsements, or otherwise except as
17255040Sgibbs *    such appears in the above copyright notice or in the software.
18255040Sgibbs *
19255040Sgibbs * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND
20255040Sgibbs * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO
21255040Sgibbs * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE,
22255040Sgibbs * INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED WARRANTIES OF
23255040Sgibbs * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
24255040Sgibbs * WHISTLE COMMUNICATIONS DOES NOT WARRANT, GUARANTEE, OR MAKE ANY
25255040Sgibbs * REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS OF THE USE OF THIS
26255040Sgibbs * SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY, RELIABILITY OR OTHERWISE.
27255040Sgibbs * IN NO EVENT SHALL WHISTLE COMMUNICATIONS BE LIABLE FOR ANY DAMAGES
28186557Skmacy * RESULTING FROM OR ARISING OUT OF ANY USE OF THIS SOFTWARE, INCLUDING
29186557Skmacy * WITHOUT LIMITATION, ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
30186557Skmacy * PUNITIVE, OR CONSEQUENTIAL DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR
31186557Skmacy * SERVICES, LOSS OF USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY
32255040Sgibbs * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33255040Sgibbs * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
34186557Skmacy * THIS SOFTWARE, EVEN IF WHISTLE COMMUNICATIONS IS ADVISED OF THE POSSIBILITY
35186557Skmacy * OF SUCH DAMAGE.
36255040Sgibbs *
37186557Skmacy * Author: Julian Elisher <julian@whistle.com>
38255040Sgibbs *
39255040Sgibbs * $FreeBSD: head/sys/netgraph/ng_hole.c 52419 1999-10-21 09:06:11Z julian $
40255040Sgibbs * $Whistle: ng_hole.c,v 1.8 1999/01/28 23:54:53 julian Exp $
41255040Sgibbs */
42255040Sgibbs
43255040Sgibbs/*
44186557Skmacy * This node is a 'black hole' that simply discards everything it receives
45186557Skmacy */
46255040Sgibbs
47186557Skmacy#include <sys/param.h>
48255040Sgibbs#include <sys/systm.h>
49255040Sgibbs#include <sys/errno.h>
50255040Sgibbs#include <sys/kernel.h>
51255040Sgibbs#include <sys/malloc.h>
52255040Sgibbs#include <sys/mbuf.h>
53255040Sgibbs#include <sys/syslog.h>
54186557Skmacy#include <netgraph/ng_message.h>
55255040Sgibbs#include <netgraph/netgraph.h>
56255040Sgibbs#include <netgraph/ng_hole.h>
57255040Sgibbs
58255040Sgibbs/* Netgraph methods */
59255040Sgibbsstatic int ngh_rcvdata(hook_p hook, struct mbuf *m, meta_p meta);
60255040Sgibbsstatic int ngh_disconnect(hook_p hook);
61255040Sgibbs
62255040Sgibbsstatic struct ng_type typestruct = {
63255040Sgibbs	NG_VERSION,
64186557Skmacy	NG_HOLE_NODE_TYPE,
65186557Skmacy	NULL,
66255040Sgibbs	NULL,
67186557Skmacy	NULL,
68255040Sgibbs	NULL,
69255040Sgibbs	NULL,
70255040Sgibbs	NULL,
71255040Sgibbs	NULL,
72255040Sgibbs	ngh_rcvdata,
73186557Skmacy	ngh_rcvdata,
74186557Skmacy	ngh_disconnect
75255040Sgibbs};
76186557SkmacyNETGRAPH_INIT(hole, &typestruct);
77255040Sgibbs
78255040Sgibbs/*
79255040Sgibbs * Receive data
80255040Sgibbs */
81255040Sgibbsstatic int
82186557Skmacyngh_rcvdata(hook_p hook, struct mbuf *m, meta_p meta)
83255040Sgibbs{
84255040Sgibbs	NG_FREE_DATA(m, meta);
85255040Sgibbs	return 0;
86186557Skmacy}
87255040Sgibbs
88/*
89 * Hook disconnection
90 */
91static int
92ngh_disconnect(hook_p hook)
93{
94	if (hook->node->numhooks == 0)
95		ng_rmnode(hook->node);
96	return (0);
97}
98