Solaris 2.2 is typical of the newer Unix systems that provide a program for the administrator to run to change the configuration options of the TCP/IP system. This allows reconfiguration without having to modify source files and rebuild a kernel.
The configuration program is ndd (1). We can run the program to see what parameters we can examine or modify in the UDP module:
solaris % ndd /dev/udp \? udp_wroff_extra (read and write) udp_def_ttl (read and write) udp_first_anon_port (read and write) udp_trust_optlen (read and write) udp_do_checksum (read and write) udp_status (read only)
There are five modules we can specify: /dev/ip, /dev/icmp, /dev/arp, /dev/udp, and /dev/tcp. The question mark argument (which we have to prevent the shell from interpreting by preceding it with a backslash) tells the program to list all the parameters for that module. An example that queries the value of a variable is:
solaris % ndd /dev/tcp tcp_mss_def 536
To change the value of a variable we need superuser privilege and type:
solaris # ndd -set /dev/ip ip_forwarding 0
These variables can be divided into three categories:
Configuration variables that a system administrator can change (e.g., ip_forwarding ).
Status variables that can only be displayed (e.g., the ARP cache). Normally this information is provided in an easier to understand format by the commands ifconfig, netstat, and arp.
Debugging variables intended for those with kernel source code. Enabling some of these generates kernel debug output at runtime, which can degrade performance.
We now describe the parameters in each module. All parameters are read-write, unless marked "(Read only)." The read-only parameters are the status variables from case 2 above. We also mark the "(Debug)" variables from case 3. Unless otherwise noted, all the timing variables are specified in milliseconds , which differs from the other systems that normally specify times as some number of 500-ms clock ticks .
(Debug) Selects between two independent implementations of the IP checksum algorithm.
(Debug) Enables printing of debug output by the kernel, if greater than 0. Larger values generate more output. Default is 0.
Default TTL for outgoing IP datagrams, if not specified by transport layer. Default is 255.
If 1 (default), received datagrams whose destination address is the directed broadcast address of an attached interface are forwarded as a link-layer broadcast. If 0, these datagrams are silently discarded.
If 1 (default), received datagrams containing a source route option are forwarded. If 0, these datagrams are discarded.
Specifies whether the system forwards incoming IP datagrams: 0 means never forward, 1 means always forward, and 2 (default) means only forward when two or more interfaces are up.
The number of bytes of data beyond the IP header that are returned in an ICMP error. Default is 64.
(Debug) Minimum lifetime of an IP routing table entry (IRE). Default is 30 seconds. (This parameter is in seconds, not milliseconds.)
(Read only) Displays the status of each IP lower layer data structure. There is one lower layer structure for each interface.
(Read only) Displays the status of each IP interface data structure (IP address, subnet mask, etc.). There is one of these structures for each interface.
(Debug) The interval at which the IP routing table entries are scanned for possible deletions. Default is 30000 ms (30 seconds).
The interval at which ARP information in unconditionally flushed from the IP routing table. Default is 1200000 ms (20 minutes).
The interval at which the path MTU discovery algorithm tries to increase the MTU. Default is 30000 ms (30 seconds).
The interval at which IP routing table entries that are from ICMP redirects are deleted. Default is 60000 ms (60 seconds).
(Read only) Displays all the IP routing table entries.
If 0 (default), IP does not calculate the IP checksum or the higher layer protocol checksum (i.e., TCP, UDP, ICMP, or IGMP) for datagrams sent or received through the loopback interface. If 1, these checksums are calculated.
(Debug) Enables printing of debug output concerning multicast routing by the kernel, if 1. Default is 0.
If 1 (default), path MTU discovery is performed by IP. If 0, IP never sets the "don't fragment" bit in outgoing datagrams.
If 0 (default), the host does not respond to ICMP address mask requests . If 1, it does respond.
If 1 (default), the host responds to ICMP echo requests that are sent to a broadcast address. If 0, it does not respond.
If 0 (default), the host does not respond to ICMP timestamp requests. If 1, the host responds.
If 0 (default), the host does not respond to ICMP timestamp requests that are sent to a broadcast address. If 1, it responds if ip_respond_to_timestamp is also set.
(Debug) Count of number of buffers from the network interface driver that needed to be pulled up to access the full IP header. Initialized to 0 at bootstrap time, and can be reset to 0.
If 1 (default), the host sends ICMP redirects when acting as a router. If 0, these are not sent.
If 1 (default), the host generates ICMP source quench errors when incoming datagrams are discarded. If 0, these are not generated.
(Debug) Number of bytes of extra space to allocate in buffers for IP headers. Default is 32.
(Debug) If 1 (default), the length field in the IP header of received datagrams is adjusted to exclude the length of the IP header. This is compatible with Berkeley-derived implementations and is for applications reading raw IP or raw ICMP packets. If 0, the length field is not changed.
The default TTL for outgoing ICMP messages. Default is 255.
(Debug) Number of bytes of extra space to allocate in buffers for IP options and data-link headers. Default is 32.
(Read only) The ARP cache.
The interval after which ARP entries are discarded from ARP's cache. Default is 300000 ms (5 minutes). (IP maintains its own cache of completed ARP translations; see ip_ire_flush_interval. )
(Debug) If 1, enables printing of debug output by the ARP driver. Default is 0.
The default TTL for outgoing UDP datagrams. Default value is 255.
If 1 (default), UDP checksums are calculated for outgoing UDP datagrams. If 0, outgoing UDP datagrams do not contain a checksum. (Unlike most other implementations, this UDP checksum flag does not affect incoming datagrams. If a received datagram has a nonzero checksum, it is always verified .)
Largest port number to allocate for UDP ephemeral ports. Default is 65535.
Starting port number to allocate for UDP ephemeral ports. Default is 32768.
A process requires superuser privilege to assign itself a port number less than this. Default is 1024.
(Read only) The status of all local UDP end points: local IP address and port, foreign IP address and port.
(Debug) No longer used.
(Debug) Number of bytes of extra space to allocate in buffers for IP options and data-link headers. Default is 32.
The 2MSL value: the time spent in the TIME_WAIT state. Default is 240000 ms (4 minutes).
(Debug) Additional time added to the timer interval when sending a SYN. Default is 500 ms.
The maximum number of pending connection requests queued for any listening end point. Default is 5.
The maximum value of the congestion window. Default is 32768.
(Debug) If 1, enables printing of debug output by TCP. Default is 0.
The time to wait before sending a delayed ACK. Default is 50 ms.
The number of consecutive duplicate ACKs that triggers the fast retransmit, fast recovery algorithm. Default is 3.
(Debug) If 1 (default), TCP completes the three-way handshake before returning a new connection to an application with a pending passive open . This is the way most TCP implementations operate . If 0, TCP passes an incoming connection request (received SYN) to the application, and does not complete the three-way handshake until the application accepts the connection. (Setting this to 0 might break many existing applications.)
(Debug) If 1, path MTU discovery ignores received ICMP fragmentation needed messages. If 0 (default), path MTU discovery is enabled for TCP.
The total retransmit timeout value when TCP is performing an active open. Default is 240000 ms (4 minutes).
The total retransmit timeout value for a TCP connection after it is established. Default is 120000 ms (2 minutes).
The timeout value when TCP is performing an active open after which TCP notifies IP to find a new route. Default is 10000 ms (10 seconds).
The timeout value for an established connection after which TCP notifies IP to find a new route. Default is 10000 ms (10 seconds).
The TTL to use for outgoing TCP segments. Default is 255.
The time that a connection must be idle before a keepalive probe is sent. Default is 7200000 ms (2 hours).
Largest port number to allocate for TCP ephemeral ports. Default is 65535.
(Debug) Specifies the multiple of the MSS into which the stream head packetizes the application's write data. Default is 1.
Default MSS for nonlocal destinations. Default is 536.
The maximum MSS. Default is 65495.
The minimum MSS. Default is 1.
(Debug) Maximum value of the per-connection Nagle algorithm threshold. Default is 65535. The per-connection value starts out as the minimum of the MSS or this value. The per-connection value is set to 1 by the TCP_NODELAY socket option, which disables the Nagle algorithm.
(Debug) If 1 (default), the older (but more common) BSD interpretation of the urgent pointer is used: it points 1 byte beyond the last byte of urgent data. If 0, the Host Requirements RFC interpretation is used: it points to the last byte of urgent data.
(Debug) Maximum number of bytes received without the PUSH flag set before the data is passed to the application. Default is 16384.
(Debug) Initial retransmit timeout interval. Default is 500 ms.
(Debug) Maximum retransmit timeout interval. Default is 60000 ms (60 seconds).
(Debug) Minimum retransmit timeout interval. Default is 200 ms.
(Debug) Percentage of receive window that must be buffered before flow control is checked on every received segment. Default is 50%.
Starting port number to allocate for TCP ephemeral ports. Default is 32768.
A process requires superuser privilege to assign itself a port number less than this. Default is 1024.
(Debug) If nonzero, the send buffer low-water mark is the send buffer size divided by this value. Default is 0 (disabled).
(Read only) Information on all TCP endpoints.
(Debug) If nonzero, the value to set the stream head high-water mark to. Default is 0.
(Debug) If nonzero, the value to set the stream head low-water mark to. Default is 0.
(Debug) Number of bytes of extra space to allocate in buffers for IP options and data-link headers. Default is 32.