Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
soc:nikhil:proposal [2006/06/15 11:49]
nikhilcrao
soc:nikhil:proposal [2006/06/15 11:51]
nikhilcrao
Line 1: Line 1:
-====== Summer of Code - Implementing support for IPv6 ====== 
  
-**Project Title:** Implementing support for IPv6\\ 
-**Summary:​** Redesign the TCP/IP stack implementation in gPXE to provide support for IPv6\\ 
-**Mentoring Organization:​** Etherboot\\ 
- 
-===== Synopsis ===== 
- 
-gPXE uses uIP to implement its TCP/IP stack. uIP is an implementation of the TCP/IP stack which uses a fraction of the resources used by a full fledged TCP/IP implementation. 
- 
-The project is to implement support for IPv6. uIP (in its current avatar) tightly integrates the TCP and IP layers in order to save code size. As a result, it is not easy to replace IPv4 with any other network layer protocol in uIP. This project aims to re-design the TCP/IP stack of gPXE in order to facilitate IPv6 implementation. 
- 
-===== Project Description ===== 
- 
-==== Current Problem ==== 
- 
- 
-uIP strays away from the conventional API of the TCP/IP stack so that it can cut down on resources. Instead, it implements its own API where the application is implemented as a function call uip_tcp_appcall(). Every time an event occurs (new data received, re-transmit request, etc.) uIP calls the application and testers resolve which event fired the call. At the other end of the stack, the network driver calls uip_input() (when new data arrives) and uip_periodic() (at regular intervals of time) which trigger off the TCP/IP state machine (uip_process()) in uIP. 
- 
-In the current architecture,​ refer http://​www.cse.iitb.ac.in/​nikhilr/​etherboot/​tcpip-arch.jpg , a wrapper insulates applications above and network devices below from the uIP API. It provides applications above the TCP/IP stack with an API defined by /​include/​gpxe/​tcp.h. It gives the network devices below an API defined by /​include/​gpxe/​netdevice.h to use the network layer protocol. 
- 
-The current architecture has problems and limitations (taken from the discussion lists): 
-  * uIP was designed for embedded systems and 8-bit micro-controllers. As a result, data representation and arithmetic operations do not utilize the resources offered by the 32-bit architectures. 
-  * The lack of modularity in uIP makes it difficult to implement a new protocol like IPv6 instead of IPv4. 
-  * The current method of invocation imposes restrictions (unnecessarily) on the TCP-based protocol handlers. 
- 
-A solution to overcome these limitations would be to re-design the TCP/IP stack implementation (essentially replacing the uIP module) keeping to the specifications defined in the gPXE API (refer http://​www.cse.iitb.ac.in/​nikhilr/​etherboot/​proposed-arch.jpg). It is necessary to define a clean interface between the transport layer and network layer in order to implement a new protocol like IPv6. The event based model can be replaced but this requires further investigation. 
- 
-==== Plan of Action ==== 
- 
- 
-I propose applying the following algorithm to solve the problem (start off with IPv4 and TCP - we will look at other protocols once the interface is more clearly defined): 
- 
-=== Main goals === 
- 
-Step 0: Investigate the working of uIP\\ 
-Step 1: Define bare necessary requirements of transport layer and network layer\\ 
-Step 2: Define the interface between these layers based on the requirements\\ 
-Step 3: Implement the TCP, IP modules using the interface\\ 
-Step 4: Test implementation;​ Re-implement if necessary\\ 
-Step 5: Increase requirements if necessary and go back to step 2\\ 
-Step 6: Investigate minimum requirements to support IPv6\\ 
-Step 7: Extend interface/​requirements if necessary and go back to step 2\\ 
-Step 8: Implement IPv6\\ 
-Step 9: If time permits, implement stretch goals\\ 
- 
-=== Stretch goals === 
- 
-Step 10: Investigate UDP implementation in Etherboot-5.4 and earlier\\ 
-Step 11: Extend interface/​requirements if necessary and perform steps 2 - 5\\ 
-Step 12: Implement UDP support\\ 
-Step 13: Investigate various features that can be added to IPv6\\ 
-Step 14: Perform steps 7 - 8\\ 
- 
-===== Deliverables ===== 
- 
- 
-The final deliverables for the project are: 
-  - A clean, well-defined interface between the transport-layer and network-layer. The interface would be generic enough to allow any transport layer protocol to interact with any network layer protocol 
-  - Re-design and implementation of the TCP/IP stack using the proposed interface (which fits within the gPXE API) 
-  - Minimal support for IPv6 
- 
-The stretch goals for the project are: 
-  - Extension of the gPXE API to include UDP 
-  - An implementation of UDP/IP (within the extended gPXE API) 
-  - Support for additional features in IPv6 
- 
-===== Timeline ===== 
- 
- 
-I have created a timeline for this project using Google Calendar which is available on the following links: 
- 
-[http://​www.google.com/​calendar/​feeds/​p9tuujnjpv02p7ehvqdb88m0uo@group.calendar.google.com/​public/​basic|XML] 
-[http://​www.google.com/​calendar/​ical/​p9tuujnjpv02p7ehvqdb88m0uo@group.calendar.google.com/​public/​basic|ICAL] 
- 
-Please contact me at nikhilcrao@gmail.com if other formats (or plain text) are more preferable. 
- 
-===== Bio ===== 
- 
- 
-I am a 21 year old Computer Science and Engineering graduate [just graduated last week! :) ] from the Indian Institute of Technology, Bombay (IIT Bombay). I am headed to the University of Michigan, Ann Arbor for my graduate studies in the EECS department. My area of interest is computer architecture and distributed systems. Last summer, I was an Extreme Blue Intern ( www.ibm.com/​extremeblue) with the Deep Computing group at IBM, Bangalore. The summer before that, I worked with the Center for Formal Verification and Design of Software (CFDVS) at IIT Bombay. This summer, I want to work with Etherboot and the Summer of Code project sponsored by Google! 
- 
-I have been involved in C/C++ development since high school (for the last 6 years). I have also programmed micro-controllers and micro-processors using assembly and have taught this to my juniors as well. I have been involved in many projects in the past - ranging from small/​medium sized course projects to large scale projects like 'A novel de-synchronization technique'​ and '​BlueStreak middleware for HPC application development'​ which I implemented in my senior year thesis and in my internship respectively. While I have never been involved in an open source project (yet!), I am enthusiastic about this project and I am confident I can deliver results to your satisfaction. 
- 
-My exposure to Etherboot and the concept of network booting is recent. In the last week, I have studied the Etherboot manual twice and have gone through the source code once to understand the twisted process of network booting. I am dedicated, passionate and hardworking,​ and I feel I am well suited to take on and complete this project. 
- 
-I believe in quality over quantity and I will be sending applications only to Etherboot for this summer of code. 
- 
-My resume is available at the following link: 
- 
-[http://​www.cse.iitb.ac.in/​nikhilr/​soc/​nikhil-resume.pdf|PDF] 
- 
-Please let me know if other formats are preferable. My preferred method of contact is by e-mail. The e-mail IDs I check most regularly are nikhilcrao@gmail.com and nikhilr@cse.iitb.ac.in. 

QR Code
QR Code soc:nikhil:proposal (generated for current page)