diff options
author | Michael Brown | 2007-04-28 22:56:24 +0200 |
---|---|---|
committer | Michael Brown | 2007-04-28 22:56:24 +0200 |
commit | ff1222a8d3b9e0196eefb17ddde21dc7bc5be43a (patch) | |
tree | 101e1d471f061121d09189e410243e5b251179f8 /src/include/gpxe/open.h | |
parent | Added PF_INET[6] and SOCK_{STREAM,DGRAM} definitions and debug (diff) | |
download | ipxe-ff1222a8d3b9e0196eefb17ddde21dc7bc5be43a.tar.gz ipxe-ff1222a8d3b9e0196eefb17ddde21dc7bc5be43a.tar.xz ipxe-ff1222a8d3b9e0196eefb17ddde21dc7bc5be43a.zip |
Preliminary support for opening data-transfer interfaces
Diffstat (limited to 'src/include/gpxe/open.h')
-rw-r--r-- | src/include/gpxe/open.h | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/src/include/gpxe/open.h b/src/include/gpxe/open.h new file mode 100644 index 00000000..8839dc28 --- /dev/null +++ b/src/include/gpxe/open.h @@ -0,0 +1,81 @@ +#ifndef _GPXE_OPEN_H +#define _GPXE_OPEN_H + +/** @file + * + * Data transfer interface opening + * + */ + +#include <gpxe/tables.h> + +struct xfer_interface; +struct uri; +struct sockaddr; + +/** Location types */ +enum { + /** Location is a URI string + * + * Parameter list for open() is: + * + * const char *uri_string; + */ + LOCATION_URI = 1, + /** Location is a socket + * + * Parameter list for open() is: + * + * + */ + LOCATION_SOCKET, +}; + +/** A URI opener */ +struct uri_opener { + /** URI protocol name + * + * This is the "scheme" portion of the URI, e.g. "http" or + * "file". + */ + const char *scheme; + /** Open URI + * + * @v xfer Data-transfer interface + * @v uri URI + * @ret rc Return status code + * + * This method takes ownership of the URI structure, and is + * responsible for eventually calling free_uri(). + */ + int ( * open ) ( struct xfer_interface *xfer, struct uri *uri ); +}; + +/** Register a URI opener */ +#define __uri_opener __table ( struct uri_opener, uri_openers, 01 ) + +/** A socket opener */ +struct socket_opener { + /** Communication domain (e.g. PF_INET) */ + int domain; + /** Communication semantics (e.g. SOCK_STREAM) */ + int type; + /** Open socket + * + * @v xfer Data-transfer interface + * @v sa Socket address + * @ret rc Return status code + */ + int ( * open ) ( struct xfer_interface *xfer, struct sockaddr *sa ); +}; + +/** Register a socket opener */ +#define __socket_opener __table ( struct socket_opener, socket_openers, 01 ) + +extern int open_uri ( struct xfer_interface *xfer, const char *uri_string ); +extern int open_socket ( struct xfer_interface *xfer, + int domain, int type, struct sockaddr *sa ); +extern int vopen ( struct xfer_interface *xfer, int type, va_list args ); +extern int open ( struct xfer_interface *xfer, int type, ... ); + +#endif /* _GPXE_OPEN_H */ |