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