CN1567874A - 一种逻辑仿真方法 - Google Patents

一种逻辑仿真方法 Download PDF

Info

Publication number
CN1567874A
CN1567874A CNA031467032A CN03146703A CN1567874A CN 1567874 A CN1567874 A CN 1567874A CN A031467032 A CNA031467032 A CN A031467032A CN 03146703 A CN03146703 A CN 03146703A CN 1567874 A CN1567874 A CN 1567874A
Authority
CN
China
Prior art keywords
message
stream
input port
parameter
service input
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CNA031467032A
Other languages
English (en)
Other versions
CN100364285C (zh
Inventor
王进成
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CNB031467032A priority Critical patent/CN100364285C/zh
Publication of CN1567874A publication Critical patent/CN1567874A/zh
Application granted granted Critical
Publication of CN100364285C publication Critical patent/CN100364285C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明有关于一种用于通讯类逻辑仿真的激励报文产生方法,包括A)在逻辑的一个业务输入端口中定义流并指定流的参数;B)启动逻辑仿真器并以来自仿真器的请求激励报文的事件,触发业务输入端口进行流的调度;C)业务输入端口调度出一个流,并构造出一个激励报文;D)应答仿真器的激励报文请求事件,并将激励报文传递过去;E)返回步骤B),直至仿真结束。本发明将报文构造和报文流调度分离开来,可将报文流调度过程以及报文流的管理定义成一个可以共享的模块,最大程度实现了模块共享;对于不能共享的报文构造功能转交给用户实现,这样,就大大减少了用户编写激励软件的工作量。

Description

一种逻辑仿真方法
技术领域
本发明涉及测试领域,尤指一种逻辑仿真方法。
背景技术
在进行通讯类大规模逻辑功能验证仿真时,实现激励模块的重用、支持各种激励通讯报文的产生是一个很复杂艰难的任务。主要难点在于:实际的报文流是一种无序,但又有一定的流量特征,一般是多个报文流的无序混合,产生这种无序报文流需要进行报文调度;通讯报文往往是一种协议报文封装另一种协议报文,实际报文是多种协议报文的层层封装;用户能够任意设置报文各个域的值,并能设置异常值。激励报文,是在仿真环境下的通讯报文,通常用激励报文输入给被仿真的数字逻辑,通过仿真检查数字逻辑对通讯报文的处理是否正确。因此,应尽量使激励报文接近实际的通讯报文。
进行通讯类大规模逻辑仿真时,现有技术中所采用的激励报文产生方法一般是用C语言或脚本语言直接编程,如以太网报文定义:
  typedef struct{

  sU64 sa:48;//源地址48位

  sU64 da:48;//目的地址48位

  sU16 typelength;//类型长度16位

  VLAN_HDR_ T vlan;//虚拟局域网标签

  sU32 enable:1;//使能位

  }ENET_HDR_T;

  VLAN标签定义:
        <!-- SIPO <DP n="1"> -->
        <dp n="d1"/>
  typedef struct{

  sU16 tag;//虚拟局域网特征字段

  sU16 id;//虚拟局域网数字标号

  sU32 enable:1;//使能位

  }VLAN_HDR_T;
