20180711:

更正TCP_REPAIR_OPTIONS时sack内容,type区分TCPOPT_SACK_PERMITTED和TCPOPT_SACK,val必须为0;
This commit is contained in:
liuyang
2018-07-11 14:51:29 +08:00
parent f9cc1a2f91
commit d203188977

22
kni.c
View File

@@ -1010,16 +1010,19 @@ int tcprepair_set_state(int sk,struct kni_tcp_state* tcp)
opts[onr].opt_val = tcp->mss_src;
onr++;
opts[onr].opt_code = TCPOPT_SACK;
opts[onr].opt_val = (tcp->sack_src)&&(tcp->sack_dst);
onr++;
if((tcp->sack_src)&&(tcp->sack_dst))
{
opts[onr].opt_code = TCPOPT_SACK_PERMITTED;
opts[onr].opt_val = 0;
onr++;
}
/*
opts[onr].opt_code = TCPOPT_TIMESTAMP;
opts[onr].opt_val = (tcp->timestamps_src)&&(tcp->timestamps_dst);
onr++;
*/
MESA_handle_runtime_log(g_kni_comminfo.logger, RLOG_LV_FATAL,"tcprepair_set_state","wscale_src:%d,wscale_dst:%d,wscale:%x,mss:%d,sack:%d,timestamp:%d",tcp->wscale_src,tcp->wscale_dst,opts[0].opt_val,opts[1].opt_val,opts[2].opt_val,opts[3].opt_val);
MESA_handle_runtime_log(g_kni_comminfo.logger, RLOG_LV_FATAL,"tcprepair_set_state","wscale_src:%d,wscale_dst:%d,wscale:%x,mss:%d,sack:%d",tcp->wscale_src,tcp->wscale_dst,opts[0].opt_val,opts[1].opt_val,opts[2].opt_val);
if (setsockopt(sk, SOL_TCP, TCP_REPAIR_OPTIONS,opts, onr * sizeof(struct tcp_repair_opt)) < 0)
{
@@ -1740,11 +1743,8 @@ char kni_close_opstate(const struct streaminfo* pstream,void** pme,int thread_se
extern "C" char kni_tcpall_entry(const struct streaminfo* pstream,void** pme,int thread_seq,const void* ip_hdr)
{
/*
struct ip* ipv4=(struct ip*)ip_hdr;
tun_write_data(g_kni_comminfo.fd_tun[thread_seq],(char*)ip_hdr,ntohs(ipv4->ip_len),(struct streaminfo*)pstream);
return APP_STATE_DROPPKT|APP_STATE_GIVEME;
*/
// return APP_STATE_FAWPKT|APP_STATE_GIVEME;
char ret=APP_STATE_FAWPKT|APP_STATE_DROPME;
if((g_kni_comminfo.kni_mode_cur==KNI_MODE_BYPASS)||(pstream->addr.addrtype==ADDR_TYPE_IPV6))
{