Weekly Status Report
Zach Riggle
zachriggle at gmail.com
Sun May 31 08:00:23 UTC 2009
Hello All
Not too many blog updates this week. Spent a lot of time trying to
get the latest Hg build of PCS to work properly, to no avail. Tried
to contact George Neville-Neil (mentor), but I got bounceback from the
mail server.
Also, working on getting some of the features ported over from PCS-Hg
so that I can use them in the meantime. Spent a few hours tonight
trying to fix a bug that didn't exist -- the output of an operation
was correct, just not what I thought it should be.
Working on implementing a TCP State machine, that allows for toggle-
able settings. For example, in most cases it is desirable for things
like the data offset, sequence number, and checksum to be
automatically generated. It is also generally useful to make sure
that the TCP send window is not exceeded. However, these features
will need to be selectively disabled for various tests. Working on
getting all of that set up.
Ideally, the first test will look like this:
> def testTcp3WayHandshake(pcapConnector):
> # Create the local TCP state machine and network interface
> local = TcpStateMachine(pcapConnector, (localHost, localPort),
> (remoteHost,remotePort))
> local.state = Closed
>
> # Create a TCP state machine to reflect the *expected* state of
> the remote host
> remote = TcpStateMachine(None, (remoteHost, remotePort),
> (localHost, localPort))
> remote.state = Closed
>
> # Syn packet
> syn = tcp.tcp()
> syn.syn = 1
>
> # Send the TCP packet. The TCP State Machine handles generating
> fields,
> # creating the ipv4/ipv6 object and the ethernet object, and the
> actual sending over the wire.
> # The 'remote' TCP State object just processes the packet as if it
> were received, and updates
> # the internal state information
> local.send(syn)
> remote.recv(syn)
> if not local.state == Syn_Sent and remote.state == Syn_Recvd:
> fail
>
> # Receive the next packet, simulate that packet being 'sent' by
> the remote machine
> synack = local.recv()
> remote.send(synack )
> if not (synack.ack and synack.syn and synack.acknum == syn.seq):
> fail
>
> # Auto-generate an 'ack' packet for the second packet
> ack = local.ack(synack)
> local.send(ack)
> remote.recv(ack)
> if not (local.state == Established and remote.state == Established):
> fail
>
> # Test connectivity
> if not local.testConnectivity():
> fail
>
> # Close the connection
> local.close()
>
> # Test pass
> if local.state != Closed:
> fail
Zach
More information about the soc-status
mailing list