在调用以太网报文构造函数之前,初始化报文字段的值,以太网报文构造函数将这些字段组合成以太网报文的头部,并附加到报文缓冲区的尾部。
enet.enable=HEADER_ENABLED;
enet.sa=0x123456789abc;
enet.da=0xfeedface33;
enet.typelength=INC[64];
当构造多层协议封装的报文时,如图1中的报文d,先调用ethernet(以太网)的报文首部构造函数,然后依次调用ipv4、tcp、payload的构造函数。当报文产生后,报文被放入一个队列。逻辑的一个业务输入口可以有多个报文队列,每个队列对应一个报文构造程序;一个业务输入口有一个报文队列管理模块,队列管理模块控制各个报文队列中报文的调度,将报文向逻辑仿真器传递。队列管理模块同时完成控制报文向逻辑仿真器传递速度。一个逻辑仿真项目,通常有多个业务输入口,每个口都需要激励报文,用户需要编写程序调用基本的报文产生程序,为每个业务输入口产生报文。队列管理模块也需要为每个业务输入口进行编写,这些代码是跟具体的项目密切相关,重用度低,在不同的逻辑项目中改变也比较大。事实上,这种激励报文产生方法没有技术思想,用户写出的代码很随意。
现有技术的缺点:激励产生的方法不具有通用性,在不同的逻辑项目中需要重新编写激励产生程序,代码难以形成共享的模块,在编写测试程序时,代码编写的工作量大,导致仿真方法复杂。
发明内容
本发明提供一种激励报文产生方法及基于该方法的逻辑仿真方法,以解决现有技术中仿真方法太复杂的问题。
为解决上述问题,本发明提供如下解决方案:
一种逻辑仿真方法,包括下列步骤:
A)在逻辑的一个业务输入端口中定义流并指定流的参数;
B)启动逻辑仿真器并触发业务输入端口进行流的调度;
C)业务输入端口调度出一个流,并构造出一个激励报文;
D)业务输入端口将激励报文传递给逻辑仿真器;
E)返回步骤B),直至仿真结束。
所述的流的参数,包括:用于构造报文的参数、流的QOS参数和用于流调度的参数。
所述步骤B)中业务输入端口进行流的调度是由来自仿真器的请求激励报文事件触发的;所述步骤D)中还包括有应答仿真器的激励报文请求事件的步骤。
所述步骤B中,流的调度进一步包括:
比较流的发送数据带宽和期望带宽,如果一个流的发送数据带宽小于其期望带宽,则业务输入端口调度出该流;如果多个流的发送数据带宽均小于其期望带宽,则计算出各流的发送数据带宽与期望带宽的比值,选择出比值最小的流;当多个流的比值相当时,随机选择其中的一个流;如果一个流的发送数据带宽大于其期望带宽,则业务输入端口不再选择该流。
依序调度出来的流,分别构造出各自的激励报文,汇聚成激励报文序列。
所述步骤C)还包括下列步骤:
C1)取出流的构造报文的参数;
C2)构造报文净荷并插入标签;
C3)将参数传递给外部的报文构造器,由报文构造器内的TCL脚本报文构造函数构造出激励报文。
所述的报文构造器是用TCL扩展命令编写的。
所述的标签包括:特征数据、报文序列号、前5个字节的校验码、净荷长度和净荷的CRC冗余校验之中至少一个或多个的组合。
所述用于构造报文的参数,包括:业务输入端口编号、业务输入端口内的子端口编号、流的编号、流上次产生报文的编号、随机数种子、报文内承载的净荷最小字节数、报文内承载的净荷最大字节数和报文内承载的净荷模式之中至少一个或多个的组合。
所述流的QOS参数,包括:乱序、带宽、延时、突发或报文丢弃率之中至少一个或多个的组合。
本发明将报文构造和报文流调度分离开来,可将报文流调度过程以及报文流的管理定义成一个可以共享的模块,最大程度实现了模块共享。对于不能共享的报文构造功能转交给用户实现,这样,就大大减少了用户编写激励软件的工作量。
另外,由于激励报文的构造是以简单的TCL脚本命令控制,在脚本化测试活动中,用户可以方便地构造各种激励报文,用于不同的测试项目。比如构造以太网报文,用户可以在以太网中封装IP报文,在IP报文中封装TCP报文,也可以在以太网中封装PPP报文,还可以在以太网报文中封装MPLS报文,在产生激励时,可以是这几种报文的混合或任一组合。用户可以控制报文数据任一字段的取值,插入错误,在可靠性测试中很有用。
附图说明
图1为现有技术中常见的激励报文。
图2为本发明产生激励报文的过程示意图。
图3为本发明方法的流程图。
图4为本发明方法中激励报文的产生及汇聚成报文序列的过程示意图。
具体实施方式
经过逻辑的业务总线,输送给逻辑的报文,通常是多个报文流的汇聚。在逻辑仿真中,为了产生符合实际的激励数据,我们在逻辑的业务输入端口定义多个流(stream)。所述流是指具有一定特征的报文序列,比如具有相同VLANID(以太网报文中的虚拟以太网标签,4个字节。)的报文可以定义为一条流,具有相同源MAC地址(表示发出该报文的设备的物理地址,6字节)的报文序列也可以定义为一条流,或者将同时具有某几个属性的报文序列定义为一条流。对于一条流可以设置一些QOS属性(服务质量保证属性,包括:乱序、带宽、延时、突发、报文丢弃率),比如设定属于该流的所有报文经过逻辑的延时最大不能超过100微秒。逻辑的业务输入端口中定义的多个流,表示该业务输入端口可以产生的多种不同信息的报文序列。
描述一个报文流需要一组参数,这组参数称为流的定义,不同的报文流只是参数的值不同。流的参数包括三个部分:用于构造报文的参数、用于分析流的QOS是否满足的参数、用于流调度的参数。实际实现时,流的参数很多,这里主要介绍关键参数。
用于构造报文的参数:
  int port_id;//流从属的端口编号。

  int sub_port_id;//流从属的子端口编号

  int flow_sn;//流在所属端口内的序号,从0开始编号。

  int last_txpkt_sn;//该流发送报文的计数,

  int payload_length_min;∥有缺省,需要配置

  int payload_length_max;//有缺省,需要配置

  //净荷数据样式:=0,全0;=1,全FF;=2;55AA;=3,随机;=4,递增。<br/>
