#ifndef YU_MANGLE_H #define YU_MANGLE_H #ifdef KERNEL_SPACE #include typedef __u8 uint8_t; typedef __u32 uint32_t; #include #include #include #include #include #include #include #include /* from */ #define IP_RF 0x8000 /* reserved fragment flag */ #define IP_DF 0x4000 /* dont fragment flag */ #define IP_MF 0x2000 /* more fragments flag */ #define IP_OFFMASK 0x1fff /* mask for fragmenting bits */ #else #define USER_SPACE #include #include #include #include #include #include #endif struct verdict { int target_sni; /* google video hello packet */ int sni_offset; /* offset from start of tcp _payload_ */ int sni_len; }; struct verdict analyze_tls_data(const uint8_t *data, uint32_t dlen); int ip4_frag(const uint8_t *pkt, uint32_t pktlen, uint32_t payload_offset, uint8_t *frag1, uint32_t *f1len, uint8_t *frag2, uint32_t *f2len); int tcp4_frag(const uint8_t *pkt, uint32_t pktlen, uint32_t payload_offset, uint8_t *seg1, uint32_t *s1len, uint8_t *seg2, uint32_t *s2len); int ip4_payload_split(uint8_t *pkt, uint32_t buflen, struct iphdr **iph, uint32_t *iph_len, uint8_t **payload, uint32_t *plen); int tcp4_payload_split(uint8_t *pkt, uint32_t buflen, struct iphdr **iph, uint32_t *iph_len, struct tcphdr **tcph, uint32_t *tcph_len, uint8_t **payload, uint32_t *plen); void tcp4_set_checksum(struct tcphdr *tcph, struct iphdr *iph); void ip4_set_checksum(struct iphdr *iph); int gen_fake_sni(const struct iphdr *iph, const struct tcphdr *tcph, uint8_t *buf, uint32_t *buflen); #endif /* YU_MANGLE_H */