From 6de46a80050cba47acc0378df90efadb86a5a153 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Sun, 25 Mar 2007 12:59:39 +0000 Subject: [PATCH] Rearranged ipv4_control() a bit, and fixed a bug that would always return B_BAD_VALUE on setsockopt() for all options. Thanks to Hugo Santos for pointing this out. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20421 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/network/protocols/ipv4/ipv4.cpp | 95 ++++++++++--------- 1 file changed, 48 insertions(+), 47 deletions(-) diff --git a/src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp b/src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp index d98c8caae4..fd3275285d 100644 --- a/src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp +++ b/src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp @@ -821,55 +821,56 @@ ipv4_control(net_protocol *_protocol, int level, int option, void *value, dprintf("IPv4::control(): get unknown option: %d\n", option); return ENOPROTOOPT; } - } else { - // set options - - switch (option) { - case IP_HDRINCL: - { - int headerIncluded; - if (*_length != sizeof(int)) - return B_BAD_VALUE; - if (user_memcpy(&headerIncluded, value, sizeof(headerIncluded)) < B_OK) - return B_BAD_ADDRESS; - - if (headerIncluded) - protocol->flags |= IP_FLAG_HEADER_INCLUDED; - else - protocol->flags &= ~IP_FLAG_HEADER_INCLUDED; - break; - } - - case IP_TTL: - { - int timeToLive; - if (*_length != sizeof(int)) - return B_BAD_VALUE; - if (user_memcpy(&timeToLive, value, sizeof(timeToLive)) < B_OK) - return B_BAD_ADDRESS; - - protocol->time_to_live = timeToLive; - break; - } - - case IP_TOS: - { - int serviceType; - if (*_length != sizeof(int)) - return B_BAD_VALUE; - if (user_memcpy(&serviceType, value, sizeof(serviceType)) < B_OK) - return B_BAD_ADDRESS; - - protocol->service_type = serviceType; - break; - } - - default: - dprintf("IPv4::control(): set unknown option: %d\n", option); - return ENOPROTOOPT; - } } + // set options + + switch (option) { + case IP_HDRINCL: + { + int headerIncluded; + if (*_length != sizeof(int)) + return B_BAD_VALUE; + if (user_memcpy(&headerIncluded, value, sizeof(headerIncluded)) < B_OK) + return B_BAD_ADDRESS; + + if (headerIncluded) + protocol->flags |= IP_FLAG_HEADER_INCLUDED; + else + protocol->flags &= ~IP_FLAG_HEADER_INCLUDED; + return B_OK; + } + + case IP_TTL: + { + int timeToLive; + if (*_length != sizeof(int)) + return B_BAD_VALUE; + if (user_memcpy(&timeToLive, value, sizeof(timeToLive)) < B_OK) + return B_BAD_ADDRESS; + + protocol->time_to_live = timeToLive; + return B_OK; + } + + case IP_TOS: + { + int serviceType; + if (*_length != sizeof(int)) + return B_BAD_VALUE; + if (user_memcpy(&serviceType, value, sizeof(serviceType)) < B_OK) + return B_BAD_ADDRESS; + + protocol->service_type = serviceType; + return B_OK; + } + + default: + dprintf("IPv4::control(): set unknown option: %d\n", option); + return ENOPROTOOPT; + } + + // never gets here return B_BAD_VALUE; }