From a3d0b8a79a432820dee80b1583f1acf86d256e97 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Thu, 10 Dec 1998 19:42:29 +0000 Subject: Patch from Ian Lance Taylor : From: Eric Norum Date: Sat, 5 Dec 98 13:20:51 -0600 What do you think of this patch? It implements your `tap' suggestion in a way that adds support for all ethernet devices with no driver modifications. I also added a return value from the tap function. If the return value is zero, the packet will be passed up the chain as usual. If the return value is non-zero the mbuf holding the packet will be freed and the packet will be dropped. If you like it, please submit it to Joel. I guess there needs to be an addition to the network documentation describing the additional ioctl's -- and a big warning that the tap function is called from a context that holds the network semaphore. Here is Eric's patch. I've tested it a bit, and made a couple of trivial changes. This is certainly better than mine: it should work for all Ethernet drivers. ================================================== The only concern I have about this patch is that the tap function may want to fiddle with the mbuf, calling functions like m_pullup and the like. If those force the networking code to rearrange the mbuf structure, then the caller's call to m_freem may crash. I don't know if this is a realistic concern--I don't know enough about the mbuf layer. --- c/src/lib/include/sys/sockio.h | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'c/src/lib/include') diff --git a/c/src/lib/include/sys/sockio.h b/c/src/lib/include/sys/sockio.h index 020061170f..03ec16e43a 100644 --- a/c/src/lib/include/sys/sockio.h +++ b/c/src/lib/include/sys/sockio.h @@ -83,4 +83,11 @@ #define SIOCSIFMEDIA _IOWR('i', 55, struct ifreq) /* set net media */ #define SIOCGIFMEDIA _IOWR('i', 56, struct ifmediareq) /* get net media */ + +/* + * RTEMS additions for setting/getting `tap' function on incoming packets. + */ +#define SIOCSIFTAP _IOW('i', 80, struct ifreq) /* set tap function */ +#define SIOCGIFTAP _IOWR('i', 81, struct ifreq) /* get tap function */ + #endif /* !_SYS_SOCKIO_H_ */ -- cgit v1.2.3