Annotation of wikisrc/projects/project/fs-services.mdwn, revision 1.3

1.1       jmmv        1: [[!template id=project
                      2: 
                      3: title="File Systems as Network Services"
                      4: 
                      5: contact="""
                      6: [tech-userlevel](mailto:tech-userlevel@NetBSD.org)
                      7: """
                      8: 
                      9: mentors="""
                     10: [Antti Kantee](mailto:pooka@NetBSD.org)
                     11: """
                     12: 
1.3     ! jmmv       13: category="kernel"
        !            14: difficulty="medium"
1.1       jmmv       15: duration="3 months"
                     16: 
                     17: description="""
                     18: File systems are historically mounted by specifying which type of file system is mounted from where (e.g. `mount -t ffs /dev/wd0a /mnt`). However, sometimes a user is only interested in making the data available and not particularly interested in how or from where it is made available.
                     19: 
                     20: This project investigates the first steps in turning file systems into network-transparent services by making it possible to mount any kernel file system type from any location on the network. The file system components to be used are [puffs](http://www.netbsd.org/docs/puffs/) and [rump](http://www.netbsd.org/docs/puffs/rump.html). puffs is used to forward local file system requests from the kernel to userspace and rump is used to facilitate running the kernel file system in userspace as a service daemon.
                     21: 
                     22: The subtasks are the following:
                     23: 
                     24: * Write the necessary code to be able to forward requests from one source to another. This involves most likely reworking a bit of the libpuffs option parsing code and creating an puffs client, say, mount_puffs to be able to forward requests from one location to another. The puffs protocol should be extended to include the necessary new features or another protocol defined.
                     25: 
                     26:     Proof-of-concept code for this has already been written.
                     27: 
                     28: * Currently the puffs protocol used for communication between the kernel and userland is machine dependent. To facilitate forwarding the protocol to remote hosts, a machine independent version must be specified.
                     29: 
                     30: * To be able to handle multiple clients, the file systems must be converted to daemons instead of being utilities. This will also, in the case of kernel file system servers, include adding locking to the communication protocol.
                     31: 
                     32: The end result will look something like this:
                     33: 
                     34:     # start serving ffs from /dev/wd0a on port 12675
                     35:     onehost> ffs_serv -p 12675 /dev/wd0a
                     36:     # start serving cd9660 from /dev/cd0a on port 12676
                     37:     onehost> cd9660_serv -p 12675 /dev/cd0a
                     38:    
                     39:     # meanwhile in outer space, mount anotherhost from port 12675
                     40:     anotherhost> mount_puffs -t tcp onehost:12675 /mnt
                     41:     anotherhost> mount
                     42:     ...
                     43:     anotherhost:12675 on /mnt type <negotiated>
                     44:     ...
                     45:     anotherhost> cd /mnt
                     46:     anotherhost> ls
                     47:       ... etc
                     48: 
                     49: The student should have some familiarity with file systems and network services. The application should include an answer to the following question: "how is this different from nfs?"
                     50: """
                     51: ]]
                     52: 
                     53: [[!tag gsoc]]

CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb