aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/include/gpxe/socket.h22
-rw-r--r--src/net/tcp.c2
-rw-r--r--src/net/udp.c2
3 files changed, 20 insertions, 6 deletions
diff --git a/src/include/gpxe/socket.h b/src/include/gpxe/socket.h
index d47369aa..9c7afb87 100644
--- a/src/include/gpxe/socket.h
+++ b/src/include/gpxe/socket.h
@@ -12,8 +12,15 @@
*
* @{
*/
-#define SOCK_STREAM 1 /**< Connection-based, reliable streams */
-#define SOCK_DGRAM 2 /**< Connectionless, unreliable streams */
+
+/** Connection-based, reliable streams */
+#define SOCK_STREAM ( ( int ) TCP_SOCK_STREAM )
+extern char TCP_SOCK_STREAM[];
+
+/** Connectionless, unreliable streams */
+#define SOCK_DGRAM ( ( int ) UDP_SOCK_DGRAM )
+extern char UDP_SOCK_DGRAM[];
+
/** @} */
/**
@@ -24,10 +31,13 @@
*/
static inline __attribute__ (( always_inline )) const char *
socket_semantics_name ( int semantics ) {
- switch ( semantics ) {
- case SOCK_STREAM: return "SOCK_STREAM";
- case SOCK_DGRAM: return "SOCK_DGRAM";
- default: return "SOCK_UNKNOWN";
+ /* Cannot use a switch() because of the {TCP_UDP}_SOCK_XXX hack */
+ if ( semantics == SOCK_STREAM ) {
+ return "SOCK_STREAM";
+ } else if ( semantics == SOCK_DGRAM ) {
+ return "SOCK_DGRAM";
+ } else {
+ return "SOCK_UNKNOWN";
}
}
diff --git a/src/net/tcp.c b/src/net/tcp.c
index 00c7b742..ebfaaa4a 100644
--- a/src/net/tcp.c
+++ b/src/net/tcp.c
@@ -973,6 +973,8 @@ struct socket_opener tcp_socket_opener __socket_opener = {
.open = tcp_open,
};
+char TCP_SOCK_STREAM[1];
+
/**
* Open TCP URI
*
diff --git a/src/net/udp.c b/src/net/udp.c
index c99a3eb6..c6216d8f 100644
--- a/src/net/udp.c
+++ b/src/net/udp.c
@@ -436,6 +436,8 @@ struct socket_opener udp_socket_opener __socket_opener = {
.open = udp_open,
};
+char UDP_SOCK_DGRAM[1];
+
/**
* Open UDP URI
*