mirror of
https://github.com/ipxe/ipxe
synced 2025-12-29 11:03:15 +03:00
Moved uIP wrapper out of prototester.c and into proto/tcp.c.
This commit is contained in:
102
src/include/gpxe/tcp.h
Normal file
102
src/include/gpxe/tcp.h
Normal file
@@ -0,0 +1,102 @@
|
||||
#ifndef _TCP_H
|
||||
#define _TCP_H
|
||||
|
||||
/** @file
|
||||
*
|
||||
* TCP protocol
|
||||
*
|
||||
* This file defines the gPXE TCP API.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stddef.h>
|
||||
#include <gpxe/in.h>
|
||||
|
||||
struct tcp_connection;
|
||||
|
||||
/**
|
||||
* TCP operations
|
||||
*
|
||||
*/
|
||||
struct tcp_operations {
|
||||
/**
|
||||
* Connection aborted (RST received)
|
||||
*
|
||||
* @v conn TCP connection
|
||||
*/
|
||||
void ( * aborted ) ( struct tcp_connection *conn );
|
||||
/**
|
||||
* Connection timed out
|
||||
*
|
||||
* @v conn TCP connection
|
||||
*/
|
||||
void ( * timedout ) ( struct tcp_connection *conn );
|
||||
/**
|
||||
* Connection aborted (FIN received)
|
||||
*
|
||||
* @v conn TCP connection
|
||||
*
|
||||
* Note that acked() and newdata() may be called after
|
||||
* closed(), if the packet containing the FIN also
|
||||
* acknowledged data or contained new data.
|
||||
*/
|
||||
void ( * closed ) ( struct tcp_connection *conn );
|
||||
/**
|
||||
* Connection established (SYNACK received)
|
||||
*
|
||||
* @v conn TCP connection
|
||||
*/
|
||||
void ( * connected ) ( struct tcp_connection *conn );
|
||||
/**
|
||||
* Data acknowledged
|
||||
*
|
||||
* @v conn TCP connection
|
||||
* @v len Length of acknowledged data
|
||||
*
|
||||
* @c len is guaranteed to not exceed the outstanding amount
|
||||
* of unacknowledged data.
|
||||
*/
|
||||
void ( * acked ) ( struct tcp_connection *conn, size_t len );
|
||||
/**
|
||||
* New data received
|
||||
*
|
||||
* @v conn TCP connection
|
||||
* @v data Data
|
||||
* @v len Length of data
|
||||
*/
|
||||
void ( * newdata ) ( struct tcp_connection *conn,
|
||||
void *data, size_t len );
|
||||
/**
|
||||
* Transmit data
|
||||
*
|
||||
* @v conn TCP connection
|
||||
*
|
||||
* The application should transmit whatever it currently wants
|
||||
* to send using tcp_send(). If retransmissions are required,
|
||||
* senddata() will be called again and the application must
|
||||
* regenerate the data. The easiest way to implement this is
|
||||
* to ensure that senddata() never changes the application's
|
||||
* state.
|
||||
*/
|
||||
void ( * senddata ) ( struct tcp_connection *conn );
|
||||
};
|
||||
|
||||
/**
|
||||
* A TCP connection
|
||||
*
|
||||
*/
|
||||
struct tcp_connection {
|
||||
/** Address of the remote end of the connection */
|
||||
struct sockaddr_in sin;
|
||||
/** Operations table for this connection */
|
||||
struct tcp_operations *tcp_op;
|
||||
};
|
||||
|
||||
extern int tcp_connect ( struct tcp_connection *conn );
|
||||
extern void tcp_send ( struct tcp_connection *conn, const void *data,
|
||||
size_t len );
|
||||
extern void tcp_close ( struct tcp_connection *conn );
|
||||
extern void init_tcpip ( void );
|
||||
extern void run_tcpip ( void );
|
||||
|
||||
#endif /* _TCP_H */
|
||||
Reference in New Issue
Block a user