22cd0d47fa
This makes the user interface a little hostile. People thing of an MTU of 1500 bytes, but the corresponding packet is really 1514 bytes (including the 14 byte Ethernet header). A more friendly solution would configure the MTU (as before), but then derive the packet buffer size by adding the MAC header length. Instead, we define the packet buffer size then derive the MTU. The MTU is not common currency in networking. On the wire, the only real issue is the MSS which is derived from MTU by subtracting the IP header and TCP header sizes (for the case of TCP). Now it is derived for the PKTSIZE by subtracting the IP header, the TCP header, and the MAC header sizes. So we should be all good and without the recurring 14 byte error in MTU's and MSS's. Squashed commit of the following: Trivial update to fix some spacing issues. net/: Rename several macros containing _MTU to _PKTSIZE. net/: Rename CONFIG_NET_SLIP_MTU to CONFIG_NET_SLIP_PKTSIZE and similarly for CONFIG_NET_TUN_MTU. These are not the MTU which does not include the size of the link layer header. These are the full size of the packet buffer memory (minus any GUARD bytes). net/: Rename CONFIG_NET_6LOWPAN_MTU to CONFIG_NET_6LOWPAN_PKTSIZE and similarly for CONFIG_NET_TUN_MTU. These are not the MTU which does not include the size of the link layer header. These are the full size of the packet buffer memory (minus any GUARD bytes). net/: Rename CONFIG_NET_ETH_MTU to CONFIG_NET_ETH_PKTSIZE. This is not the MTU which does not include the size of the link layer header. This is the full size of the packet buffer memory (minus any GUARD bytes). net/: Rename the file d_mtu in the network driver structure to d_pktsize. That value saved there is not the MTU. The packetsize is the memory large enough to hold the maximum packet PLUS the size of the link layer header. The MTU does not include the link layer header.
371 lines
9.7 KiB
Plaintext
371 lines
9.7 KiB
Plaintext
#
|
|
# For a description of the syntax of this configuration file,
|
|
# see the file kconfig-language.txt in the NuttX tools repository.
|
|
#
|
|
|
|
config ARCH_HAVE_NET
|
|
bool
|
|
default n
|
|
|
|
config ARCH_HAVE_PHY
|
|
bool
|
|
default n
|
|
|
|
config NET_WRITE_BUFFERS
|
|
bool
|
|
default n
|
|
|
|
config NET_READAHEAD
|
|
bool
|
|
default n
|
|
|
|
config NET
|
|
bool "Networking support"
|
|
default n
|
|
select ARCH_HAVE_NET
|
|
---help---
|
|
Enable or disable all network features
|
|
|
|
if NET
|
|
|
|
config NET_PROMISCUOUS
|
|
bool "Promiscuous mode"
|
|
default n
|
|
---help---
|
|
Force the Ethernet driver to operate in promiscuous mode (if supported
|
|
by the Ethernet driver).
|
|
|
|
menu "Driver buffer configuration"
|
|
|
|
config NET_ETH_PKTSIZE
|
|
int "Ethernet packet buffer size"
|
|
default 1294 if NET_IPv6
|
|
default 590 if !NET_IPv6
|
|
depends on NET_ETHERNET
|
|
range 590 1518
|
|
---help---
|
|
Packet buffer size. This size includes the TCP/UDP payload plus the
|
|
size of TCP/UDP header, the IP header, and the Ethernet header.
|
|
This value is related to the MTU (Maximum Transmission Unit), except
|
|
that it includes the size of the link layer header; the payload is
|
|
the MSS (Maximum Segment Size).
|
|
|
|
IPv4 hosts are required to be able to handle an MSS of at least
|
|
536 octets, resulting in a minimum buffer size of 536+20+20+14 =
|
|
590.
|
|
|
|
IPv6 hosts are required to be able to handle an MSS of 1220 octets,
|
|
resulting in a minimum buffer size of of 1220+20+40+14 = 1294
|
|
|
|
config NET_SLIP_PKTSIZE
|
|
int # "SLIP packet buffer size"
|
|
default 296
|
|
depends on NET_SLIP
|
|
range 296 1518
|
|
---help---
|
|
Provides the size of the SLIP packet buffers. This size includes
|
|
the TCP/UDP payload plus the size of TCP/UDP header and the IP header.
|
|
This value is related to the MTU (Maximum Transmission Unit), except
|
|
that it includes the size of the link layer header; the payload is
|
|
the MSS (Maximum Segment Size).
|
|
|
|
SLIP is required to support at least 256+20+20 = 296. Values other than
|
|
296 are not recommended.
|
|
|
|
The Linux slip module hard-codes its MTU size to 296 (40 bytes for
|
|
the IP+TPC headers plus 256 bytes of data). So you might as well
|
|
set CONFIG_NET_SLIP_PKTSIZE to 296 as well.
|
|
|
|
There may be an issue with this setting, however. I see that Linux
|
|
uses a MTU of 296 and window of 256, but actually only sends 168
|
|
bytes of data: 40 + 128. I believe that is to allow for the 2x
|
|
worst cast packet expansion. Ideally we would like to advertise the
|
|
256 MSS, but restrict transfers to 128 bytes (possibly by modifying
|
|
the MSS value in the TCP connection structure).
|
|
|
|
|
|
config NET_GUARDSIZE
|
|
int "Driver I/O guard size"
|
|
default 2
|
|
---help---
|
|
Network drivers often receive packets with garbage at the end and
|
|
are longer than the size of packet in the TCP header. The following
|
|
"fudge" factor increases the size of the I/O buffering by a small
|
|
amount to allocate slightly oversize packets. After receipt, the
|
|
packet size will be chopped down to the size indicated in the TCP
|
|
header.
|
|
|
|
endmenu # Driver buffer configuration
|
|
|
|
menu "Link layer support"
|
|
|
|
config NET_USER_DEVFMT
|
|
bool "User provided devfmt"
|
|
default n
|
|
depends on EXPERIMENTAL
|
|
---help---
|
|
netdev_register will get devfmt form d_ifname if it is initialized.
|
|
|
|
config NET_ETHERNET
|
|
bool "Ethernet support"
|
|
default y
|
|
---help---
|
|
If NET_SLIP is not selected, then Ethernet will be used (there is
|
|
no need to define anything special in the configuration file to use
|
|
Ethernet -- it is the default).
|
|
|
|
config NET_LOOPBACK
|
|
bool "Local loopback"
|
|
default n
|
|
---help---
|
|
Add support for the local network loopback device, lo.
|
|
|
|
menuconfig NET_SLIP
|
|
bool "SLIP support"
|
|
default n
|
|
---help---
|
|
Enables building of the SLIP driver. SLIP requires
|
|
at least one IP protocol selected.
|
|
|
|
SLIP supports point-to-point IP communications over a serial port.
|
|
The default data link layer for network layer is Ethernet. If
|
|
NET_SLIP is defined in the NuttX configuration file, then SLIP will
|
|
be supported. The basic differences between the SLIP and Ethernet
|
|
configurations is that when SLIP is selected:
|
|
|
|
* The link level header (that comes before the IP header) is omitted.
|
|
* All MAC address processing is suppressed.
|
|
* ARP is disabled.
|
|
|
|
If NET_SLIP is not selected, then Ethernet will be used (there is
|
|
no need to define anything special in the configuration file to use
|
|
Ethernet -- it is the default).
|
|
|
|
if NET_SLIP
|
|
|
|
config SLIP_NINTERFACES
|
|
int "Number of SLIP interfaces"
|
|
default 1
|
|
---help---
|
|
Selects the number of physical SLIP
|
|
interfaces to support.
|
|
Default: 1
|
|
|
|
config SLIP_STACKSIZE
|
|
int "SLIP stack size"
|
|
default 2048
|
|
---help---
|
|
Select the stack size of the SLIP RX and TX tasks. Default: 2048
|
|
|
|
config SLIP_DEFPRIO
|
|
int "SLIP priority"
|
|
default 128
|
|
---help---
|
|
The priority of the SLIP RX and TX tasks. Default: 128
|
|
|
|
endif # NET_SLIP
|
|
|
|
menuconfig NET_TUN
|
|
bool "TUN Virtual Network Device support"
|
|
default n
|
|
select ARCH_HAVE_NETDEV_STATISTICS
|
|
|
|
if NET_TUN
|
|
|
|
config TUN_NINTERFACES
|
|
int "Number of TUN interfaces"
|
|
default 1
|
|
range 1 8
|
|
---help---
|
|
Selects the number of TUN
|
|
interfaces to support.
|
|
Default: 1
|
|
|
|
config NET_TUN_PKTSIZE
|
|
int "TUN packet buffer size"
|
|
default 296
|
|
range 296 1518
|
|
|
|
choice
|
|
prompt "Work queue"
|
|
default LOOPBACK_LPWORK if SCHED_LPWORK
|
|
default TUN_HPWORK if !SCHED_LPWORK && SCHED_HPWORK
|
|
depends on SCHED_WORKQUEUE
|
|
---help---
|
|
Work queue support is required to use the TUN driver. If the
|
|
low priority work queue is available, then it should be used by the
|
|
TUN driver.
|
|
|
|
config TUN_HPWORK
|
|
bool "High priority"
|
|
depends on SCHED_HPWORK
|
|
|
|
config TUN_LPWORK
|
|
bool "Low priority"
|
|
depends on SCHED_LPWORK
|
|
|
|
endchoice # Work queue
|
|
endif # NET_TUN
|
|
|
|
config NET_USRSOCK
|
|
bool "User-space networking stack API"
|
|
default n
|
|
---help---
|
|
Enable or disable user-space networking stack support.
|
|
|
|
User-space networking stack API allows user-space daemon to
|
|
provide TCP/IP stack implementation for NuttX network.
|
|
|
|
Main use for this is to allow use and integration of
|
|
HW-provided TCP/IP stacks for NuttX.
|
|
|
|
For example, user-space daemon can translate /dev/usrsock API
|
|
requests to HW TCP/IP API requests while rest of the user-space
|
|
can access standard socket API, with socket descriptors that
|
|
can be used with NuttX system calls.
|
|
|
|
endmenu # Data link support
|
|
|
|
source "net/netdev/Kconfig"
|
|
|
|
menu "Internet Protocol Selection"
|
|
|
|
config NET_IPv4
|
|
bool "IPv4"
|
|
default y
|
|
---help---
|
|
Build in support for IPv4.
|
|
|
|
config NET_IPv4_REASSEMBLY
|
|
bool "IPv4 reassembly"
|
|
default n
|
|
depends on NET_IPv4 && EXPERIMENTAL && NET_ETHERNET
|
|
---help---
|
|
Enable support for IP packet reassembly of fragmented IP packets.
|
|
|
|
This features requires an additional amount of RAM to hold a single
|
|
reassembly buffer. The reassembly buffer is of the same size as the
|
|
MTU of the selected device.
|
|
|
|
REVISIT: There are multiple issues with the current implementation:
|
|
1. IPv4 reassembly in its current form is untested (and, hence,
|
|
depends on CONFIG_EXPERIMENTAL).
|
|
2. Currently this feature can only work with Ethernet due to internal
|
|
definitions that depend on Ethernet configuration settings (and,
|
|
hence, depends on CONFIG_NET_ETHERNET).
|
|
3. Since there is only a single reassembly buffer, IPv4 reassembly
|
|
cannot be used in a context where multiple network devices may be
|
|
concurrently re-assemblying packets.
|
|
|
|
if NET_IPv4_REASSEMBLY
|
|
|
|
config NET_IPv4_REASS_MAXAGE
|
|
int "IP fragment timeout"
|
|
default 200
|
|
---help---
|
|
The maximum time an IP fragment should wait in the reassembly buffer
|
|
before it is dropped. Units are deci-seconds, the range of the timer
|
|
is 8-bits. Default: 20 seconds.
|
|
|
|
endif # NET_IPv4_REASSEMBLY
|
|
|
|
config NET_IPv6
|
|
bool "IPv6"
|
|
default n
|
|
---help---
|
|
Build in support for IPv6.
|
|
|
|
source "net/neighbor/Kconfig"
|
|
|
|
menuconfig NET_6LOWPAN
|
|
bool "6LoWPAN support"
|
|
default n
|
|
select NETDEV_IOCTL
|
|
select NET_HAVE_STAR
|
|
depends on NET_IPv6
|
|
---help---
|
|
Enable support for Low power Wireless Personal Area Networking (6LoWPAN)
|
|
for IEEE 802.15.4 or other packet radios.
|
|
|
|
source "net/sixlowpan/Kconfig"
|
|
source "net/ipforward/Kconfig"
|
|
|
|
endmenu # Internet Protocol Selection
|
|
|
|
source "net/socket/Kconfig"
|
|
source "net/inet/Kconfig"
|
|
source "net/pkt/Kconfig"
|
|
source "net/local/Kconfig"
|
|
source "net/tcp/Kconfig"
|
|
source "net/udp/Kconfig"
|
|
source "net/bluetooth/Kconfig"
|
|
source "net/ieee802154/Kconfig"
|
|
source "net/icmp/Kconfig"
|
|
source "net/icmpv6/Kconfig"
|
|
source "net/igmp/Kconfig"
|
|
source "net/arp/Kconfig"
|
|
source "net/loopback/Kconfig"
|
|
source "net/procfs/Kconfig"
|
|
source "net/usrsock/Kconfig"
|
|
source "net/utils/Kconfig"
|
|
|
|
config NET_STATISTICS
|
|
bool "Collect network statistics"
|
|
default n
|
|
---help---
|
|
Network layer statistics on or off
|
|
|
|
config NET_HAVE_STAR
|
|
bool
|
|
default n
|
|
---help---
|
|
Automatically enabled if at least one selected L2 protocol supports
|
|
a STAR topology. In order to support the star topology, the L2
|
|
protocol must support relaying all packets to a well-known hub node.
|
|
|
|
menu "Network Topologies"
|
|
|
|
config NET_STAR
|
|
bool "Enable star topology"
|
|
default n
|
|
depends on NET_HAVE_STAR && NET_IPv6
|
|
---help---
|
|
Enable support for a star network topology.
|
|
|
|
NOTE: Currently only supported by 6LoWPAN.
|
|
NOTE: L2 forwarding only supported for IPv6.
|
|
|
|
choice
|
|
prompt "Node role"
|
|
depends on NET_STAR
|
|
default NET_STARPOINT
|
|
---help---
|
|
Specifies the role of this not in the star configuration.
|
|
|
|
config NET_STARPOINT
|
|
bool "Point node in star"
|
|
---help---
|
|
The node is a "point" in the star configuration and must send all
|
|
packets to the star hub node.
|
|
|
|
config NET_STARHUB
|
|
bool "Hub node of star"
|
|
select NET_IPFORWARD
|
|
---help---
|
|
This is the "hub" node in the star configurations. It will receive
|
|
packets packets from all "point" nodes and perform L2 forwarding of
|
|
the packets that are not destined for this node.
|
|
|
|
endchoice # Node role
|
|
endmenu # Network Topologies
|
|
|
|
source "net/route/Kconfig"
|
|
|
|
config NET_HOSTNAME
|
|
string "Host name for this device"
|
|
default ""
|
|
---help---
|
|
A unique name to identify device on the network
|
|
|
|
endif # NET
|