david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

Add udp_sendto_via() to allow e.g. DHCP to transmit without first having

to set up dummy routing entries.
This commit is contained in:
Michael Brown 2007-01-10 02:31:38 +00:00
parent f008b77ba2
commit c821a7b20d
2 changed files with 30 additions and 3 deletions

View File

@ -14,6 +14,8 @@
#include <gpxe/tcpip.h>
#include <gpxe/if_ether.h>
struct net_device;
/**
* UDP constants
*/
@ -161,5 +163,8 @@ extern int udp_send ( struct udp_connection *conn,
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 );
#endif /* _GPXE_UDP_H */

View File

@ -115,6 +115,7 @@ int udp_senddata ( struct udp_connection *conn ) {
*
* @v conn UDP connection
* @v peer Destination address
* @v netdev Net device via which to send (or NULL)
* @v data Data to send
* @v len Length of data
* @ret rc Return status code
@ -125,8 +126,9 @@ int udp_senddata ( struct udp_connection *conn ) {
* call udp_senddata() and wait for its senddata() method to be
* called.
*/
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 ) {
struct udp_header *udphdr;
struct pk_buff *pkb;
@ -162,7 +164,27 @@ int udp_sendto ( struct udp_connection *conn, struct sockaddr_tcpip *peer,
ntohs ( udphdr->len ) );
/* Send it to the next layer for processing */
return tcpip_tx ( pkb, &udp_protocol, peer, NULL, &udphdr->chksum );
return tcpip_tx ( pkb, &udp_protocol, peer, netdev, &udphdr->chksum );
}
/**
* Transmit data via a UDP connection to a specified address
*
* @v conn UDP connection
* @v peer Destination address
* @v data Data to send
* @v len Length of data
* @ret rc Return status code
*
* This function fills up the UDP headers and sends the data. It may
* be called only from within the context of an application's
* senddata() method; if the application wishes to send data it must
* call udp_senddata() and wait for its senddata() method to be
* called.
*/
int udp_sendto ( struct udp_connection *conn, struct sockaddr_tcpip *peer,
const void *data, size_t len ) {
return udp_sendto_via ( conn, peer, NULL, data, len );
}
/**