2e27698d6c
This is a refactored version of the SLIP network driver. Updates include: 1. The original design started two kernel threads per SLIP device. The refactored version uses file_poll to essentially be driven by the UART RX and TX interrupts and pushes work to the low priority work queue. 2. The SLIP byte un-/stuffing is more efficient now, using memcpy instead of handling each byte individually. 3. The switch of the old SLIP driver to IOBs caused buffer overwrites if packets were sent that would not fit into a single IOB. This is fixed now. Signed-off-by: Michael Jung <michael.jung@secore.ly>
398 lines
11 KiB
Plaintext
398 lines
11 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 ARCH_PHY_INTERRUPT
|
|
bool
|
|
default n
|
|
|
|
config ARCH_PHY_POLLED
|
|
bool
|
|
default n
|
|
|
|
config ARCH_HAVE_NETDEV_STATISTICS
|
|
bool
|
|
default n
|
|
|
|
config NET_WRITE_BUFFERS
|
|
bool
|
|
default n
|
|
select MM_IOB
|
|
|
|
config NET_READAHEAD
|
|
bool
|
|
default n
|
|
select MM_IOB
|
|
|
|
config NET_MCASTGROUP
|
|
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
|
|
range 1294 1518 if NET_IPv6
|
|
range 590 1518 if !NET_IPv6
|
|
depends on NET_ETHERNET
|
|
---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 1220+20+40+14 = 1294
|
|
|
|
To get an MTU of 1500, for example, you would need packet buffer of
|
|
size 1514.
|
|
|
|
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 has no link layer header so for
|
|
SLIP the MTU is the same as the PKTSIZE.
|
|
|
|
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+TCP 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.
|
|
|
|
config NET_LL_GUARDSIZE
|
|
int "Data Link Layer(L2) Guard size of Network buffer(IOB)"
|
|
default 16 if NET_CAN && NET_TIMESTAMP
|
|
default 14 if NET_ETHERNET
|
|
default 0
|
|
---help---
|
|
This is reserved l2 buffer header size of network buffer to isolate
|
|
the L2/L3 (MAC/IP) data on Network layer, which will be beneficial
|
|
to L3 network layer protocol transparent transmission and forwarding
|
|
|
|
config NET_RECV_BUFSIZE
|
|
int "Net Receive buffer size"
|
|
default 0
|
|
---help---
|
|
This is the default value for receive buffer size.
|
|
|
|
config NET_SEND_BUFSIZE
|
|
int "Net Send buffer size"
|
|
depends on NET_TCP_WRITE_BUFFERS || NET_UDP_WRITE_BUFFERS
|
|
default 0
|
|
---help---
|
|
This is the default value for send buffer size.
|
|
|
|
endmenu # Driver buffer configuration
|
|
|
|
menu "Link layer support"
|
|
|
|
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_CELLULAR
|
|
bool "Cellular Link support"
|
|
default n
|
|
---help---
|
|
Add support for the cellular network device. Unlike Ethernet, cellular
|
|
network transmit pure IP packets.
|
|
|
|
config NET_LOOPBACK
|
|
bool "Local loopback"
|
|
select ARCH_HAVE_NETDEV_STATISTICS
|
|
default n
|
|
---help---
|
|
Add support for the local network loopback device, lo.
|
|
|
|
config NET_LOOPBACK_PKTSIZE
|
|
int "Loopback packet buffer size"
|
|
default 0
|
|
depends on NET_LOOPBACK
|
|
range 0 65535
|
|
---help---
|
|
The loopback driver packet buffer should be quite large. The larger
|
|
the loopback packet buffer, the better will be TCP performance of
|
|
the loopback transfers. The Linux loopback device historically used
|
|
packet buffers of size 16Kb, but that was increased in recent Linux
|
|
versions to 64Kb. Those sizes may be excessive for resource
|
|
constrained MCUs, however.
|
|
|
|
The network enforces a lower limit that is the maximum packet size
|
|
of all enabled link layer protocols. The default value of
|
|
CONFIG_NET_LOOPBACK_PKTSIZE is zero, meaning that this maximum
|
|
packet size will be used by loopback driver.
|
|
|
|
menuconfig NET_MBIM
|
|
bool "MBIM modem support"
|
|
depends on USBHOST_CDCMBIM
|
|
default n
|
|
|
|
menuconfig NET_SLIP
|
|
bool "SLIP support"
|
|
select ARCH_HAVE_NETDEV_STATISTICS
|
|
depends on NET_IPv4
|
|
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 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 NET_SLIP_NINTERFACES
|
|
int "Number of SLIP interfaces"
|
|
default 1
|
|
---help---
|
|
Selects the number of physical SLIP
|
|
interfaces to support.
|
|
Default: 1
|
|
|
|
endif # NET_SLIP
|
|
|
|
menuconfig NET_TUN
|
|
bool "TUN Virtual Network Device support"
|
|
default n
|
|
depends on ALLOW_BSD_COMPONENTS
|
|
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
|
|
---help---
|
|
Provides the size of the TUN 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). TUN has no link layer header so for
|
|
TUN the MTU is the same as the PKTSIZE.
|
|
|
|
endif # NET_TUN
|
|
|
|
config NETDEV_LATEINIT
|
|
bool "Late driver initialization"
|
|
default n
|
|
---help---
|
|
Normally, networking initialization occur in the later phase of the
|
|
boot process in the function up_initialize() when it calls the
|
|
driver initialization function, up_netinitialize(). This
|
|
initialization occurs after a sufficient amount of the OS has been
|
|
initialized so that driver registration can be performed, but
|
|
before the completion of OS initialization and before the first
|
|
application is started.
|
|
|
|
In a few situations, however, you may want to suppress this early
|
|
network driver initialization. As examples:
|
|
|
|
- If you are using SLIP or PPPD, then there will be no network
|
|
driver to be initialized,
|
|
- Certain multi-network configurations where a simple call to
|
|
up_netinitialize() may be insufficient, and
|
|
- Situations where there are other board-level hardware
|
|
dependencies so that the hardware is not in an appropriate
|
|
state for up_netinitialize() to be called.
|
|
|
|
Examples of this latter situation include such things as network
|
|
drivers that required some setup via an I2C I/O expander, or network
|
|
drivers that depend on USB, SPI, I2C, PCI, serial, or other
|
|
interfaces that may not be ready when up_netinitialize() is normally
|
|
called.
|
|
|
|
endmenu # Link layer support
|
|
|
|
source "net/netdev/Kconfig"
|
|
|
|
menu "Internet Protocol Selection"
|
|
|
|
config NET_IPv4
|
|
bool "IPv4"
|
|
default y
|
|
---help---
|
|
Build in support for IPv4.
|
|
|
|
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"
|
|
source "net/nat/Kconfig"
|
|
source "net/netfilter/Kconfig"
|
|
source "net/ipfrag/Kconfig"
|
|
|
|
endmenu # Internet Protocol Selection
|
|
|
|
source "net/socket/Kconfig"
|
|
source "net/inet/Kconfig"
|
|
source "net/pkt/Kconfig"
|
|
source "net/local/Kconfig"
|
|
source "net/rpmsg/Kconfig"
|
|
source "net/can/Kconfig"
|
|
source "net/netlink/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/mld/Kconfig"
|
|
source "net/igmp/Kconfig"
|
|
source "net/arp/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"
|
|
|
|
endif # NET
|