修改wscale打开的判断条件, 窗口回复报文的window值改成网络序
This commit is contained in:
@@ -55,6 +55,7 @@ do { \
|
|||||||
#define KNI_MTU 3000
|
#define KNI_MTU 3000
|
||||||
struct kni_tcpopt_info{
|
struct kni_tcpopt_info{
|
||||||
uint16_t mss;
|
uint16_t mss;
|
||||||
|
uint8_t wscale_set;
|
||||||
uint8_t wscale;
|
uint8_t wscale;
|
||||||
uint8_t ts;
|
uint8_t ts;
|
||||||
uint8_t sack;
|
uint8_t sack;
|
||||||
|
|||||||
@@ -180,6 +180,7 @@ struct kni_tcpopt_info* kni_get_tcpopt(struct tcphdr* tcphdr,int tcphdr_len){
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TCPOPT_WINDOW:
|
case TCPOPT_WINDOW:
|
||||||
|
tcpopt->wscale_set = 1;
|
||||||
if (opsize == TCPOLEN_WINDOW){
|
if (opsize == TCPOLEN_WINDOW){
|
||||||
uint8_t snd_wscale = *(uint8_t *)ptr;
|
uint8_t snd_wscale = *(uint8_t *)ptr;
|
||||||
// rfc7323 page9: Thus, the shift count MUST be limited to 14 (which allows windows of 2^30 = 1 GiB).
|
// rfc7323 page9: Thus, the shift count MUST be limited to 14 (which allows windows of 2^30 = 1 GiB).
|
||||||
|
|||||||
@@ -555,7 +555,7 @@ static unsigned char* kni_cmsg_serialize_header_new(struct pme_info *pmeinfo, st
|
|||||||
ret = wrapped_kni_cmsg_set(cmsg, TFE_CMSG_TCP_RESTORE_MSS_SERVER, (const unsigned char*)&server_mss, 2, pmeinfo->stream_traceid);
|
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;
|
if(ret < 0) goto error_out;
|
||||||
//both = 1, send to tfe
|
//both = 1, send to tfe
|
||||||
if(pmeinfo->client_tcpopt->wscale && pmeinfo->server_tcpopt->wscale){
|
if(pmeinfo->client_tcpopt->wscale_set && pmeinfo->server_tcpopt->wscale_set){
|
||||||
//client 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);
|
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;
|
if(ret < 0) goto error_out;
|
||||||
@@ -753,7 +753,7 @@ static char pending_opstate(const struct streaminfo *stream, struct pme_info *pm
|
|||||||
pmeinfo->error = STREAM_ERROR_PENDING_NO_SYN;
|
pmeinfo->error = STREAM_ERROR_PENDING_NO_SYN;
|
||||||
return APP_STATE_FAWPKT | APP_STATE_DROPME;
|
return APP_STATE_FAWPKT | APP_STATE_DROPME;
|
||||||
}
|
}
|
||||||
pmeinfo->client_window = pktinfo.tcphdr->window;
|
pmeinfo->client_window = ntohs(pktinfo.tcphdr->window);
|
||||||
pmeinfo->client_tcpopt = kni_get_tcpopt(pktinfo.tcphdr, pktinfo.tcphdr_len);
|
pmeinfo->client_tcpopt = kni_get_tcpopt(pktinfo.tcphdr, pktinfo.tcphdr_len);
|
||||||
return APP_STATE_FAWPKT | APP_STATE_GIVEME;
|
return APP_STATE_FAWPKT | APP_STATE_GIVEME;
|
||||||
}
|
}
|
||||||
@@ -928,7 +928,7 @@ static char data_opstate(const struct streaminfo *stream, struct pme_info *pmein
|
|||||||
}
|
}
|
||||||
// syn/ack
|
// syn/ack
|
||||||
if(pktinfo.tcphdr->syn && pktinfo.tcphdr->ack){
|
if(pktinfo.tcphdr->syn && pktinfo.tcphdr->ack){
|
||||||
pmeinfo->server_window = pktinfo.tcphdr->window;
|
pmeinfo->server_window = ntohs(pktinfo.tcphdr->window);
|
||||||
pmeinfo->server_tcpopt = kni_get_tcpopt(pktinfo.tcphdr, pktinfo.tcphdr_len);
|
pmeinfo->server_tcpopt = kni_get_tcpopt(pktinfo.tcphdr, pktinfo.tcphdr_len);
|
||||||
return APP_STATE_FAWPKT | APP_STATE_GIVEME;
|
return APP_STATE_FAWPKT | APP_STATE_GIVEME;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user