From 8f679f797337efcaad639e32b9f5c4bcd02cc2d5 Mon Sep 17 00:00:00 2001 From: liuyang Date: Mon, 30 Jul 2018 13:31:03 +0800 Subject: [PATCH] =?UTF-8?q?20180730=EF=BC=9A=20TCP=5FREPAIR=5FOPT=E4=B8=AD?= =?UTF-8?q?mss=E5=8F=96syn=EF=BC=8Csyn/ack=E4=B8=AD=E6=9C=80=E5=B0=8F?= =?UTF-8?q?=E5=80=BC=EF=BC=8C=E8=80=8C=E9=9D=9E=E5=8D=95=E7=BA=AFsrc=5Fmss?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kni.c | 19 ++++++++++++------- kni.h | 3 ++- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/kni.c b/kni.c index 8c98c23..738ed3e 100644 --- a/kni.c +++ b/kni.c @@ -41,7 +41,7 @@ struct kni_switch_info g_kni_switch_info; char g_kni_cardname[KNI_CARD_NUM][KNI_CONF_MAXLEN]; int g_kni_threadseq[KNI_MAX_THREADNUM]; -const char *g_kni_fs2_name[FS2_COLUMN_NUM] ={"RECV_PKTS","WRITE_PKTS","READ_PKTS","SEND_PKTS","BMD_IP","BMD_DOMAIN","HTTP_PKTS","SSL_PKTS"}; +const char *g_kni_fs2_name[FS2_COLUMN_NUM] ={"RECV_PKTS","WRITE_PKTS","READ_PKTS","SEND_PKTS","BMD_IP","BMD_DOMAIN","HTTP_PKTS","SSL_PKTS","DROP_PKTS"}; extern int g_iThreadNum; @@ -92,14 +92,14 @@ int kni_set_filestate2(int thread_seq,int colum_index,int bytes,int pktnum) int kni_filestate2_init() { int i=0; - int j=0; +// int j=0; int value=1; unsigned int fs2_sport; char fs2_filename[KNI_MAX_BUFLEN]={0}; char fs2_sip[KNI_MAX_BUFLEN]={0}; MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"filestat2_filename",fs2_filename,KNI_MAX_BUFLEN,(char*)"./log/kni_fs2.log"); - MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"filestat2_sip",fs2_sip,KNI_MAX_BUFLEN,(char*)"10.127.208.15"); + MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"filestat2_sip",fs2_sip,KNI_MAX_BUFLEN,(char*)"192.168.11.241"); MESA_load_profile_uint_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"filestat2_sport",(unsigned int*)&fs2_sport,8125); g_kni_fs2_info.handler=FS_create_handle(); @@ -253,6 +253,7 @@ static int kni_send_fds(int socket, int *fds, int n,int protocol) struct cmsghdr *cmsg; char buf[CMSG_SPACE(n * sizeof(int))], dup[256]={0}; memset(buf, 0, sizeof(buf)); +// struct iovec io = { .iov_base = &dup, .iov_len = sizeof(struct kni_tlv_info) }; struct iovec io = { .iov_base = &dup, .iov_len = sizeof(dup) }; @@ -412,7 +413,7 @@ return: *********************************************************************************************************************/ char tun_write_data(int fd,char* send_buf,int send_buflen,struct streaminfo* pstream,int thread_seq) { - kni_set_filestate2(thread_seq,FS2_COLUME_WRITE,0,1); + char ret=APP_STATE_DROPPKT|APP_STATE_GIVEME; int succ_sendlen=0; @@ -420,6 +421,7 @@ char tun_write_data(int fd,char* send_buf,int send_buflen,struct streaminfo* pst succ_sendlen = write(fd, send_buf,send_buflen); if((succ_sendlen<0)&&(pstream!=NULL)) { + kni_set_filestate2(thread_seq,FS2_COLUME_DROPPKT,0,1); MESA_kill_tcp(pstream,(const void*)send_buf); MESA_handle_runtime_log(g_kni_comminfo.logger, RLOG_LV_FATAL,KNI_MODULE_WRITETUN,"write() error %d, %s",errno,strerror(errno)); ret=APP_STATE_DROPPKT|APP_STATE_DROPME; @@ -429,6 +431,7 @@ char tun_write_data(int fd,char* send_buf,int send_buflen,struct streaminfo* pst MESA_handle_runtime_log(g_kni_comminfo.logger, RLOG_LV_FATAL,KNI_MODULE_WRITETUN,"succ_sendlen is %d,send_buflen is %d",succ_sendlen,send_buflen); } + kni_set_filestate2(thread_seq,FS2_COLUME_WRITE,0,1); kni_debug_info_v4((char*)KNI_MODULE_WRITETUN,KNI_FLAG_SSL,(struct ip*)send_buf); return ret; @@ -1098,7 +1101,7 @@ int tcprepair_set_state(int sk,struct kni_tcp_state* tcp) onr++; opts[onr].opt_code = TCPOPT_MAXSEG; - opts[onr].opt_val = tcp->mss_src; + opts[onr].opt_val = (tcp->mss_srcmss_dst)?tcp->mss_src:tcp->mss_dst; onr++; if((tcp->sack_src)&&(tcp->sack_dst)) @@ -1831,11 +1834,13 @@ extern "C" char kni_tcpall_entry(const struct streaminfo* pstream,void** pme,int kni_free_pmeinfo(pme); *pme=NULL; } -/* + /* + if(ret&APP_STATE_DROPPKT) { - kni_set_filestate2(thread_seq,FS2_COLUME_DROP,0,1); + kni_set_filestate2(thread_seq,FS2_COLUME_DROPPKT,0,1); } + else { kni_set_filestate2(thread_seq,FS2_COLUME_FWD,0,1); diff --git a/kni.h b/kni.h index cc176d9..8f6e7c7 100644 --- a/kni.h +++ b/kni.h @@ -150,7 +150,7 @@ #define KNI_DEFAULT_MODE_BYPASS 1 //filestate2 -#define FS2_COLUMN_NUM 8 +#define FS2_COLUMN_NUM 9 #define FS2_APPNAME "KNI" @@ -164,6 +164,7 @@ enum kni_FS_COLUME FS2_COLUME_WITELIST_DOMAIN, FS2_COLUME_HTTP, FS2_COLUME_SSL, + FS2_COLUME_DROPPKT, };