梁超众
|
5012195bde
|
support ipv4 ToS and ipv6 TrafficClass
Signed-off-by: 梁超众 <liangchaozhong@xiaomi.com>
|
2023-01-29 13:43:44 +08:00 |
|
zhanghongyu
|
99c2d2009a
|
udp: remove DEBUGASSERT for ip6_is_ipv4addr
fix build break if enable CONFIG_NET_IPv6 only
Signed-off-by: zhanghongyu <zhanghongyu@xiaomi.com>
|
2023-01-28 09:04:29 +02:00 |
|
chao an
|
34d2cde8a8
|
net/l2/l3/l4: add support of iob offload
1. Add new config CONFIG_NET_LL_GUARDSIZE to isolation of l2 stack,
which will benefit l3(IP) layer for multi-MAC(l2) implementation,
especially in some NICs such as celluler net driver.
new configuration options: CONFIG_NET_LL_GUARDSIZE
CONFIG_NET_LL_GUARDSIZE will 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
------------------------------------------------------------
Layout of frist iob entry:
iob_data (aligned by CONFIG_IOB_ALIGNMENT)
|
| io_offset(CONFIG_NET_LL_GUARDSIZE)
| |
-------------------------------------------------
iob | Reserved | io_len |
-------------------------------------------------
-------------------------------------------------------------
Layout of different NICs implementation:
iob_data (aligned by CONFIG_IOB_ALIGNMENT)
|
| io_offset(CONFIG_NET_LL_GUARDSIZE)
| |
-------------------------------------------------
Ethernet | Reserved | ETH_HDRLEN | io_len |
---------------------------------|---------------
8021Q | Reserved | ETH_8021Q_HDRLEN | io_len |
---------------------------------|---------------
ipforward | Reserved | io_len |
-------------------------------------------------
--------------------------------------------------------------------
2. Support iob offload to l2 driver to avoid unnecessary memory copy
Support send/receive iob vectors directly between the NICs and l3/l4
stack to avoid unnecessary memory copies, especially on hardware that
supports Scatter/gather, which can greatly improve performance.
new interface to support iob offload:
------------------------------------------
| IOB version | original |
|----------------------------------------|
| devif_iob_poll() | devif_poll() |
| ... | ... |
------------------------------------------
--------------------------------------------------------------------
1> NIC hardware support Scatter/gather transfer
TX:
tcp_poll()/udp_poll()/pkt_poll()/...(l3|l4)
/ \
/ \
devif_poll_[l3|l4]_connections() devif_iob_send() (nocopy:udp/icmp/...)
/ \ (copy:tcp)
/ \
devif_iob_poll("NIC"_txpoll) callback() // "NIC"_txpoll
|
dev->d_iob: |
--------------- ---------------
io_data iob1 | | | iob3 | | |
\ --------------- ---------------
--------------- | --------------- |
iob0 | | | | iob2 | | | |
--------------- | --------------- |
\ | / /
\ | / /
----------------------------------------------
NICs io vector | | | | | | | | | |
----------------------------------------------
RX:
[tcp|udp|icmp|...]ipv[4|6]_data_handler()(iob_concat/append to readahead)
|
|
[tcp|udp|icmp|...]_ipv[4|6]_in()/...
|
|
pkt/ipv[4/6]_input()/...
|
|
NICs io vector receive(iov_base to each iobs)
--------------------------------------------------------------------
2> CONFIG_IOB_BUFSIZE is greater than MTU:
TX:
"(CONFIG_IOB_BUFSIZE) > (MAX_NETDEV_PKTSIZE + CONFIG_NET_GUARDSIZE + CONFIG_NET_LL_GUARDSIZE)"
tcp_poll()/udp_poll()/pkt_poll()/...(l3|l4)
/ \
/ \
devif_poll_[l3|l4]_connections() devif_iob_send() (nocopy:udp/icmp/...)
/ \ (copy:tcp)
/ \
devif_iob_poll("NIC"_txpoll) callback() // "NIC"_txpoll
|
"NIC"_send()
(dev->d_iob->io_data[CONFIG_NET_LL_GUARDSIZE - NET_LL_HDRLEN(dev)])
RX:
[tcp|udp|icmp|...]ipv[4|6]_data_handler()(iob_concat/append to readahead)
|
|
[tcp|udp|icmp|...]_ipv[4|6]_in()/...
|
|
pkt/ipv[4/6]_input()/...
|
|
NICs io vector receive(iov_base to io_data)
--------------------------------------------------------------------
3> Compatible with all old flat buffer NICs
TX:
tcp_poll()/udp_poll()/pkt_poll()/...(l3|l4)
/ \
/ \
devif_poll_[l3|l4]_connections() devif_iob_send() (nocopy:udp/icmp/...)
/ \ (copy:tcp)
/ \
devif_iob_poll(devif_poll_callback()) devif_poll_callback() /* new interface, gather iobs to flat buffer */
/ \
/ \
devif_poll("NIC"_txpoll) "NIC"_send()(dev->d_buf)
RX:
[tcp|udp|icmp|...]ipv[4|6]_data_handler()(iob_concat/append to readahead)
|
|
[tcp|udp|icmp|...]_ipv[4|6]_in()/...
|
|
netdev_input() /* new interface, Scatter/gather flat/iob buffer */
|
|
pkt/ipv[4|6]_input()/...
|
|
NICs io vector receive(Orignal flat buffer)
3. Iperf passthrough on NuttX simulator:
-------------------------------------------------
| Protocol | Server | Client | |
|-----------------------------------------------|
| TCP | 813 | 834 | Mbits/sec |
| TCP(Offload) | 1720 | 1100 | Mbits/sec |
| UDP | 22 | 757 | Mbits/sec |
| UDP(Offload) | 25 | 1250 | Mbits/sec |
-------------------------------------------------
Signed-off-by: chao an <anchao@xiaomi.com>
|
2022-12-03 11:47:04 +08:00 |
|
liyi
|
391b501639
|
net: extract l3 header build code into new functions
Signed-off-by: liyi <liyi25@xiaomi.com>
|
2022-11-29 18:36:15 +08:00 |
|
chao an
|
a8d3286258
|
net: move device buffer define to common header
Signed-off-by: chao an <anchao@xiaomi.com>
|
2022-10-28 00:32:16 -04:00 |
|
Petro Karashchenko
|
08043fb5bc
|
net: unify FAR keyword usage for all net buffer memory mapped buffers
Signed-off-by: Petro Karashchenko <petro.karashchenko@gmail.com>
|
2022-01-20 01:42:56 +08:00 |
|
Gregory Nutt
|
f6b00e1966
|
tools/nxstyle.c: Fix logic error that prevent detecion of '/' and '/=' as operators. net/: Minor updates resulting from testing tools/nxstyle.
|
2019-03-11 12:48:39 -06:00 |
|
Gregory Nutt
|
57f7677128
|
net/udp: Fix another related error in UDP condition compilatino (was actually using TCP setting, not UDP setting).
|
2018-03-30 15:30:45 -06:00 |
|
Gregory Nutt
|
b54ffe858a
|
Standardization of some function headers.
|
2018-03-13 09:52:27 -06:00 |
|
Gregory Nutt
|
7cf88d7dbd
|
Make sure that labeling is used consistently in all function headers.
|
2018-02-01 10:00:02 -06:00 |
|
Gregory Nutt
|
0b2a4eb4bd
|
Networking: A little more wording changes related to interrupts vs. events
|
2017-08-29 15:08:38 -06:00 |
|
Gregory Nutt
|
835ae2999d
|
networking: Move a little more to the inet/ subdirectory.
|
2017-08-07 13:03:23 -06:00 |
|
Gregory Nutt
|
43eb04bb8f
|
Without lowsyslog() *llinfo() is not useful. Eliminate and replace with *info().
|
2016-06-20 11:59:15 -06:00 |
|
Gregory Nutt
|
fc3540cffe
|
Replace all occurrences of vdbg with vinfo
|
2016-06-11 11:59:51 -06:00 |
|
Gregory Nutt
|
8db55f6493
|
Back out most of previous commit
|
2016-02-26 06:45:37 -06:00 |
|
Gregory Nutt
|
b0ea870bcc
|
Remove some empty code section comments
|
2016-02-25 18:34:36 -06:00 |
|
Gregory Nutt
|
0b441ff1f4
|
net/: Add basic IEEE 802.15-4 socket support
|
2016-02-25 14:01:22 -06:00 |
|
Gregory Nutt
|
0fb035f76b
|
Standardize some naming in code section comments
|
2016-02-21 18:09:04 -06:00 |
|
Gregory Nutt
|
6209c51206
|
net/: More clean-up of spacing/alignment issues
|
2015-10-08 15:10:04 -06:00 |
|
Gregory Nutt
|
cb9e27c3b0
|
Standardize naming used for public data and function groupings
|
2015-10-02 16:30:35 -06:00 |
|
Gregory Nutt
|
f20ac5ef93
|
Add inclusion of assert.h in networking files where needed to avoid compilation errors. From Max Neklyudov.
|
2015-05-13 07:24:22 -06:00 |
|
Gregory Nutt
|
686dcbb79c
|
Move some useful internal macros from udp_send.c and put them in ip.h where they can be used more generally
|
2015-02-17 07:08:11 -06:00 |
|
Gregory Nutt
|
eb8f5e548f
|
Purely cosmetic changes resulting from last review IPv6 UDP change
|
2015-02-16 15:23:02 -06:00 |
|
Gregory Nutt
|
3f5ff4b210
|
IPv4 mapping to IPv6 implementation. Just for UDP. From Macs Neklyudov
|
2015-02-16 14:33:58 -06:00 |
|
Gregory Nutt
|
f4bb7f14e1
|
Networking: Clean up network status collection and presentation for IPv6
|
2015-01-24 08:26:12 -06:00 |
|
Gregory Nutt
|
e5d1ff373b
|
Networking: IPv4 and IPv6 work together. This fixes a bug necessary to accomplish that as well as cleaning up a couple of other issues
|
2015-01-23 16:40:18 -06:00 |
|
Gregory Nutt
|
f4ce875711
|
Networking: Fix issues with UDP packet length and checksum calculations when IPv6 is selected
|
2015-01-23 09:33:18 -06:00 |
|
Gregory Nutt
|
adc91965ed
|
NSH library: Disable put and get commends of TFTP client is not enabled; disable wget command if web client is not enabled
|
2015-01-19 10:32:46 -06:00 |
|
Gregory Nutt
|
2842b5c5d6
|
Networking: Fix some problems with debug is enabled; fix a warning
|
2015-01-19 10:16:37 -06:00 |
|
Gregory Nutt
|
f7663ef0ab
|
Networking: Final detangle off IPv4 and IPv6 TCP/UDP send logic. The Networking subsystem now compiles with IPv6 enabled
|
2015-01-18 08:56:05 -06:00 |
|
Gregory Nutt
|
2663538b0a
|
Networking: Replace all references to the macros net_ipaddr_copy, net_ipaddr_hdrcopy, net_ipaddr_cmp, net_ipaddr_hdrcmp, and net_ipaddr_maskcmp with the appropriate IPv4 or IPv6 version of the macro (such as net_ipv4addr_copy). The goal is to support both IPv4 and IPv6 simultaneously. This requires that the macros be distinct and not conditionally defined to one on or the other.
|
2015-01-16 13:01:08 -06:00 |
|
Gregory Nutt
|
bee89be4f4
|
Networking: Drivers can have both IPv4 and IPv6 addesses, but a socket can only only one or the other; The socket connnection structures need to include a union of IPv4 and IPv6 addresses for the local address binding and for the remote address connections
|
2015-01-16 10:01:54 -06:00 |
|
Gregory Nutt
|
630366272a
|
Networking: Seperate tcp_input() and udp_input() into seprate functions tcp_ipv4_input(), tcp_ipv6_input(), udp_ipv4_input(), and upd_ipv6_input() than can deal will the data offsets caused by the differing sizes of the IP header.
|
2015-01-15 15:06:46 -06:00 |
|
Gregory Nutt
|
a49f0231d2
|
Networking: A few more IPv6-related fixes
|
2015-01-14 18:34:28 -06:00 |
|
Gregory Nutt
|
a7ce1279f9
|
Networking: (1) Copied all ICMP sources files to net/icmpv6 with proper renaming and removal of IPv4 logic, (2) remove IPv6 logic from files in net/icmp, (3) copied include/nuttx/icmp.h to icmpv6.h and removed IPv4 specific logic, (4) removed all IPv6 logic from icmp.h, (5) IP_HDRLEN became IPv4_HDRLEN and IPv6_HDRLEN, (6) ip_chksum() became ipv4_chksum() and ipv6_chksum(), and (7) added partial support for ICMPv6 statistics.
|
2015-01-14 16:10:38 -06:00 |
|
Gregory Nutt
|
2e55db369d
|
Network: All logic will now handle varialbe length link layer protocol headers within incoming packets. This permits use of multiple network interfaces with differing data links. For example, ETHERNET + SLIP
|
2014-11-15 13:13:23 -06:00 |
|
Gregory Nutt
|
c5fc24e110
|
NET: Standardize naming of all protocal header lengths
|
2014-07-05 13:04:48 -06:00 |
|
Gregory Nutt
|
60246e613b
|
NET: emoved all includes of uip.h; added includes of ip.h wherever needed. Tried to fix problems of the now missing sneak inclusions because uip.h was removed. There are probably a few of these that were missed.
|
2014-07-04 19:13:08 -06:00 |
|
Gregory Nutt
|
0bb153b8cb
|
Remove all inclusion of uip.h
|
2014-07-04 16:58:22 -06:00 |
|
Gregory Nutt
|
cce35ce975
|
NET: More renaming
|
2014-07-04 15:40:49 -06:00 |
|
Gregory Nutt
|
ad3e39e53d
|
NET: Rename uiphdr_ipaddr_copy to net_ipaddr_hdrcopy, uip_ip4addr_conv to net_ip4addr_conv32, and uip_ethaddr_cmp to eth_addr_cmp
|
2014-06-29 13:20:00 -06:00 |
|
Gregory Nutt
|
c362f21815
|
NET: Rename uip_ipaddr* to net_ipaddr*
|
2014-06-29 13:11:08 -06:00 |
|
Gregory Nutt
|
5790c94ba3
|
Rename net/uip to net/devif. Rename uip/uip.h to devif/devif.h
|
2014-06-28 18:07:02 -06:00 |
|
Gregory Nutt
|
50b749a636
|
Clean-up naming associated with network checksums
|
2014-06-27 17:51:32 -06:00 |
|
Gregory Nutt
|
fce2a79abd
|
Rename uip_driver_s net_driver_s
|
2014-06-27 16:48:12 -06:00 |
|
Gregory Nutt
|
e1091251e6
|
NET: Move statistcs from uip.h to new netstats.h to remove nasty circular inclusion problem.
|
2014-06-26 09:32:39 -06:00 |
|
Gregory Nutt
|
abf04708ce
|
Clean up all UDP-related naming
|
2014-06-24 18:55:01 -06:00 |
|
Gregory Nutt
|
5d1f8180d4
|
Move the remaining files from include/nuttx/net/uip to include/nuttx/net; Rename *_internal.h header files in net/ to just *.h
|
2014-06-24 10:14:15 -06:00 |
|
Gregory Nutt
|
37646044ac
|
Move include/nuttx/net/uip/uip-arch.h to include/nuttx/net/netdev.h
|
2014-06-24 09:28:44 -06:00 |
|
Gregory Nutt
|
626469e30c
|
Move include/nuttx/net/uipopt.h to include/nuttx/net/netconfig.h
|
2014-06-24 08:53:28 -06:00 |
|