From 2815686c1d184defd352cae160478fc6d5a15d83 Mon Sep 17 00:00:00 2001 From: Swangeon Date: Fri, 19 May 2023 14:09:58 -0500 Subject: [PATCH] network/tun: modify mtu and some checks to give correct types/flags MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit tun & tap tested Change-Id: Ifac4ba40c56358ac9e845aa3d07cee75f1e8ce46 Reviewed-on: https://review.haiku-os.org/c/haiku/+/6460 Reviewed-by: Jérôme Duval --- src/add-ons/kernel/network/devices/tun/tun.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/add-ons/kernel/network/devices/tun/tun.cpp b/src/add-ons/kernel/network/devices/tun/tun.cpp index 2ad444c9c7..af004ef238 100644 --- a/src/add-ons/kernel/network/devices/tun/tun.cpp +++ b/src/add-ons/kernel/network/devices/tun/tun.cpp @@ -22,7 +22,6 @@ #include - struct net_buffer_module_info* gBufferModule; static struct net_stack_module_info* sStackModule; @@ -51,9 +50,18 @@ tun_init(const char* name, net_device** _device) memset(device, 0, sizeof(tun_device)); strcpy(device->name, name); - device->flags = IFF_LINK; - device->type = strncmp(name, "tap", 3) ? IFT_TUN : IFT_ETHER; - device->mtu = 16384; + + if (strncmp(name, "tun", 3) == 0) { + device->flags = IFF_LOOPBACK | IFF_LINK; + device->type = IFT_TUN; + } else if (strncmp(name, "tap", 3) == 0) { + device->flags = IFF_BROADCAST | IFF_ALLMULTI | IFF_LINK; + device->type = IFT_ETHER; + } else { + return B_BAD_VALUE; + } + + device->mtu = 1500; /* Almost all VPN MTU's are no more than 1500 bytes */ device->media = IFM_ACTIVE; *_device = device;