aboutsummaryrefslogtreecommitdiff
path: root/src/ppkt.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/ppkt.h')
-rw-r--r--src/ppkt.h31
1 files changed, 17 insertions, 14 deletions
diff --git a/src/ppkt.h b/src/ppkt.h
index 5772fe8..029e73b 100644
--- a/src/ppkt.h
+++ b/src/ppkt.h
@@ -7,13 +7,14 @@
#define PTUNNEL_MAGIC 0xdeadc0de
-#define U8_PTYPE_AUTH_REQUEST 0x01u
-#define U8_PTYPE_AUTH_RESPONSE 0x02u
+#define PTUNNAL_MAX_BODY_SIZE (1500 - sizeof(struct iphdr) \
+ - sizeof(struct icmphdr) \
+ - sizeof(struct ppkt_header))
enum ptype {
PTYPE_INVALID = 0,
- PTYPE_AUTH_REQUEST = U8_PTYPE_AUTH_REQUEST,
- PTYPE_AUTH_RESPONSE = U8_PTYPE_AUTH_RESPONSE,
+ PTYPE_AUTH_REQUEST,
+ PTYPE_AUTH_RESPONSE,
};
struct psock;
@@ -21,18 +22,23 @@ struct pdesc;
struct ppkt_auth_request {
uint32_t magic;
- uint16_t hash_siz;
- uint8_t hash[0];
+ uint16_t authdata_siz;
+ uint8_t authdata[0];
} __attribute__((__packed__));
struct ppkt_auth_response {
uint8_t code;
} __attribute__((__packed__));
-struct ppkt {
+struct ppkt_header {
uint16_t total_size;
uint8_t type;
- uint8_t data[0];
+} __attribute__((__packed__));
+
+union ppkt_body {
+ struct ppkt_auth_request auth_request;
+ struct ppkt_auth_response auth_response;
+ uint8_t buf[PTUNNAL_MAX_BODY_SIZE];
} __attribute__((__packed__));
struct ppkt_buffer {
@@ -40,14 +46,11 @@ struct ppkt_buffer {
size_t iovec_used;
struct icmphdr icmphdr;
- struct ppkt pkt;
- union {
- struct ppkt_auth_request auth_request;
- struct ppkt_auth_response auth_response;
- };
+ struct ppkt_header pheader;
+ union ppkt_body pbody;
};
-enum ptype ppkt_type_to_enum(struct ppkt *);
+enum ptype ppkt_type_to_enum(struct ppkt_header *);
int ppkt_process_icmp(struct psock *);