缺省=//3,需要配置

  int payload_pattern;
        <!-- SIPO <DP n="5"> -->
        <dp n="d5"/>
  int payload_mode;//=0,长度随机;=1,长度递增。缺省=0,需要配<br/>
置。

  int rand_seed_init;//第一个报文的随即数种子。第一<br/>
个报文构造完成后,Rand_seed_mid参数被刷新到一个新的值。

  iht rand_seed_mid;//产生当前报文的随即数种子。当前报文构<br/>
造完成后,该参数被刷新到一个新的值。
流的QOS参数如下:
  float tx_bandwidth;//设定发送带宽。

  float burst_factor;//突发因子,缺省无。

  float real_tx_bandwidth;//实际发送带宽。

  int drop_rate_max;//接收报文丢弃率上限,缺省无丢包。

  float drop_rate;//实际的接收报文丢弃率。

  float max_delay;//报文最大延时保证。缺省=0,无延时要求。

  int disorder_num;//乱序的允许值,=0不允许乱序,缺省=10,<br/>
表示与前一个报文的序号之差最大不超过10。

  int last_rcvpkt_seq_number;//最近一个接收报文的在该报文流内的排序<br/>
号,用于分析逻辑输出的报文是否乱序,以及乱序是否在disorder_num限定的<br/>
范围内。

  char*disorder_window;//用于产生可控乱序报文的参数。
