TSG-14654: 控制报文格式调整, 增加将cmsg字段发送给TFE, 控制报文采用mpack封装格式

This commit is contained in:
刘学利
2023-05-06 02:23:12 +00:00
parent 5bc9831e03
commit 224f503289
28 changed files with 17186 additions and 396 deletions

140
test/src/gtest_proxy.cpp Normal file
View File

@@ -0,0 +1,140 @@
#include <linux/if_ether.h>
#include <netinet/ip6.h>
#include <pcap.h>
#include <gtest/gtest.h>
#include <pcap/pcap.h>
#include <netinet/ip.h>
#include "tsg_proxy.h"
TEST(IPV4, tcp_opt_parse)
{
struct pkt_info pktinfo;
struct tsg_proxy_tcp_attribute tcp_attr;
pcap_t *pcap_file_fd = NULL;
struct pcap_pkthdr *header; // pcap报文头部结构
const u_char *packet; // 报文数据指针
struct iphdr *ip; // ip头部结构
struct streaminfo stream;
char errbuf[PCAP_ERRBUF_SIZE];
pcap_file_fd = pcap_open_offline("pcap/ipv4_ssl_handshake.pcapng", errbuf);
ASSERT_TRUE(pcap_file_fd != NULL);
//syn
ASSERT_TRUE(pcap_next_ex(pcap_file_fd, &header, &packet) >= 0);
ip = (struct iphdr*) (packet + sizeof(struct ethhdr));
tsg_proxy_ipv4_header_parse((void *)ip, &pktinfo);
tsg_proxy_tcp_parse(&tcp_attr, &pktinfo, &stream);
ASSERT_EQ(tcp_attr.tcp_opt_client.mss, 1460);
ASSERT_EQ(tcp_attr.tcp_opt_client.wscale_set, 1);
ASSERT_EQ(tcp_attr.tcp_opt_client.wscale, 8);
ASSERT_EQ(tcp_attr.tcp_opt_client.sack, 1);
ASSERT_EQ(tcp_attr.tcp_opt_client.ts_set, 1);
ASSERT_EQ(tcp_attr.tcp_opt_client.ts_val, ntohl(619788329));
ASSERT_EQ(tcp_attr.tcp_opt_client.ts_ecr, 0);
ASSERT_EQ(tcp_attr.tcp_opt_client.window, 64240);
//syn&ack
ASSERT_TRUE(pcap_next_ex(pcap_file_fd, &header, &packet) >= 0);
ip = (struct iphdr*) (packet + sizeof(struct ethhdr));
tsg_proxy_ipv4_header_parse((void *)ip, &pktinfo);
tsg_proxy_tcp_parse(&tcp_attr, &pktinfo, &stream);
ASSERT_EQ(tcp_attr.tcp_opt_server.mss, 1460);
ASSERT_EQ(tcp_attr.tcp_opt_server.wscale_set, 1);
ASSERT_EQ(tcp_attr.tcp_opt_server.wscale, 8);
ASSERT_EQ(tcp_attr.tcp_opt_server.sack, 1);
ASSERT_EQ(tcp_attr.tcp_opt_server.ts_set, 1);
ASSERT_EQ(tcp_attr.tcp_opt_server.ts_val, ntohl(201296612));
ASSERT_EQ(tcp_attr.tcp_opt_server.ts_ecr, ntohl(619788329));
ASSERT_EQ(tcp_attr.tcp_opt_server.window, 65535);
//ack
ASSERT_TRUE(pcap_next_ex(pcap_file_fd, &header, &packet) >= 0);
ip = (struct iphdr*) (packet + sizeof(struct ethhdr));
tsg_proxy_ipv4_header_parse((void *)ip, &pktinfo);
tsg_proxy_tcp_parse(&tcp_attr, &pktinfo, &stream);
//first data pkt
ASSERT_TRUE(pcap_next_ex(pcap_file_fd, &header, &packet) >= 0);
ip = (struct iphdr*) (packet + sizeof(struct ethhdr));
tsg_proxy_ipv4_header_parse((void *)ip, &pktinfo);
stream.curdir = DIR_C2S;
tsg_proxy_first_data_process(&stream, &tcp_attr, &pktinfo);
ASSERT_EQ(tcp_attr.tcp_opt_client.ts_val, ntohl(619788360));
ASSERT_EQ(tcp_attr.tcp_opt_server.ts_val, ntohl(201296612));
ASSERT_EQ(tcp_attr.tcp_seq, ntohl(265573753));
ASSERT_EQ(tcp_attr.tcp_ack, ntohl(2286004672));
ASSERT_EQ(tcp_attr.tcp_info_packet_cur_dir, DIR_C2S);
pcap_close(pcap_file_fd);
}
TEST(IPV6, tcp_opt_parse)
{
struct pkt_info pktinfo;
struct tsg_proxy_tcp_attribute tcp_attr;
pcap_t *pcap_file_fd = NULL;
struct pcap_pkthdr *header; // pcap报文头部结构
const u_char *packet; // 报文数据指针
struct ip6_hdr *ip6; // ip头部结构
struct streaminfo stream;
char errbuf[PCAP_ERRBUF_SIZE];
pcap_file_fd = pcap_open_offline("pcap/ipv6_ssl_handshake.pcapng", errbuf);
ASSERT_TRUE(pcap_file_fd != NULL);
//syn
ASSERT_TRUE(pcap_next_ex(pcap_file_fd, &header, &packet) >= 0);
ip6 = (struct ip6_hdr*) (packet + sizeof(struct ethhdr));
tsg_proxy_ipv6_header_parse((void *)ip6, &pktinfo);
tsg_proxy_tcp_parse(&tcp_attr, &pktinfo, &stream);
ASSERT_EQ(tcp_attr.tcp_opt_client.mss, 1440);
ASSERT_EQ(tcp_attr.tcp_opt_client.wscale_set, 1);
ASSERT_EQ(tcp_attr.tcp_opt_client.wscale, 8);
ASSERT_EQ(tcp_attr.tcp_opt_client.sack, 1);
ASSERT_EQ(tcp_attr.tcp_opt_client.ts_set, 1);
ASSERT_EQ(tcp_attr.tcp_opt_client.ts_val, ntohl(619788492));
ASSERT_EQ(tcp_attr.tcp_opt_client.ts_ecr, 0);
ASSERT_EQ(tcp_attr.tcp_opt_client.window, 64800);
//syn&ack
ASSERT_TRUE(pcap_next_ex(pcap_file_fd, &header, &packet) >= 0);
ip6 = (struct ip6_hdr*) (packet + sizeof(struct ethhdr));
tsg_proxy_ipv6_header_parse((void *)ip6, &pktinfo);
tsg_proxy_tcp_parse(&tcp_attr, &pktinfo, &stream);
ASSERT_EQ(tcp_attr.tcp_opt_server.mss, 1440);
ASSERT_EQ(tcp_attr.tcp_opt_server.wscale_set, 1);
ASSERT_EQ(tcp_attr.tcp_opt_server.wscale, 8);
ASSERT_EQ(tcp_attr.tcp_opt_server.sack, 1);
ASSERT_EQ(tcp_attr.tcp_opt_server.ts_set, 1);
ASSERT_EQ(tcp_attr.tcp_opt_server.ts_val, ntohl(1014079587));
ASSERT_EQ(tcp_attr.tcp_opt_server.ts_ecr, ntohl(619788492));
ASSERT_EQ(tcp_attr.tcp_opt_server.window, 65535);
//ack
ASSERT_TRUE(pcap_next_ex(pcap_file_fd, &header, &packet) >= 0);
ip6 = (struct ip6_hdr*) (packet + sizeof(struct ethhdr));
tsg_proxy_ipv6_header_parse((void *)ip6, &pktinfo);
tsg_proxy_tcp_parse(&tcp_attr, &pktinfo, &stream);
//first data pkt
ASSERT_TRUE(pcap_next_ex(pcap_file_fd, &header, &packet) >= 0);
ip6 = (struct ip6_hdr*) (packet + sizeof(struct ethhdr));
tsg_proxy_ipv6_header_parse((void *)ip6, &pktinfo);
stream.curdir = DIR_C2S;
tsg_proxy_first_data_process(&stream, &tcp_attr, &pktinfo);
ASSERT_EQ(tcp_attr.tcp_opt_client.ts_val, ntohl(619788540));
ASSERT_EQ(tcp_attr.tcp_opt_server.ts_val, ntohl(1014079587));
ASSERT_EQ(tcp_attr.tcp_seq, ntohl(625826589));
ASSERT_EQ(tcp_attr.tcp_ack, ntohl(64211095));
ASSERT_EQ(tcp_attr.tcp_info_packet_cur_dir, DIR_C2S);
pcap_close(pcap_file_fd);
}
int main(int argc, char *argv[])
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}