PERFORCE change 163757 for review
Zachariah Riggle
zjriggl at FreeBSD.org
Mon Jun 8 04:22:13 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=163757
Change 163757 by zjriggl at zjriggl_tcpregression on 2009/06/08 04:21:32
Done for the night, committing to save changes.
Affected files ...
.. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/echoServer.py#3 add
.. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/loggable.py#3 add
.. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/logging.conf#3 add
.. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/pcsextension/StringField.py#1 add
.. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/pcsextension/__init__.py#3 edit
.. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/pcsextension/backup.tar#1 add
.. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/pcsextension/decorators.py#1 add
.. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/pcsextension/hwAddress.py#1 add
.. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/pcsextension/ipAddress.py#1 add
.. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/pcsextension/networkPort.py#1 add
.. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/pcsextension/payload.py#1 add
.. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/pcsextension/pseudoipv4.py#1 add
.. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/sniffLocalhost.py#3 add
.. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/tcpConstructor.py#3 add
.. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/tcpFilter.py#3 add
.. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/tcpHandshake.py#3 add
.. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/tcpstatemachine.py#2 edit
.. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/test.html#3 add
.. //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/testconfig.py#3 add
Differences ...
==== //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/pcsextension/__init__.py#3 (text+ko) ====
@@ -47,6 +47,31 @@
def inet_atol(ipString):
return inet_ntol(socket.inet_aton(ipString))
-def tcpv4Checksum(t):
- if not isinstance(t, tcp):
- return 0+def getPcsFormattedIP(ipAddr):
+ if type(ipAddr) == str:
+ # The byte representation's length will be 4 bytes
+ if len(ipAddr) == 4:
+ return inet_ntol(ipAddr)
+
+ # Otherwise, the length is between len("0.0.0.0") and len("255.255.255.255") (lengths are 7 and 15)
+ elif 7 <= len(ipAddr) and len(ipAddr) <= 15:
+ return inet_atol(ipAddr)
+
+ elif type(ipAddr) == int:
+ return ipAddr
+
+ logging.warn("Could not properly identify IP address type for: %s" % str(ipAddr))
+ return 0
+
+def getPcsFormattedPort(port):
+ if type(port) == str:
+ if port.isdigit():
+ return htons(int(port))
+ else:
+ return struct.unpack("!i",'A\x00\x00\x00')[0]
+
+ if type(port) == int:
+ return port
+
+ logging.warn("Could not properly identify port type for: %s" % str(ipAddr))
+ return 0
==== //depot/projects/soc2009/zjriggl_tcpregression/src/tcpregression/tcpstatemachine.py#2 (text+ko) ====
@@ -11,11 +11,16 @@
from pcsextension.pseudoipv4 import pseudoipv4, ipv4_cksum
from socket import IPPROTO_TCP
from tcpstates import *
+from tcpFilter import tcpFilter
import binhex
import pcs
+from pcs.packets import tcp
+from pcs.packets import ipv4
+from pcs.packets import ethernet
import testconfig
import binascii
+
# Valid state transitions, as defined by the diagram on RFC 793 pp. 23:
# September 1981
# Transmission Control Protocol
@@ -103,6 +108,8 @@
3
'''
+ _connector = None
+
def generateInitialSequence(self):
return 0
@@ -215,6 +222,13 @@
'assigned.'}
def enableSequenceGeneration(self, enable=True):
+ validateTypes({enable:bool})
+ action = "Enabled"
+ if enable == False:
+ action = "Disabled"
+
+ self.log.validate("%s generation of TCP sequence numbers" % action)
+
self._sequenceGeneration = enable
def isSequenceGenerationEnabled(self):
@@ -385,7 +399,44 @@
# Add the packet to the outgoing queue.
self.packetsToSend += [tcpLayer]
self._sendPackets()
-
+
+ def sendRawTcp(self, tcpLayer):
+ if not validateTypes({tcpLayer:tcp.tcp}):
+ return
+
+ ip = ipv4.ipv4()
+ ethernet = ethernet.ethernet()
+ ip.data = tcpLayer
+ ethernet.data = ip
+
+ ethernet.src =
+
+ ip.src = self.localIP.getNetworkInteger()
+ ip.dst = self.remoteIP.getNetworkInteger()
+
+
+
+
+
+# version = pcs.Field("version", 4, default = 4)
+# hlen = pcs.Field("hlen", 4)
+# tos = pcs.Field("tos", 8)
+# length = pcs.Field("length", 16)
+# id = pcs.Field("id", 16)
+# flags = pcs.Field("flags", 3)
+# offset = pcs.Field("offset", 13)
+# ttl = pcs.Field("ttl", 8, default = 64)
+# protocol = pcs.Field("protocol", 8)
+# checksum = pcs.Field("checksum", 16)
+# src = pcs.Field("src", 32)
+# dst = pcs.Field("dst", 32)
+
+
+
+ self._connector.write(packet, byets)
+
+ pass
+
def _sendPackets(self):
for tcpLayer in self.packetsToSend:
send = False
@@ -409,8 +460,7 @@
tcpLayer.cksum = self.generateChecksum(tcpLayer)
self.sendRawTcp(tcpLayer)
-
- pass
+
def generateChecksum(self, packet):
"""Calculate and store the checksum for the TCP segment
@@ -418,7 +468,7 @@
bytes = packet.chain().bytes
pip = pseudoipv4()
- pip.src = self.localIP
+ pip.src = (I self.localIP
pip.dst = self.remoteIP
pip.protocol = IPPROTO_TCP
pip.length = len(bytes)
@@ -519,7 +569,7 @@
self.rcv_nxt = self.irs # Expected next recv sequence #
self.msl = 2 * 60 # Maximum Segment Lifetime. Arbitrarily defined in the RFC to 2 minutes
- self.timeout = 2*msl # Timeout
+ self.timeout = 2*self.msl # Timeout
# Set the initial values
self.state = CLOSED
@@ -532,4 +582,4 @@
self.packetsRecvdAcked = []
self.packetsToSend = []
- + self._connector = tcpFilter(testconfig.interface)
More information about the p4-projects
mailing list