用于流调度的参数如下:(也是QOS参数的一部分)
float tx_bandwidth;//设定发送带宽。
float burst_factor;//突发因子,缺省无。
float real_tx_bandwidth;//实际发送带宽。
定义好流后,如果业务输入端口收到来自仿真器的激励报文请求,则按照一定的调度算法对这些流进行调度,具体为:在仿真进行时,设有一个虚拟的时钟,它从0开始计时,这里称为仿真时间。业务输入端口的流会记录它产生的数据量,比如当前仿真时间为100us,一条流产生了2K字节数据,产生的数据量的比特位数除以当前仿真时间就得到了流的数据产生速率(即流的发送数据带宽),如果该流的数据产生速率(发送数据带宽)小于期望速率(期望带宽),业务输入端口就应该让这条流再产生一些数据,但可能有多个流的数据产生速率(发送数据带宽)都小于期望速率(期望带宽),业务输入端口计算出各流的发送数据带宽与期望带宽的比值,选择出比值最小的流;当多个流的比值相当时,随机选择其中的一个流,让选择出的流产生数据。如果流的数据产生速率大于期望速率,业务输入端口就不再选择它。这里提到的流,是对某个报文序列的概括描述,比如这个报文序列的带宽,报文之间的间隔控制,报文内的数据模式,报文的长短等等。用户在业务输入端口定义的多个流,就是对这些描述信息的数据化,定义流的时候,并没有真正的报文序列存在。流的调度算法,是根据这些描述信息而进行的,跟具体的报文数据没有关系,所以流的调度是通用化的,可以做成一个通用模块来实现共享。
流是从属于逻辑的一个业务输入端口的,可以很容易地为一个业务输入端口定义任意多条流。流的一部分QOS参数记录逻辑对报文的处理,当报文经过逻辑处理后,相关信息被记录到报文所从属的流中,以分析QOS是否满足。
逻辑的一个业务输入端口,在C语言中可以描述为一个对象,业务输入端口拥有数目可以设定的流,业务输入端口对流进行调度,每次调度出一个流。
用调度出来的流,产生一个激励报文的过程如图2所示。
首先,取出流中用于构造报文的参数。这些参数包括:port_sn表示业务输入接口编号;subport_sn表示业务输入接口内的子端口编号(如果业务输入接口内没有子端口,该参数总是为0);flow_sn表示流的编号,last_txpkt_sn表示流上次产生报文的编号,流每次产生报文将该参数加1;rand_seed_mid表示随机数种子;payload_length_min,表示在报文内承载的净荷最小字节数;payload_length_max,表示在报文内承载的净荷最大字节数;payload_pattern,表示在报文内承载的净荷模式:净荷数据是随机、递增、全0、全1。
然后,构造报文静荷payload并插入了一个标签,标签定义如下:
特征数据2个字节(F55F)+报文序列号FSN(3字节)+前5个字节的校验码(1个字节)+后面净荷长度(2字节)+后面净荷的CRC32(4字节)。
最后,将参数传递给外部的报文构造器,产生出激励报文。
可以看出,传递给外部报文构造器(TCL脚本语言编写)的参数是一种通用化的参数,与具体的报文结构没有关系。产生什么样的报文完全由外部报文构造器决定。
综上所述,本发明的激励报文产生方法,其流程图如图3所示,包括下列步骤:
步骤一:用户在逻辑的业务输入端口定义多条流,指定流的相关参数;
步骤二:使用商业软件仿真器开始仿真;
步骤三:来自仿真器的请求激励报文事件触发业务输入端口进行流的调度;
步骤四:调度出一个流,产生相应的激励报文;
步骤五:应答仿真器的激励报文请求事件,同时将激励报文传递过去;
不断重复步骤三至步骤五,产生出激励报文序列,如图4所示,为流a和流b经过流调度算法,产生激励报文序列的过程。
实际中,为了仿真逻辑的一个业务输入端口的报文流,产生报文数据的模块由两部分组成,一个是用C语言写的模块,称为C模块,主要包含流的定义并完成流的调度。另外一个模块是由脚本语言TCL写的报文构造器,报文构造器内是一些TCL过程函数,由前述C模块调用。
本发明方法中产生报文的TCL代码示例如下:
  #-----------------------------------------

  #port_sn端口编号,假定编号1和2的端口是两个MII口,向逻辑发送以太网<br/>
报文;

  #last_txpkt_sn是报文在流内的序号;
        <!-- SIPO <DP n="8"> -->
        <dp n="d8"/>
  #flow_sn是流在端口内的序号;

  #port_sn、last_txpkt_sn、flow_sn定义为TCL脚本全局变量,并和C模块内<br/>
