summaryrefslogtreecommitdiffstats
path: root/src/include/gpxe/open.h
diff options
context:
space:
mode:
authorMichael Brown2007-04-28 22:56:24 +0200
committerMichael Brown2007-04-28 22:56:24 +0200
commitff1222a8d3b9e0196eefb17ddde21dc7bc5be43a (patch)
tree101e1d471f061121d09189e410243e5b251179f8 /src/include/gpxe/open.h
parentAdded PF_INET[6] and SOCK_{STREAM,DGRAM} definitions and debug (diff)
downloadipxe-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.h81
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 */