Erstmal bischen abgucken, also: wo wird noch RPC verwendet? Klar, NFS, gaaanz viel. Nach mehreren Source-Files in denen man zwar auch die RPC-Routinen findet, in denen aber noch so viele andere Dinge drumrum gemacht werden, dass man irgendwann denkt, das sich schon in der Klapsmühle befindet haben wir uns dann doch nach anderen Quellen umgeschaut.
Hier stiessen wir auf autofs. Hier gibts dann dann wirklich viele interessante Passagen für kleine AKBPler wie uns.
Für das ganze RPC-Grundgerüst gibts ja sogar ein eigenes Tool das einem alles alleine erzeugt: rpcgen. Das dumme ist nur: Es funktioniert dann halt net. :(
Also, schauen, wie wars nochmal in autofs? Hier haben sie eine komplett andere Kommunikationsschicht. So hat es uns ziemlich viel Arbeit gekostet die Ausgaben von rpcgen so umzustricken, dass diese dann auch fuer eine Kernel-Userspace Kommunikation tauglich werden. (und resultiert u.a. in Makefiles mit 5-zeilige sed-Kommandos, die einem alles wieder umstricken ;)
Trotz aller Hindernisse hatten wirs dann doch irgendwann so weit dass wir im Userspace ein "huhu" in der Ausgabe hatten *jubel*.
Dann muss man sich jetzt 'nur' noch mit der Parameteruebergabe beschaeftigen. Zum Glueck sind hier die Ausgaben von rpcgen recht brauchbar und man kann sie direkt verwenden. (Man muss aber unbedingt aufpassen wenn man Debugausgaben reinwebt, die einem String-Parameter anzeigen sollen, wir hatten da schon einige SegFaults und Kernel-Panics...)
Jetzt muss nur noch ein geeignetes Kommunikations-Protokoll vom Himmel fallen, mit dem man dann auch die Daten, die das Filesystem _wirklich_ braucht in den Kernel-Space bekommt. Wir haben uns dafür entschieden für die einzelnen Filesystem-Operations jeweils eine RPC-Funktion zu schreiben, die diese dann relativ direkt (sprich: vnode/inode Umwandlung, uio-Strukturen verbergen, etc...) an unseren Daemon weiterleitet.