diff options
Diffstat (limited to 'icmp_server.h')
-rw-r--r-- | icmp_server.h | 32 |
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); |