📄 pppdemo.tcl
字号:
for {set j 0} {$j < $NumberOfPPPSessions} {incr j} {
set Frame(uiStreamIndex) $j
# Src IP Address
set Frame(ucFrameData.[expr $offset+16].uc) [format %c $byte2]
set Frame(ucFrameData.[expr $offset+17].uc) [format %c $byte3]
# Dst IP Address
set Frame(ucFrameData.[expr $offset+20].uc) [format %c $byte2]
set Frame(ucFrameData.[expr $offset+21].uc) [format %c $byte3]
set Frame(ucFrameData.[expr $offset+12].uc) [format %c 0x00]
set Frame(ucFrameData.[expr $offset+13].uc) [format %c 0x00]
# IP checksum
CalcIPCheckSum [expr $offset + 2]
if {$i == 0} {
LIBCMD HTSetStructure $ATM_FRAME_DEF 0 0 0 Frame 0 $iHub $iSlot $iPort
} else {
LIBCMD HTSetStructure $ATM_FRAME_DEF 0 0 0 Frame 0 $iHub2 $iSlot2 $iPort2
}
# Increment the last byte of the Src/Dest IP Addresses...
incr byte3
set byte3 [expr $byte3%256]
if {$byte3 == 0} {
incr byte2
set byte2 [expr $byte2%256]
if {$byte2 == 0} {
incr byte1
set byte1 [expr $byte1%256]
if {$byte1 == 0} {
incr byte0
}
}
}
}
}
unset Frame
##########################################################
# Set PPP Configuration Parameters at the Local End
##########################################################
puts "\nSetting PPP Configuration params at the local end..."
struct_new pppCfg PPPParamCfg
set pppCfg(ulpppInstance) 0x00
set pppCfg(ulpppCount) 0x00 ;# Not used for PPP/ATM - use the
;# PPP Copy, Modify, Fill commands
# LCP Negotiation options
set pppCfg(uipppWeWish) $PPPO_USEPAPAUTH
set pppCfg(uipppWeMust) $PPPO_USEPAPAUTH
set pppCfg(uipppWeCan) $PPPO_USEPAPAUTH
# LCP parameters
set pppCfg(ucpppEnablePPP) [format %c 0x01]
set pppCfg(ucpppCHAPAlgo) [format %c $PPP_CHAPMS]
set pppCfg(uipppMRU) $PPP_CONFIGURE_MRU ;# 1500
set pppCfg(uipppMaxFailure) $PPP_CONFIGURE_MAXFAILURE ;# 5
set pppCfg(uipppMaxConfigure) $PPP_CONFIGURE_MAXCONFIGURE ;# 10
set pppCfg(uipppMaxTerminate) $PPP_CONFIGURE_MAXTERMINATE ;# 2
set pppCfg(ulpppMagicNumber) $PPP_CONFIGURE_MAGICNUMBER ;# 0
# Authentication
for {set i 0} { $i < 32 } {incr i} {
set pppCfg(ucpppOurID.$i.uc) [format %c 0x00]
}
for {set i 0} { $i < 32 } {incr i} {
set pppCfg(ucpppOurPW.$i.uc) [format %c 0x00]
}
for {set i 0} { $i < 32 } {incr i} {
set pppCfg(ucpppPeerID.$i.uc) [format %c 0x00]
}
for {set i 0} { $i < 32 } {incr i} {
set pppCfg(ucpppPeerPW.$i.uc) [format %c 0x00]
}
set pppCfg(ucpppOurID.0.uc) "R"
set pppCfg(ucpppOurID.1.uc) "o"
set pppCfg(ucpppOurID.2.uc) "u"
set pppCfg(ucpppOurID.3.uc) "t"
set pppCfg(ucpppOurID.4.uc) "e"
set pppCfg(ucpppOurID.5.uc) "r"
set pppCfg(ucpppOurPW.0.uc) "7"
set pppCfg(ucpppOurPW.1.uc) "2"
set pppCfg(ucpppOurPW.2.uc) "0"
set pppCfg(ucpppOurPW.3.uc) "0"
set PPPCfg(ucpppPeerID.0.uc) "R"
set PPPCfg(ucpppPeerID.1.uc) "o"
set PPPCfg(ucpppPeerID.2.uc) "u"
set PPPCfg(ucpppPeerID.3.uc) "t"
set PPPCfg(ucpppPeerID.4.uc) "e"
set PPPCfg(ucpppPeerID.5.uc) "r"
set PPPCfg(ucpppPeerPW.0.uc) "7"
set PPPCfg(ucpppPeerPW.1.uc) "2"
set PPPCfg(ucpppPeerPW.2.uc) "0"
set PPPCfg(ucpppPeerPW.3.uc) "0"
# IP parameters
set pppCfg(ucpppIPEnable) [format %c 0x01]
set pppCfg(ucpppNegotiateIPAddr) [format %c 0x01]
set pppCfg(uipppIPCompress) 0x00
set pppCfg(ucpppOurIPAddr.0.uc) [format %c 0x64]
set pppCfg(ucpppOurIPAddr.1.uc) [format %c 0x64]
set pppCfg(ucpppOurIPAddr.2.uc) [format %c 0x65]
set pppCfg(ucpppOurIPAddr.3.uc) [format %c 0x00]
set pppCfg(uipppRestartTimer) 0x03
set pppCfg(uipppRetryCount) 0x05
set iRsp [LIBCMD HTSetStructure $PPP_SET_CONFIG 0 0 0 pppCfg 0 $iHub $iSlot $iPort]
if {$iRsp < 0} {
puts $logFile "Problem in setting PPP Configuration params on Slot#: $iSlot"
}
set pppCfg(ucpppPeerIPAddr.0.uc) [format %c 0x64]
set pppCfg(ucpppPeerIPAddr.1.uc) [format %c 0x65]
set pppCfg(ucpppPeerIPAddr.2.uc) [format %c 0x65]
set pppCfg(ucpppPeerIPAddr.3.uc) [format %c 0x00]
set iRsp [LIBCMD HTSetStructure $PPP_SET_CONFIG 0 0 0 pppCfg 0 $iHub2 $iSlot2 $iPort2]
if {$iRsp < 0} {
puts "Problem in setting PPP Configuration params on Slot#: $iSlot2"
}
unset pppCfg
##########################################################
# Copying PPP Configuration Parameters (Local End)
# to remaining number of streams configured for PPP
##########################################################
puts "\nCopying Configuration parameters to the remaining streams..."
struct_new pppCopy PPPParamsCopy
set pppCopy(uipppSrcStrNum) 0
set pppCopy(uipppDstStrNum) 1
set pppCopy(uipppDstStrCount) [expr $NumberOfPPPSessions - 1]
set iRsp [LIBCMD HTSetStructure $PPP_PARAMS_COPY 0 0 0 pppCopy 0 $iHub $iSlot $iPort]
if {$iRsp < 0} {
puts $logFile "Problem in copying PPP params on Slot#: $iSlot"
}
set iRsp [LIBCMD HTSetStructure $PPP_PARAMS_COPY 0 0 0 pppCopy 0 $iHub2 $iSlot2 $iPort2]
if {$iRsp < 0} {
puts $logFile "Problem in copying PPP params on Slot#: $iSlot2"
}
unset pppCopy
##########################################################
# Modifying PPP Configuration Parameters (Local End)
# to remaining number of streams configured for PPP
# Modify the Local/Peer IP Addresses for each session.
# Message type: PPP_PARAMS_FILL
#
# This will be applicable to all the new ppp sessions created
# above using the PPP_PARAMS_COPY command.
##########################################################
puts "\nChanging the IP Addresses..."
struct_new pppFill PPPParamsFill
set pppFill(uipppSrcStrNum) 0
set pppFill(uipppDstStrNum) 1
set pppFill(uipppDstStrCount) [expr $NumberOfPPPSessions - 1]
set pppFill(uipppParamItemID) $PPP_LOCAL_IPADDR
for {set i 0} {$i < 4} {incr i} {
if {$i == 3} {
set pppFill(ucpppDelta.$i.uc) [format %c 0x01]
}
}
set iRsp [LIBCMD HTSetStructure $PPP_PARAMS_FILL 0 0 0 pppFill 0 $iHub $iSlot $iPort]
if {$iRsp < 0} {
puts $logFile "Problem in modifying PPP params on Slot#: $iSlot"
}
set iRsp [LIBCMD HTSetStructure $PPP_PARAMS_FILL 0 0 0 pppFill 0 $iHub2 $iSlot2 $iPort2]
if {$iRsp < 0} {
puts $logFile "Problem in modifying PPP params on Slot#: $iSlot2"
}
unset pppFill
########################################################
# Set PPP Echo Request Information
########################################################
puts "\nSetting up the Echo Control Information..."
struct_new pppCtl PPPControlCfg
set pppCtl(ulpppInstance) 0 ;# Starting stream index
set pppCtl(ulpppCount) $NumberOfPPPSessions
set pppCtl(ucpppAction) [format %c $PPP_ECHO_START]
set pppCtl(ulpppEchoFreq) 0x10
set pppCtl(ulpppEchoErrFreq) 0x00
set iRsp [LIBCMD HTSetStructure $PPP_SET_CTRL 0 0 0 pppCtl 0 $iHub $iSlot $iPort]
if {$iRsp < 0} {
puts $logFile "Problem in setting Control Information params on Slot#: $iSlot"
}
set iRsp [LIBCMD HTSetStructure $PPP_SET_CTRL 0 0 0 pppCtl 0 $iHub2 $iSlot2 $iPort2]
if {$iRsp < 0} {
puts $logFile "Problem in setting Control Information params on Slot#: $iSlot2"
}
unset pppCtl
#######################################################################
# Connect Streams
#
# Similar to other ATM_STREAM_CONTROL functions
# Change ucAction to whatever action is needed and
# call HTSetSTructure with $ATM_STREAM_CONTROL to send to card.
#######################################################################
puts "\nConnecting $NumberOfPPPSessions Stream(s)..."
set StreamControl(ucAction) [format %c $ATM_STR_ACTION_CONNECT]
set StreamControl(ulStreamIndex) 0
set StreamControl(ulStreamCount) $NumberOfPPPSessions
set iRsp [LIBCMD HTSetStructure $ATM_STREAM_CONTROL 0 0 0 StreamControl 0 $iHub $iSlot $iPort]
if {$iRsp < 0} {
puts $logFile "Problem in connecting streams on Slot#: $iSlot"
}
set iRsp [LIBCMD HTSetStructure $ATM_STREAM_CONTROL 0 0 0 StreamControl 0 $iHub2 $iSlot2 $iPort2]
if {$iRsp < 0} {
puts $logFile "Problem in connection streams on Slot#: $iSlot2"
}
#############################################################
# Check Connection Status
#
#############################################################
struct_new StreamInfo ATMStreamDetailedInfo
puts "\nChecking Stream Detailed Info..."
# Wait for some time before checking the status
after 10000
set iRsp [LIBCMD HTGetStructure $ATM_STREAM_DETAIL_INFO 0 $NumberOfPPPSessions 0 StreamInfo 0 $iHub $iSlot $iPort]
if {$iRsp < 0} {
puts $logFile "Problem in getting Stream Detailed information on Slot#: $iSlot"
}
set iRsp [LIBCMD HTGetStructure $ATM_STREAM_DETAIL_INFO 0 $NumberOfPPPSessions 0 StreamInfo 0 $iHub2 $iSlot2 $iPort2]
if {$iRsp < 0} {
puts "Problem in getting Stream Detailed information on Slot#: $iSlot2"
}
unset StreamInfo
#############################################################
# Retrieve PPP status information
#############################################################
struct_new PPPInfo PPPStatusInfo*$NumberOfPPPSessions
set iRsp [LIBCMD HTGetStructure $PPP_STATUS_INFO 0 $NumberOfPPPSessions 0 PPPInfo 0 $iHub $iSlot $iPort]
if {$iRsp < 0} {
puts "iRsp from HTGetStructure: $iRsp"
}
puts $outFile "PPP Index,LCP state,IPCP state,IPXCP state,Failure Code,Magic Number,Our IP Address,Peer IP Address,Requested options,Acked options,MRU,MTU"
puts $outFile ""
puts $outFile "PPP Status info for Card#: [expr $iSlot + 1]"
for {set j 0} {$j < $NumberOfPPPSessions} {incr j} {
set dLatency dU64ToDouble($PPPInfo($j.ullpppLatency))
puts $outFile "$PPPInfo($j.ulpppInstance), [ConvertCtoI $PPPInfo($j.ucppplcpState)], \
[ConvertCtoI $PPPInfo($j.ucpppipcpState)], [ConvertCtoI $PPPInfo($j.ucpppipxcpState)], \
[ConvertCtoI $PPPInfo($j.ucppplcpFailCode)], [format %08x $PPPInfo($j.ulpppMagicNumber)], \
[ConvertCtoI $PPPInfo($j.ucpppOurIPAddr.0.uc)].[ConvertCtoI $PPPInfo($j.ucpppOurIPAddr.1.uc)].[ConvertCtoI $PPPInfo($j.ucpppOurIPAddr.2.uc)].[ConvertCtoI $PPPInfo($j.ucpppOurIPAddr.3.uc)], \
[ConvertCtoI $PPPInfo($j.ucpppPeerIPAddr.0.uc)].[ConvertCtoI $PPPInfo($j.ucpppPeerIPAddr.1.uc)].[ConvertCtoI $PPPInfo($j.ucpppPeerIPAddr.2.uc)].[ConvertCtoI $PPPInfo($j.ucpppPeerIPAddr.3.uc)], \
$PPPInfo($j.ulpppWeGot), $PPPInfo($j.ulpppWeAcked), \
$PPPInfo($j.uipppMRU), $PPPInfo($j.uipppMTU), \
$PPPInfo($j.ullpppLatency)"
}
set iRsp [LIBCMD HTGetStructure $PPP_STATUS_INFO 0 $NumberOfPPPSessions 0 PPPInfo 0 $iHub2 $iSlot2 $iPort2]
if {$iRsp < 0} {
puts "iRsp from HTGetStructure: $iRsp"
}
puts $outFile ""
puts $outFile "PPP Status info for Card#: [expr $iSlot2 + 1]"
for {set j 0} {$j < $NumberOfPPPSessions} {incr j} {
set dLatency dU64ToDouble($PPPInfo($j.ullpppLatency))
puts $outFile "$PPPInfo($j.ulpppInstance), [ConvertCtoI $PPPInfo($j.ucppplcpState)], \
[ConvertCtoI $PPPInfo($j.ucpppipcpState)], [ConvertCtoI $PPPInfo($j.ucpppipxcpState)], \
[ConvertCtoI $PPPInfo($j.ucppplcpFailCode)], [format %08x $PPPInfo($j.ulpppMagicNumber)], \
[ConvertCtoI $PPPInfo($j.ucpppOurIPAddr.0.uc)].[ConvertCtoI $PPPInfo($j.ucpppOurIPAddr.1.uc)].[ConvertCtoI $PPPInfo($j.ucpppOurIPAddr.2.uc)].[ConvertCtoI $PPPInfo($j.ucpppOurIPAddr.3.uc)], \
[ConvertCtoI $PPPInfo($j.ucpppPeerIPAddr.0.uc)].[ConvertCtoI $PPPInfo($j.ucpppPeerIPAddr.1.uc)].[ConvertCtoI $PPPInfo($j.ucpppPeerIPAddr.2.uc)].[ConvertCtoI $PPPInfo($j.ucpppPeerIPAddr.3.uc)], \
$PPPInfo($j.ulpppWeGot), $PPPInfo($j.ulpppWeAcked), \
$PPPInfo($j.uipppMRU), $PPPInfo($j.uipppMTU), \
$PPPInfo($j.ullpppLatency)"
}
unset PPPInfo
#######################################################################
# Start Transmitting
#######################################################################
LIBCMD HGClearGroup
LIBCMD HGAddtoGroup $iHub $iSlot $iPort
LIBCMD HGAddtoGroup $iHub2 $iSlot2 $iPort2
LIBCMD HGClearPort
puts ""
puts "Transmitting for $TX_SECONDS seconds..."
LIBCMD HGStart
# PAUSE for TX_SECONDS delay (multiply times 1000 to convert mS to seconds
after [expr $TX_SECONDS * 1000]
LIBCMD HGStop
#######################################################################
#######################################################################
######### GET STATS
#######################################################################
#######################################################################
struct_new VCCInfo ATMVCCInfo
puts ""
for {set i 0} {$i < 2} {incr i} {
puts $outFile ""
puts $outFile "Results for Card in Card# [expr $i +1]"
puts $outFile "=================================="
if {$i == 0} {
LIBCMD HTGetStructure $ATM_STREAM_VCC_INFO 0 $NumberOfPPPSessions 0 VCCInfo 0 $iHub $iSlot $iPort
} else {
LIBCMD HTGetStructure $ATM_STREAM_VCC_INFO 0 $NumberOfPPPSessions 0 VCCInfo 0 $iHub2 $iSlot2 $iPort2
}
for {set j 0} {$j < $NumberOfPPPSessions} {incr j} {
puts $outFile [format "%4d,%08X,%10d,%10d" [expr ($j + 1)] $VCCInfo(status.$j.ulCellHeader) $VCCInfo(status.$j.ulTxFrame) $VCCInfo(status.$j.ulRxFrame)]
}
puts $outFile ""
}
#######################################################################
# Free Resources
#######################################################################
unset VCCInfo
unset StreamControl
unset CardCapabilities
close $outFile
close $logFile
puts ""
puts "Test Done"
#UnLink from the chassis
LIBCMD NSUnLink
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -