summaryrefslogtreecommitdiff
path: root/icmp_server.h
diff options
context:
space:
mode:
Diffstat (limited to 'icmp_server.h')
-rw-r--r--icmp_server.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/icmp_server.h b/icmp_server.h
new file mode 100644
index 0000000..fbf4158
--- /dev/null
+++ b/icmp_server.h
@@ -0,0 +1,32 @@
+#pragma once
+
+#include "icmp.h"
+
+#ifndef ICMP_ECHO
+#define ICMP_ECHO 8
+#endif
+#ifndef ICMP_ECHOREPLY
+#define ICMP_ECHOREPLY 0
+#endif
+
+
+struct icmp_server_incoming {
+ const uint8_t *data; // points to internal buffer
+ size_t length; // length of 'data'
+
+ int type; // ICMP_ECHO or ICMP_ECHOREPLY
+ int id, seqnum;
+ uint32_t source_addr;
+};
+
+// Returns -1 on error with errno.
+int icmp_server_open_socket(void);
+
+// Returns {.data=NULL} on error with errno.
+struct icmp_server_incoming icmp_server_receive(int sock);
+
+// Returns -1 on error with errno.
+int icmp_server_send_reply(
+ int sock, uint32_t addr,
+ int id, int seqnum,
+ const void *data, size_t length);