diff options
Diffstat (limited to 'src/ppkt.h')
-rw-r--r-- | src/ppkt.h | 31 |
1 files changed, 17 insertions, 14 deletions
@@ -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 *); |