Re: IPTOS_LOWDELAY in netinet/ip.h is incorrect??

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



   From: Ben Greear <greearb@candelatech.com>
   Date: Sun, 12 Aug 2001 20:25:36 -0700

   It appears that the IP TOS values in netinet/ip.h are
   incorrect:
   
I'll be using the page you even quoted:

http://www.hut.fi/~msisomak/diffserv.html

to show that the values are correct.  This page, in figure
2, shows the following bit layout:

	----------------------------------------
	|  Precedence  |  Type of Service  | 0 |
	----------------------------------------
	  8    7    6     5   4   3   2   1  0

The bit numbering above is mine, the page labels them
backwards for whatever reason.

   #define IPTOS_TOS_MASK          0x1E
   #define IPTOS_TOS(tos)          ((tos) & IPTOS_TOS_MASK)

TOS field, bits 1 thru 5

   #define IPTOS_LOWDELAY          0x10

Minimize delay, binary 1000 in TOS field.

   #define IPTOS_THROUGHPUT        0x08

Minimize thruput, binary 0100 in TOS field.

   #define IPTOS_RELIABILITY       0x04

Maximize reliability, binary 0010 in TOS field.

   #define IPTOS_LOWCOST           0x02
   #define IPTOS_MINCOST           IPTOS_LOWCOST

Minimize monetary (misspelled on page) cost, binary 0001 in TOS
field.

   Am I missing something??
   
I think the mislabelled bit numbering in the figure of that web page
has mislead your thinking, that's all.

At least, Linux and BSD's header files agree perfectly for
these values :-)

   Also, will the kernel take any 8-bit value I try to stuff in
   there with:
    setsockopt(dev_socket, SOL_IP, IP_TOS, (char*)&val, sizeof(int))
   or will it normalize values according to it's internal rules?

1) If you have any bits outside of the precidence or
   type of service field set, you will get -EINVAL.
   (basically if the lowest bit is set, it is reserved
   and thus invalid to pass to this sockopt)

2) If this is a TCP connection, and CONFIG_INET_ECN is
   enabled, the low two bits you pass will be replaced
   with the current ECN bit settings.  The lowest two
   TOS byte bits are used for ECN.

3) If the precidence in the TOS value passed is greater than
   or equal to IPTOS_PREC_CRITIC_ECP, and the user does not
   uave CAP_NET_ADMIN capabilities, you will get an -EPERM
   failure.

Basically, I just read aloud the code in net/ipv4/ip_sockglue.c
which you could have just as easily have done by grepping for
IPTOS under net/ipv4/*.c But I'll let you be lazy just this
one time :-)

Later,
David S. Miller
davem@redhat.com
-
: send the line "unsubscribe linux-net" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux 802.1Q VLAN]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Git]     [Bugtraq]     [Yosemite News and Information]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux PCI]     [Linux Admin]     [Samba]

  Powered by Linux