Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 25 Dec 2008 00:01:29 +0000 (UTC)
From:      Julian Elischer <julian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r186481 - in head: share/man/man4 sys/modules/netgraph/ether_echo sys/netgraph
Message-ID:  <200812250001.mBP01Tfe098079@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: julian
Date: Thu Dec 25 00:01:29 2008
New Revision: 186481
URL: http://svn.freebsd.org/changeset/base/186481

Log:
  Add a trivial node to reflect ethernet frames to whence they came.
  
  MFC after: 1 month

Added:
  head/share/man/man4/ng_ether_echo.4   (contents, props changed)
  head/sys/modules/netgraph/ether_echo/
  head/sys/modules/netgraph/ether_echo/Makefile   (contents, props changed)
  head/sys/netgraph/ng_ether_echo.c   (contents, props changed)
  head/sys/netgraph/ng_ether_echo.h   (contents, props changed)

Added: head/share/man/man4/ng_ether_echo.4
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/share/man/man4/ng_ether_echo.4	Thu Dec 25 00:01:29 2008	(r186481)
@@ -0,0 +1,77 @@
+.\" Copyright (c) 1996-1999 Whistle Communications, Inc.
+.\" All rights reserved.
+.\"
+.\" Subject to the following obligations and disclaimer of warranty, use and
+.\" redistribution of this software, in source or object code forms, with or
+.\" without modifications are expressly permitted by Whistle Communications;
+.\" provided, however, that:
+.\" 1. Any and all reproductions of the source or object code must include the
+.\"    copyright notice above and the following disclaimer of warranties; and
+.\" 2. No rights are granted, in any manner or form, to use Whistle
+.\"    Communications, Inc. trademarks, including the mark "WHISTLE
+.\"    COMMUNICATIONS" on advertising, endorsements, or otherwise except as
+.\"    such appears in the above copyright notice or in the software.
+.\"
+.\" THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND
+.\" TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO
+.\" REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE,
+.\" INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
+.\" WHISTLE COMMUNICATIONS DOES NOT WARRANT, GUARANTEE, OR MAKE ANY
+.\" REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS OF THE USE OF THIS
+.\" SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY, RELIABILITY OR OTHERWISE.
+.\" IN NO EVENT SHALL WHISTLE COMMUNICATIONS BE LIABLE FOR ANY DAMAGES
+.\" RESULTING FROM OR ARISING OUT OF ANY USE OF THIS SOFTWARE, INCLUDING
+.\" WITHOUT LIMITATION, ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+.\" PUNITIVE, OR CONSEQUENTIAL DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR
+.\" SERVICES, LOSS OF USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY
+.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+.\" THIS SOFTWARE, EVEN IF WHISTLE COMMUNICATIONS IS ADVISED OF THE POSSIBILITY
+.\" OF SUCH DAMAGE.
+.\"
+.\" Author: Archie Cobbs <archie@FreeBSD.org>
+.\"
+.\" $FreeBSD$
+.\" $Whistle: ng_echo.8,v 1.4 1999/01/25 23:46:26 archie Exp $
+.\"
+.Dd December 24, 2008
+.Dt NG_ETHER_ECHO 4
+.Os
+.Sh NAME
+.Nm ng_ether_echo
+.Nd netgraph ether_echo node type
+.Sh SYNOPSIS
+.In netgraph/ng_ether_echo.h
+.Sh DESCRIPTION
+The
+.Nm ether_echo
+node type reflects all data and control messages back to the sender.
+It assumes (and does not check) that the packet is an ethernet frame,
+and swaps teh source and destination addresses before echoing it.
+This node type is used for testing and debugging.
+.Sh HOOKS
+A
+.Nm ether_echo
+node accepts any request to connect, regardless of the hook name,
+as long as the name is unique.
+.Sh CONTROL MESSAGES
+This node type supports only the generic control messages.
+Any other control messages are reflected back to the sender.
+.Sh SHUTDOWN
+This node shuts down upon receipt of a
+.Dv NGM_SHUTDOWN
+control message, or when all hooks have been disconnected.
+.Sh SEE ALSO
+.Xr netgraph 4 ,
+.Xr ng_hole 4 ,
+.Xr ng_echo 4 ,
+.Xr ng_ether 4 ,
+.Xr ngctl 8
+.Sh HISTORY
+The
+.Nm
+node type was implemented in
+.Fx 8.0 .
+.Sh AUTHORS
+.An Julian Elischer Aq julian@FreeBSD.org

