本文档介绍如何使用用于轮询ASR上硬件丢弃计数器的命令对聚合服务路由器(ASR)1000上的基于区域的防火墙(ZBFW)功能进行最佳故障排除。ASR1000是基于硬件的转发平台。Cisco IOS-XE®的软件配置对硬件ASIC(量子流处理器(QFP))进行编程,以执行功能转发功能。这可实现更高的吞吐量和更好的性能。缺点是对故障排除提出了更大的挑战。传统的Cisco IOS命令通过基于区域的防火墙(ZBFW)轮询当前会话和丢弃计数器不再有效,因为丢弃不再在软件中。
要排除数据路径故障,您必须确定流量是否正确通过ASR和Cisco IOS-XE代码。特定于防火墙功能,数据路径故障排除遵循以下步骤:
show tech support firewall的输出总结如下:
-------- show clock --------
-------- show version -------
-------- show running-config --------
-------- show parameter-map type inspect --------
-------- show policy-map type inspect -------
-------- show class-map type inspect --------
-------- show zone security --------
-------- show zone-pair security --------
-------- show policy-firewall stats global --------
-------- show policy-firewall stats zone --------
-------- show platform hardware qfp active feature firewall datapath <submode> --------
-------- show platform software firewall RP <submode> --------
可以获取连接信息,以便列出ZBFW上的所有连接。输入此命令:
ASR#show policy-firewall sessions platform
--show platform hardware qfp active feature firewall datapath scb any any any any any all any --
[s=session i=imprecise channel c=control channel d=data channel]
14.38.112.250 41392 14.36.1.206 23 proto 6 (0:0) [sc]
它显示从14.38.112.250到14.36.1.206的TCP Telnet连接。
连接表可以向下过滤到特定源地址或目标地址。在平台子模式后使用过滤器。要过滤的选项包括:
radar-ZBFW1#show policy-firewall sessions platform ?
all detailed information
destination-port Destination Port Number
detail detail on or off
icmp Protocol Type ICMP
imprecise imprecise information
session session information
source-port Source Port
source-vrf Source Vrf ID
standby standby information
tcp Protocol Type TCP
udp Protocol Type UDP
v4-destination-address IPv4 Desination Address
v4-source-address IPv4 Source Address
v6-destination-address IPv6 Desination Address
v6-source-address IPv6 Source Address
| Output modifiers
<cr>
此连接表已过滤,因此仅显示源自14.38.112.250的连接:
ASR#show policy-firewall sessions platform v4-source-address 14.38.112.250
--show platform hardware qfp active feature firewall datapath scb 14.38.112.250
any any any any all any --
[s=session i=imprecise channel c=control channel d=data channel]
14.38.112.250 41392 14.36.1.206 23 proto 6 (0:0) [sc]
一旦过滤了连接表,就可以获得详细的连接信息以便进行更全面的分析。要显示此输出,请使用detail关键字。
ASR#show policy-firewall sessions platform v4-source-address 14.38.112.250 detail
--show platform hardware qfp active feature firewall datapath scb 14.38.112.250
any any any any all any detail--
[s=session i=imprecise channel c=control channel d=data channel]
14.38.112.250 41426 14.36.1.206 23 proto 6 (0:0) [sc]
pscb : 0x8c5d4f20, bucket : 64672, fw_flags: 0x204 0x20419441,
scb state: active, scb debug: 0
nxt_timeout: 360000, refcnt: 1, ha nak cnt: 0, rg: 0, sess id: 117753
hostdb: 0x0, L7: 0x0, stats: 0x8e118e40, child: 0x0
l4blk0: 78fae7a7 l4blk1: e36df99c l4blk2: 78fae7ea l4blk3: 39080000
l4blk4: e36df90e l4blk5: 78fae7ea l4blk6: e36df99c l4blk7: fde0000
l4blk8: 0 l4blk9: 1
root scb: 0x0 act_blk: 0x8e1115e0
ingress/egress intf: GigabitEthernet0/0/2 (1021), GigabitEthernet0/0/0 (131065)
current time 34004163065573 create tstamp: 33985412599209 last access: 33998256774622
nat_out_local_addr:port: 0.0.0.0:0 nat_in_global_addr:port: 0.0.0.0:0
syncookie fixup: 0x0
halfopen linkage: 0x0 0x0
cxsc_cft_fid: 0x0
tw timer: 0x0 0x0 0x372ba 0x1e89c181
Number of simultaneous packet per session allowed: 25
bucket 125084 flags 1 func 1 idx 8 wheel 0x8ceb1120
在XE 3.9期间,丢弃计数器输出发生了变化。在XE 3.9之前,防火墙丢弃原因非常一般。在XE 3.9之后,防火墙丢弃原因扩展为更加精细。
要验证丢弃计数器,请执行两个步骤:
要依赖的基本命令提供QFP上的所有丢包:
Router#show platform hardware qfp active statistics drop
此命令显示QFP上全局丢弃的泛型。这些丢包可以位于任何功能上。一些示例功能包括:
Ipv4Acl
Ipv4NoRoute
Ipv6Acl
Ipv6NoRoute
NatIn2out
VfrErr
...etc
要查看所有丢包,包括值为零的计数器,请使用命令:
show platform hardware qfp active statistics drop all
要清除计数器,请使用此命令。在将输出显示到屏幕后,它会清除输出。此命令在读取时清除,因此在输出显示到屏幕后将其重置为零。
show platform hardware qfp active statistics drop clear
以下是QFP全局防火墙丢弃计数器列表和说明:
防火墙全局丢弃原因 | 解释 |
防火墙背压 | 由于日志记录机制的背压,丢包。 |
FirewallInvalidZone | 没有为接口配置安全区域。 |
防火墙L4Insp | L4策略检查失败。有关更精细的丢弃原因(防火墙功能丢弃原因),请参阅下表。 |
FirewallNoForwardingZone | 防火墙未初始化,不允许任何流量通过。 |
防火墙非会话 | 会话创建失败。可能是因为已达到最大会话限制或内存分配失败。 |
防火墙策略 | 已配置的防火墙策略已丢弃。 |
防火墙L4 | L4检测失败。有关更精细的丢弃原因(防火墙功能丢弃原因),请参阅下表。 |
防火墙L7 | 由于L7检测而丢弃数据包。有关更精细的L7丢弃原因(防火墙功能丢弃原因)的列表,请参阅下文。 |
FirewallNotInitiator | 不是TCP、UDP或ICMP的会话发起方。未创建会话。例如,对于ICMP,收到的第一个数据包不是ECHO或TIMESTAMP。对于TCP,它不是SYN。 这可能发生在正常数据包处理或不精确信道处理中。 |
FirewallNoNewSession | 防火墙高可用性不允许新会话。 |
FirewallSyncookieMaxDst | 为了提供基于主机的SYN泛洪保护,每个目标的SYN速率为SYN泛洪限制。当目标条目数达到限制时,将丢弃新的SYN数据包。 |
FirewallSyncookie | 触发SYNCOLIE逻辑。这表示已发送带SYN Cookie的SYN/ACK,并丢弃原始SYN数据包。 |
防火墙ARStandby | 非对称路由未启用,冗余组未处于活动状态。 |
QFP全局丢弃计数器的限制是丢弃原因没有粒度,而且某些丢弃原因(如FirewallL4 )会过载到几乎不用进行故障排除的程度。此功能在Cisco IOS-XE 3.9(15.3(2)S)中得到增强,在该版本中添加了防火墙功能丢弃计数器。这提供了一组更精细的丢弃原因:
ASR#show platform hardware qfp active feature firewall drop all
-------------------------------------------------------------------------------
Drop Reason Packets
-------------------------------------------------------------------------------
Invalid L4 header 0
Invalid ACK flag 0
Invalid ACK number 0
....
以下是防火墙功能丢弃原因和解释的列表:
防火墙功能丢弃原因 | 解释 |
标头长度无效 | 数据报太小,无法包含第4层TCP、UDP或ICMP报头。其原因可能是:
|
UDP数据长度无效 | UDP数据报长度与UDP报头中指定的长度不匹配。 |
ACK号无效 | 此下降可能是由以下原因之一造成的:
|
ACK标志无效 |
此下降可能是由以下原因之一造成的:
|
TCP发起程序无效 |
当:
|
SYN与数据 | SYN数据包包含负载。不支持此功能。 |
TCP标志无效 | 无效的TCP标志可能由以下因素引起:
|
处于SYNSENT状态的段无效 |
SYNSENT状态中的无效TCP数据段是由以下原因造成的:
|
处于SYNRCVD状态的段无效 |
SYNRCVD状态中的无效TCP数据段可能由以下因素引起:
|
SEQ无效 |
当数据段来自发起方时,这会在SYNRCVD状态中发生。原因:
|
窗口缩放选项无效 |
无效的TCP窗口缩放选项是由不正确的窗口缩放选项字节长度引起的。 |
TCP窗口外 | 数据包太旧 — 一个窗口位于另一端的ACK后面。这可能发生在ESTABLISHED、CLOSEWAIT和LASTACK状态。 |
发送FIN后的TCP额外负载 |
FIN发送后收到负载。这可能发生在CLOSEWAIT状态。 |
TCP窗口溢出 |
当传入数据段大小溢出接收方的窗口时,会发生这种情况。但是,如果启用vTCP,则允许此条件,因为防火墙需要缓冲数据段,以便ALG稍后使用。 |
具有无效标志的重新转换 |
接收方已确认重发的数据包。 |
TCP无序数据段 | 无序数据包即将传送到L7进行检查。如果L7不允许OOO网段,此数据包将被丢弃。 |
SYN 泛洪 | 在TCP SYN泛洪攻击下。在某些情况下,当当前与此主机的连接超过配置的半开值时,防火墙将在一段时间内拒绝与此IP地址的任何新连接。因此,数据包将被丢弃。 |
内部错误 — 同步泛洪检查分配失败 |
在synflood检查期间,主机db的分配失败。 建议操作:选中“show platform hardware qfp active feature firewall memory”以检查内存状态。 |
Synflood封锁丢弃 |
如果超过配置的半开连接并配置了封锁时间,则会丢弃所有到此IP地址的新连接。 |
半开放会话限制超出 |
由于超出允许的半打开会话数,数据包被丢弃。 另请检查“max-incomplete high/low”和“one-minute high/low”的设置,以确保半打开会话的数量不会因这些配置而受到限制。 |
每个流的Pkt太多 |
超过每个流允许的可检查数据包的最大数量。最大数为25。 |
每个流的ICMP错误数据包过多 |
超过每个流允许的ICMP错误数据包的最大数量。最大数为3。 |
不期望TCP负载从Rsp到Init |
在SYNRCVD状态下,TCP从响应方向到发起方方向接收带负载的数据包。 |
内部错误 — 未定义方向 | 未定义数据包方向。 |
当前窗口内的SYN | 在已建立的TCP连接窗口中可以看到SYN数据包。 |
当前窗口内的RST | 在已建立的TCP连接窗口内观察到RST数据包。 |
杂散网段 |
接收不应通过TCP状态机接收的TCP数据段,例如在侦听状态下从响应方接收的TCP SYN数据包。 |
ICMP内部错误 — 丢失的ICMP NAT信息 |
ICMP数据包已经过NAT,但缺少内部NAT信息。这是内部错误。 |
处于SCB关闭状态的ICMP数据包 |
收到处于SCB CLOSE状态的ICMP数据包。 |
ICMP数据包中缺少IP报头 |
ICMP数据包中缺少IP报头。 |
ICMP错误无IP或ICMP |
负载中没有IP或ICMP的ICMP错误数据包。可能是由格式错误的数据包或攻击引起的。 |
ICMP错误PKT太短 |
ICMP错误数据包太短。 |
ICMP错误超出突发限制 | ICMP错误数据包超过突发限制10。 |
ICMP错误不可达 |
ICMP错误数据包无法到达超出限制。仅允许第1个不可达数据包通过。 |
ICMP错误无效Seq# |
嵌入式数据包的Seq#与发生ICMP错误的数据包的seq#不匹配。 |
ICMP错误无效确认 |
嵌入ICMP错误数据包中的ACK无效。 |
ICMP操作丢弃 |
配置的ICMP操作为丢弃。 |
没有策略映射的区域对 |
区域对上不存在策略。可能是因为未将ALG(应用层网关)配置为打开应用数据通道的针孔,或者ALG未正确打开针孔,或者由于可扩展性问题未打开针孔。 |
会话丢失且策略不存在 |
会话查找失败,且不存在用于检查此数据包的策略。 |
ICMP错误和策略不存在 |
ICMP错误,在区域对上未配置策略。 |
分类失败 |
当防火墙尝试确定协议是否可检查时,给定区域对中的分类失败。 |
分类操作丢弃 |
分类操作为丢弃。 |
安全策略配置错误 |
由于安全策略配置错误,分类失败。这也可能是因为L7数据通道没有引脚。 |
将RST发送到响应方 |
当ACK#不等于ISN+1时,将RST发送到SYNSENT状态的响应方。 |
防火墙策略丢弃 |
策略操作即将丢弃。 |
分片丢弃 | 丢弃第一个分段时丢弃剩余的分段。 |
ICMP防火墙策略丢弃 | ICMP嵌入数据包的策略操作为DROP。 |
L7检测返回DROP |
L7(ALG)决定丢弃数据包。原因可从不同的ALG统计中找到。 |
L7网段PKT不允许 | 当ALG不执行时,收到分段数据包。 |
L7分段PKT不允许 | 当ALG不执行时,收到分段(或VFR)数据包。 |
未知的L7协议类型 |
无法识别的协议类型。 |
从上述全局或防火墙功能丢弃计数器中确定丢弃原因后,如果这些丢弃是意外的,则可能需要其他故障排除步骤。除了为确保启用的防火墙功能的配置正确进行配置验证外,通常还需要对相关流量执行数据包捕获,以查看数据包是否格式错误或是否存在任何协议或应用程序实施问题。
ASR日志记录功能生成系统日志以记录丢弃的数据包。这些系统日志提供了有关丢弃数据包的原因的更多详细信息。系统日志绑定分为两种类型:
为了查明丢包的原因,您可以使用通用ZBFW故障排除,例如启用日志丢包。配置数据包丢弃日志记录有两种方法。
方法 1:使用inspect-global parameter-map记录所有丢弃的数据包。
parameter-map type inspect-global log dropped-packets
方法 2:使用自定义检查参数映射只记录特定类的丢弃的数据包。
parameter-map type inspect LOG_PARAM
log dropped-packets
!
policy-map type inspect ZBFW_PMAP
class type inspect ZBFW_CMAP
inspect LOG_PARAM
这些消息会根据ASR的日志记录配置发送到日志或控制台。以下是丢弃日志消息的示例。
*Apr 8 13:20:39.075: %IOSXE-6-PLATFORM: F0: cpp_cp: QFP:0.0 Thread:103
TS:00000605668054540031 %FW-6-DROP_PKT: Dropping tcp pkt from GigabitEthernet0/0/2
14.38.112.250:41433 => 14.36.1.206:23(target:class)-(INSIDE_OUTSIDE_ZP:class-default)
due to Policy drop:classify result with ip ident 11579 tcp flag 0x2, seq 2014580963,
ack 0
policy-map type inspect ZBFW_PMAP
class class-default
drop log
高速日志记录(HSL)直接从QFP生成系统日志,并将其发送到已配置的netflow HSL收集器。这是ASR上ZBFW的推荐日志记录解决方案。
对于HSL,请使用以下配置:
parameter-map type inspect inspect-global
log template timeout-rate 1
log flow-export v9 udp destination 1.1.1.1 5555
要使用此配置,需要支持Netflow版本9的NetFlow收集器。详情请参阅
配置指南:基于区域的策略防火墙,Cisco IOS XE版本3S(ASR 1000)防火墙高速日志记录
启用条件调试以启用数据包跟踪,然后启用以下功能的数据包跟踪:
ip access-list extended CONDITIONAL_ACL
permit ip host 10.1.1.1 host 192.168.1.1
permit ip host 192.168.1.1 host 10.1.1.1
!
debug platform condition feature fw dataplane submode all level info
debug platform condition ipv4 access-list CONDITIONAL_ACL both
打开数据包跟踪功能:
debug platform packet-trace copy packet both
debug platform packet-trace packet 16
debug platform packet-trace drop
debug platform packet-trace enable
使用此功能有两种方法:
打开条件调试:
debug platform condition start
运行测试,然后关闭调试:
debug platform condition stop
现在,信息可以显示到屏幕。在本例中,由于防火墙策略,ICMP数据包被丢弃:
Router#show platform packet-trace statistics
Packets Summary
Matched 2
Traced 2
Packets Received
Ingress 2
Inject 0
Packets Processed
Forward 0
Punt 0
Drop 2
Count Code Cause
2 183 FirewallPolicy
Consume 0
Router#show platform packet-trace summary
Pkt Input Output State Reason
0 Gi0/0/2 Gi0/0/0 DROP 183 (FirewallPolicy)
1 Gi0/0/2 Gi0/0/0 DROP 183 (FirewallPolicy)
Router#show platform packet-trace packet 0
Packet: 0 CBUG ID: 2980
Summary
Input : GigabitEthernet0/0/2
Output : GigabitEthernet0/0/0
State : DROP 183 (FirewallPolicy)
Timestamp
Start : 1207843476722162 ns (04/15/2014 12:37:01.103864 UTC)
Stop : 1207843477247782 ns (04/15/2014 12:37:01.104390 UTC)
Path Trace
Feature: IPV4
Source : 10.1.1.1
Destination : 192.168.1.1
Protocol : 1 (ICMP)
Feature: ZBFW
Action : Drop
Reason : ICMP policy drop:classify result
Zone-pair name : INSIDE_OUTSIDE_ZP
Class-map name : class-default
Packet Copy In
c89c1d51 5702000c 29f9d528 08004500 00540000 40004001 ac640e26 70fa0e24
01010800 172a2741 00016459 4d5310e4 0c000809 0a0b0c0d 0e0f1011 12131415
Packet Copy Out
c89c1d51 5702000c 29f9d528 08004500 00540000 40003f01 ad640e26 70fa0e24
01010800 172a2741 00016459 4d5310e4 0c000809 0a0b0c0d 0e0f1011 12131415
show platform packet-trace packet <num> decode命令可解码数据包报头信息和内容。XE3.11中引入了以下功能:
Router#show platform packet-trace packet all decode
Packet: 0 CBUG ID: 2980
Summary
Input : GigabitEthernet0/0/2
Output : GigabitEthernet0/0/0
State : DROP 183 (FirewallPolicy)
Timestamp
Start : 1207843476722162 ns (04/15/2014 12:37:01.103864 UTC)
Stop : 1207843477247782 ns (04/15/2014 12:37:01.104390 UTC)
Path Trace
Feature: IPV4
Source : 10.1.1.1
Destination : 192.168.1.1
Protocol : 1 (ICMP)
Feature: ZBFW
Action : Drop
Reason : ICMP policy drop:classify result
Zone-pair name : INSIDE_OUTSIDE_ZP
Class-map name : class-default
Packet Copy In
c89c1d51 5702000c 29f9d528 08004500 00540000 40004001 ac640e26 70fa0e24
01010800 172a2741 00016459 4d5310e4 0c000809 0a0b0c0d 0e0f1011 12131415
ARPA
Destination MAC : c89c.1d51.5702
Source MAC : 000c.29f9.d528
Type : 0x0800 (IPV4)
IPv4
Version : 4
Header Length : 5
ToS : 0x00
Total Length : 84
Identifier : 0x0000
IP Flags : 0x2 (Don't fragment)
Frag Offset : 0
TTL : 64
Protocol : 1 (ICMP)
Header Checksum : 0xac64
Source Address : 10.1.1.1
Destination Address : 192.168.1.1
ICMP
Type : 8 (Echo)
Code : 0 (No Code)
Checksum : 0x172a
Identifier : 0x2741
Sequence : 0x0001
Packet Copy Out
c89c1d51 5702000c 29f9d528 08004500 00540000 40003f01 ad640e26 70fa0e24
01010800 172a2741 00016459 4d5310e4 0c000809 0a0b0c0d 0e0f1011 12131415
ARPA
Destination MAC : c89c.1d51.5702
Source MAC : 000c.29f9.d528
Type : 0x0800 (IPV4)
IPv4
Version : 4
Header Length : 5
ToS : 0x00
Total Length : 84
Identifier : 0x0000
IP Flags : 0x2 (Don't fragment)
Frag Offset : 0
TTL : 63
Protocol : 1 (ICMP)
Header Checksum : 0xad64
Source Address : 10.1.1.1
Destination Address : 192.168.1.1
ICMP
Type : 8 (Echo)
Code : 0 (No Code)
Checksum : 0x172a
Identifier : 0x2741
Sequence : 0x0001
Cisco IOS-XE 3.7(15.2(4)S)中增加了嵌入式数据包捕获支持。 有关详细信息,请参阅
Cisco IOS和IOS-XE的嵌入式数据包捕获配置示例。
在XE3.10中,将引入条件调试。可以使用条件语句来确保ZBFW功能仅记录与条件相关的调试消息。条件调试使用ACL来限制与ACL元素匹配的日志。此外,在XE3.10之前,调试消息更难读取。调试输出在XE3.10中得到了改进,使其更易于理解。
要启用这些调试,请发出以下命令:
debug platform condition feature fw dataplane submode [detail | policy | layer4 | drop]
debug platform condition ipv4 access-list <ACL_name> both
debug platform condition start
请注意,condition命令必须通过ACL和方向设置。条件调试在使用debug platform condition start命令启动后才能实现。要关闭条件调试,请使用命令debug platform condition stop。
debug platform condition stop
要关闭条件调试,请勿使用命令undebug all。要关闭所有条件调试,请使用命令:
ASR#clear platform condition all
在XE3.14之前, ha和事件调试不是条件的。因此,命令debug platform condition feature fw dataplane submode all会导致创建所有日志,而与下面选择的条件无关。这可能会产生额外的噪音,使调试变得困难。
默认情况下,条件日志记录级别为info。要增加/降低日志记录级别,请使用命令:
debug platform condition feature fw dataplane submode all [verbose | warning]
调试文件不会打印到控制台或显示器。所有调试都写入到ASR的硬盘。调试将写入到文件夹tracelogs下的硬盘中,名称为cpp_cp_F0-0.log.<date>。要查看写入调试的文件,请使用以下输出:
ASR# cd harddisk:
ASR# cd tracelogs
ASR# dir cpp_cp_F0*Directory of harddisk:/tracelogs/cpp_cp_F0*
Directory of harddisk:/tracelogs/
3751962 -rwx 1048795 Jun 15 2010 06:31:51 +00:00
cpp_cp_F0-0.log.5375.20100615063151
3751967 -rwx 1048887 Jun 15 2010 02:18:07 +00:00
cpp_cp_F0-0.log.5375.20100615021807
39313059840 bytes total (30680653824 bytes free)
每个调试文件将存储为cpp_cp_F0-0.log.<date>文件。这些是可通过TFTP从ASR复制的常规文本文件。ASR上的日志文件最大值为1Mb。在1Mb后,调试将写入新的日志文件。因此,每个日志文件都加上时间戳以指示文件的开始。
日志文件可能存在于以下位置:
harddisk:/tracelogs/
bootflash:/tracelogs/
由于日志文件仅在旋转后显示,因此可以使用以下命令手动旋转日志文件:
ASR# test platform software trace slot f0 cpp-control-process rotate
这会立即创建“cpp_cp”日志文件,并在QFP上启动新文件。例如:
ASR#test platform software trace slot f0 cpp-control-process rotate
Rotated file from: /tmp/fp/trace/stage/cpp_cp_F0-0.log.7311.20140408134406,
Bytes: 82407, Messages: 431
ASR#more tracelogs/cpp_cp_F0-0.log.7311.20140408134406
04/02 10:22:54.462 : btrace continued for process ID 7311 with 159 modules
04/07 16:52:41.164 [cpp-dp-fw]: (info): QFP:0.0 Thread:110 TS:00000531990811543397
:FW_DEBUG_FLG_HA:[]: HA[1]: Changing HA state to 9
04/07 16:55:23.503 [cpp-dp-fw]: (info): QFP:0.0 Thread:120 TS:00000532153153672298
:FW_DEBUG_FLG_HA:[]: HA[1]: Changing HA state to 10
04/07 16:55:23.617 [buginf]: (debug): [system] Svr HA bulk sync CPP(0) complex(0)
epoch(0) trans_id(26214421) rg_num(1)
此命令允许将调试文件合并到单个文件中,以便更轻松地处理。它会合并目录中的所有文件,并根据时间进行交互。当日志非常冗余且跨多个文件创建时,这会有所帮助:
ASR#request platform software trace slot rp active merge target bootflash:MERGED_OUTPUT.log
Creating the merged trace file: [bootflash:MERGED_OUTPUT.log]
including all messages
Done with creation of the merged trace file: [bootflash:MERGED_OUTPUT.log]
版本 | 发布日期 | 备注 |
---|---|---|
1.0 |
10-Dec-2015 |
初始版本 |