diff options
Diffstat (limited to 'src/include')
| -rw-r--r-- | src/include/gpxe/udp.h | 147 |
1 files changed, 12 insertions, 135 deletions
diff --git a/src/include/gpxe/udp.h b/src/include/gpxe/udp.h index 0ca77b4d6..cb0e44ebe 100644 --- a/src/include/gpxe/udp.h +++ b/src/include/gpxe/udp.h @@ -14,7 +14,8 @@ #include <gpxe/tcpip.h> #include <gpxe/if_ether.h> -struct net_device; +struct xfer_interface; +struct sockaddr; /** * UDP constants @@ -24,147 +25,23 @@ struct net_device; #define UDP_MAX_TXIOB ETH_MAX_MTU #define UDP_MIN_TXIOB ETH_ZLEN -typedef uint16_t port_t; - /** * A UDP header */ struct udp_header { - port_t source_port; - port_t dest_port; + /** Source port */ + uint16_t src; + /** Destination port */ + uint16_t dest; + /** Length */ uint16_t len; + /** Checksum */ uint16_t chksum; }; -struct udp_connection; - -/** - * UDP operations - * - */ -struct udp_operations { - - /** - * Transmit data - * - * @v conn UDP connection - * @v buf Temporary data buffer - * @v len Length of temporary data buffer - * @ret rc Return status code - * - * The application may use the temporary data buffer to - * construct the data to be sent. Note that merely filling - * the buffer will do nothing; the application must call - * udp_send() in order to actually transmit the data. Use of - * the buffer is not compulsory; the application may call - * udp_send() on any block of data. - */ - int ( * senddata ) ( struct udp_connection *conn, void *buf, - size_t len ); - /** - * New data received - * - * @v conn UDP connection - * @v data Data - * @v len Length of data - * @v st_src Source address - * @v st_dest Destination address - * @ret rc Return status code - */ - int ( * newdata ) ( struct udp_connection *conn, void *data, - size_t len, struct sockaddr_tcpip *st_src, - struct sockaddr_tcpip *st_dest ); -}; - -/** - * A UDP connection - * - */ -struct udp_connection { - /** Address of the remote end of the connection */ - struct sockaddr_tcpip peer; - /** Local port on which the connection receives packets */ - port_t local_port; - /** Transmit buffer */ - struct io_buffer *tx_iob; - /** List of registered connections */ - struct list_head list; - /** Operations table for this connection */ - struct udp_operations *udp_op; -}; - -/* - * Functions provided to the application layer - */ - -/** - * Bind UDP connection to all local ports - * - * @v conn UDP connection - * - * A promiscuous UDP connection will receive packets with any - * destination UDP port. This is required in order to support the PXE - * UDP API. - * - * If the promiscuous connection is not the only UDP connection, the - * behaviour is undefined. - */ -static inline void udp_bind_promisc ( struct udp_connection *conn ) { - conn->local_port = 0; -} - -/** - * Connect UDP connection to remote host and port - * - * @v conn UDP connection - * @v peer Destination socket address - * - * This function sets the default address for transmitted packets, - * i.e. the address used when udp_send() is called rather than - * udp_sendto(). - */ -static inline void udp_connect ( struct udp_connection *conn, - struct sockaddr_tcpip *peer ) { - memcpy ( &conn->peer, peer, sizeof ( conn->peer ) ); -} - -/** - * Connect UDP connection to remote port - * - * @v conn UDP connection - * @v port Destination port - * - * This function sets only the port part of the default address for - * transmitted packets. - */ -static inline void udp_connect_port ( struct udp_connection *conn, - uint16_t port ) { - conn->peer.st_port = port; -} - -/** - * Get default address for transmitted packets - * - * @v conn UDP connection - * @ret peer Default destination socket address - */ -static inline struct sockaddr_tcpip * -udp_peer ( struct udp_connection *conn ) { - return &conn->peer; -} - -extern int udp_bind ( struct udp_connection *conn, uint16_t local_port ); -extern int udp_open ( struct udp_connection *conn, uint16_t local_port ); -extern void udp_close ( struct udp_connection *conn ); - -extern int udp_senddata ( struct udp_connection *conn ); -extern int udp_send ( struct udp_connection *conn, - const void *data, size_t len ); -extern int udp_sendto ( struct udp_connection *conn, - struct sockaddr_tcpip *peer, - const void *data, size_t len ); -int udp_sendto_via ( struct udp_connection *conn, struct sockaddr_tcpip *peer, - struct net_device *netdev, const void *data, - size_t len ); +extern int udp_open_promisc ( struct xfer_interface *xfer ); +extern int udp_open ( struct xfer_interface *xfer, struct sockaddr *peer, + struct sockaddr *local ); #endif /* _GPXE_UDP_H */ + |
