#if 0 1.本部分代码主要两个功能 1)完成底层数据包的获取, 支持多种数据获取方式pag,ppf,pfring, 2) 完成tcp、udp的流还原功能 3) 完成插件挂载功能 ********************************************************************* 20130802 刘庆云 1)tcp建立链接时,为了抗攻击,对单侧流必须有第三个包 2)增加控制开关,选择建立链接的方式 **************************************************************************** 20130803 刘庆云 优化流还原模块的处理 1) 每个包到来时按照两侧端口号,建立临时流表; 如果出现小端口为服务端时,通过syn判断出后,颠倒四元组; 每个流表进行hash时不在进行判断,直接用四元组; 2) 流表加入hash时按照四元组大小进行排序,插入的位置在findstream时提前算好,减少插入时的计算; 3) dealpkt部分的代码重新梳理,后得出能够独立运行的代码,不在依赖外层的 stack,support 4) 编写测试部分的独立测试函数,并进行测试; **************************************************************************** 20130805 刘庆云 1) 建立流表的端口的改为判断主机序列; 2)双向流收到第三个包后,直接进入数据表,起到保护真实链接的目标; **************************************************************************** 20130813 刘庆云 1)tcp流表的查找改为折半查找 ********************************************************************************************* 20130821 李佳 1)针对某项目需求: 如果IP包是由多个IP分片包重组而成, 应用层插件可以获取所有原始IP分片包, 新增加raw_ipfrag_list结构, 并在streaminfo结构中添加原始IP分片列表头指针. 修改stream.h、dealpkt.c、dealtcp.c、deal_ipv4.c、deal_ipv6.c、ip_reassembly.c等与IP分片相关代码. **************************************************************************** 20130822 刘庆云 1)增加tcp全包回调接口,全包回调时可能会没有pdetail, 2)为了能够判断正确是否有pdetail,之前服用pdetail信息来存储synseq的方式不再可行,增加了变量用于临时记录seq 同时,为了能够同时支持两种模式增加了pktstate和用于函数上下文的变量pktallme pktstate的变换逻辑如下:第一个包为pending,如果有函数需要则该为data,如无需要改为close,链接淘汰时为close 3)当有全包获取函数挂载时,正常的fin,rst不会淘汰链接只能等淘汰 4)为了在不同tcp接口情况下,挂载函数能够统一管理,函数调用链表函数需要传入xxstat和xxpme; 5) streaimindex改为预先分配需要的个数,这样是为了防止当处理过程中调用tcp_free_stream之后又进行使用出现野指针 另外一种避免的方法是没错传入**,接口比较麻烦,暂未使用 6)增加takeover模式,目前只支持注册一个接管函数; 7) syn+rst的报文也建立链接 ********************************************************************** 20130826 刘庆云 1) mkstreamhash 用frand参与hash运算多了一次拷贝, 并且大部分情况为0,造成hash冲突,因此只用地址参与运算 ********************************************************************** 20130917,18 刘庆云 1) hash_add_stream 必须在streamaddlist前进行,否则streamaddlist内淘汰一些链接后会造成 hash_add_stream利用的之前查找的结果为错误结果 2) 每次淘汰的链接数目为总链接数目的2% ****************************************************************************************** 20130922 李佳 1)增加NPacket捕包方式, 编译参数"CAPTURE_MODE=$(LINK_NP)", 对应配置文件"capdatamodlel=5" ****************************************************************************************** 20140302 刘庆云 从dealpkt到platform 合并之前的各种修改 1)dealpkt目录增加ipv6支持 2)dealpkt目录合并之前修改的tcp_allpkt接口,调整等 3)dealpkt目录合并之前修改的丢包计数分侧的bug 4)dealpkt目录中dealpkt.c dealtcp.c未合入108相关代码, call_app未合入863_control的代码 5)合并plugin 支持插件管理功能 (1)程序调用接口:plugctrl_proc() ;(无参数) (2)程序作用: a、自动扫描解析层、业务层、兼容插件三个文件夹下插件(默认路径分别是./plug/protocol,./plug/business,./plug/general,可通过./wyqd.conf中参数更改此路径),调用其初始化函数; b、并将IP_ENTRY,TCP_ENTRY,UDP_ENTRY三个入口指针分别挂载到对应函数调用链上; c、保存其他入口函数指针,解析层调用时使用; ****************************************************************************************** 20140322 刘庆云 为了支持代理嵌套,进行了若干修改 1)tcp部分原来设计只有当进入data状态后,才分配pdetail的空间;现在修改为 流一建立就分配pdetail的空间,当进入data后才分配half的空间 2)重新规整了stream结构体的定义, 原来和流相关的一些变量,全部移入pdetail,包括apme等; 3)流表的管理,用最里层的地址做hash,用多层地址递归进行比较 4)初步添加了对vlan的处理函数,待完善 ****************************************************************************************** 20140323 刘庆云 为了支持应用层代理,进行修改 1) tcpdetail结构体内增加proxylist指针,记录代理情况 2) proxylist的申请,释放,有代理解析层控制; 3) 代理结构体内自带pme,opstate,用这两个变量回调所有的接口函数 ****************************************************************** 20140406 李佳 1)增加对隧道的处理,理论上支持无限嵌套模式; 2)修改stream.h中ADDR_TYPE_IPV4地址类型定义,不再代表基于IPv4地址的四元组, 而是真正的IPv4地址对, 四元组使用struct stream_tuple4表示; 3)细化分层结构,TCP层不再存储四元组信息,而是仅存储本层的端口信息, 计算HASH以及地址比较时,再通过fstream找到IP地址; 4)修改计算HASH函数、HASH冲突后的比较函数; 5)将某项目的特殊应用,如标签、stream_id、原始IP分片包剥离并模块化, 使用开关灵活控制某个模块的启用; 6)把底层捕包库封装成.so模式,在不同的捕包模式间切换时,只要修改配置文件即可,无需从编译。 ****************************************************************** 20140422 李佳 1)为了处理效率,减少内存占用,及插件获取四元组的易用性, 将TCP、UDP的端口存储于IP层,TCP层用指针指向IP层此块内存,即可以直接获取四元组信息。 ****************************************************************** 20140515 李佳 针对863-UDP流还原测试硬件环境,增加QNF捕包接口. ****************************************************************** 20140616 李佳 1)增加project管理模块,在stream->pproject结构中,可以任意挂载多个应用信息; ****************************************************************** 20140619 李佳 1)增加raw_pkt_t结构,存储从捕包库获取的原始包信息; 2)插件入口函数增加原始包参数; 3)修改IP分片重组流程,支持隧道多层嵌套模式 ****************************************************************** 20140721 李佳 1)IP分片重组HASH支持多层嵌套模式; 2)将原IP分片重组HASH模块改成基于MESA_htable实现; ****************************************************************** 20140901 李佳 1)串联模式下,应用可能会误改原始包,增加对原始包数据校验功能。 ****************************************************************** 20140910 李佳 1)增加MESA_inject_pkt()发包接口,简化造包操作,减少传参数量. ****************************************************************** 20140922 李佳 1)增加MESA_kill_tcp_synack()接口, 用于IP-HMD的欺骗连接; ****************************************************************** 20141011 李佳 1)增加读取配置文件变量maxrandval, randkeyval,用于识别系统发出的RST包; 2)fd补救由平台实现, 插件可以认为MESA_kill_tcp()是可靠的! ****************************************************************** 20141113 李佳 1)修改创建连接有地址翻转时,因TCP流表查找错误,造成无法识别某些流的BUG。 ****************************************************************** 20141115 李佳 1)增加MESA_kill_connection()函数,除了可以实现MESA_kill_tcp()原有功能外, 还可以在串联模式下,对基于流的非TCP协议做fd(drop packet). ****************************************************************** 20141120 李佳 1)增加pcap读大包模式进度条显示,预测处理时间. ****************************************************************** 20141125 李佳 1)修改pcap模式下, 多线程分流BUG,其他模式(pag、pfring、dpdk等等)不受影响。 2)更新plunin模块,version:2014-11-24 ****************************************************************** 20141127 李佳 1)修改最大乱序包数最大值,由255扩展为65535, 修改了stream.h中关于maxunorder的定义. ****************************************************************** 20141202 李佳 1)修改在pcap读包模式下,读包线程调用freeall_stream()早于工作线程导致的BUG; 2)增加平台和packet_io_lib版本号对比判断,如果不一致会打印警告信息; 3)修改淘汰UDP流时,pktstate没有正确设置为CLOSE状态BUG; 4)配置文件增加"UdpStreamTimeout", 用于设置开启UDP流还原时,超时淘汰时间; 增加"load_plug_switch", 用于动态开启是否加载插件; 5)增加了sysinfo.log统计信息显示. ****************************************************************** 20141204 李佳 1)修复在pag模式下运行时,IPv4和IPv6共存时的BUG, 在顶级Makefile中增加"USE_PAG_GET_FRAME", 根据环境选择是否使用pag_get_frame()直接获取mac包. ****************************************************************** 20141205 李佳 1)修复IPv6-UDP数据包, 在开启UDP流还原的情况下, 无法找到对应的流, 造成HASH冲突链表爆炸BUG。 ****************************************************************** 20141208 李佳 1)增加build_net_layer_gre()函数,可以构造带GRE协议的rst包. ****************************************************************** 20141211 李佳 1)修改因IP分片重组后的包,而触发调用MESA_kill_tcp()的BUG; 2)修改MESA_kill_tcp()计算包长度BUG; 3)原始包结构raw_pkt_t中增加__magic__, 用于在papp和sapp平台之间区分原始包void *的实际类型. ****************************************************************** 20141217 李佳 1)增加pag模式下,使用pag_get_frame接口功能, 用顶层Makefile的USE_PAG_GET_FRAME选项控制; 2)修改流还原按data建连接时,以大端口为源的规则; 3)修改了因重载了系统标准库exit(), 造成程序退出时莫名其妙的BUG. ****************************************************************** 20141219 李佳 1)为了兼容之前插件, 修改IPv4, IPv6层插件原始包指针为本层IP包指针. ****************************************************************** 20141223 李佳, 刘庆云 1)增加SAPP_PKT_CB_FUN_T回调函数类型: char SAPP_PKT_EXAMPLE(const struct streaminfo *pstream, const void *this_hdr, const void *raw_pkt); ****************************************************************** 20141224 李佳 1)修改stream.h,将内部变量与外部变量分离,根据功能的不同,将stream.h分拆为: #include "stream_inc/stream_base.h" #include "stream_inc/stream_proxy.h" #include "stream_inc/stream_project.h" #include "stream_inc/stream_inject.h" #include "stream_inc/stream_control.h" #include "stream_inc/stream_entry.h" #include "stream_inc/stream_rawpkt.h" ****************************************************************** 20141225 李佳 1)将ip分片重组类型的包,用Pkttype标识,用于流管理层识别. 2)增加了一些不常见的协议类型处理, 如vlan、pppoe、ppp的非数据传输层协议. ****************************************************************** 20141226 李佳 1)增加PPP和GRE协议的解析; ****************************************************************** 20141230 李佳 1)增加addr_type_to_string()函数,用于插件输出协议地址类型字符串; 2)增加get_this_layer_header(),用于插件获取本层头部地址; 3)修改STREAM_CB_FUN_T回调函数的"原始包"参数,改为传输下层IP层的头部, 真正的全原始包应使用SAPP_STREAM_FUN_T类型回调. ****************************************************************** 20141231 刘庆云 李佳 1)平台同时支持传原始包和本层包头的接口,增加回调函数类型定义, 修改callapp.c中stream_register_xxx和stream_process_xxx系列函数. 2)合并dictator2的20141217版本. ****************************************************************** 20150104 李佳 1)修改stream_base.h, 将pkttype移动至struct layer_addr结构中, 将routedir扩展为uchar类型; 新增MESA_dir_reverse()函数, 用于发包时反向routedir. stream.h增加版本号和MD5验证值. 2)增加MESA_fakepacket_xxx系列函数. ****************************************************************** 20150107 刘庆云 1)reset重建链接时,重置计数器 2) 判断syn是否重传的条件 从原来的(thisseq+1 == rcv->first_data_seq) 改为( rcv->first_data_seq-thisseq <=1) 3) 为了防止syn重置的链接syn在第一个链接里面,改为先调用tcp,再调用tcpall 4) 由于3)的修改,对于每个链接重置时rst,需要传递原始包给free_stream的函数 ****************************************************************** 20150112 李佳 1)修改tcp_deal_data_stream,tcp_save_unorder,deal_tcp_stream等函数的参数, 增加Iphdr和tcphdr参数,用于传递重组后的IP分片包。 2)FD补救时增加判断条件,只有tcpdatalen > 0时,才继续调用MESA_kill_tcp, 以防止攻击或本机发送的RST包又被捕获; ****************************************************************** 20150123 刘庆云 1) pkttype 增加PKT_TYPE_TCPREORDER,需要每个包来了赋值 2) proxy增加对地址的虚拟转换 ****************************************************************** 20150126 lqy yw 1) pkttype 增加PKT_TYPE_TCPRESTRAS 增加重传报文的类型 2) tcp_stream_free重置顺序,先进行tcp,再进行tcpall 3) pkttype 分离成两个变量,pktipflagtype ****************************************************************** 20150129 李佳,刘庆云, 刘洋 1)sapp增加-v参数,用于识别版本功能, 对外提供的可执行文件要strip, 通过nm命令无法查看. 2)sapp内置libsesame_door,用于限制平台使用范围,保护软件产权; 3)callapp内支持udp_raw接口 4)插件管理更改;打开解析层插件,符号表为全局可见 ****************************************************************** 20150203 李佳 1)新增四个地址转换函数: const char *stream_addr_list_ntop_outward(const struct streaminfo *pstream); const char *stream_addr_list_ntop_inward(const struct streaminfo *pstream); const struct streaminfo *stream_addr_list_pton_outward(const char *addr_list_str, int thread_index); const struct streaminfo *stream_addr_list_pton_inward(const char *addr_list_str, int thread_index); 修改stream_base.h, 增加以上函数声明. 2)增加类型定义PKT_TYPE_IP_FRAG; 增加stream_register_ip_frag, stream_register_ipv6_frag入口函数. ****************************************************************** 20150205 李佳 1)增加基于PPP,GRE协议的RST包构造功能, 因GRE没有创建流,目前只能单向发送RST. ***************************************************************** 20150210 刘庆云 1) 修正tcp链接单流变双流时max_unorder未设置的问题 2) nouse状态看到syn标识重置链接,这样能够看到新流的建立过程; 3) 对于fin状态后的数据在未开tcpall接口时,tcp会新建链接进行处理 而开tcpall接口后,这些包都不会被tcp看到 tcpall接口的引入引起tcp处理包数的变换, 从正常协议栈的角度,引入tcpall接口后的处理是正常的; 但是有恶劣的情况是,tcp四元组复用,而又丢了syn的链接不能正常处理 ***************************************************************** 20150225 刘庆云 1)记录tcp报文的重叠长度internal内增加变量tcpoverlen 2)tcplen>0但是带fin,rst等标志的数据包不建立链接 3)对于syn后面第一个数据包乱序的情况,置标志位为tcpunorder 4)更新dictator2 到20150215版本 ****************************************************************** 20150226 李佳 1)修改stream_base.h, 将地址转换函数接口变更为: int stream_addr_list_ntop(const struct streaminfo *pstream, char *dst, int size); int stream_addr_list_pton(const char *addr_list_str, void *dst, int size, int thread_index); ****************************************************************** 20150306 李佳 1)解决隧道模式下, IPv6层无法回调的BUG. ****************************************************************** 20150311 李佳 1)解决IP分片重组包同时在TCP层是乱序包的BUG, (之前已解决, 后来在20150126版将pkttype分离后, 没有对pktipflagtype赋值, 此BUG重现). ****************************************************************** 20150312 李佳 1)修复raw_ip_frag_list模块,v4和v6混乱的BUG. ****************************************************************** 20150316 刘洋 1)1-plugin.c:1259 add funelem->called_flag =1; 否则如果pending状态没有调用业务层插件,每个data状态都会有pending的标示 2-pending 增加called_flag的初始化 3-close增加对调用的判断:如果该插件曾经被调用过或者当前字段是该插件所 需要的字段才在close状态调用,否则不调用 ****************************************************************** 20150319 李佳 1)修改tcp_change_stream_todata()函数, TCP半流结构内存泄露BUG. 2)平台不再使用liblogger.so. ****************************************************************** 20150311,25 刘庆云, 李佳 1)更新plugin到_20150325版本 2) 修改了乱序报文中对于cout_ideal的重置过程 3)0319修改tcp_change_stream_todata()函数, TCP半流结构内存泄露BUG . 4)0311对乱序缓存的数据,增加判断是否有重传重叠,如有则矫正 5)修改了对于seq的比较时出现的问题改为用after,before函数比较 6) 去掉了老版本的logger,更新为MESA_handle_logger 7) 修改test_app.so, TCP层插件统计信息错误BUG. ****************************************************************** 20150327 李佳 1)修改mac_n2p_fun()BUG. ****************************************************************** 20150409 李佳 1)修改配置参数MaxUdpStreams=0时, UDP插件得到的pdetail为NULL的BUG. ****************************************************************** 20150415 李佳,刘庆云 合并papp在20150401的BUG修复: 1)修改deal_tcp.c 对乱序包的处理逻辑 对于达到最大乱序数目的链接,乱序中又出现乱序的情况,跳出本次乱序处理; 对于乱序包的cout_ideal重置条件进行,只有当序号大时才从 ****************************************************************** 20150416 李佳 1)增加cycle_pkt_dump功能, 解决在线流量出了BUG,无法重现问题. main.conf中新增3个配置项: [pkt_dump] pkt_dump_switch=0 //总开关 pkt_dump_file_max_size=10000 //单位:MB, 每个线程 pkt_dump_file_root_dir=/dev/shm //pcap存储路径, 推荐/dev/shm, 速度快 ****************************************************************** 20150430 李佳 1)修改配置文件对连接超时时间无效问题. LinkTimeout=0, 用于TCP UdpResetTime=0, 用于UDP ********************************************************************* 20150507 李佳 1)新增加TCP连接数, 新建连接数,销毁连接数,HASH表冲突数统计。 ********************************************************************* 20150508 李佳 1)增加UDP连接数统计. ********************************************************************* 20150512 李佳 1)修复GRE负载长度为0时, Invalid read的BUG. ********************************************************************* 20150526 李佳 1)修复pkt_dump模块, 因信号中断读写错误的BUG. ********************************************************************* 20150610 李佳 1)修复流超时淘汰BUG. ********************************************************************* 20150612 刘庆云 1)修复del_stream_by_time()从链表尾部淘汰BUG. ********************************************************************* 20150615 李佳 1)修复MAC地址src,dst与流创建的反向不一致问题. ********************************************************************* 20150702 李佳 1)增加GRE-IPv6协议的解析。 ********************************************************************* 20150703 李佳 1)main.conf增加配置选项"skip_not_ip_layer", 用于双栈环境无法发送非IP承载的RST包问题。 ********************************************************************* 20150715 李佳 1)修复丢流BUG,原因: 在HASH函数比较地址时,只比较了IP忘记了端口,当在一个HASH-SLOT中有多个冲突链时, 如果凑巧这些四元组的IP都是相同的,那么就会造成后续的新包被误认为是已有流的一部分, 而不会被识别成一个新流. 2)增加从程序启动以来,处理的所有流数统计信息。 ********************************************************************* 20150902 李佳 1) 集成iknow, 方便获取更多、更详细的辅助信息; ********************************************************************* 20150908 李佳 1) 修改pkt_dump模块, 可以设置所有历史包总大小, 防止程序频繁重启造成无限制写硬盘; ********************************************************************* 20150916 李佳 1)集成MESA_sleep(), 防止在2.6.32内核以上,usleep(1)CPU占用率过高问题. ********************************************************************* 20150922 李佳 1)修改Iknow回调函数接口定义. ********************************************************************* 20150928 李佳 1)修改pcap捕包模块获取原始包长BUG, 应该使用caplen而不是Len, 因为可能没有加-s0选项,造成实际捕获的长度比理论包长小. ********************************************************************* 20150929 李佳 1)增加topsec捕包库接口, 用于木马设备项目, 不再单独维护一个分支版本. ********************************************************************* 20151014 李佳 1)增加MESA_sleep到平台,解决usleep()在高内核版本下CPU占用率太高问题. ********************************************************************* 20151027 李佳 1)修复不能按已有方式识别本机发出的RST包的BUG。 ********************************************************************* 20151030 李佳 1)修改teredo识别不准确问题; 2)修改sysinfo.h相关宏定义, 某些与start旧版有冲突, 造成sysinfo.log计数不准; ********************************************************************* 20151102 刘庆云,李佳 1)修改因乱序包触发插件返回DROPPKT,造成平台乱序包链表逐渐增长,致使CPU占用率高的BUG; ********************************************************************* 20151104 李佳 1)修改TCP、UDP流还原之后,没有更新IP分片状态标志BUG. ********************************************************************* 20151105 李佳 1)修改pkt_dump模块性能较差问题; ********************************************************************* 20151106 李佳 1)修改pkt_dump模块, 捕获SIGSEGV信号, 在信号处理函数中调用sync(), 保证触发segment fault的pcap包真正的保存到硬盘; ********************************************************************* 20151109 李佳 1)修改pkt_dump模块,增加BPF-Filter过滤功能. ********************************************************************* 20151112 李佳 1)增加新函数tcp_set_single_stream_drop_by_time(), 设置当前流不再根据RST、FIN等标志结束, 只能等超时、或移至LRU队尾后被free. 用于某些业务使用第三方的FD补救使用. ********************************************************************* 20151112-2 李佳 1)增加函数MESA_set_stream_opt(), 用于控制单个链接的属性, 使用类似setsockopt的方式, 不再增加独立函数. ********************************************************************* 20151118 李佳 1)去掉捕包模式下对包长度是否超过MTU的检查, 因为在TSO模式下, 本机捕包经常会有单包长度几万字节的情况, 导致应用层插件莫名其妙收不全数据。 ********************************************************************* 20151125 李佳 1)解决平台在高版本系统下编译警告和错误; 2)关闭Iknow的DEBUG打印信息; ********************************************************************* 20151207 李佳 1)修改流创建结构, 将IP和端口绑定在一个地址集合, 普通IPv4, IPv6协议只需一个streaminfo结构, TCP层不再通过pfather指针指向IP层地址, 可节约内存和提高性能; ********************************************************************* 20151209 李佳 1)增加配置参数: skip_ethernet_layer, 用于控制是否跳过ethernet层, 不再处理MAC地址信息, 提高运行效率. ********************************************************************* 20151215 李佳 1)HASH冲突链表增加LRU机制, 将最近使用最频繁的流放于链表第一个, 提高查找效率; 2)使用LINUX内核HASH时, 一次makehash计算可以得到多个HASH值, 使用一个HASH用于确定在HASH_SLOT的位置, 再使用另一个HASH用于快速比较地址是否相等. ********************************************************************* 20151223 李佳 1)在乱序包的情况下, 先增加了数据包和字节数, 导致插件还未拿到当前数据包, 但实际字节数已经增加, 导致计数不准确, 已修复. ********************************************************************* ************************* 2016 year ********************************* ********************************************************************* 2016-01-19 李佳 1)修复因将IP-PORT合并之后, inet_addr_list函数BUG。 ********************************************************************* 2016-06-08 李佳 1)修改在按data建连接时, 调用了TCPALL插件后, 即便插件返回DROP, 仍然会调用TCP插件的逻辑, 导致HMD不生效问题. ********************************************************************* 2016-06-15 李佳 1)增加丢弃纯ACK包功能, 靠配置文件discard_ack控制; 2)修改FD补救时, 由原来发送3个RST, 减少为1个. ********************************************************************* 2016-06-21 李佳 1)增加配置项:kill_tcp_remedy, 用于控制是否开启FD补救功能. ********************************************************************* 2016-09-01 李佳 1)for soq项目, 增加对隧道协议L2TP, PPTP, IPSEC的连接检测与日志记录。 新增stream_tunnel.h. ********************************************************************* 2016-09-30 李佳 1)修复IPv6分片重组线程ID设置错误, 导致在开启dictator后coredump, 而是用普通malloc模式无问题. ********************************************************************* 2016-10-09 李佳 1)修改stream_inject.h, 增加MESA_kill_tcp_feedback()等带反馈功能的函数接口. ********************************************************************* 2016-10-12 李佳 1)增加L2TP协议的FD功能. ********************************************************************* 2016-11-10 李佳 1)针对WY发包特殊需求--某插件不论网络中有无数据包, 都不能阻塞等待, 必须被持续不断调用, 新增POLLING类型插件入口, 保证无数据包时, 也会调用此接口的插件. ********************************************************************* 2016-11-24 李佳 1)修改sapp目录结构, 将原来test拆分为运行目录run, 和源码目录entry, 便于部署批量copy. ********************************************************************* 2016-12-01 李佳 1)增加PPP协议解析CHAP认证的用户名功能. ********************************************************************* 2016-12-05 李佳 1)修改stream_base.h, 增加layer_addr_ntop(), layer_addr_prefix_ntop(). ********************************************************************* 2016-12-15 李佳 1)增强IPv4包格式的校验, 增加对包截断等情况的判断; 1)修复pptp HASH插入失败后没有free的BUG. ********************************************************************* 2016-12-20 郑超, 李佳 1)更新dictator, 修复realloc BUG. ********************************************************************* 2016-12-21 李佳 1)更新stream_addr_list_ntop, stream_addr_list_pton等函数, 修改地址字符串前缀命名, 更易读. ********************************************************************* 2016-12-22 李佳 1)修复平台在非X86平台下无法编译问题; 2)修改dictator初始化读取配置文件顺序BUG. ********************************************************************* 2016-12-26 刘洋, 李佳 1)刘洋修改plungin, 插件加载失败后, 调用dlclose关闭dlopen打开的文件句柄; ********************************************************************* 2016-12-27 李佳 1)修改pptp解析层调用业务插件时, streaminfo结构体为NULL的BUG; ********************************************************************* 2016-12-29 李佳 1)修改pptp隧道无法反向inject包的BUG(暂时只支持双向流反向inject, 单向流仍无法支持); ********************************************************************* ************************* 2017 year ********************************* ********************************************************************* ********************************************************************* 2017-01-03 李佳 1)增加L2tp解析层HASH冲突严重问题, 超过阈值后不再处理新流. 2)修改TCP流管理BUG, tcp_reset_stream()将当前流移出lru_list, 在tcp_deal_unorder()函数中, 可能会再调用tcp_change_stream_tonouse(), 再次调用streamleavlist, 致使plist->head, tail都为NULL. ********************************************************************* 2017-01-05 李佳 1)修改PPTP, L2TP协议解析层hash算法, 减少冲突率. ********************************************************************* 2017-01-09 李佳 1)因2016-12-26, 插件加载失败后, 调用dlclose关闭dlopen打开的文件句柄的方案会造成程序崩溃且无法查看函数调用栈, 所以不再主动dlclose句柄; 2)修改打开ip_frag_list功能后, UDP超时重置时造成内存泄漏的BUG; 3)修改增加MESA_kill_tcp_feedback()函数后, MESA_sendpacket_iplayer()等函数, 在调用packet_io_send_fake_pkt()时, 传递参数错误BUG. ********************************************************************* 2017-01-20 李佳 1)pcap模式启用dictator后, 读包完退出时free线程不是包处理线程, 造成dictator assert失败. ********************************************************************* 2017-02-10 李佳 1)layer_addr_ntop()增加OpenVPN协议; 2)修改l2tp, pptp二元组HASH算法,减少HASH冲突; 3)临时增加SAPP_INSECTICIDE宏,用于检查莫名其妙的BUG,尽量早发现问题。 ********************************************************************* 2017-02-11 李佳 1)增加TCP-RST, UDP发包统计计数; ********************************************************************* 2017-02-16 李佳 1)修改get_stream_carry_tunnel_type()对于PPTP, L2TP的识别BUG。 ********************************************************************* 2017-02-24 李佳 1)因DPDK初始化时绑定当前线程到某CPU核心, 导致后续动态创建的所有线程都默认继承这个行为, 全绑定到同一个核心, 修改packet_io和plug_proc的初始化顺序。 ********************************************************************* 2017-04-07 李佳 1)增加新的pag_marsio模式, 主要用于使用marsio的pag_get_frame接口,和之前Zhuanyong网卡的pag_get_frame区分。 ********************************************************************* 2017-04-21 李佳 1)集成327的Ipfile读包模式。 ********************************************************************* 2017-05-11 李佳 1)main.conf增加配置文件ipentry_priority_over_ipfrag,用于控制IP层和IPFRAG层调用优先级; 2)增加包类型PKT_TYPE_IP_FRAG_LAST,表示同属于一个原始IP包的最后一个IP分片包。 ********************************************************************* 2017-05-15 李佳 1)支持marsio-4.1原生接口. ********************************************************************* 2017-05-24 李佳 1)支持将sapp做为一个动态链接库.so, 可挂载到其他平台上的IP_entry, 减少联调TCP流还原及streaminfo各种变量不一致的时间, 做为插件使用时,默认使用固定目录/home/mesasoft/sapp. ********************************************************************* 2017-06-08 李佳,刘洋 1)将wangyan保活功能独立做为插件实现, 更新callapp.c与插件管理相关流程,如记录插件包处理延时等。 ********************************************************************* 2017-06-27 李佳 1)针对GDEV串联模式,修改底层收发包接口; 2)更新stream_base.h, stream_inject.h, stream_rawpkt.h; 3)将GDEV保护功能移出平台,做为独立插件运行; 4)增加检测实际运行环境的stream_inc和当前sapp版本不一致,打印警告功能。 ********************************************************************* 2017-09-04 李佳 1)marsio4不再支持runtime检测,平台增加runtime.log,记录单包处理延时; 2)合并单向流处理ISN的缺陷, 可以通过C2S方向的SYN,ACK包,推算出S2C的ISN. ********************************************************************* 2017-09-21 李佳,刘洋 1)增加回调函数platform_register_action_judge, 平台最终的包转发返回值PASS or DROP由外部插件决定. 2)修改插件管理模块,返回值根据业务插件类型, FD or JC决定; 3)修改默认不识别流量转发策略, GDEV模式下为DROP; ********************************************************************* 2017-09-28 李佳 1)增加按业务号保活功能,WY保活插件只在主应用下设置gdev保活插件的业务号; ********************************************************************* 2017-10-10 李佳 1)串联模式下丢弃组播数据包. ********************************************************************* 2017-10-26 李佳 1)Gserial_send系列函数增加发包日志, 便于WY环境下查找问题. 2)增加field_stat输出. ********************************************************************* 2017-11-09 李佳 1)Gserial_send系列函数发包按ip, tcp, udp分协议类型统计。 2)内置pcap.h, 在纯新机器上可以编译通过. ********************************************************************* 2017-11-13 李佳 1)增加GDEV保活计数获取接口, 便于统计; ********************************************************************* 2017-11-24 李佳 1)VxLan模式PPP或HDLC封装, MAC地址为驱动随机填充的, 不能用于判定广播、组播等操作. ********************************************************************* 2017-12-08 李佳 1)修改平台调用TCPALL插件逻辑, 先调用TCPALL, 后调用TCP; 2)对于一个流的首包是RST且SEQ=0的包,平台忽略不处理。 ********************************************************************* ************************* 2017 year ********************************* ********************************************************************* 2018-02-2 李佳 1)修复marsio捕包、双网卡串联模式下, 错误丢弃ARP包导致两边不通的问题. 2)marsio-4.0新增empty_call模式, 用于WY主动发包插件, 保证插件发包和包处理线程在同一个上下文空间。 ********************************************************************* 2018-02-28 李佳 1)修复插重要件不保活时, gdev仍继续保活的BUG; 2)修改vxlan模式下, 丢弃广播、组播包的判断逻辑. ********************************************************************* 2018-03-13 李佳 1)修复teredo隧道非标准端口无法识别问题. ********************************************************************* 2018-04-17 刘洋 1)主从应用都是通过配置文件PLUGINFO获得,该功能由总控添加,不过sapp中需要将原功能注释掉,即plugin.c:733行。 ********************************************************************* 2018-04-25 李佳 1)修复get_this_layer_header()函数,流超时淘汰的BUG; ********************************************************************* 2018-09-23 李佳 1)修改判断广播和组播的判断逻辑, vxlan模式下对于vxlan封装的数据包不做判断; 2)支持IPV6发包. ********************************************************************* 2018-11-08 李佳 1)增加Gserial_sendpacket_ipv6_layer()函数, 可以发送已构造好的IPV6数据包. ********************************************************************* 2018-11-16 李佳 1)支持cmake, 与并联版本部分同步. #endif