⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pppdemo.tcl

📁 smartbits二次开发示例代码
💻 TCL
📖 第 1 页 / 共 2 页
字号:
	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 + -