* 增加当两边都打开wscale才发送给tfe判断,
* 修改窗口更新报文的窗口大小为三次握手的窗口大小
This commit is contained in:
@@ -160,6 +160,7 @@ struct traceid2pme_search_cb_args{
|
||||
struct keepalive_replay_htable_value{
|
||||
int has_replayed;
|
||||
uint32_t first_data_len;
|
||||
uint16_t window;
|
||||
};
|
||||
|
||||
struct keepalive_replay_search_cb_args{
|
||||
@@ -553,12 +554,15 @@ static unsigned char* kni_cmsg_serialize_header_new(struct pme_info *pmeinfo, st
|
||||
//server mss
|
||||
ret = wrapped_kni_cmsg_set(cmsg, TFE_CMSG_TCP_RESTORE_MSS_SERVER, (const unsigned char*)&server_mss, 2, pmeinfo->stream_traceid);
|
||||
if(ret < 0) goto error_out;
|
||||
//client wscale
|
||||
ret = wrapped_kni_cmsg_set(cmsg, TFE_CMSG_TCP_RESTORE_WSACLE_CLIENT, (const unsigned char*)&(pmeinfo->client_tcpopt->wscale), 1, pmeinfo->stream_traceid);
|
||||
if(ret < 0) goto error_out;
|
||||
//server wscale
|
||||
ret = wrapped_kni_cmsg_set(cmsg, TFE_CMSG_TCP_RESTORE_WSACLE_SERVER, (const unsigned char*)&(pmeinfo->server_tcpopt->wscale), 1, pmeinfo->stream_traceid);
|
||||
if(ret < 0) goto error_out;
|
||||
//both = 1, send to tfe
|
||||
if(pmeinfo->client_tcpopt->wscale && pmeinfo->server_tcpopt->wscale){
|
||||
//client wscale
|
||||
ret = wrapped_kni_cmsg_set(cmsg, TFE_CMSG_TCP_RESTORE_WSACLE_CLIENT, (const unsigned char*)&(pmeinfo->client_tcpopt->wscale), 1, pmeinfo->stream_traceid);
|
||||
if(ret < 0) goto error_out;
|
||||
//server wscale
|
||||
ret = wrapped_kni_cmsg_set(cmsg, TFE_CMSG_TCP_RESTORE_WSACLE_SERVER, (const unsigned char*)&(pmeinfo->server_tcpopt->wscale), 1, pmeinfo->stream_traceid);
|
||||
if(ret < 0) goto error_out;
|
||||
}
|
||||
//client sack
|
||||
ret = wrapped_kni_cmsg_set(cmsg, TFE_CMSG_TCP_RESTORE_SACK_CLIENT, (const unsigned char*)&(pmeinfo->client_tcpopt->sack), 1, pmeinfo->stream_traceid);
|
||||
if(ret < 0) goto error_out;
|
||||
@@ -759,6 +763,7 @@ int keepalive_replay_htable_add(const struct streaminfo *stream, struct pme_info
|
||||
int key_size =0, ret;
|
||||
struct keepalive_replay_htable_value *c2s_value = ALLOC(struct keepalive_replay_htable_value, 1);
|
||||
//c2s_value->first_data_len = pktinfo->data_len;
|
||||
c2s_value->window = pmeinfo->server_window;
|
||||
struct stream_tuple4_v4 *c2s_key_v4 = NULL;
|
||||
struct stream_tuple4_v6 *c2s_key_v6 = NULL;
|
||||
if(pmeinfo->addr_type == ADDR_TYPE_IPV6){
|
||||
@@ -790,6 +795,7 @@ int keepalive_replay_htable_add(const struct streaminfo *stream, struct pme_info
|
||||
//s2c
|
||||
struct keepalive_replay_htable_value *s2c_value = ALLOC(struct keepalive_replay_htable_value, 1);
|
||||
s2c_value->first_data_len = pktinfo->data_len;
|
||||
s2c_value->window = pmeinfo->client_window;
|
||||
if(pmeinfo->addr_type == ADDR_TYPE_IPV6){
|
||||
struct stream_tuple4_v6 s2c_key_v6;
|
||||
key_size = sizeof(s2c_key_v6);
|
||||
@@ -1237,6 +1243,7 @@ static long keepalive_replay_search_cb(void *data, const uchar *key, uint size,
|
||||
replay_pktinfo.tcphdr->dest = raw_pktinfo.tcphdr->source;
|
||||
replay_pktinfo.tcphdr->seq = htonl(ntohl(raw_pktinfo.tcphdr->ack_seq) + value->first_data_len);
|
||||
replay_pktinfo.tcphdr->ack_seq = htonl(ntohl(raw_pktinfo.tcphdr->seq) + 1);
|
||||
replay_pktinfo.tcphdr->window = htons(value->window);
|
||||
replay_pktinfo.tcphdr->check = 0;
|
||||
replay_pktinfo.tcphdr->check = kni_tcp_checksum_v6((void*)replay_pktinfo.tcphdr,
|
||||
tot_len - replay_pktinfo.iphdr_len, replay_pktinfo.iphdr.v6->ip6_src, replay_pktinfo.iphdr.v6->ip6_dst);
|
||||
@@ -1258,6 +1265,7 @@ static long keepalive_replay_search_cb(void *data, const uchar *key, uint size,
|
||||
replay_packet_tcphdr->dest = raw_packet_tcphdr->source;
|
||||
replay_packet_tcphdr->seq = htonl(ntohl(raw_packet_tcphdr->ack_seq) + value->first_data_len); //seq = ack + first_data_len
|
||||
replay_packet_tcphdr->ack_seq = htonl(ntohl(raw_packet_tcphdr->seq) + 1); //ack = seq + 1
|
||||
replay_packet_tcphdr->window = htons(value->window);
|
||||
replay_packet_iphdr->check = 0;
|
||||
replay_packet_iphdr->check = kni_ip_checksum((void*)replay_packet_iphdr, iphdr_len);
|
||||
replay_packet_tcphdr->check = 0;
|
||||
|
||||
Reference in New Issue
Block a user