2e6d0815b2
RFC 1191 When a router is unable to forward a datagram because it exceeds the MTU of the next-hop network and its Don't Fragment bit is set, the router is required to return an ICMP Destination Unreachable message to the source of the datagram, with the Code indicating "fragmentation needed and DF set". To support the Path MTU Discovery technique specified in this memo, the router MUST include the MTU of that next-hop network in the low-order 16 bits of the ICMP header field that is labelled "unused" in the ICMP specification [7]. The high-order 16 bits remain unused, and MUST be set to zero. Thus, the message has the following format: 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type = 3 | Code = 4 | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | unused = 0 | Next-Hop MTU | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Internet Header + 64 bits of Original Datagram Data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ RFC 1185 Packet Too Big Message 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Code | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | MTU | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | As much of invoking packet | + as will fit without the ICMPv6 packet + | exceeding 576 octets | IPv6 Fields: Destination Address Copied from the Source Address field of the invoking packet. ICMPv6 Fields: Type 2 Code 0 MTU The Maximum Transmission Unit of the next-hop link. Description A Packet Too Big MUST be sent by a router in response to a packet that it cannot forward because the packet is larger than the MTU of the outgoing link. The information in this message is used as part of the Path MTU Discovery process [RFC-1191]. Signed-off-by: wangchen <wangchen41@xiaomi.com>
279 lines
8.0 KiB
Plaintext
279 lines
8.0 KiB
Plaintext
#
|
|
# For a description of the syntax of this configuration file,
|
|
# see the file kconfig-language.txt in the NuttX tools repository.
|
|
#
|
|
|
|
menu "ICMPv6 Networking Support"
|
|
|
|
config NET_ICMPv6
|
|
bool "Enable ICMPv6 networking"
|
|
default n
|
|
depends on NET
|
|
---help---
|
|
Enable minimal ICMPv6 support. Includes built-in support
|
|
for sending replies to received ECHO (ping) requests.
|
|
|
|
config NET_ICMPv6_NO_STACK
|
|
bool "Disable ICMPv6 stack"
|
|
default n
|
|
select NET_ICMPv6
|
|
---help---
|
|
Build without ICMPv6 stack even if ICMPv6 networking support enabled.
|
|
|
|
if NET_ICMPv6 && !NET_ICMPv6_NO_STACK
|
|
|
|
config NET_ICMPv6_PMTU_ENTRIES
|
|
int "PMTUD ICMPv6 pmtu entry"
|
|
default 0
|
|
---help---
|
|
The number of the ICMPv6 pmtu entry
|
|
|
|
config NET_ICMPv6_PMTU_TIMEOUT
|
|
int "PMTUD ICMPv6 pmtu entry timeout (Time Unit:minute)"
|
|
default 10
|
|
depends on NET_ICMPv6_PMTU_ENTRIES != 0
|
|
---help---
|
|
The timout of the ICMPv6 pmtu entry
|
|
|
|
config NET_ICMPv6_SOCKET
|
|
bool "IPPROTO_ICMP6 socket support"
|
|
default n
|
|
select MM_IOB
|
|
---help---
|
|
Enable support for IPPROTO_ICMP6 sockets. These sockets are needed
|
|
for application level support for sending ICMPv7 ECHO requests and
|
|
receiving associated ICMPv6 ECHO replies.
|
|
|
|
config NET_ICMPv6_NEIGHBOR
|
|
bool "Solicit destination addresses"
|
|
default n
|
|
---help---
|
|
Enable logic to send ICMPv6 neighbor solicitation requests if
|
|
the target IPv6 address mapping does not appear in the Neighbor
|
|
table.
|
|
|
|
if NET_ICMPv6_NEIGHBOR
|
|
|
|
config ICMPv6_NEIGHBOR_MAXTRIES
|
|
int "ICMPv6 neighbor solicitation retries"
|
|
default 5
|
|
---help---
|
|
Send the Neighbor solicitation this number of times before giving
|
|
up and deciding that the target IP6 address is non reachable.
|
|
|
|
config ICMPv6_NEIGHBOR_DELAYMSEC
|
|
int "ICMPv6 neighbor re-solicit delay"
|
|
default 20
|
|
---help---
|
|
Wait this number of milliseconds after sending the Neighbor
|
|
Solicitation before checking if the IPv6 address mapping is present
|
|
in the Neighbor Table. This time should be related to the maximum
|
|
round trip time on the network since it is basically the time from
|
|
when an Neighbor Solicitation is sent until the Neighbor
|
|
Advertisement is received.
|
|
|
|
endif # NET_ICMPv6_NEIGHBOR
|
|
|
|
config NET_ICMPv6_AUTOCONF
|
|
bool "ICMPv6 auto-configuration"
|
|
default n
|
|
---help---
|
|
Enable ioctl() logic that implements ICMPv6 auto configuration.
|
|
ICMPv6 auto configuration is an alternative to DHCPv6 for obtaining
|
|
an IPv6 address from a router.
|
|
|
|
if NET_ICMPv6_AUTOCONF
|
|
|
|
config ICMPv6_AUTOCONF_MAXTRIES
|
|
int "ICMPv6 router solicitation retries"
|
|
default 5
|
|
---help---
|
|
Send the Router solicitation this number of times before giving
|
|
up and deciding that no router is going to provide an IP address.
|
|
|
|
config ICMPv6_AUTOCONF_DELAYMSEC
|
|
int "ICMPv6 router re-solicit delay"
|
|
default 20
|
|
---help---
|
|
Wait this number of milliseconds before re-sending the Router
|
|
Solicitation. This time should be related to the maximum
|
|
round trip time on the network since it is basically the time from
|
|
when an Router Solicitation is sent until the Router
|
|
Advertisement is received.
|
|
|
|
config ICMPv6_AUTOCONF_RDNSS
|
|
bool "ICMPv6 handle RDNSS field in router advertise"
|
|
default n
|
|
---help---
|
|
Handle the RDNSS field in the Router Advertisement and add it to
|
|
netdb DNS Server.
|
|
|
|
endif # NET_ICMPv6_AUTOCONF
|
|
|
|
config NET_ICMPv6_ROUTER
|
|
bool "Router Advertisement"
|
|
default n
|
|
---help---
|
|
In a router-less environment, NuttX can be configured to provide a
|
|
response to Router Solicitation messages and, hence, providing
|
|
addressing to IPv6 nodes on the network.
|
|
|
|
if NET_ICMPv6_ROUTER
|
|
|
|
config NET_ICMPv6_ROUTER_MANUAL
|
|
bool "Manual router prefix"
|
|
default n
|
|
---help---
|
|
Select this to set the advertised router prefix manually. Otherwise, it
|
|
will be derived from the device IPv6 address and prefix length set in
|
|
the netdev structure.
|
|
|
|
if NET_ICMPv6_ROUTER_MANUAL
|
|
|
|
config NET_ICMPv6_PREFLEN
|
|
int "Prefix length"
|
|
default 64
|
|
range 0 128
|
|
---help---
|
|
The length (in bits) of the IPv6 address prefix. This is the number
|
|
of MS bits under the network mask. The default of 64 would
|
|
correspond to a network mask of:
|
|
|
|
0xffff:0xffff:0xffff:0xffff:0x0000:0x0000:0x0000:0x0000.
|
|
|
|
comment "Router Prefix"
|
|
|
|
config NET_ICMPv6_PREFIX_1
|
|
hex "[0]"
|
|
default 0xfc00
|
|
range 0x0 0xffff
|
|
---help---
|
|
This the IPv6 address prefix that will be provided in the IPv6 Router
|
|
Advertisement message. This is the first of the 8-values. The
|
|
default for all eight values is fc00::0.
|
|
|
|
config NET_ICMPv6_PREFIX_2
|
|
hex "[1]"
|
|
default 0x0000
|
|
range 0x0 0xffff
|
|
---help---
|
|
This the IPv6 address prefix that will be provided in the IPv6 Router
|
|
Advertisement message. This is the second of the 8-values. The
|
|
default for all eight values is fc00::0.
|
|
|
|
config NET_ICMPv6_PREFIX_3
|
|
hex "[2]"
|
|
default 0x0000
|
|
range 0x0 0xffff
|
|
---help---
|
|
This the IPv6 address prefix that will be provided in the IPv6 Router
|
|
Advertisement message. This is the third of the 8-values. The
|
|
default for all eight values is fc00::0.
|
|
|
|
config NET_ICMPv6_PREFIX_4
|
|
hex "[3]"
|
|
default 0x0000
|
|
range 0x0 0xffff
|
|
---help---
|
|
This the IPv6 address prefix that will be provided in the IPv6 Router
|
|
Advertisement message. This is the fourth of the 8-values. The
|
|
default for all eight values is fc00::0.
|
|
|
|
config NET_ICMPv6_PREFIX_5
|
|
hex "[4]"
|
|
default 0x0000
|
|
range 0x0 0xffff
|
|
---help---
|
|
This the IPv6 address prefix that will be provided in the IPv6 Router
|
|
Advertisement message. This is the fifth of the 8-values. The
|
|
default for all eight values is fc00::0.
|
|
|
|
config NET_ICMPv6_PREFIX_6
|
|
hex "[5]"
|
|
default 0x0000
|
|
range 0x0 0xffff
|
|
---help---
|
|
This the IPv6 address prefix that will be provided in the IPv6 Router
|
|
Advertisement message. This is the sixth of the 8-values. The
|
|
default for all eight values is fc00::0.
|
|
|
|
config NET_ICMPv6_PREFIX_7
|
|
hex "[6]"
|
|
default 0x0000
|
|
range 0x0 0xffff
|
|
---help---
|
|
This the IPv6 address prefix that will be provided in the IPv6 Router
|
|
Advertisement message. This is the seventh of the 8-values. The
|
|
default for all eight values is fc00::0.
|
|
|
|
config NET_ICMPv6_PREFIX_8
|
|
hex "[7]"
|
|
default 0x0000
|
|
range 0x0 0xffff
|
|
---help---
|
|
This the IPv6 address prefix that will be provided in the IPv6 Router
|
|
Advertisement message. This is the last of the 8-values. The
|
|
default for all eight values is fc00::0.
|
|
|
|
config NET_ICMPv6_ROUTER_RDNSS
|
|
bool "Fill the RDNSS into Router Advertisement"
|
|
default n
|
|
---help---
|
|
Fill the RDNSS from the netdb DNS Server into the Router
|
|
Advertisement.
|
|
|
|
endif # NET_ICMPv6_ROUTER_MANUAL
|
|
endif # NET_ICMPv6_ROUTER
|
|
|
|
if NET_ICMPv6_SOCKET
|
|
|
|
config NET_ICMPv6_PREALLOC_CONNS
|
|
int "Preallocated ICMPv6 packet sockets"
|
|
default 4
|
|
---help---
|
|
Number of ICMPv6 connections (all tasks).
|
|
|
|
This number of connections will be pre-allocated during system boot.
|
|
If dynamic connections allocation is enabled, more connections may
|
|
be allocated at a later time, as the system needs them. Else this
|
|
will be the maximum number of connections available to the system
|
|
at all times.
|
|
|
|
Set to 0 to disable (and rely only on dynamic allocations).
|
|
|
|
config NET_ICMPv6_ALLOC_CONNS
|
|
int "Dynamic ICMPv6 connections allocation"
|
|
default 0
|
|
---help---
|
|
Dynamic memory allocations for ICMPv6.
|
|
|
|
When set to 0 all dynamic allocations are disabled.
|
|
|
|
When set to 1 a new connection will be allocated every time,
|
|
and it will be free'd when no longer needed.
|
|
|
|
Setting this to 2 or more will allocate the connections in
|
|
batches (with batch size equal to this config). When a
|
|
connection is no longer needed, it will be returned to the
|
|
free connections pool, and it will never be deallocated!
|
|
|
|
config NET_ICMPv6_MAX_CONNS
|
|
int "Maximum number of ICMPv6 connections"
|
|
default 0
|
|
depends on NET_ICMPv6_ALLOC_CONNS > 0
|
|
---help---
|
|
If dynamic connections allocation is selected (NET_ICMPv6_ALLOC_CONNS > 0)
|
|
this will limit the number of connections that can be allocated.
|
|
|
|
This is useful in case the system is under very heavy load (or
|
|
under attack), ensuring that the heap will not be exhausted.
|
|
|
|
config NET_ICMPv6_NPOLLWAITERS
|
|
int "Number of ICMPv6 poll waiters"
|
|
default 1
|
|
|
|
endif # NET_ICMPv6_SOCKET
|
|
|
|
endif # NET_ICMPv6 && !NET_ICMPv6_NO_STACK
|
|
endmenu # ICMPv6 Networking Support
|