Added: head/sys/modules/netgraph/ether_echo/Makefile
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sys/modules/netgraph/ether_echo/Makefile	Thu Dec 25 00:01:29 2008	(r186481)
@@ -0,0 +1,7 @@
+# $FreeBSD$
+# $Whistle: Makefile,v 1.2 1999/01/19 19:39:20 archie Exp $
+
+KMOD=	ng_ether_echo
+SRCS= 	ng_ether_echo.c
+
+.include <bsd.kmod.mk>

Added: head/sys/netgraph/ng_ether_echo.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sys/netgraph/ng_ether_echo.c	Thu Dec 25 00:01:29 2008	(r186481)
@@ -0,0 +1,145 @@
+/*
+ * ng_ether_echo.c
+ */
+
+/*-
+ * Copyright (c) 1996-1999 Whistle Communications, Inc.
+ * All rights reserved.
+ * 
+ * Subject to the following obligations and disclaimer of warranty, use and
+ * redistribution of this software, in source or object code forms, with or
+ * without modifications are expressly permitted by Whistle Communications;
+ * provided, however, that:
+ * 1. Any and all reproductions of the source or object code must include the
+ *    copyright notice above and the following disclaimer of warranties; and
+ * 2. No rights are granted, in any manner or form, to use Whistle
+ *    Communications, Inc. trademarks, including the mark "WHISTLE
+ *    COMMUNICATIONS" on advertising, endorsements, or otherwise except as
+ *    such appears in the above copyright notice or in the software.
+ * 
+ * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND
+ * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO
+ * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE,
+ * INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
+ * WHISTLE COMMUNICATIONS DOES NOT WARRANT, GUARANTEE, OR MAKE ANY
+ * REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS OF THE USE OF THIS
+ * SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY, RELIABILITY OR OTHERWISE.
+ * IN NO EVENT SHALL WHISTLE COMMUNICATIONS BE LIABLE FOR ANY DAMAGES
+ * RESULTING FROM OR ARISING OUT OF ANY USE OF THIS SOFTWARE, INCLUDING
+ * WITHOUT LIMITATION, ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ * PUNITIVE, OR CONSEQUENTIAL DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES, LOSS OF USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF WHISTLE COMMUNICATIONS IS ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * Author: Julian Elisher <julian@freebsd.org>
+ *
+ * $FreeBSD$
+ * $Whistle: ng_echo.c,v 1.13 1999/11/01 09:24:51 julian Exp $
+ */
+
+/*
+ * Netgraph "ether_echo" node
+ *
+ * This node simply bounces data and messages back to whence they came.
+ * However it swaps the source and destination ether fields.
+ * No testing is done!
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/malloc.h>
+#include <sys/mbuf.h>
+#include <netgraph/ng_message.h>
+#include <netgraph/netgraph.h>
+#include <netgraph/ng_ether_echo.h>
+
+#include <net/ethernet.h>
+
+/* Netgraph methods */
+static ng_constructor_t	ngee_cons;
+static ng_rcvmsg_t	ngee_rcvmsg;
+static ng_rcvdata_t	ngee_rcvdata;
+static ng_disconnect_t	ngee_disconnect;
+
+/* Netgraph type */
+static struct ng_type typestruct = {
+	.version =	NG_ABI_VERSION,
+	.name =		NG_ETHER_ECHO_NODE_TYPE,
+	.constructor =	ngee_cons,
+	.rcvmsg =	ngee_rcvmsg,
+	.rcvdata =	ngee_rcvdata,
+	.disconnect =	ngee_disconnect,
+};
+NETGRAPH_INIT(ether_echo, &typestruct);
+
+static int
+ngee_cons(node_p node)
+{
+	return (0);
+}
+
+/*
+ * Receive control message. We just bounce it back as a reply.
+ */
+static int
+ngee_rcvmsg(node_p node, item_p item, hook_p lasthook)
+{
+	struct ng_mesg *msg;
+	int error = 0;
+
+	NGI_GET_MSG(item, msg);
+	msg->header.flags |= NGF_RESP;
+	NG_RESPOND_MSG(error, node, item, msg);
+	return (error);
+}
+
+/*
+ * Receive data
+ */
+static int
+ngee_rcvdata(hook_p hook, item_p item)
+{
+	int error;
+	struct mbuf *m;
+
+	struct ether_header *eh;
+	struct ether_addr tmpaddr;
+
+	/* Make sure we have an entire header */
+	NGI_GET_M(item, m);
+	if (m->m_len < sizeof(*eh) ) {
+		m = m_pullup(m, sizeof(*eh));
+		if (m == NULL) {
+			NG_FREE_ITEM(item);
+			return(EINVAL);
+		}
+	}
+	eh = mtod(m, struct ether_header *);
+
+	/* swap the source and destination fields */
+	bcopy(eh->ether_dhost, &tmpaddr, ETHER_ADDR_LEN);
+	bcopy(eh->ether_shost, eh->ether_dhost, ETHER_ADDR_LEN);
+	bcopy(&tmpaddr, eh->ether_shost, ETHER_ADDR_LEN);
+
+	NG_FWD_NEW_DATA(error, item, hook, m);
+	return (error);
+}
+
+/*
+ * Removal of the last link destroys the nodeo
+ */
+static int
+ngee_disconnect(hook_p hook)
+{
+	if ((NG_NODE_NUMHOOKS(NG_HOOK_NODE(hook)) == 0)
+	&& (NG_NODE_IS_VALID(NG_HOOK_NODE(hook)))) {
+		ng_rmnode_self(NG_HOOK_NODE(hook));
+	}
+	return (0);
+}
+

