Skip to main content

libc/new/apple/xnu/netinet/
tcp.rs

1//! Header: `netinet/tcp.h`
2//!
3//! <https://github.com/apple-oss-distributions/xnu/blob/main/bsd/netinet/tcp.h>
4
5use crate::prelude::*;
6
7// TCP header flags. These are numbered as if `th_x2` and `th_flags` were one
8// field, with `th_flags` as the low octet, so `TH_AE` (0x100) and `TH_ACE`
9// (which spans both) do not fit in `th_flags` alone.
10pub const TH_FIN: c_int = 0x01;
11pub const TH_SYN: c_int = 0x02;
12pub const TH_RST: c_int = 0x04;
13pub const TH_PUSH: c_int = 0x08;
14pub const TH_ACK: c_int = 0x10;
15pub const TH_URG: c_int = 0x20;
16pub const TH_ECE: c_int = 0x40;
17pub const TH_CWR: c_int = 0x80;
18pub const TH_AE: c_int = 0x100;
19
20pub const TH_FLAGS: c_int = TH_FIN | TH_SYN | TH_RST | TH_ACK | TH_URG | TH_ECE | TH_CWR;
21pub const TH_FLAGS_ALL: c_int = TH_FLAGS | TH_PUSH;
22pub const TH_ACCEPT: c_int = TH_FIN | TH_SYN | TH_RST | TH_ACK;
23pub const TH_ACE: c_int = TH_AE | TH_CWR | TH_ECE;
24
25// TCP option kinds and their lengths.
26pub const TCPOPT_EOL: c_int = 0;
27pub const TCPOLEN_EOL: c_int = 1;
28pub const TCPOPT_NOP: c_int = 1;
29pub const TCPOLEN_NOP: c_int = 1;
30pub const TCPOPT_MAXSEG: c_int = 2;
31pub const TCPOLEN_MAXSEG: c_int = 4;
32pub const TCPOPT_WINDOW: c_int = 3;
33pub const TCPOLEN_WINDOW: c_int = 3;
34/// SACK capability in SYN.
35pub const TCPOPT_SACK_PERMITTED: c_int = 4;
36pub const TCPOLEN_SACK_PERMITTED: c_int = 2;
37pub const TCPOPT_SACK: c_int = 5;
38pub const TCPOLEN_SACKHDR: c_int = 2;
39/// Length of one SACK block.
40pub const TCPOLEN_SACK: c_int = 8;
41pub const TCPOPT_TIMESTAMP: c_int = 8;
42pub const TCPOLEN_TIMESTAMP: c_int = 10;
43/// RFC 1323 appendix A.
44pub const TCPOLEN_TSTAMP_APPA: c_int = TCPOLEN_TIMESTAMP + 2;
45pub const TCPOPT_TSTAMP_HDR: c_int =
46    (TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) | (TCPOPT_TIMESTAMP << 8) | TCPOLEN_TIMESTAMP;
47
48/// Absolute maximum TCP options length.
49pub const MAX_TCPOPTLEN: c_int = 40;
50
51/// CC options: RFC 1644.
52pub const TCPOPT_CC: c_int = 11;
53pub const TCPOPT_CCNEW: c_int = 12;
54pub const TCPOPT_CCECHO: c_int = 13;
55pub const TCPOLEN_CC: c_int = 6;
56pub const TCPOLEN_CC_APPA: c_int = TCPOLEN_CC + 2;
57
58/// Keyed MD5: RFC 2385.
59pub const TCPOPT_SIGNATURE: c_int = 19;
60pub const TCPOLEN_SIGNATURE: c_int = 18;
61
62pub const TCPOPT_FASTOPEN: c_int = 34;
63pub const TCPOLEN_FASTOPEN_REQ: c_int = 2;
64
65/// AccECN order 0.
66pub const TCPOPT_ACCECN0: c_int = 172;
67/// AccECN order 1.
68pub const TCPOPT_ACCECN1: c_int = 174;
69/// Empty option contains kind and length.
70pub const TCPOLEN_ACCECN_EMPTY: c_int = 2;
71/// Length of each AccECN counter.
72pub const TCPOLEN_ACCECN_COUNTER: c_int = 3;
73
74pub const TCPOPT_SACK_PERMIT_HDR: c_int =
75    (TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) | (TCPOPT_SACK_PERMITTED << 8) | TCPOLEN_SACK_PERMITTED;
76pub const TCPOPT_SACK_HDR: c_int = (TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) | (TCPOPT_SACK << 8);
77
78/// Maximum number of SACK blocks stored at the sender.
79///
80/// Constants may change across releases. See the [usage guidelines](crate#usage-guidelines)
81/// for details.
82pub const MAX_SACK_BLKS: c_int = 6;
83/// Maximum number of SACKs sent in any segment.
84pub const TCP_MAX_SACK: c_int = 4;