mirror of
https://github.com/ipxe/ipxe
synced 2026-04-16 03:00:10 +03:00
Updated PXE UDP implementation to use the new Etherboot UDP API.
Updated PXE API dispatcher to use copy_{to,from}_user, and moved to
arch/i386 since the implementation is quite architecture-dependent.
(The individual PXE API calls can be largely
architecture-independent.)
This commit is contained in:
@@ -64,6 +64,9 @@ struct udp_operations {
|
||||
* @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,
|
||||
@@ -92,8 +95,10 @@ struct udp_connection {
|
||||
*/
|
||||
|
||||
extern int udp_bind ( struct udp_connection *conn, uint16_t local_port );
|
||||
extern void udp_bind_promisc ( struct udp_connection *conn );
|
||||
extern void udp_connect ( struct udp_connection *conn,
|
||||
struct sockaddr_tcpip *peer );
|
||||
extern void udp_connect_promisc ( struct udp_connection *conn );
|
||||
extern int udp_open ( struct udp_connection *conn, uint16_t local_port );
|
||||
extern void udp_close ( struct udp_connection *conn );
|
||||
|
||||
|
||||
@@ -3,8 +3,13 @@
|
||||
|
||||
#include "pxe_types.h"
|
||||
#include "pxe_api.h"
|
||||
#include "etherboot.h"
|
||||
#include "tftp.h"
|
||||
|
||||
/* Parameter block for pxenv_unknown() */
|
||||
struct s_PXENV_UNKNOWN {
|
||||
PXENV_STATUS_t Status; /**< PXE status code */
|
||||
} PACKED;
|
||||
|
||||
typedef struct s_PXENV_UNKNOWN PXENV_UNKNOWN_t;
|
||||
|
||||
/* Union used for PXE API calls; we don't know the type of the
|
||||
* structure until we interpret the opcode. Also, Status is available
|
||||
@@ -14,6 +19,7 @@
|
||||
union u_PXENV_ANY {
|
||||
/* Make it easy to read status for any operation */
|
||||
PXENV_STATUS_t Status;
|
||||
struct s_PXENV_UNKNOWN unknown;
|
||||
struct s_PXENV_UNLOAD_STACK unload_stack;
|
||||
struct s_PXENV_GET_CACHED_INFO get_cached_info;
|
||||
struct s_PXENV_TFTP_READ_FILE restart_tftp;
|
||||
@@ -81,29 +87,11 @@ typedef enum {
|
||||
typedef struct pxe_stack {
|
||||
struct s_PXE pxe __attribute__ ((aligned(16)));
|
||||
struct s_PXENV pxenv __attribute__ ((aligned(16)));
|
||||
pxe_stack_state_t state;
|
||||
union {
|
||||
BOOTPLAYER_t cached_info;
|
||||
char packet[ETH_FRAME_LEN];
|
||||
struct {
|
||||
uint32_t magic_cookie;
|
||||
unsigned int len;
|
||||
int eof;
|
||||
char data[TFTP_MAX_BLKSIZE];
|
||||
} tftpdata;
|
||||
struct {
|
||||
char *buffer;
|
||||
uint32_t offset;
|
||||
uint32_t bufferlen;
|
||||
} readfile;
|
||||
};
|
||||
struct {} arch_data __attribute__ ((aligned(16)));
|
||||
pxe_stack_state_t state;
|
||||
} pxe_stack_t;
|
||||
|
||||
extern int ensure_pxe_state ( pxe_stack_state_t wanted );
|
||||
|
||||
extern pxe_stack_t *pxe_stack;
|
||||
|
||||
extern PXENV_EXIT_t pxe_api_call ( int opcode, union u_PXENV_ANY *any );
|
||||
|
||||
#endif /* PXE_H */
|
||||
|
||||
Reference in New Issue
Block a user