summaryrefslogtreecommitdiff
path: root/libhw_generic
diff options
context:
space:
mode:
Diffstat (limited to 'libhw_generic')
-rw-r--r--libhw_generic/CMakeLists.txt1
-rw-r--r--libhw_generic/include/libhw/generic/net.h2
-rw-r--r--libhw_generic/net.c31
3 files changed, 34 insertions, 0 deletions
diff --git a/libhw_generic/CMakeLists.txt b/libhw_generic/CMakeLists.txt
index 9c88937..0356770 100644
--- a/libhw_generic/CMakeLists.txt
+++ b/libhw_generic/CMakeLists.txt
@@ -12,4 +12,5 @@ target_link_libraries(libhw_generic INTERFACE
target_sources(libhw_generic INTERFACE
alarmclock.c
+ net.c
)
diff --git a/libhw_generic/include/libhw/generic/net.h b/libhw_generic/include/libhw/generic/net.h
index a016d51..0f9872e 100644
--- a/libhw_generic/include/libhw/generic/net.h
+++ b/libhw_generic/include/libhw/generic/net.h
@@ -23,6 +23,8 @@
#define NET_ECLOSED 6
#define NET_EMSGSIZE 7
+const char *net_strerror(int net_errno);
+
/* Address types **************************************************************/
struct net_ip4_addr {
diff --git a/libhw_generic/net.c b/libhw_generic/net.c
new file mode 100644
index 0000000..e2785ae
--- /dev/null
+++ b/libhw_generic/net.c
@@ -0,0 +1,31 @@
+/* libhw_generic/net.c - Device-independent <libhw/generic/net.h> utilities
+ *
+ * Copyright (C) 2024 Luke T. Shumaker <lukeshu@lukeshu.com>
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+#include <libmisc/assert.h>
+
+#include <libhw/generic/net.h>
+
+#define NET_EOTHER 1
+#define NET_EARP_TIMEOUT 2
+#define NET_EACK_TIMEOUT 3
+#define NET_ERECV_TIMEOUT 4
+#define NET_ETHREAD 5
+#define NET_ECLOSED 6
+#define NET_EMSGSIZE 7
+
+const char *net_strerror(int net_errno) {
+ switch (net_errno) {
+ case NET_EOTHER: return "unknown error";
+ case NET_EARP_TIMEOUT: return "ARP timeout";
+ case NET_EACK_TIMEOUT: return "TCP ACK timeout";
+ case NET_ERECV_TIMEOUT: return "receive timeout";
+ case NET_ETHREAD: return "thread error";
+ case NET_ECLOSED: return "already closed";
+ case NET_EMSGSIZE: return "message too long";
+ default:
+ assert_notreached("invalid net_errno");
+ }
+}