Date: Mon, 8 Jun 2009 04:22:12 GMT From: Zachariah Riggle <zjriggl@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 163757 for review Message-ID: <200906080422.n584MC2D056829@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=163757 Change 163757 by zjriggl@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)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200906080422.n584MC2D056829>