diff options
Diffstat (limited to 'Documentation/networking/tcp.txt')
-rw-r--r-- | Documentation/networking/tcp.txt | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/Documentation/networking/tcp.txt b/Documentation/networking/tcp.txt new file mode 100644 index 000000000000..71749007091e --- /dev/null +++ b/Documentation/networking/tcp.txt | |||
@@ -0,0 +1,39 @@ | |||
1 | How the new TCP output machine [nyi] works. | ||
2 | |||
3 | |||
4 | Data is kept on a single queue. The skb->users flag tells us if the frame is | ||
5 | one that has been queued already. To add a frame we throw it on the end. Ack | ||
6 | walks down the list from the start. | ||
7 | |||
8 | We keep a set of control flags | ||
9 | |||
10 | |||
11 | sk->tcp_pend_event | ||
12 | |||
13 | TCP_PEND_ACK Ack needed | ||
14 | TCP_ACK_NOW Needed now | ||
15 | TCP_WINDOW Window update check | ||
16 | TCP_WINZERO Zero probing | ||
17 | |||
18 | |||
19 | sk->transmit_queue The transmission frame begin | ||
20 | sk->transmit_new First new frame pointer | ||
21 | sk->transmit_end Where to add frames | ||
22 | |||
23 | sk->tcp_last_tx_ack Last ack seen | ||
24 | sk->tcp_dup_ack Dup ack count for fast retransmit | ||
25 | |||
26 | |||
27 | Frames are queued for output by tcp_write. We do our best to send the frames | ||
28 | off immediately if possible, but otherwise queue and compute the body | ||
29 | checksum in the copy. | ||
30 | |||
31 | When a write is done we try to clear any pending events and piggy back them. | ||
32 | If the window is full we queue full sized frames. On the first timeout in | ||
33 | zero window we split this. | ||
34 | |||
35 | On a timer we walk the retransmit list to send any retransmits, update the | ||
36 | backoff timers etc. A change of route table stamp causes a change of header | ||
37 | and recompute. We add any new tcp level headers and refinish the checksum | ||
38 | before sending. | ||
39 | |||