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#define TCP_RX_BUF_SZ 16384
53
54#define TCP_STATE_CLOSED 0
55#define TCP_STATE_LISTEN 1
56#define TCP_STATE_SYN_SENT 2
57#define TCP_STATE_SYN_RECEIVED 3
58#define TCP_STATE_ESTABLISHED 4
59#define TCP_STATE_FIN_WAIT_1 5
60#define TCP_STATE_FIN_WAIT_2 6
61#define TCP_STATE_CLOSE_WAIT 7
62#define TCP_STATE_CLOSING 8
63#define TCP_STATE_LAST_ACK 9
64#define TCP_STATE_TIME_WAIT 10
65
66#if defined(ARCH_X64) || defined(ARCH_ARM64)
67#pragma pack(push,1)
68#endif
69typedef struct _tcphead_ {
70 unsigned short srcPort;
71 unsigned short destPort;
72 unsigned sequenceNum;
73 unsigned ackNum;
74 unsigned short dataOffsetFlags;
75 unsigned short window;
76 unsigned short checksum;
77 unsigned short urgentPointer;
79#if defined(ARCH_X64) || defined(ARCH_ARM64)
80#pragma pack(pop)
81#endif
82
105
106/*
107* CreateTCPSocket -- creates a new TCP Socket
108*/
109extern int CreateTCPSocket();
110
111/*
112 * TCPGetSocketList -- return the current socket
113 * list of TCP
114 */
115extern list_t* TCPGetSocketList();
116
117/*
118 * AuTCPAcknowledge -- send ack packets
119 * @param nic -- Pointer to NIC device
120 * @param sock -- Pointer to session socket
121 * @param ippack -- Pointer to IPv4 packet
122 * @param payloadLen -- length of the payload
123*/
124extern int AuTCPAcknowledge(AuVFSNode* nic, AuSocket* sock, IPv4Header* ippack, size_t payloadLen);
125
126/*
127 * TCPHandlePacket -- dispatch an incoming TCP segment
128 */
129extern void TCPHandlePacket(IPv4Header* pack, AuVFSNode* nic);
130
131/*
132 * TCPHandlePacket6 -- dispatch an incoming TCP segment over IPv6
133 */
134extern void TCPHandlePacket6(IPv6Header* pack, AuVFSNode* nic);
135
136/*
137 * TCPProtocolInstall -- initialize the TCP protocol
138 */
139extern void TCPProtocolInstall();
140
141#endif
unsigned int uint32_t
Definition acefiex.h:163
unsigned char uint8_t
Definition acefiex.h:161
unsigned short int uint16_t
Definition acefiex.h:162
AuVFSNode * nic
Definition e1000.cpp:67
Definition vfs.h:98
Definition ipv6.h:45
Definition ipv4.h:36
Definition ipv6.h:49
Definition list.h:46
Definition socket.h:105
Definition tcp.h:83
struct _socket_ * parent
Definition tcp.h:100
uint8_t * rxmem
Definition tcp.h:102
uint16_t rcv_wnd
Definition tcp.h:96
int backlog
Definition tcp.h:98
uint32_t irs
Definition tcp.h:88
uint16_t snd_wnd
Definition tcp.h:95
void * rxbuf
Definition tcp.h:101
AuVFSNode * nic
Definition tcp.h:99
uint32_t iss
Definition tcp.h:87
uint32_t snd_nxt
Definition tcp.h:90
uint8_t state
Definition tcp.h:84
uint32_t rcv_nxt
Definition tcp.h:91
uint8_t fin_recvd
Definition tcp.h:85
ip6_addr remote_ip6
Definition tcp.h:93
uint16_t mss
Definition tcp.h:97
uint32_t remote_ip
Definition tcp.h:92
uint16_t remote_port
Definition tcp.h:94
uint8_t is_ipv6
Definition tcp.h:86
uint32_t snd_una
Definition tcp.h:89
list_t * acceptq
Definition tcp.h:103
Definition tcp.h:69
unsigned short urgentPointer
Definition tcp.h:77
unsigned short window
Definition tcp.h:75
unsigned short srcPort
Definition tcp.h:70
unsigned short checksum
Definition tcp.h:76
unsigned short destPort
Definition tcp.h:71
unsigned ackNum
Definition tcp.h:73
unsigned sequenceNum
Definition tcp.h:72
unsigned short dataOffsetFlags
Definition tcp.h:74
void TCPHandlePacket6(IPv6Header *pack, AuVFSNode *nic)
Definition tcp.c:1090
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:962
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