diff --git a/kni.c b/kni.c index 2575c06..3ca49e0 100644 --- a/kni.c +++ b/kni.c @@ -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)) {