====== Adding NFS support ====== == Completed goals == * 2012/05/21 - Achieve connection to a NFSv3 server. * 2012/05/30 - Design a SUN ONC RPC layer for iPXE. * Achieve sending of a NULL query via the RPC layer. //A NULL query is like a NO-OP instruction, it can be used to test whether the RPC layer is properly implemented.// * 2012/06/22 - Get the port of the NFS server and the MOUNT service. * Achieve connection to a PORTMAP service. * 2012/06/22 - implement the PORTMAP protocol. * 2012/05/30 - Issue a PORTMAP_GETPORT call. * 2012/06/22 - Get the PORTMAP_GETPORT reply. * 2012/06/25 - Get the root filehandle * 2012/06/25 - Issue a MNT request to the MOUNT service. * 2012/06/25 - Parse the MNT reply. * 2012/06/27 - Achieve sending of a LOOKUP query via the RPC layer. //A LOOKUP query allows one the get a file handle from a path, this handle can then be used to access the file.// * 2012/06/27 - Issue a LOOKUP request to the NFS service * 2012/06/27 - Parse the LOOKUP reply. * 2012/07/01 - Achieve sending of a READ query via the RPC layer. //A READ query allows one to get the content of a file by its file handle.// * 2012/06/27 - Issue a READ call to the NFS service * 2012/07/01 - Get the file content. * 2012/07/01 - iPXE is now able to load an image via NFS. * 2012/08/06 - Symlinked images can now be downloaded. === How to get a file via NFS in iPXE === Since NFS support has been merged in the main tree, you no longer need to checkout my repository. Enable NFS support: echo "#define DOWNLOAD_PROTO_NFS" >> config/local/general.h You can now compile iPXE: make URI are in this form: nfs://server-address/mountpoint/path/to/file where //path/to/the/file// is relative to the mountpoint. ==== Links and references ==== * Git repository: * [[https://git.ipxe.org/people/mareo/ipxe.git]] * NFSv3: * [[http://www.ietf.org/rfc/rfc1833.txt|RFC 1833: Binding Protocols for ONC RPC Version 2]] * [[http://www.ietf.org/rfc/rfc1813.txt|RFC 1813: NFS Version 3 Protocol Specification]] * [[https://git.ipxe.org/ipxe.git/blob/832e86246b37c78466a5a30159bed48ed59eb811:/src/proto/nfs.c| Former NFSv3 implementation in etherboot]] * NFSv4 * [[http://www.ietf.org/rfc/rfc3530.txt|RFC 3530: Network File System (NFS) version 4 Protocol]] * [[http://www.ietf.org/rfc/rfc5661.txt|RFC 5661: Network File System (NFS) Version 4 Minor Version 1 Protocol]]