Partial migration of UDP to data-xfer interface. (Will not link at
[people/pcmattman/gpxe.git] / src / include / gpxe / udp.h
index 0ca77b4..cb0e44e 100644 (file)
@@ -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 */
+