* 新增 enable_kni_v3=1 配置项 * develop_build_release 分支关闭 ASAN 检测 * 修正根据 CMSG 恢复 TCP 链接时没有正确填写 TCP 时间戳启用选项的问题
59 lines
1.6 KiB
C
59 lines
1.6 KiB
C
#ifndef _TFE_PKT_UTIL_H
|
||
#define _TFE_PKT_UTIL_H
|
||
|
||
#ifdef __cpluscplus
|
||
extern "C"
|
||
{
|
||
#endif
|
||
|
||
enum addr_type_t {
|
||
ADDR_TYPE_IPV4 = 1,
|
||
ADDR_TYPE_IPV6 = 2,
|
||
};
|
||
|
||
struct pkt_info {
|
||
enum addr_type_t addr_type;
|
||
|
||
union {
|
||
struct iphdr *v4;
|
||
struct ip6_hdr *v6;
|
||
} iphdr;
|
||
uint16_t iphdr_len;
|
||
uint16_t ip_totlen;
|
||
|
||
struct tcphdr *tcphdr;
|
||
uint16_t tcphdr_len;
|
||
|
||
char *data;
|
||
uint16_t data_len;
|
||
|
||
int parse_failed;
|
||
};
|
||
|
||
// always success
|
||
void tfe_pkt_parse_ipv4_header(const void *a_packet, struct pkt_info *pktinfo);
|
||
// check pktinfo->parse_failed for status
|
||
void tfe_pkt_parse_ipv6_header(const void *a_packet, struct pkt_info *pktinfo);
|
||
|
||
uint16_t tfe_pkt_checksum_ip(const void *buf, size_t hdr_len);
|
||
uint16_t tfe_pkt_checksum_tcp_v4(const void *buf, size_t len, in_addr_t src_addr, in_addr_t dest_addr);
|
||
uint16_t tfe_pkt_checksum_tcp_v6(const void *buf, size_t len, struct in6_addr src_addr, struct in6_addr dest_addr);
|
||
|
||
/*
|
||
* 目的:在 IP 的 Payload ${data} 中查找指定的 tcp ${option}。
|
||
*
|
||
* 已知:
|
||
* 1.所有的 tcp options 所占的存储空间的长度为 ${optlen}
|
||
* 2.${out_opt_buff} 输出缓冲区的最大长度为 ${out_opt_buff_size}
|
||
*
|
||
* 返回值:
|
||
* 1.若找到指定的 tcp ${option} 则返回 1,并将该 tcp ${option} 对应的值拷贝到 ${out_opt_buff} 中,并将拷贝的值所占的存储空间记录到 ${out_optlen} 中
|
||
* 2.若未找到指定的 tcp ${option} 则返回 0
|
||
*/
|
||
int tfe_pkt_find_tcp_option(uint8_t option, char *data, unsigned int opts_total_len, uint8_t *out_opt_len, char *out_opt_buff, unsigned int out_opt_buff_size);
|
||
|
||
#ifdef __cpluscplus
|
||
}
|
||
#endif
|
||
|
||
#endif |