Added: head/sys/netgraph/ng_ether_echo.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sys/netgraph/ng_ether_echo.h	Thu Dec 25 00:01:29 2008	(r186481)
@@ -0,0 +1,51 @@
+/*
+ * ng_ether_echo.h
+ */
+
+/*-
+ * Copyright (c) 1996-1999 Whistle Communications, Inc.
+ * All rights reserved.
+ * 
+ * Subject to the following obligations and disclaimer of warranty, use and
+ * redistribution of this software, in source or object code forms, with or
+ * without modifications are expressly permitted by Whistle Communications;
+ * provided, however, that:
+ * 1. Any and all reproductions of the source or object code must include the
+ *    copyright notice above and the following disclaimer of warranties; and
+ * 2. No rights are granted, in any manner or form, to use Whistle
+ *    Communications, Inc. trademarks, including the mark "WHISTLE
+ *    COMMUNICATIONS" on advertising, endorsements, or otherwise except as
+ *    such appears in the above copyright notice or in the software.
+ * 
+ * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND
+ * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO
+ * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE,
+ * INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
+ * WHISTLE COMMUNICATIONS DOES NOT WARRANT, GUARANTEE, OR MAKE ANY
+ * REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS OF THE USE OF THIS
+ * SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY, RELIABILITY OR OTHERWISE.
+ * IN NO EVENT SHALL WHISTLE COMMUNICATIONS BE LIABLE FOR ANY DAMAGES
+ * RESULTING FROM OR ARISING OUT OF ANY USE OF THIS SOFTWARE, INCLUDING
+ * WITHOUT LIMITATION, ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ * PUNITIVE, OR CONSEQUENTIAL DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES, LOSS OF USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF WHISTLE COMMUNICATIONS IS ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * Author: Archie Cobbs <archie@freebsd.org>
+ *
+ * $FreeBSD$
+ * $Whistle: ng_echo.h,v 1.3 1999/01/20 00:22:12 archie Exp $
+ */
+
+#ifndef _NETGRAPH_NG_ETHER_ECHO_H_
+#define _NETGRAPH_NG_ETHER_ECHO_H_
+
+/* Node type name and magic cookie */
+#define NG_ETHER_ECHO_NODE_TYPE	"ether_echo"
+#define NGM_ETHER_ECHO_COOKIE		1230155201
+
+#endif /* _NETGRAPH_NG_ETHER_ECHO_H_ */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200812250001.mBP01Tfe098079>