XenevaOS
Loading...
Searching...
No Matches
tcp.h
Go to the documentation of this file.
1
30#ifndef __TCP_H__
31#define __TCP_H__
32
33#include <list.h>
34#include <Net/socket.h>
35#include <Net/ipv4.h>
36#include <Net/ipv6.h>
37#include <Fs/vfs.h>
38
39#define TCP_FLAGS_FIN (1<<0)
40#define TCP_FLAGS_SYN (1<<1)
41#define TCP_FLAGS_RST (1<<2)
42#define TCP_FLAGS_PSH (1<<3)
43#define TCP_FLAGS_ACK (1<<4)
44#define TCP_FLAGS_URG (1<<5)
45#define TCP_FLAGS_ECE (1<<6)
46#define TCP_FLAGS_CWR (1<<7)
47#define TCP_FLAGS_NS (1<<8)
48#define TCP_DATA_OFFSET_5 (0x5 << 12)
49
50#define TCP_DEFAULT_WIN_SZ 65535
51#define TCP_MSS 1460
52/* One TLS record is at most 16384 bytes plus a 5-byte header (RFC 8446).
53 * The buffer has to hold that while the reader is still pulling the
54 * previous record. The advertised window itself stays 16 bits (RFC 9293). */
55#define TCP_RX_BUF_SZ 65536
56
57#define TCP_STATE_CLOSED 0
58#define TCP_STATE_LISTEN 1
59#define TCP_STATE_SYN_SENT 2
60#define TCP_STATE_SYN_RECEIVED 3
61#define TCP_STATE_ESTABLISHED 4
62#define TCP_STATE_FIN_WAIT_1 5
63#define TCP_STATE_FIN_WAIT_2 6
64#define TCP_STATE_CLOSE_WAIT 7
65#define TCP_STATE_CLOSING 8
66#define TCP_STATE_LAST_ACK 9
67#define TCP_STATE_TIME_WAIT 10
68
69#if defined(ARCH_X64) || defined(ARCH_ARM64)
70#pragma pack(push,1)
71#endif
72typedef struct _tcphead_ {
73 unsigned short srcPort;
74 unsigned short destPort;
75 unsigned sequenceNum;
76 unsigned ackNum;
77 unsigned short dataOffsetFlags;
78 unsigned short window;
79 unsigned short checksum;
80 unsigned short urgentPointer;
82#if defined(ARCH_X64) || defined(ARCH_ARM64)
83#pragma pack(pop)
84#endif
85
112
113/*
114* CreateTCPSocket -- creates a new TCP Socket
115*/
116extern int CreateTCPSocket();
117
118/*
119 * TCPGetSocketList -- return the current socket
120 * list of TCP
121 */
122extern list_t* TCPGetSocketList();
123
124/*
125 * AuTCPAcknowledge -- send ack packets
126 * @param nic -- Pointer to NIC device
127 * @param sock -- Pointer to session socket
128 * @param ippack -- Pointer to IPv4 packet
129 * @param payloadLen -- length of the payload
130*/
131extern int AuTCPAcknowledge(AuVFSNode* nic, AuSocket* sock, IPv4Header* ippack, size_t payloadLen);
132
133/*
134 * TCPHandlePacket -- dispatch an incoming TCP segment
135 */
136extern void TCPHandlePacket(IPv4Header* pack, AuVFSNode* nic);
137
138/*
139 * TCPHandlePacket6 -- dispatch an incoming TCP segment over IPv6
140 */
141extern void TCPHandlePacket6(IPv6Header* pack, AuVFSNode* nic);
142
143/*
144 * TCPProtocolInstall -- initialize the TCP protocol
145 */
146extern void TCPProtocolInstall();
147
148#endif
unsigned int uint32_t
Definition acefiex.h:163
unsigned char uint8_t
Definition acefiex.h:161
COMPILER_DEPENDENT_UINT64 uint64_t
Definition acefiex.h:165
unsigned short int uint16_t
Definition acefiex.h:162
AuVFSNode * nic
Definition e1000.cpp:67
Definition vfs.h:129
Definition ipv6.h:45
Definition ipv4.h:36
Definition ipv6.h:49
Definition list.h:46
Definition socket.h:110
Definition tcp.h:86
struct _socket_ * parent
Definition tcp.h:103
uint8_t * rxmem
Definition tcp.h:105
uint16_t rcv_wnd
Definition tcp.h:99
int backlog
Definition tcp.h:101
uint32_t irs
Definition tcp.h:91
uint8_t syn_tries
Definition tcp.h:110
uint16_t snd_wnd
Definition tcp.h:98
uint64_t syn_sec
Definition tcp.h:108
void * rxbuf
Definition tcp.h:104
AuVFSNode * nic
Definition tcp.h:102
uint32_t iss
Definition tcp.h:90
uint32_t snd_nxt
Definition tcp.h:93
uint64_t syn_sub
Definition tcp.h:109
uint8_t state
Definition tcp.h:87
uint32_t rcv_nxt
Definition tcp.h:94
uint8_t fin_recvd
Definition tcp.h:88
ip6_addr remote_ip6
Definition tcp.h:96
uint16_t mss
Definition tcp.h:100
uint32_t remote_ip
Definition tcp.h:95
uint16_t remote_port
Definition tcp.h:97
uint8_t is_ipv6
Definition tcp.h:89
uint32_t snd_una
Definition tcp.h:92
list_t * acceptq
Definition tcp.h:106
Definition tcp.h:72
unsigned short urgentPointer
Definition tcp.h:80
unsigned short window
Definition tcp.h:78
unsigned short srcPort
Definition tcp.h:73
unsigned short checksum
Definition tcp.h:79
unsigned short destPort
Definition tcp.h:74
unsigned ackNum
Definition tcp.h:76
unsigned sequenceNum
Definition tcp.h:75
unsigned short dataOffsetFlags
Definition tcp.h:77
void TCPHandlePacket6(IPv6Header *pack, AuVFSNode *nic)
Definition tcp.c:1205
struct _tcphead_ TCPHeader
int CreateTCPSocket()
Definition tcp.cpp:345
list_t * TCPGetSocketList()
Definition tcp.cpp:379
void TCPHandlePacket(IPv4Header *pack, AuVFSNode *nic)
Definition tcp.c:1077
void TCPProtocolInstall()
Definition tcp.cpp:386
struct _tcp_pcb_ TCPControlBlock
int AuTCPAcknowledge(AuVFSNode *nic, AuSocket *sock, IPv4Header *ippack, size_t payloadLen)
Definition tcp.cpp:161