- Name: Paul Spillane
- Major: Computer Engineering (Software emphasis)
- Graduation Date: May 2010
I am a member of the Xinu team through the MSCS Summer REU (Research Experience for Undergraduates) and am working on a Telnet server for Xinu. I will also be working on a network emulator for Xinu later in the summer.
May 18, 2009
- Joined Xinu team and assigned to Telnet shell and Network Emulator.
- Created accounts on Xinu, Trac, and REU wikis
- Checked out trunk and Aaron's branch from Xinu SVN repository and looked through some of the code
- Crash course on Xinu networking
- Read Telnet Protocol Specification (RFC 854)
- Started reading TCP/IP: Architecture, Protocols, and Implementation by Sidnie Feit
- Looked through Xinu wiki for information on TTY Driver and Xinu Shell
May 25, 2009
- Worked with Aaron, Kyle, and Adam K. on a rough design of the TELNET device/server
- Participated in discussion of MadWifi mesh in Madison, WI and its effectiveness
- Implemented a portion of the telnetRead device function
- Made more progress on TCP/IP book
June 1, 2009
- Tested Telnet server's read function in isolation
- Read and discussed paper on fos, a mostly hypothetical multiple core operating system
- Telnet server's "read" functionality (telnetRead.c) accepts shell commands from nc and telnet; those commands execute properly on the backend that nc or telnet is connected to.
- telnetRead works for the most part, but it still needs to handle more control codes as set forth in the Telnet RFC (RFC 854).
June 8, 2009
- Tested Telnet server a little more
- Read "Traversal Caches: A First Step towards FPGA Acceleration of Pointer-Based Data Structures"
- Started research on existing network emulation software
- Discussed "Traversal Caches" paper
- Started reading paper about GINI (GINI Is Not Internet)
- Implemented a few more control codes in telnetRead
June 15, 2009
- Researched a few other network emulation software packages
- Finished reading paper on GINI
- Read and discussed paper on Dingo, an event-based driver framework
- Read chapters 6 (IP) and 9 (UDP) of TCP/IP book
- Assigned to write UDP device to work with TCP/IP stack
June 22, 2009
- Did further research on UDP; worked on UDP device
- Read "A Real-Time Software Platform for the Cell Processor"
- Discussed the paper read above
June 29, 2009
- Created null device, which is basically an empty device meant to allow Telnet output to be aborted
- Continued work on UDP device
- udpRecv.c and udpRead.c are written but still need to be tested
- Gave presentations on Telnet and Network Emulation
July 6, 2009
- Wrote udpWrite.c and udpSend.c with Aaron
- Also incorporated Checksum and Demux from TCP into UDP
- Read and discussed paper on code flattening and eliminating the call stack
- Worked with Aaron and Dr. Brylow on design of network emulator
July 13, 2009
- Modified telnetRead.c to more closely adhere to Telnet standards concerning carriage returns and newlines
- Read and discussed paper on augmented reality on mobile phones using feature recognition
- All UDP device functions are implemented and now need testing
- Worked with Kyle on what cases we should test for in our Telnet implementation
- Participated in code review for Telnet implementation
- Attempted to properly implement Telnet "Abort Output" but still could not get it right
- Used Adam K.'s null device for Abort Output, for his solution was much more elegant than mine
- Roughly tested Telnet and found a few bugs to be fixed
July 20, 2009
- Fixed some Telnet bugs (telnetting through multiple backends works much better now, and telnetRead no longer flushes the output buffer every time it is run)
- Cleaned up telnetRead code
- Removed excess header includes
- Removed excess comments (such as commented code)
- Telnet's Abort Output now simply flushes the output buffer using the telnetFlush function
- Figured out how testsuite works and am now able to add and modify testcases
- Modified some of the UDP device code
- udpOpen now supports port allocation, and there is protection against NULL pointers passed to it
- Started testsuite testcase for UDP device
- udpOpen and udpClose are tested
- Will test individual device functions (control, read, recv, demux, chksum)
July 27, 2009
- Tested udpControl functions
- ACCEPT (sets the local port and local IP address)
- BIND (sets the remote port and remote IP address)
- SETFLAG (turns on a flag or multiple flags)
- CLRFLAG (turns off a flag or multiple flags)
- Read and discussed paper on Embedded Software Transactional Memory (I picked this paper for this week's discussion)
- Still need to find a better way for Telnet display the shell prompt without scanning the output buffer for a specific combination of characters
- If the shell prompt is ever changed, or if there are a lot of "$ "'s on the screen, then the output buffer is flushed FAR too often
- Perhaps modify the shell program itself to do that? Will update on this soon.
- Lightly tested udpRead and udpRecv (without checksumming), and udpRead can grab the correct data from the packet pointer buffer.
- Packets are generated within the test case using a function almost identical to udpSend to construct the packet and return a pointer to the newly created packet. In other words, if this code works properly, udpSend should also work properly. The only difference here is that udpSend then would call ipv4Send to send that packet through the network.
- Attempted to calculate UDP checksum properly...still working on that one.
- Tested udpRead and udpRecv more thoroughly, using different combinations of UDP sockets with different local ports, remote ports, and remote IP addresses.
August 3, 2009
- Telnet server now accepts up to three connections on one backend.
- Changed how Telnet server handles displaying the shell prompt. This is done after a time delay and also after the enter key is pressed.
- Telnet client has connection prompts similar to the Linux telnet client.
- UDP checksumming works correctly now. As such, the receive function throws away the received packet if the calculated checksum is not 0.
August 10, 2009
- UDP checksumming works correctly even with external UDP packets.
- UDP demultiplexing requires that the socket's local IP and the received packet's destination IP match no matter what.
- Tried to get Telnet working with new network stack. There is an issue with TCP that is preventing Telnet from working properly.
- Made sure UDP implementation can send and receive packets to and from machines other than other Xinu backends.