的变量进行连接。

  #------------------------------------------

  proc mii_pkt_build{}{

  if($port_sn<3){

  #to_hex扩展命令用于将输入的十进制参数,形成16进制字符串,返回的<br/>
字符个数,由第二个参数控制。

  set temp1[to_hex$last_txpkt_sn 6]

  set temp2[to_hex$flow_sn 6]

  set dmac$temp2$temp1

  set smac[to_hex$port_sn 12]

  #create_mac是扩展的报文构造命令,未指定的参数,按照缺省规则构造<br/>
报文。产生后的报文保存在C模块的报文缓冲区中。

  create_mac-dmac Ox$dmac-smac Ox$smac

  #如果将create_mac产生的报文封装为AAL5,则继续:

  create_aa15

  #create_aa15扩展命令能够识别create_mac产生的报文类型,并产生合适的<br/>
封装。
使用TCL脚本编写报文构造器,关键是使用了报文构造扩展命令,这些扩展命令使用时可以指定参数(可以指定错误的参数),也可以不指定,并且能够根据报文内封装的净荷自动设定参数的值。在构造复杂的多层协议封装的报文时,这种报文构造方法很简洁。
使用TCL扩展命令编写的报文构造器,主要特点是,输入参数是统一的,而构造出的报文可以是多种多样的,并且可以在一个报文构造脚本中为不同激励模块(或不同的逻辑业务输入端口)和不同的流程编写各自的报文构造函数(产生不同类型的报文)。

Claims (10)

1、一种逻辑仿真方法,包括下列步骤:
A)在逻辑的一个业务输入端口中定义流并指定流的参数;
B)启动逻辑仿真器并触发业务输入端口进行流的调度;
C)业务输入端口调度出一个流,并构造出一个激励报文;
D)业务输入端口将激励报文传递给逻辑仿真器;
E)返回步骤B),直至仿真结束。
2、如权利要求1所述的逻辑仿真方法,其特征在于:所述的流的参数,包括:用于构造报文的参数、流的QOS参数和用于流调度的参数。
3、如权利要求1所述的逻辑仿真方法,其特征在于:所述步骤B)中业务输入端口进行流的调度是由来自仿真器的请求激励报文事件触发的;所述步骤D)中还包括有应答仿真器的激励报文请求事件的步骤。
4、如权利要求1所述的逻辑仿真方法,其特征在于:所述步骤B)中,流的调度进一步包括:
比较流的发送数据带宽和期望带宽,如果一个流的发送数据带宽小于其期望带宽,则业务输入端口调度出该流;如果多个流的发送数据带宽均小于其期望带宽,则计算出各流的发送数据带宽与期望带宽的比值,选择出比值最小的流;当多个流的比值相当时,随机选择其中的一个流;如果一个流的发送数据带宽大于其期望带宽,则业务输入端口不再选择该流。
5、如权利要求4所述的逻辑仿真方法,其特征在于:依序调度出来的流,分别构造出各自的激励报文,汇聚成激励报文序列。
6、如权利要求1所述的逻辑仿真方法,其特征在于:所述步骤C)还包括下列步骤:
C1)取出流的构造报文的参数;
C2)构造报文净荷并插入标签;
C3)将参数传递给外部的报文构造器,由报文构造器内的TCL脚本报文构造函数构造出激励报文。
7、如权利要求6所述的逻辑仿真方法,其特征在于:所述的报文构造器是用TCL扩展命令编写的。
8、如权利要求6所述的逻辑仿真方法,其特征在于:所述的标签包括:特征数据、报文序列号、前5个字节的校验码、净荷长度和净荷的CRC冗余校验之中至少一个或多个的组合。
9、如权利要求1所述的逻辑仿真方法,其特征在于:所述用于构造报文的参数,包括:业务输入端口编号、业务输入端口内的子端口编号、流的编号、流上次产生报文的编号、随机数种子、报文内承载的净荷最小字节数、报文内承载的净荷最大字节数和报文内承载的净荷模式之中至少一个或多个的组合。
10、如权利要求1所述的逻辑仿真方法,其特征在于:所述流的QOS参数,包括:乱序、带宽、延时、突发或报文丢弃率之中至少一个或多个的组合。
CNB031467032A 2003-07-09 2003-07-09 一种逻辑仿真方法 Expired - Fee Related CN100364285C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB031467032A CN100364285C (zh) 2003-07-09 2003-07-09 一种逻辑仿真方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB031467032A CN100364285C (zh) 2003-07-09 2003-07-09 一种逻辑仿真方法

