20181130更新

This commit is contained in:
liuyang
2018-11-30 17:25:48 +08:00
parent 890f12f7a7
commit 489f124af3
5 changed files with 1592 additions and 43 deletions

View File

@@ -492,9 +492,9 @@ int kni_filestate2_init()
char fs2_filename[KNI_MAX_BUFLEN]={0}; char fs2_filename[KNI_MAX_BUFLEN]={0};
char fs2_sip[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_FS_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*)"0.0.0.0"); MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_FS_MODE,(char*)"filestat2_sip",fs2_sip,KNI_MAX_BUFLEN,(char*)"0.0.0.0");
MESA_load_profile_uint_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"filestat2_sport",(unsigned int*)&fs2_sport,0); MESA_load_profile_uint_def((char*)KNI_CONF_FILENAME,(char*)KNI_FS_MODE,(char*)"filestat2_sport",(unsigned int*)&fs2_sport,0);
g_kni_fs2_info.handler=FS_create_handle(); g_kni_fs2_info.handler=FS_create_handle();

View File

@@ -10,7 +10,7 @@
int g_kni_version_VERSION_20181125_addlog; int g_kni_version_VERSION_20181129;
struct kni_var_comm g_kni_comminfo; struct kni_var_comm g_kni_comminfo;
struct kni_var_struct g_kni_structinfo; struct kni_var_struct g_kni_structinfo;
@@ -28,6 +28,7 @@ int kni_init_pmeinfo(void** pme)
{ {
struct kni_pme_info* pmeinfo=(struct kni_pme_info*)malloc(sizeof(struct kni_pme_info)); struct kni_pme_info* pmeinfo=(struct kni_pme_info*)malloc(sizeof(struct kni_pme_info));
memset(pmeinfo,0,sizeof(struct kni_pme_info)); memset(pmeinfo,0,sizeof(struct kni_pme_info));
pmeinfo->tun_index = -1;
*pme=pmeinfo; *pme=pmeinfo;
return 0; return 0;
@@ -541,7 +542,6 @@ char kni_first_tcpdata(const struct streaminfo* pstream,const void* a_packet,str
long elapse=0; long elapse=0;
char ret=APP_STATE_FAWPKT|APP_STATE_DROPME; char ret=APP_STATE_FAWPKT|APP_STATE_DROPME;
int htable_ret = 0;
int domain_len=0; int domain_len=0;
char domain[KNI_DEFAULT_MTU]={0}; char domain[KNI_DEFAULT_MTU]={0};
@@ -693,11 +693,16 @@ char kni_pending_opstate(const struct streaminfo* pstream,struct kni_pme_info* p
if(datalen>0)//TODO:get link create mode from sapp if(datalen>0)//TODO:get link create mode from sapp
{ {
ret=kni_first_tcpdata(pstream,a_packet,pmeinfo,data,datalen); ret=kni_first_tcpdata(pstream,a_packet,pmeinfo,data,datalen);
if((pmeinfo->action == KNI_ACTION_MONITOR) && (pmeinfo->protocol==KNI_FLAG_HTTP) ||(pmeinfo->protocol==KNI_FLAG_SSL)) if((pmeinfo->action == KNI_ACTION_MONITOR) && ((pmeinfo->protocol==KNI_FLAG_HTTP) ||(pmeinfo->protocol==KNI_FLAG_SSL)))
{ {
if(g_kni_switch_info.write_listq_switch == 1) if(g_kni_switch_info.write_listq_switch == 1)
{ {
ret = kni_add_lqueue(ADDR_TYPE_IPV4,thread_seq,(char*)ipv4_hdr,iplen,pstream); if(pmeinfo->tun_index<0)
{
pmeinfo->tun_index=random()%g_kni_comminfo.tun_threadnum;
}
ret = kni_add_lqueue(ADDR_TYPE_IPV4,thread_seq,(char*)ipv4_hdr,iplen,pstream,pmeinfo->tun_index);
} }
else else
{ {
@@ -789,7 +794,14 @@ char kni_data_opstate(const struct streaminfo* pstream,struct kni_pme_info* pmei
kni_filestate2_set(pstream->threadnum,COLUME_INTERCEPT,0,1); kni_filestate2_set(pstream->threadnum,COLUME_INTERCEPT,0,1);
if(g_kni_switch_info.write_listq_switch == 1) if(g_kni_switch_info.write_listq_switch == 1)
{ {
ret = kni_add_lqueue(ADDR_TYPE_IPV4,thread_seq,(char*)a_packet,iplen,pstream); if(pmeinfo->tun_index<0)
{
pmeinfo->tun_index=random()%g_kni_comminfo.tun_threadnum;
MESA_handle_runtime_log(g_kni_comminfo.logger,RLOG_LV_FATAL,"get tun_index","index:%d",pmeinfo->tun_index);
}
ret = kni_add_lqueue(ADDR_TYPE_IPV4,thread_seq,(char*)a_packet,iplen,pstream,pmeinfo->tun_index);
} }
else else
{ {
@@ -826,8 +838,6 @@ char kni_close_opstate(const struct streaminfo* pstream,struct kni_pme_info* pme
char ret=APP_STATE_FAWPKT|APP_STATE_DROPME; char ret=APP_STATE_FAWPKT|APP_STATE_DROPME;
int htable_ret = 0; int htable_ret = 0;
struct stream_tuple4_v4 ipv4_addr;
struct stream_tuple4_v6 ipv6_addr;
if(a_packet==NULL) if(a_packet==NULL)
{ {
@@ -1202,15 +1212,19 @@ int init_profile_info()
//kni.conf //kni.conf
MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"replay_win_update",&(g_kni_switch_info.replay_win_update),1); MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_MAIN_MODE,(char*)"replay_win_update",&(g_kni_switch_info.replay_win_update),1);
MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"default_work_mode",&(g_kni_switch_info.maat_default_mode),KNI_DEFAULT_MODE_INTERCEPT); MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_MAIN_MODE,(char*)"default_work_mode",&(g_kni_switch_info.maat_default_mode),KNI_DEFAULT_MODE_INTERCEPT);
MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"ratelimit_switch",&(g_kni_switch_info.ratelimit_switch),1); MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_MAIN_MODE,(char*)"ratelimit_switch",&(g_kni_switch_info.ratelimit_switch),1);
MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"replace_switch",&(g_kni_switch_info.replace_switch),1); MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_MAIN_MODE,(char*)"replace_switch",&(g_kni_switch_info.replace_switch),1);
MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"sendpkt_mode",&(g_kni_switch_info.sendpkt_mode),0); MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_MAIN_MODE,(char*)"sendpkt_mode",&(g_kni_switch_info.sendpkt_mode),0);
MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"write_listqueue_switch",&(g_kni_switch_info.write_listq_switch),0); MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_MAIN_MODE,(char*)"write_listqueue_switch",&(g_kni_switch_info.write_listq_switch),0);
MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_MAIN_MODE,(char*)"send_fds_mode",&(g_kni_switch_info.send_fds_mode),0);
MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_MAIN_MODE,(char*)"domain_path",g_kni_comminfo.domain_path,KNI_CONF_MAXLEN,"/home/server_unixsocket_file");
MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_MAIN_MODE,(char*)"socketopt_mark",&(g_kni_comminfo.mark),101);
MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"domain_path",g_kni_comminfo.domain_path,KNI_CONF_MAXLEN,"/home/server_unixsocket_file");
MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"socketopt_mark",&(g_kni_comminfo.mark),101);
return 0; return 0;
} }
@@ -1252,8 +1266,8 @@ int init_kni_runtimelog()
char logger_filepath[KNI_CONF_MAXLEN]={0}; char logger_filepath[KNI_CONF_MAXLEN]={0};
MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"logger_level",&logger_level,RLOG_LV_INFO); MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_MAIN_MODE,(char*)"logger_level",&logger_level,RLOG_LV_INFO);
MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"logger_filepath",logger_filepath,KNI_CONF_MAXLEN,"./log/kni.log"); MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_MAIN_MODE,(char*)"logger_filepath",logger_filepath,KNI_CONF_MAXLEN,"./log/kni.log");
g_kni_comminfo.logger=MESA_create_runtime_log_handle(logger_filepath,logger_level); g_kni_comminfo.logger=MESA_create_runtime_log_handle(logger_filepath,logger_level);
@@ -1289,15 +1303,15 @@ int init_kni_dyn_maat_info()
char stat_file_dir[KNI_CONF_MAXLEN]={0}; char stat_file_dir[KNI_CONF_MAXLEN]={0};
MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"dyn_maat_readconf_mode",&maat_readconf_mode,KNI_READCONF_IRIS); MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_DYNMAAT_MODE,(char*)"dyn_maat_readconf_mode",&maat_readconf_mode,KNI_READCONF_IRIS);
MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"dyn_scandir_interval",&scandir_interval,KNI_SCANDIR_INTERVAL); MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_DYNMAAT_MODE,(char*)"dyn_scandir_interval",&scandir_interval,KNI_SCANDIR_INTERVAL);
MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"dyn_effect_interval",&effect_interval,KNI_EFFECT_INTERVAL); MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_DYNMAAT_MODE,(char*)"dyn_effect_interval",&effect_interval,KNI_EFFECT_INTERVAL);
MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"dyn_redis_db_index",&redis_db_index,0); MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_DYNMAAT_MODE,(char*)"dyn_redis_db_index",&redis_db_index,0);
MESA_load_profile_int_nodef((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"dyn_redis_port",(int*)&redis_port); MESA_load_profile_int_nodef((char*)KNI_CONF_FILENAME,(char*)KNI_DYNMAAT_MODE,(char*)"dyn_redis_port",(int*)&redis_port);
MESA_load_profile_string_nodef((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"dyn_redis_server",redis_ip,INET_ADDRSTRLEN); MESA_load_profile_string_nodef((char*)KNI_CONF_FILENAME,(char*)KNI_DYNMAAT_MODE,(char*)"dyn_redis_server",redis_ip,INET_ADDRSTRLEN);
MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"dyn_stat_file_path",stat_file_dir,KNI_CONF_MAXLEN,KNI_DYN_STAT_FILEPATH); MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_DYNMAAT_MODE,(char*)"dyn_stat_file_path",stat_file_dir,KNI_CONF_MAXLEN,KNI_DYN_STAT_FILEPATH);
MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"dyn_table_info_path",table_info_path,KNI_CONF_MAXLEN,KNI_TABLEINFO_PATH); MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_DYNMAAT_MODE,(char*)"dyn_table_info_path",table_info_path,KNI_CONF_MAXLEN,KNI_TABLEINFO_PATH);
g_kni_maatinfo.ipd_dyn_maat_feather=Maat_feather(g_iThreadNum,table_info_path,g_kni_comminfo.logger); g_kni_maatinfo.ipd_dyn_maat_feather=Maat_feather(g_iThreadNum,table_info_path,g_kni_comminfo.logger);
@@ -1363,17 +1377,17 @@ int init_kni_static_maat_info()
char inc_cfg_dir[KNI_CONF_MAXLEN]={0}; char inc_cfg_dir[KNI_CONF_MAXLEN]={0};
MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"maat_readconf_mode",&maat_readconf_mode,KNI_READCONF_IRIS); MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_STICMAAT_MODE,(char*)"maat_readconf_mode",&maat_readconf_mode,KNI_READCONF_IRIS);
MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"scandir_interval",&scandir_interval,KNI_SCANDIR_INTERVAL); MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_STICMAAT_MODE,(char*)"scandir_interval",&scandir_interval,KNI_SCANDIR_INTERVAL);
MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"effect_interval",&effect_interval,KNI_EFFECT_INTERVAL); MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_STICMAAT_MODE,(char*)"effect_interval",&effect_interval,KNI_EFFECT_INTERVAL);
MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"redis_db_index",&redis_db_index,0); MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_STICMAAT_MODE,(char*)"redis_db_index",&redis_db_index,0);
MESA_load_profile_int_nodef((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"redis_port",(int*)&redis_port); MESA_load_profile_int_nodef((char*)KNI_CONF_FILENAME,(char*)KNI_STICMAAT_MODE,(char*)"redis_port",(int*)&redis_port);
MESA_load_profile_string_nodef((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"redis_server",redis_ip,INET_ADDRSTRLEN); MESA_load_profile_string_nodef((char*)KNI_CONF_FILENAME,(char*)KNI_STICMAAT_MODE,(char*)"redis_server",redis_ip,INET_ADDRSTRLEN);
MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"table_info_path",table_info_path,KNI_CONF_MAXLEN,KNI_TABLEINFO_PATH); MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_STICMAAT_MODE,(char*)"table_info_path",table_info_path,KNI_CONF_MAXLEN,KNI_TABLEINFO_PATH);
MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"inc_cfg_dir",inc_cfg_dir,KNI_CONF_MAXLEN,KNI_INCCFG_FILEPATH); MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_STICMAAT_MODE,(char*)"inc_cfg_dir",inc_cfg_dir,KNI_CONF_MAXLEN,KNI_INCCFG_FILEPATH);
MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"stat_file_path",stat_file_dir,KNI_CONF_MAXLEN,KNI_STAT_FILEPATH); MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_STICMAAT_MODE,(char*)"stat_file_path",stat_file_dir,KNI_CONF_MAXLEN,KNI_STAT_FILEPATH);
MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_CONF_MODE,(char*)"full_cfg_dir",full_cfg_dir,KNI_CONF_MAXLEN,KNI_FULLCFG_FILEPATH); MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_STICMAAT_MODE,(char*)"full_cfg_dir",full_cfg_dir,KNI_CONF_MAXLEN,KNI_FULLCFG_FILEPATH);
g_kni_maatinfo.maat_feather=Maat_feather(g_iThreadNum,table_info_path,g_kni_comminfo.logger); g_kni_maatinfo.maat_feather=Maat_feather(g_iThreadNum,table_info_path,g_kni_comminfo.logger);
@@ -1445,12 +1459,24 @@ int init_kni_project()
} }
int init_kni_tunprocess()
{
int i=0;
pthread_t pid_read_tun;
for(i=0;i<g_kni_comminfo.tun_threadnum;i++)
{
g_kni_threadseq[i]=i;
pthread_create(&pid_read_tun,NULL,pthread_process_tun,&(g_kni_threadseq[i]));
}
return 0;
}
int init_kni_sendpkt() int init_kni_sendpkt()
{ {
int i=0; int i=0;
pthread_t pid_read_tun;
kni_read_cardname(); kni_read_cardname();
@@ -1465,9 +1491,6 @@ int init_kni_sendpkt()
return -1; return -1;
} }
g_kni_threadseq[i]=i;
pthread_create(&pid_read_tun,NULL,pthread_process_tun,&(g_kni_threadseq[i]));
} }
return 0; return 0;
@@ -1485,7 +1508,7 @@ int init_kni_lqueue()
return -1; return -1;
} }
for(i=0;i<g_iThreadNum;i++) for(i=0;i<g_kni_comminfo.tun_threadnum;i++)
{ {
g_kni_structinfo.lqueue_write_tun[i] = MESA_lqueue_create(KNI_THREAD_SAFE,KNI_LQUEUE_MAXNUM); g_kni_structinfo.lqueue_write_tun[i] = MESA_lqueue_create(KNI_THREAD_SAFE,KNI_LQUEUE_MAXNUM);
if(g_kni_structinfo.lqueue_write_tun[i] == NULL) if(g_kni_structinfo.lqueue_write_tun[i] == NULL)
@@ -1504,6 +1527,9 @@ extern "C" char kni_init()
pthread_t pid_kni_filestat2; pthread_t pid_kni_filestat2;
g_kni_comminfo.tun_threadnum = g_iThreadNum;
// g_kni_comminfo.tun_threadnum = 5;
init_profile_info(); init_profile_info();
@@ -1555,6 +1581,8 @@ extern "C" char kni_init()
return -1; return -1;
} }
init_kni_tunprocess();
if(g_kni_switch_info.maat_default_mode==0) if(g_kni_switch_info.maat_default_mode==0)
{ {

View File

@@ -73,6 +73,11 @@
//init profile info //init profile info
#define KNI_CONF_MAXLEN 1024 #define KNI_CONF_MAXLEN 1024
#define KNI_CONF_FILENAME "./kniconf/kni.conf" #define KNI_CONF_FILENAME "./kniconf/kni.conf"
#define KNI_MAIN_MODE "main"
#define KNI_FS_MODE "field_stat"
#define KNI_DYNMAAT_MODE "dynmic_maat"
#define KNI_STICMAAT_MODE "static_maat"
#define KNI_TUN_MODE "tun"
#define KNI_CONF_MODE "Module" #define KNI_CONF_MODE "Module"
#define KNI_CONF_FILENAME_MAIN "./conf/main.conf" #define KNI_CONF_FILENAME_MAIN "./conf/main.conf"
@@ -241,6 +246,7 @@ struct kni_switch_info
int replace_switch; int replace_switch;
int sendpkt_mode; //0:mesa_sendpkt_option;1:socket int sendpkt_mode; //0:mesa_sendpkt_option;1:socket
int write_listq_switch; //0:no listq;1:has listq int write_listq_switch; //0:no listq;1:has listq
int send_fds_mode; //0:has listq;1:no listq
}; };
struct kni_http_project struct kni_http_project
@@ -259,6 +265,7 @@ struct kni_var_comm
int project_id; int project_id;
int kni_mode_cur; //0:work 1:bypass int kni_mode_cur; //0:work 1:bypass
int thread_num; int thread_num;
int tun_threadnum;
int fd_domain; int fd_domain;
int mark; int mark;
char tun_name[KNI_CONF_MAXLEN]; char tun_name[KNI_CONF_MAXLEN];
@@ -337,6 +344,9 @@ struct kni_ratelimit_info
//tcpall/udp_entry pmeinfo //tcpall/udp_entry pmeinfo
struct kni_pme_info struct kni_pme_info
{ {
//test
int tun_index;
//end
int action; int action;
int cfg_id; int cfg_id;
int keyring_id; int keyring_id;

1487
kni_intercept.c Normal file

File diff suppressed because it is too large Load Diff

24
kni_intercept.h Normal file
View File

@@ -0,0 +1,24 @@
#ifndef KNI_CONNECT_H
#define KNI_CONNECT_H
#define KNI_SENDFD_NUM 2
int kni_send_fds(int socket, int *fds, int n,int protocol);
char tun_write_data(int fd,char* send_buf,int send_buflen,struct streaminfo* pstream,int thread_seq);
char tun_write_data_listq(int fd,char* send_buf,int send_buflen,int thread_seq);
int kni_unixdomain_create();
int init_kni_unixdomain();
int init_kni_tun();
void* pthread_process_tun(void* arg);
char kni_add_lqueue(int addrtype,int thread_seq,char* send_buf,int send_buflen,const struct streaminfo* pstream,int index);
int tcp_repair_process(const struct streaminfo* pstream,const void* a_packet,struct kni_pme_info* pmeinfo,int protocol);
#endif