This system is an example of the "classical" BSD configuration that has been used since 4.2BSD. Since the source code is distributed with the system, configuration options are specified by the administrator, and the kernel is recompiled. There are two types of options: constants that are defined in the kernel configuration file (see the config (8) manual page), and variable initializations in various C source files. Brave and knowledgeable administrators can also change the values of these C variables in either the running kernel or the kernel's disk image, using a debugger, to avoid rebuilding the kernel.
Here are the constants that can be changed in the kernel's configuration file.
The value of this constant initializes the kernel variable ipforwarding. If 0 (default), IP datagrams are not forwarded. If 1, forwarding is always enabled.
If defined, causes IPFORWARDING to be set to 1. Additionally, defining this constant causes certain system tables (the ARP cache and the routing table) to be larger.
The value of this constant initializes the kernel variable subnetsarelocal. If 1 (default), a destination IP address with the same network ID as the sending host but a different subnet ID is considered local. If 0, only destination IP addresses on an attached subnet are considered local. This is summarized in Figure E.1.
This affects the MSS selected by TCP. When sending to local destinations, TCP chooses the MSS based on the MTU of the outgoing interface. When sending to nonlocal destinations, TCP uses the variable tcp_mssdflt as the MSS.
The value of this constant initializes the kernel variable ipsendredirects. If 1 (default), the host will send ICMP redirects when forwarding IP datagrams. If 0, ICMP redirects are not sent.
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.
The following variables can also be modified. These variables are spread throughout different files in the /usr/src/sys/netinet directory.
tcprexmtthresh | The number of consecutive ACKs that triggers the fast retransmit and fast recovery algorithm. The default value is 3. |
tcp_tt1 | The default value for the TTL field for TCP segments. Default value is 60. |
tcp_mssdflt | The default TCP MSS for nonlocal destinations. Default value is 512. |
tcp_keepidle | Number of 500-ms clock ticks before sending a keepalive probe. Default value is 14400 (2 hours). |
tcp_keepintvl | Number of 500-ms clock ticks between successive keepalive probes, when no response is received. Default value is 150 (75 seconds). |
tcp_sendspace | The default size of the TCP send buffer. Default value is 4096. |
tcp_recvspace | The default size of the TCP receive buffer. This affects the window size that is offered . Default value is 4096. |
udpcksum | If nonzero, UDP checksums are calculated for outgoing UDP datagrams, and incoming UDP datagrams containing nonzero checksums have their checksum verified . If 0, outgoing UDP datagrams do not contain a checksum, and no checksum verification is performed on incoming UDP datagrams, even if the sender calculated a checksum. Default is 1. |
udp_ttl | The default value for the TTL field in UDP datagrams. Default value is 30. |
udp_sendspace | The default size of the UDP send buffer. Defines the maximum UDP datagram that can be sent. Default is 9216. |
udp_recvspace | The default size of the UDP receive buffer. The default is 41600, allowing for 40 1024-byte datagrams. |