From 38f6c508a90e5dd1150905e25ba48882689db717 Mon Sep 17 00:00:00 2001 From: beveloper Date: Mon, 24 May 2004 18:05:38 +0000 Subject: [PATCH] Revisited the mtu handling. Poor net_server users can now force a lower MTU by using a setting file. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@7634 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/drivers/network/ipro1000/device.c | 12 +++++++----- .../kernel/drivers/network/ipro1000/device.h | 2 +- .../drivers/network/ipro1000/ipro1000.settings | 14 ++++++++++++++ 3 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 src/add-ons/kernel/drivers/network/ipro1000/ipro1000.settings diff --git a/src/add-ons/kernel/drivers/network/ipro1000/device.c b/src/add-ons/kernel/drivers/network/ipro1000/device.c index db68a4b1e4..5cf94db006 100644 --- a/src/add-ons/kernel/drivers/network/ipro1000/device.c +++ b/src/add-ons/kernel/drivers/network/ipro1000/device.c @@ -55,8 +55,10 @@ ipro1000_read_settings(ipro1000_device *device) param = get_driver_parameter(handle, "mtu", "0", "0"); mtu = atoi(param); - if (mtu >= 64 && mtu <= 1500) - device->mtu = mtu; + if (mtu >= 50 && mtu <= 1500) + device->maxframesize = mtu + ENET_HEADER_SIZE; + else + dprintf("ipro1000: unsupported mtu setting '%s' ignored\n", param); unload_driver_settings(handle); } @@ -103,7 +105,7 @@ ipro1000_open(const char *name, uint32 flags, void** cookie) device->pciDev = device->pciInfo->device; device->pciFunc = device->pciInfo->function; device->adapter = 0; - device->mtu = 1500; // XXX is MAXIMUM_ETHERNET_FRAME_SIZE = 1518 too much? + device->maxframesize = 1514; // XXX is MAXIMUM_ETHERNET_FRAME_SIZE = 1518 too much? ipro1000_read_settings(device); @@ -328,8 +330,8 @@ ipro1000_control(void *cookie, uint32 op, void *arg, size_t len) return B_OK; case ETHER_GETFRAMESIZE: - TRACE("ipro1000_control() ETHER_GETFRAMESIZE, MTU = %d\n", device->mtu); - *(uint32*)arg = device->mtu; + TRACE("ipro1000_control() ETHER_GETFRAMESIZE, framesize = %d (MTU = %d)\n", device->maxframesize, device->maxframesize - ENET_HEADER_SIZE); + *(uint32*)arg = device->maxframesize; return B_OK; default: diff --git a/src/add-ons/kernel/drivers/network/ipro1000/device.h b/src/add-ons/kernel/drivers/network/ipro1000/device.h index 6c25988bb9..d1e2f74a9f 100644 --- a/src/add-ons/kernel/drivers/network/ipro1000/device.h +++ b/src/add-ons/kernel/drivers/network/ipro1000/device.h @@ -46,7 +46,7 @@ typedef struct device { volatile bool nonblocking; volatile bool closed; - uint32 mtu; + uint32 maxframesize; // 14 bytes header + MTU uint8 macaddr[6]; } ipro1000_device; diff --git a/src/add-ons/kernel/drivers/network/ipro1000/ipro1000.settings b/src/add-ons/kernel/drivers/network/ipro1000/ipro1000.settings new file mode 100644 index 0000000000..1a64afcd14 --- /dev/null +++ b/src/add-ons/kernel/drivers/network/ipro1000/ipro1000.settings @@ -0,0 +1,14 @@ +# Sample settings file for the ipro1000 driver +# +# This file should be moved to the directory ~/config/settings/kernel/drivers/ +# and must be RENAMED into "ipro1000" + +# Currently supported settings are: +# +# mtu +# +# where value can be in the range 50 to 1500 +# +# to fix upload problems with DSL, use +# +# mtu 1492