Publications (2)

Publication Number Publication Date
CN1567874A true CN1567874A (zh) 2005-01-19
CN100364285C CN100364285C (zh) 2008-01-23

Family

ID=34471833

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB031467032A Expired - Fee Related CN100364285C (zh) 2003-07-09 2003-07-09 一种逻辑仿真方法

Country Status (1)

Country Link
CN (1) CN100364285C (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105704083A (zh) * 2014-11-24 2016-06-22 中兴通讯股份有限公司 以太网激励报文的产生方法、装置及仿真系统
CN108933787A (zh) * 2018-07-02 2018-12-04 深圳市风云实业有限公司 报文生成方法及装置
CN117041162A (zh) * 2023-10-09 2023-11-10 芯耀辉科技有限公司 一种流量整形方法及装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6202044B1 (en) * 1997-06-13 2001-03-13 Simpod, Inc, Concurrent hardware-software co-simulation
JP2000011016A (ja) * 1998-06-17 2000-01-14 Hitachi Ltd 並列論理シミュレーション方式
CN1163019C (zh) * 2001-03-16 2004-08-18 北京亿阳巨龙智能网技术有限公司 一种网络互通业务仿真器

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105704083A (zh) * 2014-11-24 2016-06-22 中兴通讯股份有限公司 以太网激励报文的产生方法、装置及仿真系统
CN108933787A (zh) * 2018-07-02 2018-12-04 深圳市风云实业有限公司 报文生成方法及装置
CN117041162A (zh) * 2023-10-09 2023-11-10 芯耀辉科技有限公司 一种流量整形方法及装置
CN117041162B (zh) * 2023-10-09 2024-02-09 芯耀辉科技有限公司 一种流量整形方法及装置

Also Published As

Publication number Publication date
CN100364285C (zh) 2008-01-23

Similar Documents

Publication Publication Date Title
US8441931B2 (en) Method and device for managing priority during the transmission of a message
US6950405B2 (en) Traffic stream generator having a non-consecutive addressing mechanism
CN1315077C (zh) 有效处理网络数据的系统和方法
US9313115B2 (en) Traffic generator with priority flow control
US7519076B2 (en) Method and node for using a communication network in parallel for real-time applications and non-real-time applications
CN113728599A (zh) 促进将包高效地注入网络接口控制器(nic)中的输出缓冲区中的系统和方法
US20020163918A1 (en) System and method for distributed processing of packet data containing audio information
CN100338915C (zh) 报文镜像方法及具有报文镜像功能的网络设备
US20040085901A1 (en) Flow control in a network environment
US20150244637A1 (en) Exporting Real Time Network Traffic Latency and Buffer Occupancy
CN102035822B (zh) 航电asm协议控制器及控制方法
CN1783839A (zh) 先进交换体系结构中的虚拟信道的流量控制信用更新
US20070291771A1 (en) System and Method for Distributed Processing of Packet Data Containing Audio Information
US6909717B1 (en) Real time ethernet protocol
CN105704083A (zh) 以太网激励报文的产生方法、装置及仿真系统
JP2011071989A (ja) トラフィック分散制御プロセス及び装置
CN1471267A (zh) 一种网络协议测试方法及其测试系统
CN101771598A (zh) 一种实时以太网通信调度方法
CN116743658A (zh) 一种基于opc ua-tsn的工业互联网确定性通信方法及装置
CN107508828B (zh) 一种超远程数据交互系统及方法
CN101848239A (zh) 一种高时效性的分布式服务集成调用系统
CN113938930B (zh) 适应5g网络多业务场景的虚拟网络功能转发图的构建方法
CN113556320B (zh) 以太网多路音频实时传输方法及设备
CN1567874A (zh) 一种逻辑仿真方法
CN108632171B (zh) 一种基于视联网的数据处理方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20080123

Termination date: 20180709