20180711:
更正TCP_REPAIR_OPTIONS时sack内容,type区分TCPOPT_SACK_PERMITTED和TCPOPT_SACK,val必须为0;
This commit is contained in:
22
kni.c
22
kni.c
@@ -1010,16 +1010,19 @@ int tcprepair_set_state(int sk,struct kni_tcp_state* tcp)
|
|||||||
opts[onr].opt_val = tcp->mss_src;
|
opts[onr].opt_val = tcp->mss_src;
|
||||||
onr++;
|
onr++;
|
||||||
|
|
||||||
opts[onr].opt_code = TCPOPT_SACK;
|
if((tcp->sack_src)&&(tcp->sack_dst))
|
||||||
opts[onr].opt_val = (tcp->sack_src)&&(tcp->sack_dst);
|
{
|
||||||
onr++;
|
opts[onr].opt_code = TCPOPT_SACK_PERMITTED;
|
||||||
|
opts[onr].opt_val = 0;
|
||||||
|
onr++;
|
||||||
|
}
|
||||||
|
/*
|
||||||
opts[onr].opt_code = TCPOPT_TIMESTAMP;
|
opts[onr].opt_code = TCPOPT_TIMESTAMP;
|
||||||
opts[onr].opt_val = (tcp->timestamps_src)&&(tcp->timestamps_dst);
|
opts[onr].opt_val = (tcp->timestamps_src)&&(tcp->timestamps_dst);
|
||||||
onr++;
|
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",tcp->wscale_src,tcp->wscale_dst,opts[0].opt_val,opts[1].opt_val,opts[2].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,timestamp:%d",tcp->wscale_src,tcp->wscale_dst,opts[0].opt_val,opts[1].opt_val,opts[2].opt_val,opts[3].opt_val);
|
|
||||||
|
|
||||||
if (setsockopt(sk, SOL_TCP, TCP_REPAIR_OPTIONS,opts, onr * sizeof(struct tcp_repair_opt)) < 0)
|
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)
|
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;
|
// return APP_STATE_FAWPKT|APP_STATE_GIVEME;
|
||||||
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;
|
|
||||||
*/
|
|
||||||
char ret=APP_STATE_FAWPKT|APP_STATE_DROPME;
|
char ret=APP_STATE_FAWPKT|APP_STATE_DROPME;
|
||||||
if((g_kni_comminfo.kni_mode_cur==KNI_MODE_BYPASS)||(pstream->addr.addrtype==ADDR_TYPE_IPV6))
|
if((g_kni_comminfo.kni_mode_cur==KNI_MODE_BYPASS)||(pstream->addr.addrtype==ADDR_TYPE_IPV6))
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user