Differences

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

gsoc [2012/04/28 18:18]
mcb30
gsoc [2013/03/27 21:37] (current)
mcb30
Line 1: Line 1:
-====== Google Summer of Code 2012 =======+====== Google Summer of Code 2013 =======
-This page presents a list of ideas that could be developed for iPXE as part of [[http://www.google-melange.com/gsoc/org/google/gsoc2012/ipxe|Google Summer of Code 2012]].  Please feel free to [[:contact]] the iPXE developers about any of these ideas, or to suggest your own project ideas.+===== Project proposal ideas ===== 
 + 
 +This page presents a list of ideas that could be developed for iPXE as part of [[http://www.google-melange.com/gsoc/org/google/gsoc2013/ipxe|Google Summer of Code 2013]].  Please feel free to [[:contact]] the iPXE developers about any of these ideas, or to suggest your own project ideas.
===== Driver development ===== ===== Driver development =====
Line 17: Line 19:
To develop a new network card driver, you will need: To develop a new network card driver, you will need:
-  * Several sample models of the network card in question.  The iPXE project is happy to purchase and provide network cards for anyone working on driver development in GSoC 2012.+  * Several sample models of the network card in question.  The iPXE project is happy to purchase and provide network cards for anyone working on driver development in GSoC 2013.
  * A development machine (or virtual machine) running an operating system (such as Linux) capable of building iPXE.   * A development machine (or virtual machine) running an operating system (such as Linux) capable of building iPXE.
Line 59: Line 61:
Think about what would make a good user interface.  Consider how to expose all the various build options without overwhelming the user with complexity, and how to make it simple to do the most common types of build. Think about what would make a good user interface.  Consider how to expose all the various build options without overwhelming the user with complexity, and how to make it simple to do the most common types of build.
-===== ProxyDHCP server for Linux =====+===== ProxyDHCP server =====
{{:clipart:chain.jpeg?200x96 |A chain}} {{:clipart:chain.jpeg?200x96 |A chain}}
Line 69: Line 71:
To work around this problem the PXE specification allows for an extension to the DHCP protocol, known as ProxyDHCP, which allows a ProxyDHCP server to provide configuration options without having to provide an IP address.  The "real" DHCP server provides the IP address, and the ProxyDHCP server provides the configuration options. To work around this problem the PXE specification allows for an extension to the DHCP protocol, known as ProxyDHCP, which allows a ProxyDHCP server to provide configuration options without having to provide an IP address.  The "real" DHCP server provides the IP address, and the ProxyDHCP server provides the configuration options.
-The [[http://www.isc.org/software/dhcp|ISC dhcpd]] server provides a rich configuration file syntax for specifying configuration options.  At present, this server can be used only as a "real" DHCP server; it cannot be used as a ProxyDHCP server.  It would be very useful to be able to use ISC dhcpd as a ProxyDHCP server.+The open source [[http://www.thekelleys.org.uk/dnsmasq/doc.html|dnsmasq]] server is capable of acting as a ProxyDHCP server, and currently uses a static text file for configuration.
-You would modify the ISC dhcpd source code to allow it to be used as a ProxyDHCP server.  You would work with the [[:contact|iPXE developers]] to ensure that the ProxyDHCP functionality that you develop is sufficient for iPXE's needs, and you would work with the ISC dhcpd developers to get your changes merged upstream into the ISC dhcpd source code.+ProxyDHCP is a stateless protocol and all requests are idempotent.  One fairly neat solution would be to extend dnsmasq to allow configuration to be sourced dynamically via HTTP: dnsmasq would convert the ProxyDHCPDISCOVER into an HTTP GET request, allowing the response to be effectively constructed by a script running on a web server.  This allows the policy of deciding upon the client's DHCP options to be separated from the mechanism of responding to a DHCP request, giving great deal of flexibility while also allowing for desirable features such as redundancy and failover. 
 + 
 +You would modify the dnsmasq source code to allow it to translate a ProxyDHCP request into an HTTP GET request.  You would also implement a sample web server script to respond to these translated ProxyDHCP requests.  You would work with the [[:contact|iPXE developers]] to ensure that the ProxyDHCP functionality that you develop is sufficient for iPXE's needs, and you would work with the dnsmasq developers to get your changes merged upstream into the dnsmasq source code.
=== Requirements === === Requirements ===
Line 77: Line 81:
To develop the ProxyDHCP server for Linux, you will need: To develop the ProxyDHCP server for Linux, you will need:
-  * A development machine (or virtual machine) running an operating system (such as Linux) capable of building ISC dhcpd and iPXE.+  * A development machine (or virtual machine) running an operating system (such as Linux) capable of building dnsmasq and iPXE.
-  * A couple of testing machines (or virtual machines) for running iPXE and your modified ISC dhcpd.+  * A couple of testing machines (or virtual machines) for running iPXE and your modified dnsmasq.
=== Getting started === === Getting started ===
-Download and build the ISC dhcpd source code from [[http://www.isc.org/software/dhcp]].  Read up on how to [[:howto:dhcpd|configure ISC dhcpd for use with iPXE]].  Make sure that you can boot iPXE using your home-built version of ISC dhcpd.  [[:howto:pcap|Capture]] some DHCP packets and look inside to see how DHCP options work in practice.  Take a look at the ISC dhcpd source code to see how it works.+Download and build the dnsmasq source code from [[http://www.thekelleys.org.uk/dnsmasq/]].  Make sure that you can boot iPXE using your home-built version of dnsmasq.  [[:howto:pcap|Capture]] some DHCP packets and look inside to see how DHCP options work in practice.  Take a look at the dnsmasq source code to see how it works.
===== Familiarisation ===== ===== Familiarisation =====
Line 100: Line 104:
{{ :clipart:books.png?160x160|Study time}} {{ :clipart:books.png?160x160|Study time}}
 +
 +You will submit an application via the [[http://www.google-melange.com/gsoc/org/google/gsoc2013/ipxe|GSoC web application]].  Your application should include, at a minimum:
 +
 +  * Your name and as many contact routes as possible (e-mail address, phone number, IRC nickname, etc.)
 +  * A brief outline of what you would like to implement, including some realistic goals for each week of the project.  Try to think in terms of measurable milestones.  For example, if you are implementing a new network driver, then some sensible milestones might be:
 +    * Week 1: ability to read MAC address from the NIC, verified by displaying the MAC address using the ''[[:cmd:ifstat]]'' command
 +    * Week 2: ability to transmit a packet, verified by using the ''[[:cmd:dhcp]]'' command, [[:howto:pcap|capturing]] the transmitted packet, and using [[http://www.wireshark.org/|Wireshark]] to observe the transmitted DHCP packet
 +    * ...
 +    * Week 4: ability to correctly download a 512MB test file containing pseudo-random data in 4.6s (i.e. 1Gbps line rate), verified using the ''[[:cmd:md5sum]]'' and ''[[:cmd:time]]'' commands
 +    * ...
 +  * Some indication that you are familiar with the iPXE codebase.  If you have already contributed code to the project, then please list some of your previous commits.
The application process will involve an interview in which you will be asked to solve some short programming exercises in C.  These exercises have been used in previous years: The application process will involve an interview in which you will be asked to solve some short programming exercises in C.  These exercises have been used in previous years:
Line 152: Line 167:
            // Your code goes here             // Your code goes here
    }     }
 +
 +===== Commitment =====
 +
 +You should expect to work full-time on your GSoC project during the summer.  There's no need to work fixed hours each day, but you should allow around 40 hours per week in order to do justice to the project.
 +
 +We like to maintain constant communication with our students.  You should expect to hang out in the [[http://webchat.freenode.net/?channels=#ipxe|#ipxe]] IRC channel pretty much all the time, and communicate at least once each working day.
 +
 +From past experience, we often find that students try to complete work without asking for help.  From the background of academia, this is understandable; in your degree course it's important to be able to show that you can work unaided.  However, GSoC is not academic in nature.  We **want** you to ask for help.  If you don't need to ask questions, then it probably means that your project isn't sufficiently challenging.
===== Useful links ===== ===== Useful links =====
Line 159: Line 182:
  * [[http://webchat.freenode.net/?channels=#ipxe|#ipxe]] on Freenode - the project IRC channel   * [[http://webchat.freenode.net/?channels=#ipxe|#ipxe]] on Freenode - the project IRC channel
-  * [[http://www.google-melange.com/gsoc/org/google/gsoc2012/ipxe|Apply for GSoC 2012]]+  * [[http://www.google-melange.com/gsoc/org/google/gsoc2013/ipxe|Apply for GSoC 2013]] 
 + 
 +  * [[http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2013/faqs|Frequently Asked Questions]] 
 + 
 +  * [[http://www.google-melange.com/gsoc/events/google/gsoc2013|Timeline]] 
 + 
 +===== Prior participation =====
-  * [[http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2012/faqs|Frequently Asked Questions]]+  * [[:gsoc/2012|Google Summer of Code 2012]]
-  * [[http://www.google-melange.com/gsoc/events/google/gsoc2012|Timeline]] 
 
gsoc.1335637088.txt.gz · Last modified: 2012/04/28 18:18 by mcb30
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki
All uses of this content must include an attribution to the iPXE project and the URL http://ipxe.org
References to "iPXE" may not be altered or removed.