summaryrefslogtreecommitdiff
path: root/readme_UTF8.txt
blob: 535390126bb271446445d3d3759b3a312b579851 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
#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-06-12 李佳
1)平台修改流淘汰机制, 业务插件可设置独立的超时时间, 如果UDP流一段时间无包到达, 也不会因流表满而遭淘汰。
*********************************************************************
2017-06-28 李佳
1)增加检测实际运行环境的stream_inc和当前sapp版本不一致,打印警告功能。
*********************************************************************
2017-07-10 李佳
1)marsio模式,则增加从main.conf中获取app_name功能;
2)修改UDP超时淘汰机制,除reset当前流外,还可以淘汰其他超时的流;
*********************************************************************
2017-08-03 李佳
1)增加TCP单向流推测对端ISN功能;
1)增加TCP单向流推测对端总计接收字节数功能;
*********************************************************************
2017-08-08 李佳
1)修改tcpdump_mesa, 支持指定捕包线程ID
*********************************************************************
2017-08-24 李佳
1)修改tcpdump_mesa, 增加捕包采样率,防止在大流量环境下丢包。
*********************************************************************
2017-09-04 李佳
1)增加函数sapp_get_platform_opt(), 供插件获取平台内部参数,如包数、字节数等。
*********************************************************************
2017-09-05 李佳
1)修改tcp获取syn包选项dir方向参数BUG;
*********************************************************************
2017-09-26 李佳
1)修复2017-05-11修改ip_entry和ip_frag_entry调用优先级,导致IP包会调用ip_frag_entry的BUG.
*********************************************************************
2017-10-03 李佳
1)增加解析TCP包头部选项TCP_OPT_MULTI_PATH_TCP, 因选项不定长,且可能超过8字节,
  原有结构不适用,为了向后兼容同时支持新选项,
  新增struct tcp_option_ext结构,
  及函数MESA_get_tcp_pkt_opts_ext().
*********************************************************************
2017-10-10 李佳
1)修改在DDP模式下tcpdump_mesa的包捕获位置,可以捕获DDP内封装的原始包。
*********************************************************************
2017-10-16 李佳
1)增加判断四元组重用的判断。
2)增加iknow_switch配置文件, iknow功能可以关闭, 默认开启.
3)增加symbol_conflict_check配置文件, 符号名检查可以关闭, 默认开启.
*********************************************************************
2017-10-19 李佳
1)增加anti_flood模块, 用于抵御SYN_flood, DNS_flood攻击;
2)修改TCPALL插件, 因乱序的SYN, SYN/ACK包,被误认为是四元组重用, 重置连接而导致被分拆为两个流的BUG.
*********************************************************************
2017-10-31 李佳
1)修复因pcap.h, libpcap.so在纯新的系统上缺失,第一次无法编译的情况;
2)修复PPTP隧道协议,因PPP头部压缩且没有获取PPTP控制连接时,无法解析的问题。
*********************************************************************
2017-12-20 李佳
1)l2tp_protocol_plug修复地址解析长度超范围BUG;
2)更新TCP流还原机制, 四元组重用判断与最后一个包的时间间隔, 太短则认为是恶意逃逸, 丢弃.

*********************************************************************
************************* 2018 year *********************************
*********************************************************************

2018-01-19 lijia add,
1-多个tcpdump_mesa同时启动时, 后续的连接会抢占第一个连接的数据流, 但使用第一个连接的过滤条件,
  增加TCP命令连接的确认机制, 如果sapp不回复确认包, tcpdump_mesa不启动捕包.

2-增加丢包计数, 如果使用-a参数指定perceptive模式, sapp在发送包时, 在源MAC地址上打上序号,
  tcpdump_mesa检查序号是否连续, 以确认中间是否有丢包, 丢了几个包.

*********************************************************************
2018-03-02 lijia add,
1)因并联模式FD效果不好,增加FD补救向GDEV下发规则功能,依靠串联丢包提高FD率。
*********************************************************************
2018-03-13 李佳
1)修复teredo隧道非标准端口无法识别问题.
*********************************************************************
2018-03-23 李佳
1) 修复GDEV规则下发插件BUG.
*********************************************************************
2018-04-25 李佳
1)修复get_this_layer_header()函数, 在流超时淘汰时的BUG;
*********************************************************************
2018-07-10 李佳
1)修改private_ip段识别错误BUG;
*********************************************************************
2018-08-01 李佳
1)针对3x7项目,增加剥离3x7数据包头功能,将内层原始数据包再注入ipv4_entry();
*********************************************************************
2018-08-03 李佳
1)修复IP头部检测不支持ESP问题, 导致IPSEC业务被丢弃.
*********************************************************************
2018-09-23 李佳
1)增加对MAC_IN_MAC回流镜像格式的处理;
2)修复MAC_IN_MAC封装格式下, RST发送BUG.
*********************************************************************
2018-10-13 李佳
1)修改IP包头检测函数, 对协议类型字段的检查, 防止误丢弃某些不常见协议的数据包. 
*********************************************************************
2018-10-19 李佳
1)修改field_stat输出TCP并发连接数BUG.
*********************************************************************
2018-10-24 李佳
1)增加对MAC_IN_MAC的地址解析, 从中获取GDEV_ID, LINK_ID, LINK_DIR等参数.
*********************************************************************
2018-11-02 李佳
1)修改mpls_hdr头部定义错误;
2)解析多层嵌套MPLS数据包.
*********************************************************************
2018-11-05 杨威
1)修改源码, 适配cmake编译.
*********************************************************************
2018-11-08 杨威
1.更新gprs tunnel协议识别逻辑,使用identify_gtp函数,取代原有的仅识别端口的逻辑
2.更新packet_io_send_fake_pkt_gdev函数逻辑,正确的计算偏移填写发包内容时的data和datalen
3.更新packet_io_send_fake_pkt,对于注入发包,直接调用packet_io_send_fake_pkt_by_gdev
4.MESA_send_handle新增raw_udp_fd用于从udp负载开始发送注入包
*********************************************************************
2018-11-09 杨威
1.整理TODO,按重要程度分级
2.移除run目录下的log文件
3.更新GTP处理逻辑,增加对带seq消息的处理并保存在地址中
*********************************************************************
2018-11-12 杨威,李佳
1.更新GTP处理逻辑, 增加对端地址(TEID,SEQ等)更新逻辑。 
#endif