diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 1998-12-10 19:42:29 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 1998-12-10 19:42:29 +0000 |
commit | a3d0b8a79a432820dee80b1583f1acf86d256e97 (patch) | |
tree | 7d399d0a3c740fc3fae41c7b06e5f05aaf44447e /cpukit/libnetworking/net/if.c | |
parent | Patch from Ian Lance Taylor <ian@airs.com>: (diff) | |
download | rtems-a3d0b8a79a432820dee80b1583f1acf86d256e97.tar.bz2 |
Patch from Ian Lance Taylor <ian@airs.com>:
From: Eric Norum <eric@skatter.usask.ca>
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.
Diffstat (limited to 'cpukit/libnetworking/net/if.c')
-rw-r--r-- | cpukit/libnetworking/net/if.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/cpukit/libnetworking/net/if.c b/cpukit/libnetworking/net/if.c index af6f003de3..6f42b29903 100644 --- a/cpukit/libnetworking/net/if.c +++ b/cpukit/libnetworking/net/if.c @@ -664,6 +664,17 @@ ifioctl(so, cmd, data, p) } #endif + + /* + * RTEMS additions for setting/getting `tap' function + */ + case SIOCSIFTAP: + ifp->if_tap = ifr->ifr_tap; + return 0; + + case SIOCGIFTAP: + ifr->ifr_tap = ifp->if_tap; + return 0; } return (0); } |