From 4fa9fc34395bafabd2cbcc8bc46774d233fb4eb5 Mon Sep 17 00:00:00 2001 From: Philippe Houdoin Date: Mon, 4 Jul 2005 13:43:35 +0000 Subject: [PATCH] Added simple output support to Ethernet device(s) layer. Forgot to commit this long ago... git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13423 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../interfaces/ether_drivers/ether_drivers.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/tests/kits/net/new_stack/interfaces/ether_drivers/ether_drivers.c b/src/tests/kits/net/new_stack/interfaces/ether_drivers/ether_drivers.c index 5832e3809f..5f32c332aa 100644 --- a/src/tests/kits/net/new_stack/interfaces/ether_drivers/ether_drivers.c +++ b/src/tests/kits/net/new_stack/interfaces/ether_drivers/ether_drivers.c @@ -122,15 +122,29 @@ static status_t enable(net_layer *me, bool enable) static status_t process_output(net_layer *me, net_buffer *buffer) { + ether_drivers_device *edd = me->cookie; + status_t status; + void *frame; + ssize_t sz; + if (!buffer) return B_ERROR; - // TODO! dprintf("%s: process_output:\n", me->name); g_stack->dump_buffer(buffer); + + // write buffer content + frame = malloc(edd->max_frame_size); + if (!frame) + return B_NO_MEMORY; + + // TODO: remove unwanted copy!!! + sz = g_stack->read_buffer(buffer, 0, frame, edd->max_frame_size); + if (sz >= 1) + sz = write(edd->fd, frame, sz); g_stack->delete_buffer(buffer, false); - return B_OK; + return (sz >= 0); }