femtoTCP/core.md

108 lines
5.7 KiB
Markdown
Raw Permalink Normal View History

2024-11-03 16:26:14 +01:00
# FemtoTCP
## Stack architecture
- No dynamic allocation (pre-allocated sockets and buffers)
- Four-steps main loop function
- Callback-based socket interface (allows implementing blocking BSD calls)
## Data structures
* Two types of circular buffers (fixed size):
- "fifo" : contains entire frames, including a descriptor.
- "queue" : contains pure data, indexed by byte. Used for TCP receive buffer
only.
* One binary heap for timers
### FemtoTCP fifo
```
+---------------------------------------------------------------------------------------------------------------------------+
| +-----+---+----+-----+------------------+-----+---+----+-----+------------------+ |
| | De | E | IP | TCP | Payload | De | E | IP | TCP | Payload | |
| | sc | T | | | | sc | T | | | | |
|* FREE SPACE * | ri | H | | | | ri | H | | | | * FREE SPACE* |
| | pt | | | | | pt | | | | | |
| | or | | | | | or | | | | | |
| +-----+---+----+-----+------------------+-----+---+----+-----+------------------+ |
+---------------------------------------------------------------------------------------------------------------------------+
^ ^
| |
| |
| |
|Tail Head|
```
### FemtoTCP queue
```
+--------------+--------------------------------------------+---------------------------------------------------------------+
| |*------------------------------------------*| |
| || || |
| || || |
|* FREE SPACE *|| DATA PAYLOAD || * FREE SPACE * |
| || || |
| || || |
| |*------------------------------------------*| |
+--------------+--------------------------------------------+---------------------------------------------------------------+
^ ^
| |
| |
| |
|Tail Head|
```
## Sockets
### TCP socket
```
+-------------+
|Main loop TX |
+-------------+
^
+----------------------------------+ |
| | +------+
| TCP Socket | |
| | |
| | |
| | |
| +-----------------------+
| +---------------+ | |
>DATA OUT==>>|socket send() |-->| TX buffer (fifo) |
| +---------------+ | |
| +-----------------------+
| |
| |
| |
| +-----------------------+
| +-------------+ | |
<DATA IN<<====|socket recv()|<---| RX buffer (queue) |
| +-------------+ | |
| +-----------------------+
+----------------------------------+ ^
|
|
|
+--------------+
| tcp_recv() |
+--------------+
```