Added features that will be required for PXE UDP support.
[gpxe.git] / src / include / gpxe / udp.h
1 #ifndef _GPXE_UDP_H
2 #define _GPXE_UDP_H
3
4 /** @file
5  *
6  * UDP protocol
7  *
8  * This file defines the gPXE UDP API.
9  *
10  */
11
12 #include <stddef.h>
13 #include <gpxe/pkbuff.h>
14 #include <gpxe/tcpip.h>
15 #include <gpxe/if_ether.h>
16
17 /**
18  * UDP constants
19  */
20
21 #define UDP_MAX_HLEN    72
22 #define UDP_MAX_TXPKB   ETH_MAX_MTU
23 #define UDP_MIN_TXPKB   ETH_ZLEN
24
25 typedef uint16_t port_t;
26
27 /**
28  * A UDP header
29  */
30 struct udp_header {
31         port_t source_port;
32         port_t dest_port;
33         uint16_t len;
34         uint16_t chksum;
35 };
36
37 struct udp_connection;
38
39 /**
40  * UDP operations
41  *
42  */
43 struct udp_operations {
44         
45         /**
46          * Transmit data
47          *
48          * @v conn      UDP connection
49          * @v buf       Temporary data buffer
50          * @v len       Length of temporary data buffer
51          *
52          * The application may use the temporary data buffer to
53          * construct the data to be sent.  Note that merely filling
54          * the buffer will do nothing; the application must call
55          * udp_send() in order to actually transmit the data.  Use of
56          * the buffer is not compulsory; the application may call
57          * udp_send() on any block of data.
58          */
59         void ( * senddata ) ( struct udp_connection *conn, void *buf,
60                               size_t len );
61         /**
62          * New data received
63          *
64          * @v conn      UDP connection
65          * @v data      Data
66          * @v len       Length of data
67          */
68         int ( * newdata ) ( struct udp_connection *conn, void *data,
69                             size_t len, struct sockaddr_tcpip *st_src,
70                             struct sockaddr_tcpip *st_dest );
71 };
72
73 /**
74  * A UDP connection
75  *
76  */
77 struct udp_connection {
78        /** Address of the remote end of the connection */
79         struct sockaddr_tcpip peer;
80         /** Local port on which the connection receives packets */
81         port_t local_port;
82         /** Transmit buffer */
83         struct pk_buff *tx_pkb;
84         /** List of registered connections */
85         struct list_head list;
86         /** Operations table for this connection */
87         struct udp_operations *udp_op;
88 };
89
90 /*
91  * Functions provided to the application layer
92  */
93
94 extern int udp_bind ( struct udp_connection *conn, uint16_t local_port );
95 extern void udp_connect ( struct udp_connection *conn,
96                           struct sockaddr_tcpip *peer );
97 extern int udp_open ( struct udp_connection *conn, uint16_t local_port );
98 extern void udp_close ( struct udp_connection *conn );
99
100 extern int udp_senddata ( struct udp_connection *conn );
101 extern int udp_send ( struct udp_connection *conn,
102                       const void *data, size_t len );
103 extern int udp_sendto ( struct udp_connection *conn,
104                         struct sockaddr_tcpip *peer,
105                         const void *data, size_t len );
106
107 #endif /* _GPXE_UDP_H */