icmp echo_user

Matus Harvan mharvan at inf.ethz.ch
Sun Sep 9 13:23:56 PDT 2007


Hello,

I am a Google Summer of Code student working on mtund, aka Magic
Tunnel Daemon aka Super Tunnel Daemon,
http://wiki.freebsd.org/SuperTunnelDaemon.

For mtund it would be useful to tunnel in ICMP echo request/reply
pairs. For this being able to receive ICMP echo requests in the user
space would be helpful. Currently, ICMP echo requests are processed in
the kernel where an ICMP echo reply is generated, but they are not
passed to the user space. I would suggest the patch below, adding a
sysctl variable net.inet.icmp.echo_user, allowing to recevie the ICMP
echo requests in the user space on a raw IP/ICMP socket rather than
having the kernel generate a reply to them.

Matus

patch:
Index: ip_icmp.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/ip_icmp.c,v
retrieving revision 1.117
diff -d -u -r1.117 ip_icmp.c
--- ip_icmp.c	19 Jul 2007 22:34:25 -0000	1.117
+++ ip_icmp.c	6 Sep 2007 21:26:08 -0000
@@ -124,6 +124,10 @@
 SYSCTL_INT(_net_inet_icmp, OID_AUTO, bmcastecho, CTLFLAG_RW,
 	&icmpbmcastecho, 0, "");
 
+static int     icmpechouser = 0;
+SYSCTL_INT(_net_inet_icmp, OID_AUTO, echo_user, CTLFLAG_RW | CTLFLAG_SECURE,
+        &icmpechouser, 0, "Pass ICMP echo requests to userspace rather than"
+	"replying to them in the kernel");
 
 #ifdef ICMPPRINTFS
 int	icmpprintfs = 0;
@@ -454,6 +458,9 @@
 		break;
 
 	case ICMP_ECHO:
+		if (icmpechouser)
+			goto raw;
+
 		if (!icmpbmcastecho
 		    && (m->m_flags & (M_MCAST | M_BCAST)) != 0) {
 			icmpstat.icps_bmcastecho++;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-net/attachments/20070909/70852990/attachment.pgp


More information about the freebsd-net mailing list