#!/bin/sh
# aTemplate.tcl \
exec tclsh "$0" ${1+"$@"}
#-----------------------------------------------------
#
#
#-----------------------------------------------------
#引用STC API ,SpirentTestCenter.tcl的路徑
source {C:\Program Files\Spirent Communications\Spirent TestCenter 4.20\Spirent TestCenter Application\SpirentTestCenter.tcl}
#開啟日志,-logTo :日志保存路徑 ,使用stdout為標准輸出; -loglevel : 可選 DEBUG、 INFO 、WARN 和 ERROR 四種;
stc::config automationoptions -logTo "aTemplateLog.txt" -logLevel DEBUG
#配置機框Ip 槽位 端口號
set chassisAddress "192.168.0.100"
set slotPort1 "8/25"
set slotPort2 "8/26"
#創建一個項目
set ProjectA [stc::create project]
#在項目ProjextA 下創建一個發送端口 和一個接收端口
set TxPort [stc::create port -under $ProjectA]
set RxPort [stc::create port -under $ProjectA]
set portReturn [stc::config $TxPort -location "//$chassisAddress/$slotPort1"]
set portReturn [stc::config $RxPort -location "//$chassisAddress/$slotPort2"]
#配置端口類型,根據實際端口類型選擇參數:Ethernet10GigFiber、Ethernet100GigFiber、Ethernet40GigFiber、Ethernet10GigCopper、EthernetCopper等;
set ethernetFiber(1) [stc::create "Ethernet10GigFiber" -under $TxPort -Name "ethernetFiber 1"]
set ethernetFiber(2) [stc::create "Ethernet10GigFiber" -under $RxPort -Name "ethernetFiber 2"]
#在發送端口下創建StreamBlock(1)
set StreamBlock(1) [stc::create "StreamBlock" \
-under $TxPort \
-frameConfig "" \
-FrameLengthMode "FIXED" \
-FixedFrameLength "222" \
-name "StreamBlock_1"]
#在StreamBlock(1)中添加EthII頭
set StrEthII [stc::create ethernet:EthernetII -under $StreamBlock(1) -name eht_1 -srcMac 11:11:11:11:11:11 -dstMac 22:22:22:22:22:22 ]
#添加IPv4頭
set strIPv4 [stc::create ipv4:IPv4 -under $StreamBlock(1) -name Ipv4_1 -sourceAddr 10.10.10.10 -destAddr 20.20.20.20]
#添加TCP頭
set strTcp [stc::create tcp:Tcp -under $StreamBlock(1) -name tcp1 -sourcePort 10 -destPort 20 ]
#創建Streamblock2
set StreamBlock(2) [stc::create "StreamBlock" \
-under $TxPort \
-frameConfig "" \
-FrameLengthMode "FIXED" \
-FixedFrameLength "222" \
-name "StreamBlock_2"]
set StrEthII [stc::create ethernet:EthernetII -under $StreamBlock(2) -name eht_2 -srcMac 31:11:11:11:11:11 -dstMac 42:22:22:22:22:22 ]
#添加IPv4頭
set strIPv4 [stc::create ipv4:IPv4 -under $StreamBlock(2) -name Ipv4_2 -sourceAddr 40.40.40.40 -destAddr 50.50.50.50]
#添加TCP頭
set strTcp [stc::create udp:Udp -under $StreamBlock(2) -name tcp_2 -sourcePort 40 -destPort 50 ]
#配置StreamBlock(1)的modifier 可以選擇 RangeModifer 、RandomModifier 、TableModifier
#StreamBlock1 源Ip 隨機
set RandomModifier1 [stc::create RandomModifier -under $StreamBlock(1) -Mask {0.0.0.255} -RecycleCount 10 -Offset 0 -EnableStream FALSE -OffsetReference {Ipv4_1.sourceAddr} ]
#StreamBlock2 目的Ip 遞增
set RangeModifier2 [stc::create RangeModifier -under $StreamBlock(2) -ModifierMode INCR -Mask {0.0.255.0} -StepValue {0.0.1.0} -RecycleCount 10 -RepeatCount 0 -Data {0.0.50.0} -EnableStream FALSE -Offset 0 -OffsetReference {Ipv4_2.destAddr} -Active true]
#在發送端口創建 generator
set generator1 [stc::get $TxPort -children-Generator ]
stc::config $generator1 -Name "Generator_1"
#配置 generator1 ,
set generatorConfig1 [stc::get $generator1 -children-GeneratorConfig ]
#-------------------------------配置說明--------------------------------------------
#SchedulingModes屬性,可選參數:PORT_BASED 、RATE_BASED 、PRIORITY_BASED 、MANUAL_BASED
#DurationMode屬性,可選參數:CONTINUOUS 、BURSTS 、SECONDS 等,
#LoadUnit屬性,可選參數:PERCENT_LINE_RATE 、FRAMES_PER_SECOND 、BITS_PER_SECOND 、
# KILOBITS_PER_SECOND 、MEGABITS_PER_SECOND 、INTER_BURST_GAP
#---------------------------------------------------------------------------------
stc::config $generatorConfig1 -SchedulingMode "PORT_BASED" \
-DurationMode "BURSTS" \
-BurstSize 1 \
-Duration 20 \
#在接收端口創建analyzer
set analyzer1 [stc::get $RxPort -children-Analyzer]
#配置analyzer
stc::config $analyzer1 -Name "Analyzer 1"
set analyzerConfig1 [stc::get $analyzer1 -children-AnalyzerConfig]
#-------------------------------配置說明--------------------------------------------
#TimestampLatchMode 屬性 ,可選參數:START_OF_FRAME 、END_OF_FRAME
#
#---------------------------------------------------------------------------------
stc::config $analyzerConfig1 -TimestampLatchMode "END_OF_FRAME" -JumboFrameThreshold "1500" -OversizeFrameThreshold "2000" -UndersizeFrameThreshold "64" -AdvSeqCheckerLateThreshold "1000" -Name "AnalyzerConfig_1"
#配置實時結果獲取
#結果保存在 與腳本相同路徑下,結果文件名為 result
set generatorResult [ stc::subscribe -Parent $ProjectA \
-ResultParent $TxPort \
-ConfigType Generator \
-resulttype GeneratorPortResults \
-filenameprefix "result"]
set analyzerResult [ stc::subscribe -Parent $ProjectA \
-ResultParent $RxPort \
-ConfigType Analyzer \
-resulttype AnalyzerPortResults \
-filenameprefix "result" ]
#連接機框
set resultReturn [ stc::connect $chassisAddress]
#占用端口
set resultReturn [ stc::reserve "//$chassisAddress/$slotPort1"]
set resultReturn [ stc::reserve "//$chassisAddress/$slotPort2"]
#配置抓包端口
set captureRx [stc::get $RxPort -children-capture]
set captureTx [stc::get $TxPort -children-capture]
#-----------------------------------配置說明-------------------------------------
#
#mode 屬性,可選參數:REGULAR_MODE,抓所有報文; SIG_MODE:抓有signature的報文。
#Buffermode 屬性, 可選參數:WRAP 當緩沖區寫滿時,回滾,繼續抓包, STOP_ON_FULL :當緩沖區寫滿時,停止
#srcMode 屬性,可選參數: TX_MODE 、 RX_MODE 、 TX_RX_MODE
#
#-----------------------------------------------------------------------------
stc::config $captureRx -mode REGULAR_MODE -BufferMode WRAP -srcMode RX_MODE
#stc::perform StreamBlockUpdate -streamBlock "$StreamBlock(1)"
#stc::perform StreamBlockUpdate -streamBlock "$StreamBlock(2)"
#建立邏輯端口與物理端口的映射
set resultReturn [stc::perform setupPortMappings]
#執行apply
set resultReturn [stc::apply]
#-------------------------------------------------------------------------------
# 配置完成
#-------------------------------------------------------------------------------
#開始analyzer
set analyzerCurrent [stc::get $RxPort -children-analyzer ]
stc::perform analyzerStart -analyzerList $analyzerCurrent
#開啟抓包
stc::perform CaptureStart -captureProxyId $captureRx
#開始發包
set generatorCurrent [stc::get $TxPort -children-generator ]
stc::perform generatorStart -generatorList $generatorCurrent
#等待執行結束
stc::sleep 20
# 停止發包
stc::perform generatorStop -generatorList $generatorCurrent
#停止抓包
stc::perform CaptureStop -captureProxyId $captureRx
#保存抓包結果
stc::perform CaptureDataSave -captureProxyId $captureRx -FileName "template.R.pcap" -FileNamePath "D:\\eclipse\\workspace\\Result\\"
#停止analyzer
stc::perform analyzerStop -analyzerList $analyzerCurrent
#釋放端口
stc::release [stc::get $TxPort -location]
stc::release [stc::get $RxPort -location]
#與機框斷開連接
stc::disconnect $chassisAddress
#刪除 project
stc::delete $ProjectA
stc::perform ResetConfig -config system1
puts "ok"